[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v1 1/4] x86-disas: add x86-mini instruction set metadata
From: |
Michael Clark |
Subject: |
[PATCH v1 1/4] x86-disas: add x86-mini instruction set metadata |
Date: |
Fri, 24 Jan 2025 13:10:29 +1300 |
this metadata is based on x86-csv with numerous inaccuracies
fixed plus conversion of legacy instructions to a new LEX format.
this metadata has been fuzz-tested against the LLVM disassembler
for x86-64 with 64-bit ISA coverage in the order of ~99.9%.
Signed-off-by: Michael Clark <michael@anarch128.org>
---
disas/x86-data/x86_adx.csv | 5 +
disas/x86-data/x86_aes.csv | 13 +
disas/x86-data/x86_aeskle.csv | 3 +
disas/x86-data/x86_aesklewide.csv | 3 +
disas/x86-data/x86_avx.csv | 375 +++++++++
disas/x86-data/x86_avx2.csv | 171 ++++
disas/x86-data/x86_avx5124fmaps.csv | 5 +
disas/x86-data/x86_avx5124vnniw.csv | 3 +
disas/x86-data/x86_avx512b.csv | 3 +
disas/x86-data/x86_avx512bf16.csv | 10 +
disas/x86-data/x86_avx512bitalg.csv | 10 +
disas/x86-data/x86_avx512bw.csv | 291 +++++++
disas/x86-data/x86_avx512cd.csv | 19 +
disas/x86-data/x86_avx512d.csv | 2 +
disas/x86-data/x86_avx512dq.csv | 143 ++++
disas/x86-data/x86_avx512er.csv | 11 +
disas/x86-data/x86_avx512f.csv | 901 ++++++++++++++++++++++
disas/x86-data/x86_avx512fp16.csv | 237 ++++++
disas/x86-data/x86_avx512ifma.csv | 7 +
disas/x86-data/x86_avx512pf.csv | 17 +
disas/x86-data/x86_avx512vbmi.csv | 13 +
disas/x86-data/x86_avx512vbmi2.csv | 61 ++
disas/x86-data/x86_avx512vl.csv | 2 +
disas/x86-data/x86_avx512vnni.csv | 13 +
disas/x86-data/x86_avx512vp2intersect.csv | 7 +
disas/x86-data/x86_avx512vpopcntdq.csv | 7 +
disas/x86-data/x86_avxneconvert.csv | 15 +
disas/x86-data/x86_avxvnni.csv | 9 +
disas/x86-data/x86_avxvnniint8.csv | 13 +
disas/x86-data/x86_base.csv | 549 +++++++++++++
disas/x86-data/x86_bmi1.csv | 13 +
disas/x86-data/x86_bmi2.csv | 17 +
disas/x86-data/x86_cet.csv | 15 +
disas/x86-data/x86_cldemote.csv | 2 +
disas/x86-data/x86_clwb.csv | 2 +
disas/x86-data/x86_enqcmd.csv | 3 +
disas/x86-data/x86_f16c.csv | 5 +
disas/x86-data/x86_fma.csv | 97 +++
disas/x86-data/x86_fsgsbase.csv | 9 +
disas/x86-data/x86_gfni.csv | 19 +
disas/x86-data/x86_hreset.csv | 2 +
disas/x86-data/x86_invpcid.csv | 2 +
disas/x86-data/x86_lzcnt.csv | 3 +
disas/x86-data/x86_mmx.csv | 60 ++
disas/x86-data/x86_movdir64b.csv | 2 +
disas/x86-data/x86_movdiri.csv | 3 +
disas/x86-data/x86_mpx.csv | 9 +
disas/x86-data/x86_msrlist.csv | 4 +
disas/x86-data/x86_ospke.csv | 3 +
disas/x86-data/x86_pclmulqdq.csv | 3 +
disas/x86-data/x86_pconfig.csv | 2 +
disas/x86-data/x86_prefetchw.csv | 7 +
disas/x86-data/x86_raoint.csv | 9 +
disas/x86-data/x86_rdpid.csv | 2 +
disas/x86-data/x86_rdrand.csv | 2 +
disas/x86-data/x86_rdseed.csv | 2 +
disas/x86-data/x86_rtm.csv | 5 +
disas/x86-data/x86_serialize.csv | 2 +
disas/x86-data/x86_sha.csv | 8 +
disas/x86-data/x86_smap.csv | 3 +
disas/x86-data/x86_sse.csv | 58 ++
disas/x86-data/x86_sse2.csv | 148 ++++
disas/x86-data/x86_sse3.csv | 11 +
disas/x86-data/x86_sse4_1.csv | 48 ++
disas/x86-data/x86_sse4_2.csv | 7 +
disas/x86-data/x86_sse4_3.csv | 2 +
disas/x86-data/x86_ssse3.csv | 33 +
disas/x86-data/x86_uintr.csv | 6 +
disas/x86-data/x86_vaes.csv | 17 +
disas/x86-data/x86_vmx.csv | 14 +
disas/x86-data/x86_waitpkg.csv | 4 +
disas/x86-data/x86_wbnoinvd.csv | 2 +
disas/x86-data/x86_x87.csv | 145 ++++
disas/x86-data/x86_xsaveopt.csv | 3 +
74 files changed, 3731 insertions(+)
create mode 100644 disas/x86-data/x86_adx.csv
create mode 100644 disas/x86-data/x86_aes.csv
create mode 100644 disas/x86-data/x86_aeskle.csv
create mode 100644 disas/x86-data/x86_aesklewide.csv
create mode 100644 disas/x86-data/x86_avx.csv
create mode 100644 disas/x86-data/x86_avx2.csv
create mode 100644 disas/x86-data/x86_avx5124fmaps.csv
create mode 100644 disas/x86-data/x86_avx5124vnniw.csv
create mode 100644 disas/x86-data/x86_avx512b.csv
create mode 100644 disas/x86-data/x86_avx512bf16.csv
create mode 100644 disas/x86-data/x86_avx512bitalg.csv
create mode 100644 disas/x86-data/x86_avx512bw.csv
create mode 100644 disas/x86-data/x86_avx512cd.csv
create mode 100644 disas/x86-data/x86_avx512d.csv
create mode 100644 disas/x86-data/x86_avx512dq.csv
create mode 100644 disas/x86-data/x86_avx512er.csv
create mode 100644 disas/x86-data/x86_avx512f.csv
create mode 100644 disas/x86-data/x86_avx512fp16.csv
create mode 100644 disas/x86-data/x86_avx512ifma.csv
create mode 100644 disas/x86-data/x86_avx512pf.csv
create mode 100644 disas/x86-data/x86_avx512vbmi.csv
create mode 100644 disas/x86-data/x86_avx512vbmi2.csv
create mode 100644 disas/x86-data/x86_avx512vl.csv
create mode 100644 disas/x86-data/x86_avx512vnni.csv
create mode 100644 disas/x86-data/x86_avx512vp2intersect.csv
create mode 100644 disas/x86-data/x86_avx512vpopcntdq.csv
create mode 100644 disas/x86-data/x86_avxneconvert.csv
create mode 100644 disas/x86-data/x86_avxvnni.csv
create mode 100644 disas/x86-data/x86_avxvnniint8.csv
create mode 100644 disas/x86-data/x86_base.csv
create mode 100644 disas/x86-data/x86_bmi1.csv
create mode 100644 disas/x86-data/x86_bmi2.csv
create mode 100644 disas/x86-data/x86_cet.csv
create mode 100644 disas/x86-data/x86_cldemote.csv
create mode 100644 disas/x86-data/x86_clwb.csv
create mode 100644 disas/x86-data/x86_enqcmd.csv
create mode 100644 disas/x86-data/x86_f16c.csv
create mode 100644 disas/x86-data/x86_fma.csv
create mode 100644 disas/x86-data/x86_fsgsbase.csv
create mode 100644 disas/x86-data/x86_gfni.csv
create mode 100644 disas/x86-data/x86_hreset.csv
create mode 100644 disas/x86-data/x86_invpcid.csv
create mode 100644 disas/x86-data/x86_lzcnt.csv
create mode 100644 disas/x86-data/x86_mmx.csv
create mode 100644 disas/x86-data/x86_movdir64b.csv
create mode 100644 disas/x86-data/x86_movdiri.csv
create mode 100644 disas/x86-data/x86_mpx.csv
create mode 100644 disas/x86-data/x86_msrlist.csv
create mode 100644 disas/x86-data/x86_ospke.csv
create mode 100644 disas/x86-data/x86_pclmulqdq.csv
create mode 100644 disas/x86-data/x86_pconfig.csv
create mode 100644 disas/x86-data/x86_prefetchw.csv
create mode 100644 disas/x86-data/x86_raoint.csv
create mode 100644 disas/x86-data/x86_rdpid.csv
create mode 100644 disas/x86-data/x86_rdrand.csv
create mode 100644 disas/x86-data/x86_rdseed.csv
create mode 100644 disas/x86-data/x86_rtm.csv
create mode 100644 disas/x86-data/x86_serialize.csv
create mode 100644 disas/x86-data/x86_sha.csv
create mode 100644 disas/x86-data/x86_smap.csv
create mode 100644 disas/x86-data/x86_sse.csv
create mode 100644 disas/x86-data/x86_sse2.csv
create mode 100644 disas/x86-data/x86_sse3.csv
create mode 100644 disas/x86-data/x86_sse4_1.csv
create mode 100644 disas/x86-data/x86_sse4_2.csv
create mode 100644 disas/x86-data/x86_sse4_3.csv
create mode 100644 disas/x86-data/x86_ssse3.csv
create mode 100644 disas/x86-data/x86_uintr.csv
create mode 100644 disas/x86-data/x86_vaes.csv
create mode 100644 disas/x86-data/x86_vmx.csv
create mode 100644 disas/x86-data/x86_waitpkg.csv
create mode 100644 disas/x86-data/x86_wbnoinvd.csv
create mode 100644 disas/x86-data/x86_x87.csv
create mode 100644 disas/x86-data/x86_xsaveopt.csv
diff --git a/disas/x86-data/x86_adx.csv b/disas/x86-data/x86_adx.csv
new file mode 100644
index 000000000000..c09d68445804
--- /dev/null
+++ b/disas/x86-data/x86_adx.csv
@@ -0,0 +1,5 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"ADCX rw, rw/mw","LEX.66.0F38.W0 F6
/r","Valid","Valid","Invalid","ADX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unsigned addition of r with CF, r/m to r, writes CF."
+"ADCX rw, rw/mw","LEX.66.0F38.W1 F6
/r","Valid","Invalid","Invalid","ADX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unsigned addition of r with CF, r/m to r, writes CF."
+"ADOX rw, rw/mw","LEX.F3.0F38.W0 F6
/r","Valid","Valid","Invalid","ADX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unsigned addition of r with OF, r/m to r, writes OF."
+"ADOX rw, rw/mw","LEX.F3.0F38.W1 F6
/r","Valid","Invalid","Invalid","ADX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unsigned addition of r with OF, r/m to r, writes OF."
diff --git a/disas/x86-data/x86_aes.csv b/disas/x86-data/x86_aes.csv
new file mode 100644
index 000000000000..b61b8f6e87f2
--- /dev/null
+++ b/disas/x86-data/x86_aes.csv
@@ -0,0 +1,13 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"AESDEC xmm1, xmm2/m128","LEX.66.0F38.W0 DE
/r","Valid","Valid","Invalid","AES","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Perform one round of an AES decryption flow, using the
Equivalent Inverse Cipher, operating on a 128-bit data (state) from xmm1 with a
128-bit round key from xmm2/m128."
+"AESDECLAST xmm1, xmm2/m128","LEX.66.0F38.W0 DF
/r","Valid","Valid","Invalid","AES","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Perform the last round of an AES decryption flow, using the
Equivalent Inverse Cipher, operating on a 128-bit data (state) from xmm1 with a
128-bit round key from xmm2/m128."
+"AESENC xmm1, xmm2/m128","LEX.66.0F38.W0 DC
/r","Valid","Valid","Invalid","AES","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Perform one round of an AES encryption flow, operating on a
128-bit data (state) from xmm1 with a 128-bit round key from xmm2/m128."
+"AESENCLAST xmm1, xmm2/m128","LEX.66.0F38.W0 DD
/r","Valid","Valid","Invalid","AES","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Perform the last round of an AES encryption flow, operating on a
128-bit data (state) from xmm1 with a 128-bit round key from xmm2/m128."
+"AESIMC xmm1, xmm2/m128","LEX.66.0F38.W0 DB
/r","Valid","Valid","Invalid","AES","ModRM:reg (w)","ModRM:r/m
(r)","","","","Perform the InvMixColumn transformation on a 128-bit round key
from xmm2/m128 and store the result in xmm1."
+"AESKEYGENASSIST xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 DF /r
ib","Valid","Valid","Invalid","AES","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Assist in AES round key generation using an 8 bits Round
Constant (RCON) specified in the immediate byte, operating on 128 bits of data
specified in xmm2/m128 and stores the result in xmm1."
+"VAESDEC xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG DE
/r","Valid","Valid","Invalid","AES AVX","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Perform one round of an AES decryption flow, using
the Equivalent Inverse Cipher, operating on a 128-bit data (state) from xmm2
with a 128-bit round key from xmm3/m128; store the result in xmm1."
+"VAESDECLAST xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG DF
/r","Valid","Valid","Invalid","AES AVX","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Perform the last round of an AES decryption flow,
using the Equivalent Inverse Cipher, operating on a 128-bit data (state) from
xmm2 with a 128-bit round key from xmm3/m128; store the result in xmm1."
+"VAESENC xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG DC
/r","Valid","Valid","Invalid","AES AVX","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Perform one round of an AES encryption flow,
operating on a 128-bit data (state) from xmm2 with a 128-bit round key from the
xmm3/m128; store the result in xmm1."
+"VAESENCLAST xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG DD
/r","Valid","Valid","Invalid","AES AVX","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Perform the last round of an AES encryption flow,
operating on a 128-bit data (state) from xmm2 with a 128 bit round key from
xmm3/m128; store the result in xmm1."
+"VAESIMC xmm1, xmm2/m128","VEX.128.66.0F38.WIG DB
/r","Valid","Valid","Invalid","AES AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Perform the InvMixColumn transformation on a 128-bit round key
from xmm2/m128 and store the result in xmm1."
+"VAESKEYGENASSIST xmm1, xmm2/m128, ib","VEX.128.66.0F3A.WIG DF /r
ib","Valid","Valid","Invalid","AES AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Assist in AES round key generation using 8 bits Round Constant
(RCON) specified in the immediate byte, operating on 128 bits of data specified
in xmm2/m128 and stores the result in xmm1."
diff --git a/disas/x86-data/x86_aeskle.csv b/disas/x86-data/x86_aeskle.csv
new file mode 100644
index 000000000000..b933d236bccd
--- /dev/null
+++ b/disas/x86-data/x86_aeskle.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"AESDEC128KL xmm, m","LEX.F3.0F38.W0 DD
/r","Valid","Valid","Invalid","AESKLE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Decrypt xmm using 128-bit AES key indicated by handle at m384
and store result in xmm."
+"AESDEC256KL xmm, m","LEX.F3.0F38.W0 DF
/r","Valid","Valid","Invalid","AESKLE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Decrypt xmm using 256-bit AES key indicated by handle at m512
and store result in xmm."
diff --git a/disas/x86-data/x86_aesklewide.csv
b/disas/x86-data/x86_aesklewide.csv
new file mode 100644
index 000000000000..a4a27867fbcf
--- /dev/null
+++ b/disas/x86-data/x86_aesklewide.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"AESDECWIDE128KL m","LEX.F3.0F38.W0 D8
/1","Valid","Valid","Invalid","AESKLEWIDE","ModRM:r/m (r)","Implicit XMM0-7 (r,
w)","","","","Decrypt XMM0-7 using 128-bit AES key indicated by handle at m384
and store each resultant block back to its corresponding register."
+"AESDECWIDE256KL m","LEX.F3.0F38.W0 D8
/3","Valid","Valid","Invalid","AESKLEWIDE","ModRM:r/m (r)","Implicit XMM0-7 (r,
w)","","","","Decrypt XMM0-7 using 256-bit AES key indicated by handle at m512
and store each resultant block back to its corresponding register."
diff --git a/disas/x86-data/x86_avx.csv b/disas/x86-data/x86_avx.csv
new file mode 100644
index 000000000000..8f82d93d34e7
--- /dev/null
+++ b/disas/x86-data/x86_avx.csv
@@ -0,0 +1,375 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VADDPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 58
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed double-precision floating-point values from xmm3/mem to
xmm2 and store result in xmm1."
+"VADDPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 58
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed double-precision floating-point values from ymm3/mem to
ymm2 and store result in ymm1."
+"VADDPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 58
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed single-precision floating-point values from xmm3/m128 to
xmm2 and store result in xmm1."
+"VADDPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 58
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed single-precision floating-point values from ymm3/m256 to
ymm2 and store result in ymm1."
+"VADDSD xmm1, xmm2, xmm3/m64","VEX.LIG.F2.0F.WIG 58
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add the low double-precision floating-point value from xmm3/mem to
xmm2 and store the result in xmm1."
+"VADDSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 58
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add the low single-precision floating-point value from xmm3/mem to
xmm2 and store the result in xmm1."
+"VADDSUBPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG D0
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add/subtract packed double-precision floating-point values from
xmm3/mem to xmm2 and stores result in xmm1."
+"VADDSUBPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG D0
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add / subtract packed double-precision floating-point values from
ymm3/mem to ymm2 and stores result in ymm1."
+"VADDSUBPS xmm1, xmm2, xmm3/m128","VEX.128.F2.0F.WIG D0
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add/subtract single-precision floating-point values from xmm3/mem
to xmm2 and stores result in xmm1."
+"VADDSUBPS ymm1, ymm2, ymm3/m256","VEX.256.F2.0F.WIG D0
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add / subtract single-precision floating-point values from ymm3/mem
to ymm2 and stores result in ymm1."
+"VANDNPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 55
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical AND NOT of packed double-precision
floating-point values in xmm2 and xmm3/mem."
+"VANDNPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 55
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical AND NOT of packed double-precision
floating-point values in ymm2 and ymm3/mem."
+"VANDNPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 55
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical AND NOT of packed single-precision
floating-point values in xmm2 and xmm3/mem."
+"VANDNPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 55
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical AND NOT of packed single-precision
floating-point values in ymm2 and ymm3/mem."
+"VANDPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 54
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical AND of packed double-precision
floating-point values in xmm2 and xmm3/mem."
+"VANDPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 54
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical AND of packed double-precision
floating-point values in ymm2 and ymm3/mem."
+"VANDPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 54
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical AND of packed single-precision
floating-point values in xmm2 and xmm3/mem."
+"VANDPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 54
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical AND of packed single-precision
floating-point values in ymm2 and ymm3/mem."
+"VBLENDPD xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.WIG 0D /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib[3:0]","","Select packed double-precision floating-point Values from
xmm2 and xmm3/m128 from mask in ib and store the values in xmm1."
+"VBLENDPD ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.WIG 0D /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib[3:0]","","Select packed double-precision floating-point Values from
ymm2 and ymm3/m256 from mask in ib and store the values in ymm1."
+"VBLENDPS xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.WIG 0C /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Select packed single-precision floating-point values from xmm2
and xmm3/m128 from mask in ib and store the values in xmm1."
+"VBLENDPS ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.WIG 0C /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Select packed single-precision floating-point values from ymm2
and ymm3/m256 from mask in ib and store the values in ymm1."
+"VBLENDVPD xmm1, xmm2, xmm3/m128, xmm4","VEX.128.66.0F3A.W0 4B /r
/is4","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib[7:4]","","Conditionally copy double-precision floating-point values
from xmm2 or xmm3/m128 to xmm1, based on mask bits in the mask operand, xmm4."
+"VBLENDVPD ymm1, ymm2, ymm3/m256, ymm4","VEX.256.66.0F3A.W0 4B /r
/is4","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib[7:4]","","Conditionally copy double-precision floating-point values
from ymm2 or ymm3/m256 to ymm1, based on mask bits in the mask operand, ymm4."
+"VBLENDVPS xmm1, xmm2, xmm3/m128, xmm4","VEX.128.66.0F3A.W0 4A /r
/is4","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib[7:4]","","Conditionally copy single-precision floating-point values
from xmm2 or xmm3/m128 to xmm1, based on mask bits in the specified mask
operand, xmm4."
+"VBLENDVPS ymm1, ymm2, ymm3/m256, ymm4","VEX.256.66.0F3A.W0 4A /r
/is4","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib[7:4]","","Conditionally copy single-precision floating-point values
from ymm2 or ymm3/m256 to ymm1, based on mask bits in the specified mask
register, ymm4."
+"VBROADCASTF128 ymm1, m128","VEX.256.66.0F38.W0 1A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast 128 bits of floating-point data in mem to low and high
128-bits in ymm1."
+"VBROADCASTSD ymm1, m64","VEX.256.66.0F38.W0 19
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast double-precision floating-point element in mem to four
locations in ymm1."
+"VBROADCASTSS ymm1, m32","VEX.256.66.0F38.W0 18
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast single-precision floating-point element in mem to
eight locations in ymm1."
+"VCMPPD xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F.WIG C2 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Compare packed double-precision floating-point values in
xmm3/m128 and xmm2 using bits 4:0 of ib as a comparison predicate."
+"VCMPPD ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F.WIG C2 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Compare packed double-precision floating-point values in
ymm3/m256 and ymm2 using bits 4:0 of ib as a comparison predicate."
+"VCMPPS xmm1, xmm2, xmm3/m128, ib","VEX.128.0F.WIG C2 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Compare packed single-precision floating-point values in
xmm3/m128 and xmm2 using bits 4:0 of ib as a comparison predicate."
+"VCMPPS ymm1, ymm2, ymm3/m256, ib","VEX.256.0F.WIG C2 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Compare packed single-precision floating-point values in
ymm3/m256 and ymm2 using bits 4:0 of ib as a comparison predicate."
+"VCMPSD xmm1, xmm2, xmm3/m64, ib","VEX.LIG.F2.0F.WIG C2 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Compare low double-precision floating-point value in xmm3/m64 and
xmm2 using bits 4:0 of ib as comparison predicate."
+"VCMPSS xmm1, xmm2, xmm3/m32, ib","VEX.LIG.F3.0F.WIG C2 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Compare low single-precision floating-point value in xmm3/m32 and
xmm2 using bits 4:0 of ib as comparison predicate."
+"VCOMISD xmm1, xmm2/m64","VEX.LIG.66.0F.WIG 2F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Compare low double-precision floating-point values in xmm1 and
xmm2/mem64 and set the EFLAGS flags accordingly."
+"VCOMISS xmm1, xmm2/m32","VEX.LIG.0F.WIG 2F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Compare low single-precision floating-point values in xmm1 and
xmm2/mem32 and set the EFLAGS flags accordingly."
+"VCVTDQ2PD xmm1, xmm2/m64","VEX.128.F3.0F.WIG E6
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed signed doubleword integers from xmm2/mem to
two packed double-precision floating-point values in xmm1."
+"VCVTDQ2PD ymm1, xmm2/m128","VEX.256.F3.0F.WIG E6
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed signed doubleword integers from xmm2/mem to
four packed double-precision floating-point values in ymm1."
+"VCVTDQ2PS xmm1, xmm2/m128","VEX.128.0F.WIG 5B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed signed doubleword integers from xmm2/mem to
four packed single-precision floating-point values in xmm1."
+"VCVTDQ2PS ymm1, ymm2/m256","VEX.256.0F.WIG 5B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert eight packed signed doubleword integers from ymm2/mem to
eight packed single-precision floating-point values in ymm1."
+"VCVTPD2DQ xmm1, xmm2/m128","VEX.128.F2.0F.WIG E6
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed double-precision floating-point values in
xmm2/mem to two signed doubleword integers in xmm1."
+"VCVTPD2DQ xmm1, ymm2/m256","VEX.256.F2.0F.WIG E6
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed double-precision floating-point values in
ymm2/mem to four signed doubleword integers in xmm1."
+"VCVTPD2PS xmm1, xmm2/m128","VEX.128.66.0F.WIG 5A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed double-precision floating-point values in
xmm2/mem to two single-precision floating-point values in xmm1."
+"VCVTPD2PS xmm1, ymm2/m256","VEX.256.66.0F.WIG 5A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed double-precision floating-point values in
ymm2/mem to four single-precision floating-point values in xmm1."
+"VCVTPS2DQ xmm1, xmm2/m128","VEX.128.66.0F.WIG 5B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed single-precision floating-point values from
xmm2/mem to four packed signed doubleword values in xmm1."
+"VCVTPS2DQ ymm1, ymm2/m256","VEX.256.66.0F.WIG 5B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert eight packed single-precision floating-point values from
ymm2/mem to eight packed signed doubleword values in ymm1."
+"VCVTPS2PD xmm1, xmm2/m64","VEX.128.0F.WIG 5A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed single-precision floating-point values in
xmm2/m64 to two packed double-precision floating-point values in xmm1."
+"VCVTPS2PD ymm1, xmm2/m128","VEX.256.0F.WIG 5A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed single-precision floating-point values in
xmm2/m128 to four packed double-precision floating-point values in ymm1."
+"VCVTSD2SI rw, xmm1/m64","VEX.LIG.F2.0F.W0 2D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one double-precision floating-point value from xmm1/m64
to one signed doubleword integer r."
+"VCVTSD2SI rw, xmm1/m64","VEX.LIG.F2.0F.W1 2D
/r","Valid","Invalid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one double-precision floating-point value from xmm1/m64
to one signed quadword integer signextended into r."
+"VCVTSD2SS xmm1, xmm2, xmm3/m64","VEX.LIG.F2.0F.WIG 5A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Convert one double-precision floating-point value in xmm3/m64 to
one single-precision floating-point value and merge with high bits in xmm2."
+"VCVTSI2SD xmm1, xmm2, rw/mw","VEX.LIG.F2.0F.W0 2A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Convert one signed doubleword integer from r/m to one
double-precision floating-point value in xmm1."
+"VCVTSI2SD xmm1, xmm2, rw/mw","VEX.LIG.F2.0F.W1 2A
/r","Valid","Invalid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Convert one signed quadword integer from r/m to one
double-precision floating-point value in xmm1."
+"VCVTSI2SS xmm1, xmm2, rw/mw","VEX.LIG.F3.0F.W0 2A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Convert one signed doubleword integer from r/m to one
single-precision floating-point value in xmm1."
+"VCVTSI2SS xmm1, xmm2, rw/mw","VEX.LIG.F3.0F.W1 2A
/r","Valid","Invalid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Convert one signed quadword integer from r/m to one
single-precision floating-point value in xmm1."
+"VCVTSS2SD xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 5A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Convert one single-precision floating-point value in xmm3/m32 to
one double-precision floating-point value and merge with high bits of xmm2."
+"VCVTSS2SI rw, xmm1/m32","VEX.LIG.F3.0F.W0 2D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value from xmm1/m32
to one signed doubleword integer in r."
+"VCVTSS2SI rw, xmm1/m32","VEX.LIG.F3.0F.W1 2D
/r","Valid","Invalid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value from xmm1/m32
to one signed quadword integer in r."
+"VCVTTPD2DQ xmm1, xmm2/m128","VEX.128.66.0F.WIG E6
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed double-precision floating-point values in
xmm2/mem to two signed doubleword integers in xmm1 using truncation."
+"VCVTTPD2DQ xmm1, ymm2/m256","VEX.256.66.0F.WIG E6
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed double-precision floating-point values in
ymm2/mem to four signed doubleword integers in xmm1 using truncation."
+"VCVTTPS2DQ xmm1, xmm2/m128","VEX.128.F3.0F.WIG 5B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed single-precision floating-point values from
xmm2/mem to four packed signed doubleword values in xmm1 using truncation."
+"VCVTTPS2DQ ymm1, ymm2/m256","VEX.256.F3.0F.WIG 5B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert eight packed single-precision floating-point values from
ymm2/mem to eight packed signed doubleword values in ymm1 using truncation."
+"VCVTTSD2SI rw, xmm1/m64","VEX.LIG.F2.0F.W0 2C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one double-precision floating-point value from xmm1/m64
to one signed doubleword integer in r using truncation."
+"VCVTTSD2SI rw, xmm1/m64","VEX.LIG.F2.0F.W1 2C
/r","Valid","Invalid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one signed quadword integer in r using truncation."
+"VCVTTSS2SI rw, xmm1/m32","VEX.LIG.F3.0F.W0 2C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value from xmm1/m32
to one signed doubleword integer in r using truncation."
+"VCVTTSS2SI rw, xmm1/m32","VEX.LIG.F3.0F.W1 2C
/r","Valid","Invalid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value from xmm1/m32
to one signed quadword integer in r using truncation."
+"VDIVPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 5E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Divide packed double-precision floating-point values in xmm2 by
packed double-precision floating-point values in xmm3/mem."
+"VDIVPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 5E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Divide packed double-precision floating-point values in ymm2 by
packed double-precision floating-point values in ymm3/mem."
+"VDIVPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 5E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Divide packed single-precision floating-point values in xmm2 by
packed single-precision floating-point values in xmm3/mem."
+"VDIVPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 5E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Divide packed single-precision floating-point values in ymm2 by
packed single-precision floating-point values in ymm3/mem."
+"VDIVSD xmm1, xmm2, xmm3/m64","VEX.LIG.F2.0F.WIG 5E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Divide low double-precision floating-point value in xmm2 by low
double-precision floating-point value in xmm3/m64."
+"VDIVSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 5E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Divide low single-precision floating-point value in xmm2 by low
single-precision floating-point value in xmm3/m32."
+"VDPPD xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.WIG 41 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Selectively multiply packed DP floating-point values from xmm2
with packed DP floating-point values from xmm3, add and selectively store the
packed DP floating-point values to xmm1."
+"VDPPS xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.WIG 40 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Multiply packed SP floating point values from xmm1 with packed SP
floating point values from xmm2/mem selectively add and store to xmm1."
+"VDPPS ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.WIG 40 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Multiply packed single-precision floating-point values from ymm2
with packed SP floating point values from ymm3/mem, selectively add pairs of
elements and store to ymm1."
+"VEXTRACTF128 xmm1/m128, ymm2, ib","VEX.256.66.0F3A.W0 19 /r
ib","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract 128 bits of packed floating-point values from ymm2 and
store results in xmm1/m128."
+"VEXTRACTPS r32/m32, xmm1, ib","VEX.128.66.0F3A.WIG 17 /r
ib","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract one single-precision floating-point value from xmm1 at
the offset specified by ib and store the result in reg or m32. Zero extend the
results in 64-bit register if applicable."
+"VHADDPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 7C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Horizontal add packed double-precision floating-point values from
xmm2 and xmm3/mem."
+"VHADDPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 7C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Horizontal add packed double-precision floating-point values from
ymm2 and ymm3/mem."
+"VHADDPS xmm1, xmm2, xmm3/m128","VEX.128.F2.0F.WIG 7C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Horizontal add packed single-precision floating-point values from
xmm2 and xmm3/mem."
+"VHADDPS ymm1, ymm2, ymm3/m256","VEX.256.F2.0F.WIG 7C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Horizontal add packed single-precision floating-point values from
ymm2 and ymm3/mem."
+"VHSUBPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 7D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Horizontal subtract packed double-precision floating-point values
from xmm2 and xmm3/mem."
+"VHSUBPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 7D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Horizontal subtract packed double-precision floating-point values
from ymm2 and ymm3/mem."
+"VHSUBPS xmm1, xmm2, xmm3/m128","VEX.128.F2.0F.WIG 7D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Horizontal subtract packed single-precision floating-point values
from xmm2 and xmm3/mem."
+"VHSUBPS ymm1, ymm2, ymm3/m256","VEX.256.F2.0F.WIG 7D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Horizontal subtract packed single-precision floating-point values
from ymm2 and ymm3/mem."
+"VINSERTF128 ymm1, ymm2, xmm3/m128, ib","VEX.256.66.0F3A.W0 18 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Insert 128 bits of packed floating-point values from xmm3/m128
and the remaining values from ymm2 into ymm1."
+"VINSERTPS xmm1, xmm2, xmm3/m32, ib","VEX.128.66.0F3A.WIG 21 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Insert a single-precision floating-point value selected by ib
from xmm3/m32 and merge with values in xmm2 at the specified destination
element specified by ib and write out the result and zero out destination
elements in xmm1 as indicated in ib."
+"VLDDQU xmm1, m128","VEX.128.F2.0F.WIG F0
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load unaligned packed integer values from mem to xmm1."
+"VLDDQU ymm1, m256","VEX.256.F2.0F.WIG F0
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load unaligned packed integer values from mem to ymm1."
+"VLDMXCSR m32","VEX.LZ.0F.WIG AE
/2","Valid","Valid","Invalid","AVX","ModRM:r/m (r, ModRM:[7:6] must not be
11b)","","","","","Load MXCSR register from m32."
+"VMASKMOVDQU xmm1, xmm2","VEX.128.66.0F.WIG F7
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m (r)","RDI
(r)","","","Selectively write bytes from xmm1 to memory location using the byte
mask in xmm2. The default memory location is specified by DS:DI/EDI/RDI."
+"VMASKMOVPD xmm1, xmm2, m128","VEX.128.66.0F38.W0 2D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Conditionally load packed double-precision values from m128 using
mask in xmm2 and store in xmm1."
+"VMASKMOVPD ymm1, ymm2, m256","VEX.256.66.0F38.W0 2D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Conditionally load packed double-precision values from m256 using
mask in ymm2 and store in ymm1."
+"VMASKMOVPD m128, xmm1, xmm2","VEX.128.66.0F38.W0 2F
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Conditionally store packed double-precision values from xmm2 using
mask in xmm1."
+"VMASKMOVPD m256, ymm1, ymm2","VEX.256.66.0F38.W0 2F
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Conditionally store packed double-precision values from ymm2 using
mask in ymm1."
+"VMASKMOVPS xmm1, xmm2, m128","VEX.128.66.0F38.W0 2C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Conditionally load packed single-precision values from m128 using
mask in xmm2 and store in xmm1."
+"VMASKMOVPS ymm1, ymm2, m256","VEX.256.66.0F38.W0 2C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Conditionally load packed single-precision values from m256 using
mask in ymm2 and store in ymm1."
+"VMASKMOVPS m128, xmm1, xmm2","VEX.128.66.0F38.W0 2E
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Conditionally store packed single-precision values from xmm2 using
mask in xmm1."
+"VMASKMOVPS m256, ymm1, ymm2","VEX.256.66.0F38.W0 2E
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Conditionally store packed single-precision values from ymm2 using
mask in ymm1."
+"VMAXPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 5F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the maximum double-precision floating-point values between
xmm2 and xmm3/m128."
+"VMAXPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 5F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the maximum packed double-precision floating-point values
between ymm2 and ymm3/m256."
+"VMAXPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 5F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the maximum single-precision floating-point values between
xmm2 and xmm3/mem."
+"VMAXPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 5F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the maximum single-precision floating-point values between
ymm2 and ymm3/mem."
+"VMAXSD xmm1, xmm2, xmm3/m64","VEX.LIG.F2.0F.WIG 5F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the maximum scalar double-precision floating-point value
between xmm3/m64 and xmm2."
+"VMAXSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 5F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the maximum scalar single-precision floating-point value
between xmm3/m32 and xmm2."
+"VMINPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 5D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the minimum double-precision floating-point values between
xmm2 and xmm3/mem."
+"VMINPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 5D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the minimum packed double-precision floating-point values
between ymm2 and ymm3/mem."
+"VMINPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 5D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the minimum single-precision floating-point values between
xmm2 and xmm3/mem."
+"VMINPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 5D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the minimum single double-precision floating-point values
between ymm2 and ymm3/mem."
+"VMINSD xmm1, xmm2, xmm3/m64","VEX.LIG.F2.0F.WIG 5D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the minimum scalar double-precision floating-point value
between xmm3/m64 and xmm2."
+"VMINSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 5D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the minimum scalar single-precision floating-point value
between xmm3/m32 and xmm2."
+"VMOVAPD xmm1, xmm2/m128","VEX.128.66.0F.WIG 28
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed double-precision floating-point values from
xmm2/mem to xmm1."
+"VMOVAPD ymm1, ymm2/m256","VEX.256.66.0F.WIG 28
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed double-precision floating-point values from
ymm2/mem to ymm1."
+"VMOVAPD xmm2/m128, xmm1","VEX.128.66.0F.WIG 29
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed double-precision floating-point values from
xmm1 to xmm2/mem."
+"VMOVAPD ymm2/m256, ymm1","VEX.256.66.0F.WIG 29
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed double-precision floating-point values from
ymm1 to ymm2/mem."
+"VMOVAPS xmm1, xmm2/m128","VEX.128.0F.WIG 28
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed single-precision floating-point values from
xmm2/mem to xmm1."
+"VMOVAPS ymm1, ymm2/m256","VEX.256.0F.WIG 28
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed single-precision floating-point values from
ymm2/mem to ymm1."
+"VMOVAPS xmm2/m128, xmm1","VEX.128.0F.WIG 29
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed single-precision floating-point values from
xmm1 to xmm2/mem."
+"VMOVAPS ymm2/m256, ymm1","VEX.256.0F.WIG 29
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed single-precision floating-point values from
ymm1 to ymm2/mem."
+"VMOVD xmm1, rw/mw","VEX.128.66.0F.W0 6E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move doubleword from r/m to xmm1."
+"VMOVD rw/mw, xmm1","VEX.128.66.0F.W0 7E
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move doubleword from xmm1 register to r/m."
+"VMOVDDUP xmm1, xmm2/m64","VEX.128.F2.0F.WIG 12
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move double-precision floating-point value from xmm2/m64 and
duplicate into xmm1."
+"VMOVDDUP ymm1, ymm2/m256","VEX.256.F2.0F.WIG 12
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move even index double-precision floating-point values from
ymm2/mem and duplicate each element into ymm1."
+"VMOVDQA xmm1, xmm2/m128","VEX.128.66.0F.WIG 6F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed integer values from xmm2/mem to xmm1."
+"VMOVDQA ymm1, ymm2/m256","VEX.256.66.0F.WIG 6F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed integer values from ymm2/mem to ymm1."
+"VMOVDQA xmm2/m128, xmm1","VEX.128.66.0F.WIG 7F
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed integer values from xmm1 to xmm2/mem."
+"VMOVDQA ymm2/m256, ymm1","VEX.256.66.0F.WIG 7F
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed integer values from ymm1 to ymm2/mem."
+"VMOVDQU xmm1, xmm2/m128","VEX.128.F3.0F.WIG 6F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed integer values from xmm2/m128 to xmm1."
+"VMOVDQU ymm1, ymm2/m256","VEX.256.F3.0F.WIG 6F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed integer values from ymm2/m256 to ymm1."
+"VMOVDQU xmm2/m128, xmm1","VEX.128.F3.0F.WIG 7F
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (r)","ModRM:reg
(w)","","","","Move unaligned packed integer values from xmm1 to xmm2/m128."
+"VMOVDQU ymm2/m256, ymm1","VEX.256.F3.0F.WIG 7F
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (r)","ModRM:reg
(w)","","","","Move unaligned packed integer values from ymm1 to ymm2/m256."
+"VMOVHPD xmm2, xmm1, m64","VEX.128.66.0F.WIG 16
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Merge double-precision floating-point value from m64 and the low
quadword of xmm1."
+"VMOVHPD m64, xmm1","VEX.128.66.0F.WIG 17
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move double-precision floating-point value from high quadword of
xmm1 to m64."
+"VMOVHPS xmm2, xmm1, m64","VEX.128.0F.WIG 16
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Merge two packed single-precision floating-point values from m64
and the low quadword of xmm1."
+"VMOVHPS m64, xmm1","VEX.128.0F.WIG 17
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move two packed single-precision floating-point values from high
quadword of xmm1 to m64."
+"VMOVLPD xmm2, xmm1, m64","VEX.128.66.0F.WIG 12
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Merge double-precision floating-point value from m64 and the high
quadword of xmm1."
+"VMOVLPD m64, xmm1","VEX.128.66.0F.WIG 13
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move double-precision floating-point value from low quadword of
xmm1 to m64."
+"VMOVLPS xmm2, xmm1, m64","VEX.128.0F.WIG 12
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Merge two packed single-precision floating-point values from m64
and the high quadword of xmm1."
+"VMOVLPS m64, xmm1","VEX.128.0F.WIG 13
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move two packed single-precision floating-point values from low
quadword of xmm1 to m64."
+"VMOVMSKPD rw, xmm2","VEX.128.66.0F.WIG 50
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Extract 2-bit sign mask from xmm2 and store in reg. The upper
bits of r are zeroed."
+"VMOVMSKPD rw, ymm2","VEX.256.66.0F.WIG 50
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Extract 4-bit sign mask from ymm2 and store in reg. The upper
bits of r are zeroed."
+"VMOVMSKPS rw, xmm2","VEX.128.0F.WIG 50
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Extract 4-bit sign mask from xmm2 and store in reg. The upper
bits of r are zeroed."
+"VMOVMSKPS rw, ymm2","VEX.256.0F.WIG 50
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Extract 8-bit sign mask from ymm2 and store in reg. The upper
bits of r are zeroed."
+"VMOVNTDQ m128, xmm1","VEX.128.66.0F.WIG E7
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed integer values in xmm1 to m128 using non-temporal
hint."
+"VMOVNTDQ m256, ymm1","VEX.256.66.0F.WIG E7
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed integer values in ymm1 to m256 using non-temporal
hint."
+"VMOVNTDQA xmm1, m128","VEX.128.66.0F38.WIG 2A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move double quadword from m128 to xmm using non-temporal hint if
WC memory type."
+"VMOVNTPD m128, xmm1","VEX.128.66.0F.WIG 2B
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed double-precision values in xmm1 to m128 using
non-temporal hint."
+"VMOVNTPD m256, ymm1","VEX.256.66.0F.WIG 2B
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed double-precision values in ymm1 to m256 using
non-temporal hint."
+"VMOVNTPS m128, xmm1","VEX.128.0F.WIG 2B
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed single-precision values xmm1 to mem using
non-temporal hint."
+"VMOVNTPS m256, ymm1","VEX.256.0F.WIG 2B
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed single-precision values ymm1 to mem using
non-temporal hint."
+"VMOVQ xmm1, rw/mw","VEX.128.66.0F.W1 6E
/r","Valid","Invalid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move quadword from r/m to xmm1."
+"VMOVQ rw/mw, xmm1","VEX.128.66.0F.W1 7E
/r","Valid","Invalid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move quadword from xmm1 register to r/m."
+"VMOVQ xmm1, xmm2/m64","VEX.128.F3.0F.WIG 7E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move quadword from xmm2 to xmm1."
+"VMOVQ xmm1/m64, xmm2","VEX.128.66.0F.WIG D6
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move quadword from xmm2 register to xmm1/m64."
+"VMOVSD xmm1, m64","VEX.LIG.F2.0F.WIG 10
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load scalar double-precision floating-point value from m64 to
xmm1 register."
+"VMOVSD xmm1, xmm2, xmm3","VEX.LIG.F2.0F.WIG 10
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Merge scalar double-precision floating-point value from xmm2 and
xmm3 to xmm1 register."
+"VMOVSD m64, xmm1","VEX.LIG.F2.0F.WIG 11
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Store scalar double-precision floating-point value from xmm1
register to m64."
+"VMOVSD xmm1, xmm2, xmm3","VEX.LIG.F2.0F.WIG 11
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Merge scalar double-precision floating-point value from xmm2 and
xmm3 registers to xmm1."
+"VMOVSHDUP xmm1, xmm2/m128","VEX.128.F3.0F.WIG 16
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move odd index single-precision floating-point values from
xmm2/mem and duplicate each element into xmm1."
+"VMOVSHDUP ymm1, ymm2/m256","VEX.256.F3.0F.WIG 16
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move odd index single-precision floating-point values from
ymm2/mem and duplicate each element into ymm1."
+"VMOVSLDUP xmm1, xmm2/m128","VEX.128.F3.0F.WIG 12
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move even index single-precision floating-point values from
xmm2/mem and duplicate each element into xmm1."
+"VMOVSLDUP ymm1, ymm2/m256","VEX.256.F3.0F.WIG 12
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move even index single-precision floating-point values from
ymm2/mem and duplicate each element into ymm1."
+"VMOVSS xmm1, m32","VEX.LIG.F3.0F.WIG 10
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load scalar single-precision floating-point value from m32 to
xmm1 register."
+"VMOVSS xmm1, xmm2, xmm3","VEX.LIG.F3.0F.WIG 10
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Merge scalar single-precision floating-point value from xmm2 and
xmm3 to xmm1 register"
+"VMOVSS m32, xmm1","VEX.LIG.F3.0F.WIG 11
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move scalar single-precision floating-point value from xmm1
register to m32."
+"VMOVSS xmm1, xmm2, xmm3","VEX.LIG.F3.0F.WIG 11
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Move scalar single-precision floating-point value from xmm2 and
xmm3 to xmm1 register."
+"VMOVUPD xmm1, xmm2/m128","VEX.128.66.0F.WIG 10
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed double-precision floating-point from
xmm2/mem to xmm1."
+"VMOVUPD ymm1, ymm2/m256","VEX.256.66.0F.WIG 10
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed double-precision floating-point from
ymm2/mem to ymm1."
+"VMOVUPD xmm2/m128, xmm1","VEX.128.66.0F.WIG 11
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move unaligned packed double-precision floating-point from xmm1
to xmm2/mem."
+"VMOVUPD ymm2/m256, ymm1","VEX.256.66.0F.WIG 11
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move unaligned packed double-precision floating-point from ymm1
to ymm2/mem."
+"VMOVUPS xmm1, xmm2/m128","VEX.128.0F.WIG 10
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed single-precision floating-point from
xmm2/mem to xmm1."
+"VMOVUPS ymm1, ymm2/m256","VEX.256.0F.WIG 10
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed single-precision floating-point from
ymm2/mem to ymm1."
+"VMOVUPS xmm2/m128, xmm1","VEX.128.0F.WIG 11
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move unaligned packed single-precision floating-point from xmm1
to xmm2/mem."
+"VMOVUPS ymm2/m256, ymm1","VEX.256.0F.WIG 11
/r","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move unaligned packed single-precision floating-point from ymm1
to ymm2/mem."
+"VMPSADBW xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.WIG 42 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Sums absolute 8-bit integer difference of adjacent groups of 4
byte integers in xmm2 and xmm3/m128 and writes the results in xmm1. Starting
offsets within xmm2 and xmm3/m128 are determined by ib."
+"VMULPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 59
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply packed double-precision floating-point values in xmm3/m128
with xmm2 and store result in xmm1."
+"VMULPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 59
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply packed double-precision floating-point values in ymm3/m256
with ymm2 and store result in ymm1."
+"VMULPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 59
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply packed single-precision floating-point values in xmm3/m128
with xmm2 and store result in xmm1."
+"VMULPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 59
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply packed single-precision floating-point values in ymm3/m256
with ymm2 and store result in ymm1."
+"VMULSD xmm1, xmm2, xmm3/m64","VEX.LIG.F2.0F.WIG 59
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the low double-precision floating-point value in xmm3/m64
by low double-precision floating-point value in xmm2."
+"VMULSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 59
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the low single-precision floating-point value in xmm3/m32
by the low single-precision floating-point value in xmm2."
+"VORPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 56
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical OR of packed double-precision
floating-point values in xmm2 and xmm3/mem."
+"VORPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 56
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical OR of packed double-precision
floating-point values in ymm2 and ymm3/mem."
+"VORPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 56
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical OR of packed single-precision
floating-point values in xmm2 and xmm3/mem."
+"VORPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 56
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical OR of packed single-precision
floating-point values in ymm2 and ymm3/mem."
+"VPABSB xmm1, xmm2/m128","VEX.128.66.0F38.WIG 1C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of bytes in xmm2/m128 and store
UNSIGNED result in xmm1."
+"VPABSD xmm1, xmm2/m128","VEX.128.66.0F38.WIG 1E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of 32-bit integers in xmm2/m128 and
store UNSIGNED result in xmm1."
+"VPABSW xmm1, xmm2/m128","VEX.128.66.0F38.WIG 1D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of 16-bit integers in xmm2/m128 and
store UNSIGNED result in xmm1."
+"VPACKSSDW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 6B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Converts 4 packed signed doubleword integers from xmm2 and from
xmm3/m128 into 8 packed signed word integers in xmm1 using signed saturation."
+"VPACKSSWB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 63
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Converts 8 packed signed word integers from xmm2 and from xmm3/m128
into 16 packed signed byte integers in xmm1 using signed saturation."
+"VPACKUSDW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 2B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Convert 4 packed signed doubleword integers from xmm2 and 4 packed
signed doubleword integers from xmm3/m128 into 8 packed unsigned word integers
in xmm1 using unsigned saturation."
+"VPACKUSWB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 67
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Converts 8 signed word integers from xmm2 and 8 signed word
integers from xmm3/m128 into 16 unsigned byte integers in xmm1 using unsigned
saturation."
+"VPADDB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG FC
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed byte integers from xmm2, and xmm3/m128 and store in
xmm1."
+"VPADDD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG FE
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed doubleword integers from xmm2, xmm3/m128 and store in
xmm1."
+"VPADDQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG D4
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed quadword integers from xmm2, xmm3/m128 and store in
xmm1."
+"VPADDSB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG EC
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed signed byte integers from xmm3/m128 and xmm2 saturate
the results."
+"VPADDSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG ED
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed signed word integers from xmm3/m128 and xmm2 and
saturate the results."
+"VPADDUSB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG DC
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed unsigned byte integers from xmm3/m128 to xmm2 and
saturate the results."
+"VPADDUSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG DD
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed unsigned word integers from xmm3/m128 to xmm2 and
saturate the results."
+"VPADDW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG FD
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed word integers from xmm2, xmm3/m128 and store in xmm1."
+"VPALIGNR xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.WIG 0F /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Concatenate xmm2 and xmm3/m128, extract byte aligned result
shifted to the right by constant value in ib and result is stored in xmm1."
+"VPAND xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG DB
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise AND of xmm3/m128 and xmm."
+"VPANDN xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG DF
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise AND NOT of xmm3/m128 and xmm2."
+"VPAVGB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG E0
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Average packed unsigned byte integers from xmm3/m128 and xmm2 with
rounding."
+"VPAVGW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG E3
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Average packed unsigned word integers from xmm3/m128 and xmm2 with
rounding."
+"VPBLENDVB xmm1, xmm2, xmm3/m128, xmm4","VEX.128.66.0F3A.W0 4C /r
/is4","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib[7:4]","","Select byte values from xmm2 and xmm3/m128 using mask bits
in the specified mask register, xmm4, and store the values into xmm1."
+"VPBLENDW xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.WIG 0E /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Select words from xmm2 and xmm3/m128 from mask specified in ib
and store the values into xmm1."
+"VPCMPEQB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 74
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed bytes in xmm3/m128 and xmm2 for equality."
+"VPCMPEQD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 76
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed doublewords in xmm3/m128 and xmm2 for equality."
+"VPCMPEQQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 29
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed quadwords in xmm3/m128 and xmm2 for equality."
+"VPCMPEQW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 75
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed words in xmm3/m128 and xmm2 for equality."
+"VPCMPESTRI xmm1, xmm2/m128, ib","VEX.128.66.0F3A.WIG 61 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","ib","","","Perform a packed comparison of string data with explicit
lengths, generating an index, and storing the result in ECX."
+"VPCMPESTRM xmm1, xmm2/m128, ib","VEX.128.66.0F3A.WIG 60 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","ib","","","Perform a packed comparison of string data with explicit
lengths, generating a mask, and storing the result in XMM0."
+"VPCMPGTB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 64
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed byte integers in xmm2 and xmm3/m128 for
greater than."
+"VPCMPGTD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 66
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed doubleword integers in xmm2 and xmm3/m128 for
greater than."
+"VPCMPGTQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 37
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed qwords in xmm2 and xmm3/m128 for greater
than."
+"VPCMPGTW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 65
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed word integers in xmm2 and xmm3/m128 for
greater than."
+"VPCMPISTRI xmm1, xmm2/m128, ib","VEX.128.66.0F3A.WIG 63 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","ib","","","Perform a packed comparison of string data with implicit
lengths, generating an index, and storing the result in ECX."
+"VPCMPISTRM xmm1, xmm2/m128, ib","VEX.128.66.0F3A.WIG 62 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","ib","","","Perform a packed comparison of string data with implicit
lengths, generating a Mask, and storing the result in XMM0."
+"VPERM2F128 ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.W0 06 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Permute 128-bit floating-point fields in ymm2 and ymm3/mem using
controls from ib and store result in ymm1."
+"VPERMILPD xmm1, xmm2/m128, ib","VEX.128.66.0F3A.W0 05 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Permute double-precision floating-point values in xmm2/m128
using controls from ib."
+"VPERMILPD ymm1, ymm2/m256, ib","VEX.256.66.0F3A.W0 05 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Permute double-precision floating-point values in ymm2/m256
using controls from ib."
+"VPERMILPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 0D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Permute double-precision floating-point values in xmm2 using
controls from xmm3/m128 and store result in xmm1."
+"VPERMILPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 0D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Permute double-precision floating-point values in ymm2 using
controls from ymm3/m256 and store result in ymm1."
+"VPERMILPS xmm1, xmm2/m128, ib","VEX.128.66.0F3A.W0 04 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Permute single-precision floating-point values in xmm2/m128
using controls from ib and store result in xmm1."
+"VPERMILPS ymm1, ymm2/m256, ib","VEX.256.66.0F3A.W0 04 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Permute single-precision floating-point values in ymm2/m256
using controls from ib and store result in ymm1."
+"VPERMILPS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 0C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Permute single-precision floating-point values in xmm2 using
controls from xmm3/m128 and store result in xmm1."
+"VPERMILPS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 0C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Permute single-precision floating-point values in ymm2 using
controls from ymm3/m256 and store result in ymm1."
+"VPEXTRB r32/m8, xmm2, ib","VEX.128.66.0F3A.W0 14 /r
ib","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract a byte integer value from xmm2 at the source byte
offset specified by ib into reg or m8. The upper bits of r are zeroed."
+"VPEXTRD r32/m32, xmm2, ib","VEX.128.66.0F3A.W0 16 /r
ib","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract a dword integer value from xmm2 at the source dword
offset specified by ib into r/m."
+"VPEXTRQ r64/m64, xmm2, ib","VEX.128.66.0F3A.W1 16 /r
ib","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract a qword integer value from xmm2 at the source dword
offset specified by ib into r/m."
+"VPEXTRW r32/m16, xmm2, ib","VEX.128.66.0F3A.W0 15 /r
ib","Valid","Valid","Invalid","AVX","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract a word integer value from xmm2 at the source word
offset specified by ib into reg or m16. The upper bits of r are zeroed."
+"VPEXTRW r32, xmm1, ib","VEX.128.66.0F.W0 C5 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Extract the word specified by ib from xmm1 and move it to reg,
bits 15:0. Zero-extend the result. The upper bits of r are zeroed."
+"VPHADDD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 02
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add 32-bit integers horizontally, pack to xmm1."
+"VPHADDSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 03
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add 16-bit signed integers horizontally, pack saturated integers to
xmm1."
+"VPHADDW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 01
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add 16-bit integers horizontally, pack to xmm1."
+"VPHMINPOSUW xmm1, xmm2/m128","VEX.128.66.0F38.WIG 41
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Find the minimum unsigned word in xmm2/m128 and place its value
in the low word of xmm1 and its index in the second-lowest word of xmm1."
+"VPHSUBD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 06
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Subtract 32-bit signed integers horizontally, pack
to xmm1."
+"VPHSUBSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 07
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Subtract 16-bit signed integer horizontally, pack
saturated integers to xmm1."
+"VPHSUBW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 05
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Subtract 16-bit signed integers horizontally, pack
to xmm1."
+"VPINSRB xmm1, xmm2, r32/m8, ib","VEX.128.66.0F3A.W0 20 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Merge a byte integer value from r/m8 and rest from xmm2 into xmm1
at the byte offset in ib."
+"VPINSRD xmm1, xmm2, r32/m32, ib","VEX.128.66.0F3A.W0 22 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Insert a dword integer value from r/m32 and rest from xmm2 into
xmm1 at the dword offset in ib."
+"VPINSRQ xmm1, xmm2, r64/m64, ib","VEX.128.66.0F3A.W1 22 /r
ib","Valid","Invalid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Insert a qword integer value from r/m64 and rest from xmm2 into
xmm1 at the qword offset in ib."
+"VPINSRW xmm1, xmm2, r32/m16, ib","VEX.128.66.0F.W0 C4 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Insert a word integer value from r/m and rest from xmm2 into xmm1
at the word offset in ib."
+"VPMADDUBSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 04
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply signed and unsigned bytes, add horizontal pair of signed
words, pack saturated signed-words to xmm1."
+"VPMADDWD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG F5
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed word integers in xmm2 by the packed word
integers in xmm3/m128, add adjacent doubleword results, and store in xmm1."
+"VPMAXSB xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 3C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed byte integers in xmm2 and xmm3/m128 and store
packed maximum values in xmm1."
+"VPMAXSD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 3D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed dword integers in xmm2 and xmm3/m128 and
store packed maximum values in xmm1."
+"VPMAXSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG EE
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed word integers in xmm3/m128 and xmm2 and store
packed maximum values in xmm1."
+"VPMAXUB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG DE
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned byte integers in xmm2 and xmm3/m128 and
store packed maximum values in xmm1."
+"VPMAXUD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 3F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned dword integers in xmm2 and xmm3/m128 and
store packed maximum values in xmm1."
+"VPMAXUW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 3E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned word integers in xmm3/m128 and xmm2 and
store maximum packed values in xmm1."
+"VPMINSB xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 38
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed byte integers in xmm2 and xmm3/m128 and store
packed minimum values in xmm1."
+"VPMINSD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 39
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed dword integers in xmm2 and xmm3/m128 and
store packed minimum values in xmm1."
+"VPMINSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG EA
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed word integers in xmm3/m128 and xmm2 and
return packed minimum values in xmm1."
+"VPMINUB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG DA
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned byte integers in xmm2 and xmm3/m128 and
store packed minimum values in xmm1."
+"VPMINUD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 3B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned dword integers in xmm2 and xmm3/m128 and
store packed minimum values in xmm1."
+"VPMINUW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 3A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned word integers in xmm3/m128 and xmm2 and
return packed minimum values in xmm1."
+"VPMOVMSKB r32, xmm1","VEX.128.66.0F.WIG D7
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move a byte mask of xmm1 to reg. The upper bits of r are zeroed."
+"VPMOVSXBD xmm1, xmm2/m32","VEX.128.66.0F38.WIG 21
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 4 packed 8-bit integers in the low 4 bytes of
xmm2/m32 to 4 packed 32-bit integers in xmm1."
+"VPMOVSXBQ xmm1, xmm2/m16","VEX.128.66.0F38.WIG 22
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 2 packed 8-bit integers in the low 2 bytes of
xmm2/m16 to 2 packed 64-bit integers in xmm1."
+"VPMOVSXBW xmm1, xmm2/m64","VEX.128.66.0F38.WIG 20
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 8 packed 8-bit integers in the low 8 bytes of
xmm2/m64 to 8 packed 16-bit integers in xmm1."
+"VPMOVSXDQ xmm1, xmm2/m64","VEX.128.66.0F38.WIG 25
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 2 packed 32-bit integers in the low 8 bytes of
xmm2/m64 to 2 packed 64-bit integers in xmm1."
+"VPMOVSXWD xmm1, xmm2/m64","VEX.128.66.0F38.WIG 23
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 4 packed 16-bit integers in the low 8 bytes of
xmm2/m64 to 4 packed 32-bit integers in xmm1."
+"VPMOVSXWQ xmm1, xmm2/m32","VEX.128.66.0F38.WIG 24
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 2 packed 16-bit integers in the low 4 bytes of
xmm2/m32 to 2 packed 64-bit integers in xmm1."
+"VPMOVZXBD xmm1, xmm2/m32","VEX.128.66.0F38.WIG 31
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 4 packed 8-bit integers in the low 4 bytes of
xmm2/m32 to 4 packed 32-bit integers in xmm1."
+"VPMOVZXBQ xmm1, xmm2/m16","VEX.128.66.0F38.WIG 32
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 2 packed 8-bit integers in the low 2 bytes of
xmm2/m16 to 2 packed 64-bit integers in xmm1."
+"VPMOVZXBW xmm1, xmm2/m64","VEX.128.66.0F38.WIG 30
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 8 packed 8-bit integers in the low 8 bytes of
xmm2/m64 to 8 packed 16-bit integers in xmm1."
+"VPMOVZXDQ xmm1, xmm2/m64","VEX.128.66.0F38.WIG 35
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 2 packed 32-bit integers in the low 8 bytes of
xmm2/m64 to 2 packed 64-bit integers in xmm1."
+"VPMOVZXWD xmm1, xmm2/m64","VEX.128.66.0F38.WIG 33
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 4 packed 16-bit integers in the low 8 bytes of
xmm2/m64 to 4 packed 32-bit integers in xmm1."
+"VPMOVZXWQ xmm1, xmm2/m32","VEX.128.66.0F38.WIG 34
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 2 packed 16-bit integers in the low 4 bytes of
xmm2/m32 to 2 packed 64-bit integers in xmm1."
+"VPMULDQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 28
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply packed signed doubleword integers in xmm2 by packed signed
doubleword integers in xmm3/m128, and store the quadword results in xmm1."
+"VPMULHRSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 0B
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply 16-bit signed words, scale and round signed doublewords,
pack high 16 bits to xmm1."
+"VPMULHUW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG E4
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed unsigned word integers in xmm2 and xmm3/m128,
and store the high 16 bits of the results in xmm1."
+"VPMULHW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG E5
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed signed word integers in xmm2 and xmm3/m128, and
store the high 16 bits of the results in xmm1."
+"VPMULLD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 40
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed dword signed integers in xmm2 and xmm3/m128 and
store the low 32 bits of each product in xmm1."
+"VPMULLW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG D5
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed dword signed integers in xmm2 and xmm3/m128 and
store the low 32 bits of each product in xmm1."
+"VPMULUDQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG F4
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply packed unsigned doubleword integers in xmm2 by packed
unsigned doubleword integers in xmm3/m128, and store the quadword results in
xmm1."
+"VPOR xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG EB
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise OR of xmm2/m128 and xmm3."
+"VPSADBW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG F6
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Computes the absolute differences of the packed unsigned byte
integers from xmm3/m128 and xmm2; the 8 low differences and 8 high differences
are then summed separately to produce two unsigned word integer results."
+"VPSHUFB xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 00
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shuffle bytes in xmm2 according to contents of xmm3/m128."
+"VPSHUFD xmm1, xmm2/m128, ib","VEX.128.66.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the doublewords in xmm2/m128 based on the encoding in
ib and store the result in xmm1."
+"VPSHUFHW xmm1, xmm2/m128, ib","VEX.128.F3.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the high words in xmm2/m128 based on the encoding in
ib and store the result in xmm1."
+"VPSHUFLW xmm1, xmm2/m128, ib","VEX.128.F2.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the low words in xmm2/m128 based on the encoding in ib
and store the result in xmm1."
+"VPSIGNB xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 08
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Negate/zero/preserve packed byte integers in xmm2 depending on the
corresponding sign in xmm3/m128."
+"VPSIGND xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 0A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Negate/zero/preserve packed doubleword integers in xmm2 depending
on the corresponding sign in xmm3/m128."
+"VPSIGNW xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.WIG 09
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Negate/zero/preserve packed word integers in xmm2 depending on the
corresponding sign in xmm3/m128."
+"VPSLLD xmm1, xmm2, ib","VEX.128.66.0F.WIG 72 /6
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift doublewords in xmm2 left by ib while shifting in 0s."
+"VPSLLD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG F2
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in xmm2 left by amount specified in xmm3/m128
while shifting in 0s."
+"VPSLLDQ xmm1, xmm2, ib","VEX.128.66.0F.WIG 73 /7
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift xmm2 left by ib bytes while shifting in 0s and store
result in xmm1."
+"VPSLLQ xmm1, xmm2, ib","VEX.128.66.0F.WIG 73 /6
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift quadwords in xmm2 left by ib while shifting in 0s."
+"VPSLLQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG F3
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift quadwords in xmm2 left by amount specified in xmm3/m128 while
shifting in 0s."
+"VPSLLW xmm1, xmm2, ib","VEX.128.66.0F.WIG 71 /6
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift words in xmm2 left by ib while shifting in 0s."
+"VPSLLW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG F1
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift words in xmm2 left by amount specified in xmm3/m128 while
shifting in 0s."
+"VPSRAD xmm1, xmm2, ib","VEX.128.66.0F.WIG 72 /4
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift doublewords in xmm2 right by ib while shifting in sign
bits."
+"VPSRAD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG E2
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in xmm2 right by amount specified in xmm3/m128
while shifting in sign bits."
+"VPSRAW xmm1, xmm2, ib","VEX.128.66.0F.WIG 71 /4
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift words in xmm2 right by ib while shifting in sign bits."
+"VPSRAW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG E1
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift words in xmm2 right by amount specified in xmm3/m128 while
shifting in sign bits."
+"VPSRLD xmm1, xmm2, ib","VEX.128.66.0F.WIG 72 /2
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift doublewords in xmm2 right by ib while shifting in 0s."
+"VPSRLD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG D2
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in xmm2 right by amount specified in xmm3/m128
while shifting in 0s."
+"VPSRLDQ xmm1, xmm2, ib","VEX.128.66.0F.WIG 73 /3
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift xmm2 right by ib bytes while shifting in 0s."
+"VPSRLQ xmm1, xmm2, ib","VEX.128.66.0F.WIG 73 /2
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift quadwords in xmm2 right by ib while shifting in 0s."
+"VPSRLQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG D3
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift quadwords in xmm2 right by amount specified in xmm3/m128
while shifting in 0s."
+"VPSRLW xmm1, xmm2, ib","VEX.128.66.0F.WIG 71 /2
ib","Valid","Valid","Invalid","AVX","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift words in xmm2 right by ib while shifting in 0s."
+"VPSRLW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG D1
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift words in xmm2 right by amount specified in xmm3/m128 while
shifting in 0s."
+"VPSUBB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG F8
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed byte integers in xmm3/m128 from xmm2."
+"VPSUBD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG FA
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed doubleword integers in xmm3/m128 from xmm2."
+"VPSUBQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG FB
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed quadword integers in xmm3/m128 from xmm2."
+"VPSUBSB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG E8
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed signed byte integers in xmm3/m128 from packed
signed byte integers in xmm2 and saturate results."
+"VPSUBSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG E9
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed signed word integers in xmm3/m128 from packed
signed word integers in xmm2 and saturate results."
+"VPSUBUSB xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG D8
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed unsigned byte integers in xmm3/m128 from packed
unsigned byte integers in xmm2 and saturate result."
+"VPSUBUSW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG D9
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed unsigned word integers in xmm3/m128 from packed
unsigned word integers in xmm2 and saturate result."
+"VPSUBW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG F9
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed word integers in xmm3/m128 from xmm2."
+"VPTEST xmm1, xmm2/m128","VEX.128.66.0F38.WIG 17
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Set ZF and CF depending on bitwise AND and ANDN of sources."
+"VPTEST ymm1, ymm2/m256","VEX.256.66.0F38.WIG 17
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Set ZF and CF depending on bitwise AND and ANDN of sources."
+"VPUNPCKHBW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 68
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave high-order bytes from xmm2 and xmm3/m128 into xmm1."
+"VPUNPCKHDQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 6A
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave high-order doublewords from xmm2 and xmm3/m128 into
xmm1."
+"VPUNPCKHQDQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 6D
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave high-order quadword from xmm2 and xmm3/m128 into xmm1
register."
+"VPUNPCKHWD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 69
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave high-order words from xmm2 and xmm3/m128 into xmm1."
+"VPUNPCKLBW xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 60
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave low-order bytes from xmm2 and xmm3/m128 into xmm1."
+"VPUNPCKLDQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 62
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave low-order doublewords from xmm2 and xmm3/m128 into xmm1."
+"VPUNPCKLQDQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 6C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave low-order quadword from xmm2 and xmm3/m128 into xmm1
register."
+"VPUNPCKLWD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 61
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave low-order words from xmm2 and xmm3/m128 into xmm1."
+"VPXOR xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG EF
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise XOR of xmm3/m128 and xmm2."
+"VRCPPS xmm1, xmm2/m128","VEX.128.0F.WIG 53
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes the approximate reciprocals of packed single-precision
values in xmm2/mem and stores the results in xmm1."
+"VRCPPS ymm1, ymm2/m256","VEX.256.0F.WIG 53
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes the approximate reciprocals of packed single-precision
values in ymm2/mem and stores the results in ymm1."
+"VRCPSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 53
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Computes the approximate reciprocal of the scalar single-precision
floating-point value in xmm3/m32 and stores the result in xmm1. Also, upper
single precision floating-point values (bits[127:32]) from xmm2 are copied to
xmm1[127:32]."
+"VROUNDPD xmm1, xmm2/m128, ib","VEX.128.66.0F3A.WIG 09 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Round packed double-precision floating-point values in
xmm2/m128 and place the result in xmm1. The rounding mode is determined by ib."
+"VROUNDPD ymm1, ymm2/m256, ib","VEX.256.66.0F3A.WIG 09 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Round packed double-precision floating-point values in
ymm2/m256 and place the result in ymm1. The rounding mode is determined by ib."
+"VROUNDPS xmm1, xmm2/m128, ib","VEX.128.66.0F3A.WIG 08 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Round packed single-precision floating-point values in
xmm2/m128 and place the result in xmm1. The rounding mode is determined by ib."
+"VROUNDPS ymm1, ymm2/m256, ib","VEX.256.66.0F3A.WIG 08 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Round packed single-precision floating-point values in
ymm2/m256 and place the result in ymm1. The rounding mode is determined by ib."
+"VROUNDSD xmm1, xmm2, xmm3/m64, ib","VEX.LIG.66.0F3A.WIG 0B /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Round the low packed double precision floating-point value in
xmm3/m64 and place the result in xmm1. The rounding mode is determined by ib.
Upper packed double precision floating-point value (bits[127:64]) from xmm2 is
copied to xmm1[127:64]."
+"VROUNDSS xmm1, xmm2, xmm3/m32, ib","VEX.LIG.66.0F3A.WIG 0A /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Round the low packed single precision floating-point value in
xmm3/m32 and place the result in xmm1. The rounding mode is determined by ib.
Also, upper packed single precision floating-point values (bits[127:32]) from
xmm2 are copied to xmm1[127:32]."
+"VRSQRTPS xmm1, xmm2/m128","VEX.128.0F.WIG 52
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes the approximate reciprocals of the square roots of
packed single-precision values in xmm2/mem and stores the results in xmm1."
+"VRSQRTPS ymm1, ymm2/m256","VEX.256.0F.WIG 52
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes the approximate reciprocals of the square roots of
packed single-precision values in ymm2/mem and stores the results in ymm1."
+"VRSQRTSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 52
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Computes the approximate reciprocal of the square root of the low
single precision floating-point value in xmm3/m32 and stores the results in
xmm1. Also, upper single precision floating-point values (bits[127:32]) from
xmm2 are copied to xmm1[127:32]."
+"VSHUFPD xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F.WIG C6 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Shuffle two pairs of double-precision floating-point values from
xmm2 and xmm3/m128 using ib to select from each pair, interleaved result is
stored in xmm1."
+"VSHUFPD ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F.WIG C6 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Shuffle four pairs of double-precision floating-point values from
ymm2 and ymm3/m256 using ib to select from each pair, interleaved result is
stored in xmm1."
+"VSHUFPS xmm1, xmm2, xmm3/m128, ib","VEX.128.0F.WIG C6 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Select from quadruplet of single-precision floating-point values
in xmm1 and xmm2/m128 using ib, interleaved result pairs are stored in xmm1."
+"VSHUFPS ymm1, ymm2, ymm3/m256, ib","VEX.256.0F.WIG C6 /r
ib","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Select from quadruplet of single-precision floating-point values
in ymm2 and ymm3/m256 using ib, interleaved result pairs are stored in ymm1."
+"VSQRTPD xmm1, xmm2/m128","VEX.128.66.0F.WIG 51
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes Square Roots of the packed double-precision
floating-point values in xmm2/m128 and stores the result in xmm1."
+"VSQRTPD ymm1, ymm2/m256","VEX.256.66.0F.WIG 51
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes Square Roots of the packed double-precision
floating-point values in ymm2/m256 and stores the result in ymm1."
+"VSQRTPS xmm1, xmm2/m128","VEX.128.0F.WIG 51
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes Square Roots of the packed single-precision
floating-point values in xmm2/m128 and stores the result in xmm1."
+"VSQRTPS ymm1, ymm2/m256","VEX.256.0F.WIG 51
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes Square Roots of the packed single-precision
floating-point values in ymm2/m256 and stores the result in ymm1."
+"VSQRTSD xmm1, xmm2, xmm3/m64","VEX.LIG.F2.0F.WIG 51
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Computes square root of the low double-precision floating-point
value in xmm3/m64 and stores the results in xmm1. Also, upper double-precision
floating-point value (bits[127:64]) from xmm2 is copied to xmm1[127:64]."
+"VSQRTSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 51
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Computes square root of the low single-precision floating-point
value in xmm3/m32 and stores the results in xmm1. Also, upper single-precision
floating-point values (bits[127:32]) from xmm2 are copied to xmm1[127:32]."
+"VSTMXCSR m32","VEX.LZ.0F.WIG AE
/3","Valid","Valid","Invalid","AVX","ModRM:r/m (w, ModRM:[7:6] must not be
11b)","","","","","Store contents of MXCSR register to m32."
+"VSUBPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 5C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed double-precision floating-point values in xmm3/mem
from xmm2 and store result in xmm1."
+"VSUBPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 5C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed double-precision floating-point values in ymm3/mem
from ymm2 and store result in ymm1."
+"VSUBPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 5C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed single-precision floating-point values in xmm3/mem
from xmm2 and stores result in xmm1."
+"VSUBPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 5C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed single-precision floating-point values in ymm3/mem
from ymm2 and stores result in ymm1."
+"VSUBSD xmm1, xmm2, xmm3/m64","VEX.LIG.F2.0F.WIG 5C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract the low double-precision floating-point value in xmm3/m64
from xmm2 and store the result in xmm1."
+"VSUBSS xmm1, xmm2, xmm3/m32","VEX.LIG.F3.0F.WIG 5C
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract the low single-precision floating-point value in xmm3/m32
from xmm2 and store the result in xmm1."
+"VTESTPD xmm1, xmm2/m128","VEX.128.66.0F38.W0 0F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Set ZF and CF depending on sign bit AND and ANDN of packed
double-precision floating-point sources."
+"VTESTPD ymm1, ymm2/m256","VEX.256.66.0F38.W0 0F
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Set ZF and CF depending on sign bit AND and ANDN of packed
double-precision floating-point sources."
+"VTESTPS xmm1, xmm2/m128","VEX.128.66.0F38.W0 0E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Set ZF and CF depending on sign bit AND and ANDN of packed
single-precision floating-point sources."
+"VTESTPS ymm1, ymm2/m256","VEX.256.66.0F38.W0 0E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Set ZF and CF depending on sign bit AND and ANDN of packed
single-precision floating-point sources."
+"VUCOMISD xmm1, xmm2/m64","VEX.LIG.66.0F.WIG 2E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Compare low double-precision floating-point values in xmm1 and
xmm2/mem64 and set the EFLAGS flags accordingly."
+"VUCOMISS xmm1, xmm2/m32","VEX.LIG.0F.WIG 2E
/r","Valid","Valid","Invalid","AVX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Compare low single-precision floating-point values in xmm1 and
xmm2/mem32 and set the EFLAGS flags accordingly."
+"VUNPCKHPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 15
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Unpacks and Interleaves double-precision floating-point values from
high quadwords of xmm2 and xmm3/m128."
+"VUNPCKHPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 15
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Unpacks and Interleaves double-precision floating-point values from
high quadwords of ymm2 and ymm3/m256."
+"VUNPCKHPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 15
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Unpacks and Interleaves single-precision floating-point values from
high quadwords of xmm2 and xmm3/m128."
+"VUNPCKHPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 15
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Unpacks and Interleaves single-precision floating-point values from
high quadwords of ymm2 and ymm3/m256."
+"VUNPCKLPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 14
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Unpacks and Interleaves double-precision floating-point values from
low quadwords of xmm2 and xmm3/m128."
+"VUNPCKLPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 14
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Unpacks and Interleaves double-precision floating-point values from
low quadwords of ymm2 and ymm3/m256."
+"VUNPCKLPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 14
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Unpacks and Interleaves single-precision floating-point values from
low quadwords of xmm2 and xmm3/m128."
+"VUNPCKLPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 14
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Unpacks and Interleaves single-precision floating-point values from
low quadwords of ymm2 and ymm3/m256."
+"VXORPD xmm1, xmm2, xmm3/m128","VEX.128.66.0F.WIG 57
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical XOR of packed double-precision
floating-point values in xmm2 and xmm3/mem."
+"VXORPD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 57
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical XOR of packed double-precision
floating-point values in ymm2 and ymm3/mem."
+"VXORPS xmm1, xmm2, xmm3/m128","VEX.128.0F.WIG 57
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical XOR of packed single-precision
floating-point values in xmm2 and xmm3/mem."
+"VXORPS ymm1, ymm2, ymm3/m256","VEX.256.0F.WIG 57
/r","Valid","Valid","Invalid","AVX","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Return the bitwise logical XOR of packed single-precision
floating-point values in ymm2 and ymm3/mem."
+"VZEROALL","VEX.256.0F.WIG
77","Valid","Valid","Invalid","AVX","","","","","","Zero all YMM registers."
+"VZEROUPPER","VEX.128.0F.WIG
77","Valid","Valid","Invalid","AVX","","","","","","Zero upper 128 bits of all
YMM registers."
diff --git a/disas/x86-data/x86_avx2.csv b/disas/x86-data/x86_avx2.csv
new file mode 100644
index 000000000000..f512ccb3e20d
--- /dev/null
+++ b/disas/x86-data/x86_avx2.csv
@@ -0,0 +1,171 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VBROADCASTI128 ymm1, m128","VEX.256.66.0F38.W0 5A
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast 128 bits of integer data in mem to low and high
128-bits in ymm1."
+"VBROADCASTSD ymm1, xmm2","VEX.256.66.0F38.W0 19
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast low double-precision floating-point element in the
source operand to four locations in ymm1."
+"VBROADCASTSS xmm1, xmm2","VEX.128.66.0F38.W0 18
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast the low single-precision floating-point element in the
source operand to four locations in xmm1."
+"VEXTRACTI128 xmm1/m128, ymm2, ib","VEX.256.66.0F3A.W0 39 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract 128 bits of integer data from ymm2 and store results
in xmm1/m128."
+"VGATHERDPD xmm1, vm32x/f64x2, xmm2","VEX.128.66.0F38.W1 92
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using dword
indices specified in vm32x, gather double-pre-cision FP values from memory
conditioned on mask speci-fied by xmm2. Conditionally gathered elements are
merged into xmm1."
+"VGATHERDPD ymm1, vm32x/f64x4, ymm2","VEX.256.66.0F38.W1 92
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using dword
indices specified in vm32x, gather double-pre-cision FP values from memory
conditioned on mask speci-fied by ymm2. Conditionally gathered elements are
merged into ymm1."
+"VGATHERDPS xmm1, vm32x/f32x4, xmm2","VEX.128.66.0F38.W0 92
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using dword
indices specified in vm32x, gather single-preci-sion FP values from memory
conditioned on mask specified by xmm2. Conditionally gathered elements are
merged into xmm1."
+"VGATHERDPS ymm1, vm32y/f32x8, ymm2","VEX.256.66.0F38.W0 92
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using dword
indices specified in vm32y, gather single-preci-sion FP values from memory
conditioned on mask specified by ymm2. Conditionally gathered elements are
merged into ymm1."
+"VGATHERQPD xmm1, vm64x/f64x2, xmm2","VEX.128.66.0F38.W1 93
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using qword
indices specified in vm64x, gather double-pre-cision FP values from memory
conditioned on mask speci-fied by xmm2. Conditionally gathered elements are
merged into xmm1."
+"VGATHERQPD ymm1, vm64y/f64x4, ymm2","VEX.256.66.0F38.W1 93
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using qword
indices specified in vm64y, gather double-pre-cision FP values from memory
conditioned on mask speci-fied by ymm2. Conditionally gathered elements are
merged into ymm1."
+"VGATHERQPS xmm1, vm64x/f32x2, xmm2","VEX.128.66.0F38.W0 93
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using qword
indices specified in vm64x, gather single-preci-sion FP values from memory
conditioned on mask specified by xmm2. Conditionally gathered elements are
merged into xmm1."
+"VGATHERQPS xmm1, vm64y/f32x4, xmm2","VEX.256.66.0F38.W0 93
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using qword
indices specified in vm64y, gather single-preci-sion FP values from memory
conditioned on mask specified by xmm2. Conditionally gathered elements are
merged into xmm1."
+"VINSERTI128 ymm1, ymm2, xmm3/m128, ib","VEX.256.66.0F3A.W0 38 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Insert 128 bits of integer data from xmm3/m128 and the remaining
values from ymm2 into ymm1."
+"VMOVNTDQA ymm1, m256","VEX.256.66.0F38.WIG 2A
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move 256-bit data from m256 to ymm using non-temporal hint if WC
memory type."
+"VMPSADBW ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.WIG 42 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Sums absolute 8-bit integer difference of adjacent groups of 4
byte integers in xmm2 and ymm3/m128 and writes the results in ymm1. Starting
offsets within ymm2 and xmm3/m128 are determined by ib."
+"VPABSB ymm1, ymm2/m256","VEX.256.66.0F38.WIG 1C
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of bytes in ymm2/m256 and store
UNSIGNED result in ymm1."
+"VPABSD ymm1, ymm2/m256","VEX.256.66.0F38.WIG 1E
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of 32-bit integers in ymm2/m256 and
store UNSIGNED result in ymm1."
+"VPABSW ymm1, ymm2/m256","VEX.256.66.0F38.WIG 1D
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of 16-bit integers in ymm2/m256 and
store UNSIGNED result in ymm1."
+"VPACKSSDW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 6B
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Converts 8 packed signed doubleword integers from ymm2 and from
ymm3/m256 into 16 packed signed word integers in ymm1using signed saturation."
+"VPACKSSWB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 63
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Converts 16 packed signed word integers from ymm2 and from
ymm3/m256 into 32 packed signed byte integers in ymm1 using signed saturation."
+"VPACKUSDW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 2B
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Convert 8 packed signed doubleword integers from ymm2 and 8 packed
signed doubleword integers from ymm3/m256 into 16 packed unsigned word integers
in ymm1 using unsigned saturation."
+"VPACKUSWB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 67
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Converts 16 signed word integers from ymm2 and 16signed word
integers from ymm3/m256 into 32 unsigned byte integers in ymm1 using unsigned
saturation."
+"VPADDB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG FC
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed byte integers from ymm2, and ymm3/m256 and store in
ymm1."
+"VPADDD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG FE
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed doubleword integers from ymm2, ymm3/m256 and store in
ymm1."
+"VPADDQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG D4
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed quadword integers from ymm2, ymm3/m256 and store in
ymm1."
+"VPADDSB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG EC
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed signed byte integers from ymm2, and ymm3/m256 and store
the saturated results in ymm1."
+"VPADDSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG ED
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed signed word integers from ymm2, and ymm3/m256 and store
the saturated results in ymm1."
+"VPADDUSB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG DC
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed unsigned byte integers from ymm2,and ymm3/m256 and store
the saturated results in ymm1."
+"VPADDUSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG DD
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed unsigned word integers from ymm2,and ymm3/m256 and store
the saturated results in ymm1."
+"VPADDW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG FD
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add packed word integers from ymm2, ymm3/m256 and store in ymm1."
+"VPALIGNR ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.WIG 0F /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Concatenate pairs of 16 bytes in ymm2 and ymm3/m256 into 32-byte
intermediate result, extract byte-aligned, 16-byte result shifted to the right
by constant values in ib from each intermediate result, and two 16-byte results
are stored in ymm1."
+"VPAND ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG DB
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise AND of ymm2, and ymm3/m256 and store result in ymm1."
+"VPANDN ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG DF
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise AND NOT of ymm2, and ymm3/m256 and store result in ymm1."
+"VPAVGB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG E0
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Average packed unsigned byte integers from ymm2, and ymm3/m256 with
rounding and store to ymm1."
+"VPAVGW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG E3
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Average packed unsigned word integers from ymm2, ymm3/m256 with
rounding to ymm1."
+"VPBLENDD xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.W0 02 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Select dwords from xmm2 and xmm3/m128 from mask specified in ib
and store the values into xmm1."
+"VPBLENDD ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.W0 02 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Select dwords from ymm2 and ymm3/m256 from mask specified in ib
and store the values into ymm1."
+"VPBLENDVB ymm1, ymm2, ymm3/m256, ymm4","VEX.256.66.0F3A.W0 4C /r
/is4","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib[7:4]","","Select byte values from ymm2 and ymm3/m256
from mask specified in the high bit of each byte in ymm4 and store the values
into ymm1."
+"VPBLENDW ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.WIG 0E /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Select words from ymm2 and ymm3/m256 from mask specified in ib
and store the values into ymm1."
+"VPBROADCASTB xmm1, xmm2/m8","VEX.128.66.0F38.W0 78
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast a byte integer in the source operand to sixteen
locations in xmm1."
+"VPBROADCASTB ymm1, xmm2/m8","VEX.256.66.0F38.W0 78
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast a byte integer in the source operand to thirty-two
locations in ymm1."
+"VPBROADCASTD xmm1, xmm2/m32","VEX.128.66.0F38.W0 58
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast a dword integer in the source operand to four
locations in xmm1."
+"VPBROADCASTD ymm1, xmm2/m32","VEX.256.66.0F38.W0 58
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast a dword integer in the source operand to eight
locations in ymm1."
+"VPBROADCASTQ xmm1, xmm2/m64","VEX.128.66.0F38.W0 59
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast a qword element in source operand to two locations in
xmm1."
+"VPBROADCASTQ ymm1, xmm2/m64","VEX.256.66.0F38.W0 59
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast a qword element in source operand to four locations in
ymm1."
+"VPBROADCASTW xmm1, xmm2/m16","VEX.128.66.0F38.W0 79
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast a word integer in the source operand to eight
locations in xmm1."
+"VPBROADCASTW ymm1, xmm2/m16","VEX.256.66.0F38.W0 79
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast a word integer in the source operand to sixteen
locations in ymm1."
+"VPCMPEQB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 74
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed bytes in ymm3/m256 and ymm2 for equality."
+"VPCMPEQD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 76
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed doublewords in ymm3/m256 and ymm2 for equality."
+"VPCMPEQQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 29
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed quadwords in ymm3/m256 and ymm2 for equality."
+"VPCMPEQW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 75
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed words in ymm3/m256 and ymm2 for equality."
+"VPCMPGTB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 64
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed byte integers in ymm2 and ymm3/m256 for
greater than."
+"VPCMPGTD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 66
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed doubleword integers in ymm2 and ymm3/m256 for
greater than."
+"VPCMPGTQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 37
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed qwords in ymm2 and ymm3/m256 for greater
than."
+"VPCMPGTW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 65
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed word integers in ymm2 and ymm3/m256 for
greater than."
+"VPERM2I128 ymm1, ymm2, ymm3/m256, ib","VEX.256.66.0F3A.W0 46 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","ib","","Permute 128-bit integer data in ymm2 and ymm3/mem using controls
from ib and store result in ymm1."
+"VPERMD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 36
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Permute doublewords in ymm3/m256 using indices in ymm2 and store
the result in ymm1."
+"VPERMPD ymm1, ymm2/m256, ib","VEX.256.66.0F3A.W1 01 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Permute double-precision floating-point elements in ymm2/m256
using indices in ib and store the result in ymm1."
+"VPERMPS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 16
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Permute single-precision floating-point elements in ymm3/m256 using
indices in ymm2 and store the result in ymm1."
+"VPERMQ ymm1, ymm2/m256, ib","VEX.256.66.0F3A.W1 00 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Permute qwords in ymm2/m256 using indices in ib and store the
result in ymm1."
+"VPGATHERDD xmm1, vm32x/i32x4, xmm2","VEX.128.66.0F38.W0 90
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using dword
indices specified in vm32x, gather dword val-ues from memory conditioned on
mask specified by xmm2. Conditionally gathered elements are merged into xmm1."
+"VPGATHERDD ymm1, vm32y/i32x8, ymm2","VEX.256.66.0F38.W0 90
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using dword
indices specified in vm32y, gather dword val-ues from memory conditioned on
mask specified by ymm2. Conditionally gathered elements are merged into ymm1."
+"VPGATHERDQ xmm1, vm32x/i64x2, xmm2","VEX.128.66.0F38.W1 90
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using dword
indices specified in vm32x, gather qword val-ues from memory conditioned on
mask specified by xmm2. Conditionally gathered elements are merged into xmm1."
+"VPGATHERDQ ymm1, vm32x/i64x4, ymm2","VEX.256.66.0F38.W1 90
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using dword
indices specified in vm32x, gather qword val-ues from memory conditioned on
mask specified by ymm2. Conditionally gathered elements are merged into ymm1."
+"VPGATHERQD xmm1, vm64x/i32x2, xmm2","VEX.128.66.0F38.W0 91
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using qword
indices specified in vm64x, gather dword val-ues from memory conditioned on
mask specified by xmm2. Conditionally gathered elements are merged into xmm1."
+"VPGATHERQD xmm1, vm64y/i32x4, xmm2","VEX.256.66.0F38.W0 91
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using qword
indices specified in vm64y, gather dword val-ues from memory conditioned on
mask specified by xmm2. Conditionally gathered elements are merged into xmm1."
+"VPGATHERQQ xmm1, vm64x/i64x2, xmm2","VEX.128.66.0F38.W1 91
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using qword
indices specified in vm64x, gather qword val-ues from memory conditioned on
mask specified by xmm2. Conditionally gathered elements are merged into xmm1."
+"VPGATHERQQ ymm1, vm64y/i64x4, ymm2","VEX.256.66.0F38.W1 91
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","VEX.vvvv (r, w)","","","Using qword
indices specified in vm64y, gather qword val-ues from memory conditioned on
mask specified by ymm2. Conditionally gathered elements are merged into ymm1."
+"VPHADDD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 02
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add 32-bit signed integers horizontally, pack to ymm1."
+"VPHADDSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 03
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add 16-bit signed integers horizontally, pack saturated integers to
ymm1."
+"VPHADDW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 01
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Add 16-bit signed integers horizontally, pack to ymm1."
+"VPHSUBD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 06
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Subtract 32-bit signed integers horizontally, pack
to ymm1."
+"VPHSUBSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 07
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Subtract 16-bit signed integer horizontally, pack
saturated integers to ymm1."
+"VPHSUBW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 05
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Subtract 16-bit signed integers horizontally, pack
to ymm1."
+"VPMADDUBSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 04
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply signed and unsigned bytes, add horizontal pair of signed
words, pack saturated signed-words to ymm1."
+"VPMADDWD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG F5
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed word integers in ymm2 by the packed word
integers in ymm3/m256, add adjacent doubleword results, and store in ymm1."
+"VPMASKMOVD xmm1, xmm2, m128","VEX.128.66.0F38.W0 8C
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Conditionally load dword values from m128 using mask in xmm2 and
store in xmm1."
+"VPMASKMOVD ymm1, ymm2, m256","VEX.256.66.0F38.W0 8C
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Conditionally load dword values from m256 using mask in ymm2 and
store in ymm1."
+"VPMASKMOVD m128, xmm1, xmm2","VEX.128.66.0F38.W0 8E
/r","Valid","Valid","Invalid","AVX2","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Conditionally store dword values from xmm2 using mask in xmm1."
+"VPMASKMOVD m256, ymm1, ymm2","VEX.256.66.0F38.W0 8E
/r","Valid","Valid","Invalid","AVX2","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Conditionally store dword values from ymm2 using mask in ymm1."
+"VPMASKMOVQ xmm1, xmm2, m128","VEX.128.66.0F38.W1 8C
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Conditionally load qword values from m128 using mask in xmm2 and
store in xmm1."
+"VPMASKMOVQ ymm1, ymm2, m256","VEX.256.66.0F38.W1 8C
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Conditionally load qword values from m256 using mask in ymm2 and
store in ymm1."
+"VPMASKMOVQ m128, xmm1, xmm2","VEX.128.66.0F38.W1 8E
/r","Valid","Valid","Invalid","AVX2","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Conditionally store qword values from xmm2 using mask in xmm1."
+"VPMASKMOVQ m256, ymm1, ymm2","VEX.256.66.0F38.W1 8E
/r","Valid","Valid","Invalid","AVX2","ModRM:r/m (w)","VEX.vvvv (r)","ModRM:reg
(r)","","","Conditionally store qword values from ymm2 using mask in ymm1."
+"VPMAXSB ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 3C
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed byte integers in ymm2 and ymm3/m256 and store
packed maximum values in ymm1."
+"VPMAXSD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 3D
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed dword integers in ymm2 and ymm3/m256 and
store packed maximum values in ymm1."
+"VPMAXSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG EE
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed word integers in ymm3/m256 and ymm2 and store
packed maximum values in ymm1."
+"VPMAXUB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG DE
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned byte integers in ymm2 and ymm3/m256 and
store packed maximum values in ymm1."
+"VPMAXUD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 3F
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned dword integers in ymm2 and ymm3/m256 and
store packed maximum values in ymm1."
+"VPMAXUW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 3E
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned word integers in ymm3/m256 and ymm2 and
store maximum packed values in ymm1."
+"VPMINSB ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 38
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed byte integers in ymm2 and ymm3/m256 and store
packed minimum values in ymm1."
+"VPMINSD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 39
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed dword integers in ymm2 and ymm3/m128 and
store packed minimum values in ymm1."
+"VPMINSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG EA
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed signed word integers in ymm3/m256 and ymm2 and
return packed minimum values in ymm1."
+"VPMINUB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG DA
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned byte integers in ymm2 and ymm3/m256 and
store packed minimum values in ymm1."
+"VPMINUD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 3B
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned dword integers in ymm2 and ymm3/m256 and
store packed minimum values in ymm1."
+"VPMINUW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 3A
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Compare packed unsigned word integers in ymm3/m256 and ymm2 and
return packed minimum values in ymm1."
+"VPMOVMSKB r32, ymm1","VEX.256.66.0F.WIG D7
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move a 32-bit mask of ymm1 to reg. The upper bits of r are
zeroed."
+"VPMOVSXBD ymm1, xmm2/m64","VEX.256.66.0F38.WIG 21
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 8 packed 8-bit integers in the low 8 bytes of
xmm2/m64 to 8 packed 32-bit integers in ymm1."
+"VPMOVSXBQ ymm1, xmm2/m32","VEX.256.66.0F38.WIG 22
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 4 packed 8-bit integers in the low 4 bytes of
xmm2/m32 to 4 packed 64-bit integers in ymm1."
+"VPMOVSXBW ymm1, xmm2/m128","VEX.256.66.0F38.WIG 20
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 16 packed 8-bit integers in xmm2/m128 to 16 packed
16-bit integers in ymm1."
+"VPMOVSXDQ ymm1, xmm2/m128","VEX.256.66.0F38.WIG 25
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 4 packed 32-bit integers in the low 16 bytes of
xmm2/m128 to 4 packed 64-bit integers in ymm1."
+"VPMOVSXWD ymm1, xmm2/m128","VEX.256.66.0F38.WIG 23
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 8 packed 16-bit integers in the low 16 bytes of
xmm2/m128 to 8 packed 32-bit integers in ymm1."
+"VPMOVSXWQ ymm1, xmm2/m64","VEX.256.66.0F38.WIG 24
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 4 packed 16-bit integers in the low 8 bytes of
xmm2/m64 to 4 packed 64-bit integers in ymm1."
+"VPMOVZXBD ymm1, xmm2/m64","VEX.256.66.0F38.WIG 31
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 8 packed 8-bit integers in the low 8 bytes of
xmm2/m64 to 8 packed 32-bit integers in ymm1."
+"VPMOVZXBQ ymm1, xmm2/m32","VEX.256.66.0F38.WIG 32
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 4 packed 8-bit integers in the low 4 bytes of
xmm2/m32 to 4 packed 64-bit integers in ymm1."
+"VPMOVZXBW ymm1, xmm2/m128","VEX.256.66.0F38.WIG 30
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 16 packed 8-bit integers in xmm2/m128 to 16 packed
16-bit integers in ymm1."
+"VPMOVZXDQ ymm1, xmm2/m128","VEX.256.66.0F38.WIG 35
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 4 packed 32-bit integers in xmm2/m128 to 4 packed
64-bit integers in ymm1."
+"VPMOVZXWD ymm1, xmm2/m128","VEX.256.66.0F38.WIG 33
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 8 packed 16-bit integers xmm2/m128 to 8 packed
32-bit integers in ymm1."
+"VPMOVZXWQ ymm1, xmm2/m64","VEX.256.66.0F38.WIG 34
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 4 packed 16-bit integers in the low 8 bytes of
xmm2/m64 to 4 packed 64-bit integers in xmm1."
+"VPMULDQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 28
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply packed signed doubleword integers in ymm2 by packed signed
doubleword integers in ymm3/m256, and store the quadword results in ymm1."
+"VPMULHRSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 0B
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply 16-bit signed words, scale and round signed doublewords,
pack high 16 bits to ymm1."
+"VPMULHUW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG E4
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed unsigned word integers in ymm2 and ymm3/m256,
and store the high 16 bits of the results in ymm1."
+"VPMULHW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG E5
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed signed word integers in ymm2 and ymm3/m256, and
store the high 16 bits of the results in ymm1."
+"VPMULLD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 40
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed dword signed integers in ymm2 and ymm3/m256 and
store the low 32 bits of each product in ymm1."
+"VPMULLW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG D5
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply the packed signed word integers in ymm2 and ymm3/m256, and
store the low 16 bits of the results in ymm1."
+"VPMULUDQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG F4
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Multiply packed unsigned doubleword integers in ymm2 by packed
unsigned doubleword integers in ymm3/m256, and store the quadword results in
ymm1."
+"VPOR ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG EB
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise OR of ymm2/m256 and ymm3."
+"VPSADBW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG F6
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Computes the absolute differences of the packed unsigned byte
integers from ymm3/m256 and ymm2; then each consecutive 8 differences are
summed separately to produce four unsigned word integer results."
+"VPSHUFB ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 00
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shuffle bytes in ymm2 according to contents of ymm3/m256."
+"VPSHUFD ymm1, ymm2/m256, ib","VEX.256.66.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the doublewords in ymm2/m256 based on the encoding in
ib and store the result in ymm1."
+"VPSHUFHW ymm1, ymm2/m256, ib","VEX.256.F3.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the high words in ymm2/m256 based on the encoding in
ib and store the result in ymm1."
+"VPSHUFLW ymm1, ymm2/m256, ib","VEX.256.F2.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the low words in ymm2/m256 based on the encoding in ib
and store the result in ymm1."
+"VPSIGNB ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 08
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Negate packed byte integers in ymm2 if the corresponding sign in
ymm3/m256 is less than zero."
+"VPSIGND ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 0A
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Negate packed doubleword integers in ymm2 if the corresponding sign
in ymm3/m256 is less than zero."
+"VPSIGNW ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG 09
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Negate packed 16-bit integers in ymm2 if the corresponding sign in
ymm3/m256 is less than zero."
+"VPSLLD ymm1, ymm2, ib","VEX.256.66.0F.WIG 72 /6
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift doublewords in ymm2 left by ib while shifting in 0s."
+"VPSLLD ymm1, ymm2, xmm3/m128","VEX.256.66.0F.WIG F2
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in ymm2 left by amount specified in xmm3/m128
while shifting in 0s."
+"VPSLLDQ ymm1, ymm2, ib","VEX.256.66.0F.WIG 73 /7
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift ymm2 left by ib bytes while shifting in 0s and store
result in ymm1."
+"VPSLLQ ymm1, ymm2, ib","VEX.256.66.0F.WIG 73 /6
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift quadwords in ymm2 left by ib while shifting in 0s."
+"VPSLLQ ymm1, ymm2, xmm3/m128","VEX.256.66.0F.WIG F3
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift quadwords in ymm2 left by amount specified in xmm3/m128 while
shifting in 0s."
+"VPSLLVD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 47
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in xmm2 left by amount specified in the
corresponding element of xmm3/m128 while shifting in 0s."
+"VPSLLVD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 47
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in ymm2 left by amount specified in the
corresponding element of ymm3/m256 while shifting in 0s."
+"VPSLLVQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 47
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift quadwords in xmm2 left by amount specified in the
corresponding element of xmm3/m128 while shifting in 0s."
+"VPSLLVQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 47
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift quadwords in ymm2 left by amount specified in the
corresponding element of ymm3/m256 while shifting in 0s."
+"VPSLLW ymm1, ymm2, ib","VEX.256.66.0F.WIG 71 /6
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift words in ymm2 left by ib while shifting in 0s."
+"VPSLLW ymm1, ymm2, xmm3/m128","VEX.256.66.0F.WIG F1
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift words in ymm2 left by amount specified in xmm3/m128 while
shifting in 0s."
+"VPSRAD ymm1, ymm2, ib","VEX.256.66.0F.WIG 72 /4
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift doublewords in ymm2 right by ib while shifting in sign
bits."
+"VPSRAD ymm1, ymm2, xmm3/m128","VEX.256.66.0F.WIG E2
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in ymm2 right by amount specified in xmm3/m128
while shifting in sign bits."
+"VPSRAVD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 46
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in xmm2 right by amount specified in the
corresponding element of xmm3/m128 while shifting in sign bits."
+"VPSRAVD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 46
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in ymm2 right by amount specified in the
corresponding element of ymm3/m256 while shifting in sign bits."
+"VPSRAW ymm1, ymm2, ib","VEX.256.66.0F.WIG 71 /4
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift words in ymm2 right by ib while shifting in sign bits."
+"VPSRAW ymm1, ymm2, xmm3/m128","VEX.256.66.0F.WIG E1
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift words in ymm2 right by amount specified in xmm3/m128 while
shifting in sign bits."
+"VPSRLD ymm1, ymm2, ib","VEX.256.66.0F.WIG 72 /2
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift doublewords in ymm2 right by ib while shifting in 0s."
+"VPSRLD ymm1, ymm2, xmm3/m128","VEX.256.66.0F.WIG D2
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in ymm2 right by amount specified in xmm3/m128
while shifting in 0s."
+"VPSRLDQ ymm1, ymm2, ib","VEX.256.66.0F.WIG 73 /3
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift ymm1 right by ib bytes while shifting in 0s."
+"VPSRLQ ymm1, ymm2, ib","VEX.256.66.0F.WIG 73 /2
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift quadwords in ymm2 right by ib while shifting in 0s."
+"VPSRLQ ymm1, ymm2, xmm3/m128","VEX.256.66.0F.WIG D3
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift quadwords in ymm2 right by amount specified in xmm3/m128
while shifting in 0s."
+"VPSRLVD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 45
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in xmm2 right by amount specified in the
corresponding element of xmm3/m128 while shifting in 0s."
+"VPSRLVD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 45
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift doublewords in ymm2 right by amount specified in the
corresponding element of ymm3/m256 while shifting in 0s."
+"VPSRLVQ xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 45
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift quadwords in xmm2 right by amount specified in the
corresponding element of xmm3/m128 while shifting in 0s."
+"VPSRLVQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 45
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift quadwords in ymm2 right by amount specified in the
corresponding element of ymm3/m256 while shifting in 0s."
+"VPSRLW ymm1, ymm2, ib","VEX.256.66.0F.WIG 71 /2
ib","Valid","Valid","Invalid","AVX2","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","","Shift words in ymm2 right by ib while shifting in 0s."
+"VPSRLW ymm1, ymm2, xmm3/m128","VEX.256.66.0F.WIG D1
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Shift words in ymm2 right by amount specified in xmm3/m128 while
shifting in 0s."
+"VPSUBB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG F8
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed byte integers in ymm3/m256 from ymm2."
+"VPSUBD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG FA
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed doubleword integers in ymm3/m256 from ymm2."
+"VPSUBQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG FB
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed quadword integers in ymm3/m256 from ymm2."
+"VPSUBSB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG E8
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed signed byte integers in ymm3/m256 from packed
signed byte integers in ymm2 and saturate results."
+"VPSUBSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG E9
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed signed word integers in ymm3/m256 from packed
signed word integers in ymm2 and saturate results."
+"VPSUBUSB ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG D8
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed unsigned byte integers in ymm3/m256 from packed
unsigned byte integers in ymm2 and saturate result."
+"VPSUBUSW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG D9
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed unsigned word integers in ymm3/m256 from packed
unsigned word integers in ymm2 and saturate result."
+"VPSUBW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG F9
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Subtract packed word integers in ymm3/m256 from ymm2."
+"VPUNPCKHBW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 68
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave high-order bytes from ymm2 and ymm3/m256 into ymm1
register."
+"VPUNPCKHDQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 6A
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave high-order doublewords from ymm2 and ymm3/m256 into ymm1
register."
+"VPUNPCKHQDQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 6D
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave high-order quadword from ymm2 and ymm3/m256 into ymm1
register."
+"VPUNPCKHWD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 69
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave high-order words from ymm2 and ymm3/m256 into ymm1
register."
+"VPUNPCKLBW ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 60
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave low-order bytes from ymm2 and ymm3/m256 into ymm1
register."
+"VPUNPCKLDQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 62
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave low-order doublewords from ymm2 and ymm3/m256 into ymm1
register."
+"VPUNPCKLQDQ ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 6C
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave low-order quadword from ymm2 and ymm3/m256 into ymm1
register."
+"VPUNPCKLWD ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG 61
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Interleave low-order words from ymm2 and ymm3/m256 into ymm1
register."
+"VPXOR ymm1, ymm2, ymm3/m256","VEX.256.66.0F.WIG EF
/r","Valid","Valid","Invalid","AVX2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise XOR of ymm3/m256 and ymm2."
diff --git a/disas/x86-data/x86_avx5124fmaps.csv
b/disas/x86-data/x86_avx5124fmaps.csv
new file mode 100644
index 000000000000..2eda2075c1f9
--- /dev/null
+++ b/disas/x86-data/x86_avx5124fmaps.csv
@@ -0,0 +1,5 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"V4FMADDPS zmm{k}{z},zmm{rs4},m128","EVEX.512.f2.0F38.W0 9a
/r","Valid","Valid","Invalid","AVX5124FMAPS","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1_4X","Multiply packed single-precision
floating-point values from source register block indicated by zmm2 by values
from m128 and accumulate the result in zmm1."
+"V4FMADDSS xmm{k}{z},xmm{rs4},m128","EVEX.LIG.f2.0F38.W0 9b
/r","Valid","Valid","Invalid","AVX5124FMAPS","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1_4X","Multiply scalar single-precision
floating-point values from source register block indicated by xmm2 by values
from m128 and accumulate the result in xmm1."
+"V4FNMADDPS zmm{k}{z},zmm{rs4},m128","EVEX.512.f2.0F38.W0 aa
/r","Valid","Valid","Invalid","AVX5124FMAPS","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1_4X","Multiply and negate packed
single-precision floating-point values from source register block indicated by
zmm2 by values from m128 and accumulate the result in zmm1."
+"V4FNMADDSS xmm{k}{z},xmm{rs4},m128","EVEX.LIG.f2.0F38.W0 ab
/r","Valid","Valid","Invalid","AVX5124FMAPS","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1_4X","Multiply and negate scalar
single-precision floating-point values from source register block indicated by
xmm2 by values from m128 and accumulate the result in xmm1."
diff --git a/disas/x86-data/x86_avx5124vnniw.csv
b/disas/x86-data/x86_avx5124vnniw.csv
new file mode 100644
index 000000000000..f215738e1091
--- /dev/null
+++ b/disas/x86-data/x86_avx5124vnniw.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VP4DPWSSD zmm{k}{z},zmm{rs4},m128","EVEX.512.f2.0F38.W0 52
/r","Valid","Valid","Invalid","AVX5124VNNIW","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1_4X","Multiply signed words from source register
block indicated by zmm2 by signed words from m128 and accumulate resulting
signed dwords in zmm1."
+"VP4DPWSSDS zmm{k}{z},zmm{rs4},m128","EVEX.512.f2.0F38.W0 53
/r","Valid","Valid","Invalid","AVX5124VNNIW","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1_4X","Multiply signed words from source register
block indicated by zmm2 by signed words from m128 and accumulate the resulting
dword results with signed saturation in zmm1."
diff --git a/disas/x86-data/x86_avx512b.csv b/disas/x86-data/x86_avx512b.csv
new file mode 100644
index 000000000000..7e95f90fe46f
--- /dev/null
+++ b/disas/x86-data/x86_avx512b.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPEXTRW r32/m16, xmm2, ib","EVEX.128.66.0F3A.WIG 15 /r
ib","Valid","Valid","Invalid","AVX512B","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple1 Scalar","Extract a word integer value from xmm2 at the
source word offset specified by ib into reg or m16. The upper bits of r are
zeroed."
+"VPEXTRW r32, xmm1, ib","EVEX.128.66.0F.WIG C5 /r
ib","Valid","Valid","Invalid","AVX512B","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Extract the word specified by ib from xmm1 and move it to reg,
bits 15:0. Zero-extend the result. The upper bits of r are zeroed."
diff --git a/disas/x86-data/x86_avx512bf16.csv
b/disas/x86-data/x86_avx512bf16.csv
new file mode 100644
index 000000000000..91ad8dfb7703
--- /dev/null
+++ b/disas/x86-data/x86_avx512bf16.csv
@@ -0,0 +1,10 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VCVTNE2PS2BF16 xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.f2.0F38.W0 72
/r","Valid","Valid","Invalid","AVX512VL AVX512BF16","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Convert packed single data from xmm2 and
xmm3/m128/m32bcst to packed BF16 data in xmm1 with writemask k1."
+"VCVTNE2PS2BF16 ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.f2.0F38.W0 72
/r","Valid","Valid","Invalid","AVX512VL AVX512BF16","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Convert packed single data from ymm2 and
ymm3/m256/m32bcst to packed BF16 data in ymm1 with writemask k1."
+"VCVTNE2PS2BF16 zmm{k}{z},zmm,zmm/m512/m32bcst","EVEX.512.f2.0F38.W0 72
/r","Valid","Valid","Invalid","AVX512BF16","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Convert packed single data from zmm2 and
zmm3/m512/m32bcst to packed BF16 data in zmm1 with writemask k1."
+"VCVTNEPS2BF16 xmm{k}{z},xmm/m128/m32bcst","EVEX.128.f3.0F38.W0 72
/r","Valid","Valid","Invalid","AVX512VL AVX512BF16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full","Convert packed single data from xmm2/m128 to packed BF16
data in xmm1 with writemask k1."
+"VCVTNEPS2BF16 xmm{k}{z},ymm/m256/m32bcst","EVEX.256.f3.0F38.W0 72
/r","Valid","Valid","Invalid","AVX512VL AVX512BF16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full","Convert packed single data from ymm2/m256 to packed BF16
data in xmm1 with writemask k1."
+"VCVTNEPS2BF16 ymm{k}{z},zmm/m512/m32bcst","EVEX.512.f3.0F38.W0 72
/r","Valid","Valid","Invalid","AVX512BF16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full","Convert packed single data from zmm2/m512 to packed BF16
data in ymm1 with writemask k1."
+"VDPBF16PS xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.f3.0F38.W0 52
/r","Valid","Valid","Invalid","AVX512VL AVX512BF16","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply BF16 pairs from xmm2 and xmm3/m128,
and accumulate the resulting packed single precision results in xmm1 with
writemask k1."
+"VDPBF16PS ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.f3.0F38.W0 52
/r","Valid","Valid","Invalid","AVX512VL AVX512BF16","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply BF16 pairs from ymm2 and ymm3/m256,
and accumulate the resulting packed single precision results in ymm1 with
writemask k1."
+"VDPBF16PS zmm{k}{z},zmm,zmm/m512/m32bcst","EVEX.512.f3.0F38.W0 52
/r","Valid","Valid","Invalid","AVX512BF16","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply BF16 pairs from zmm2 and zmm3/m512,
and accumulate the resulting packed single precision results in zmm1 with
writemask k1."
diff --git a/disas/x86-data/x86_avx512bitalg.csv
b/disas/x86-data/x86_avx512bitalg.csv
new file mode 100644
index 000000000000..cf92160caacb
--- /dev/null
+++ b/disas/x86-data/x86_avx512bitalg.csv
@@ -0,0 +1,10 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPOPCNTB xmm{k}{z},xmm/m128","EVEX.128.66.0F38.W0 54
/r","Valid","Valid","Invalid","AVX512VL AVX512BITALG","ModRM:reg
(w)","ModRM:r/m (r)","","","Full Mem","Counts the number of bits set to one in
xmm2/m128 and puts the result in xmm1 with writemask k1."
+"VPOPCNTB ymm{k}{z},ymm/m256","EVEX.256.66.0F38.W0 54
/r","Valid","Valid","Invalid","AVX512VL AVX512BITALG","ModRM:reg
(w)","ModRM:r/m (r)","","","Full Mem","Counts the number of bits set to one in
ymm2/m256 and puts the result in ymm1 with writemask k1."
+"VPOPCNTB zmm{k}{z},zmm/m512","EVEX.512.66.0F38.W0 54
/r","Valid","Valid","Invalid","AVX512BITALG","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Mem","Counts the number of bits set to one in zmm2/m512 and
puts the result in zmm1 with writemask k1."
+"VPOPCNTW xmm{k}{z},xmm/m128","EVEX.128.66.0F38.W1 54
/r","Valid","Valid","Invalid","AVX512VL AVX512BITALG","ModRM:reg
(w)","ModRM:r/m (r)","","","Full Mem","Counts the number of bits set to one in
xmm2/m128 and puts the result in xmm1 with writemask k1."
+"VPOPCNTW ymm{k}{z},ymm/m256","EVEX.256.66.0F38.W1 54
/r","Valid","Valid","Invalid","AVX512VL AVX512BITALG","ModRM:reg
(w)","ModRM:r/m (r)","","","Full Mem","Counts the number of bits set to one in
ymm2/m256 and puts the result in ymm1 with writemask k1."
+"VPOPCNTW zmm{k}{z},zmm/m512","EVEX.512.66.0F38.W1 54
/r","Valid","Valid","Invalid","AVX512BITALG","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Mem","Counts the number of bits set to one in zmm2/m512 and
puts the result in zmm1 with writemask k1."
+"VPSHUFBITQMB k{k},xmm,xmm/m128","EVEX.128.66.0F38.W0 8f
/r","Valid","Valid","Invalid","AVX512VL AVX512BITALG","ModRM:reg
(w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Extract values in xmm2
using control bits of xmm3/m128 with writemask k2 and leave the result in mask
register k1."
+"VPSHUFBITQMB k{k},ymm,ymm/m256","EVEX.256.66.0F38.W0 8f
/r","Valid","Valid","Invalid","AVX512VL AVX512BITALG","ModRM:reg
(w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Extract values in ymm2
using control bits of ymm3/m256 with writemask k2 and leave the result in mask
register k1."
+"VPSHUFBITQMB k{k},zmm,zmm/m512","EVEX.512.66.0F38.W0 8f
/r","Valid","Valid","Invalid","AVX512BITALG","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Extract values in zmm2 using control bits
of zmm3/m512 with writemask k2 and leave the result in mask register k1."
diff --git a/disas/x86-data/x86_avx512bw.csv b/disas/x86-data/x86_avx512bw.csv
new file mode 100644
index 000000000000..e59af0d29b1e
--- /dev/null
+++ b/disas/x86-data/x86_avx512bw.csv
@@ -0,0 +1,291 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"KADDD k1, k2, k3","VEX.L1.66.0F.W1 4A
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Add 32 bits masks in k2
and k3 and place result in k1."
+"KADDQ k1, k2, k3","VEX.L1.0F.W1 4A
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Add 64 bits masks in k2
and k3 and place result in k1."
+"KANDD k1, k2, k3","VEX.L1.66.0F.W1 41
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise AND 32 bits masks
k2 and k3 and place result in k1."
+"KANDND k1, k2, k3","VEX.L1.66.0F.W1 42
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise AND NOT 32 bits
masks k2 and k3 and place result in k1."
+"KANDNQ k1, k2, k3","VEX.L1.0F.W1 42
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise AND NOT 64 bits
masks k2 and k3 and place result in k1."
+"KANDQ k1, k2, k3","VEX.L1.0F.W1 41
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise AND 64 bits masks
k2 and k3 and place result in k1."
+"KMOVD k1, k2/m32","VEX.L0.66.0F.W1 90
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move 32 bits mask from k2/m32 and store the result in k1."
+"KMOVD m32, k1","VEX.L0.66.0F.W1 91
/r","Valid","Valid","Invalid","AVX512BW","ModRM:r/m (w, ModRM:[7:6] must not be
11b)","ModRM:reg (r)","","","","Move 32 bits mask from k1 and store the result
in m32."
+"KMOVD k1, rw","VEX.L0.F2.0F.W0 92
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Move 32 bits mask from r to k1."
+"KMOVD rw, k1","VEX.L0.F2.0F.W0 93
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Move 32 bits mask from k1 to r."
+"KMOVQ k1, k2/m64","VEX.L0.0F.W1 90
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move 64 bits mask from k2/m64 and store the result in k1."
+"KMOVQ m64, k1","VEX.L0.0F.W1 91
/r","Valid","Valid","Invalid","AVX512BW","ModRM:r/m (w, ModRM:[7:6] must not be
11b)","ModRM:reg (r)","","","","Move 64 bits mask from k1 and store the result
in m64."
+"KMOVQ k1, rw","VEX.L0.F2.0F.W1 92
/r","Valid","Invalid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Move 64 bits mask from r to k1."
+"KMOVQ rw, k1","VEX.L0.F2.0F.W1 93
/r","Valid","Invalid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Move 64 bits mask from k1 to r."
+"KNOTD k1, k2","VEX.L0.66.0F.W1 44
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Bitwise NOT of 32 bits mask k2."
+"KNOTQ k1, k2","VEX.L0.0F.W1 44
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Bitwise NOT of 64 bits mask k2."
+"KORD k1, k2, k3","VEX.L1.66.0F.W1 45
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise OR 32 bits masks
k2 and k3 and place result in k1."
+"KORQ k1, k2, k3","VEX.L1.0F.W1 45
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise OR 64 bits masks
k2 and k3 and place result in k1."
+"KORTESTD k1, k2","VEX.L0.66.0F.W1 98
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Bitwise OR 32 bits masks k1 and k2 and
update ZF and CF accordingly."
+"KORTESTQ k1, k2","VEX.L0.0F.W1 98
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Bitwise OR 64 bits masks k1 and k2 and
update ZF and CF accordingly."
+"KSHIFTLD k1, k2, ib","VEX.L0.66.0F3A.W0 33 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","ib","","","Shift left 32 bits in k2 by immediate and
write result in k1."
+"KSHIFTLQ k1, k2, ib","VEX.L0.66.0F3A.W1 33 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","ib","","","Shift left 64 bits in k2 by immediate and
write result in k1."
+"KSHIFTRD k1, k2, ib","VEX.L0.66.0F3A.W0 31 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","ib","","","Shift right 32 bits in k2 by immediate
and write result in k1."
+"KSHIFTRQ k1, k2, ib","VEX.L0.66.0F3A.W1 31 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","ib","","","Shift right 64 bits in k2 by immediate
and write result in k1."
+"KTESTD k1, k2","VEX.L0.66.0F.W1 99
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (r)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Set ZF and CF depending on sign bit AND and
ANDN of 32 bits mask register sources."
+"KTESTQ k1, k2","VEX.L0.0F.W1 99
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (r)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Set ZF and CF depending on sign bit AND and
ANDN of 64 bits mask register sources."
+"KUNPCKDQ k1, k2, k3","VEX.L1.0F.W1 4B
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Unpack and interleave 32
bits masks in k2 and k3 and write quadword result in k1."
+"KUNPCKWD k1, k2, k3","VEX.L1.0F.W0 4B
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Unpack and interleave 16
bits in k2 and k3 and write double-word result in k1."
+"KXNORD k1, k2, k3","VEX.L1.66.0F.W1 46
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise XNOR 32 bits masks
k2 and k3 and place result in k1."
+"KXNORQ k1, k2, k3","VEX.L1.0F.W1 46
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise XNOR 64 bits masks
k2 and k3 and place result in k1."
+"KXORD k1, k2, k3","VEX.L1.66.0F.W1 47
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise XOR 32 bits masks
k2 and k3 and place result in k1."
+"KXORQ k1, k2, k3","VEX.L1.0F.W1 47
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise XOR 64 bits masks
k2 and k3 and place result in k1."
+"VDBPSADBW xmm1 {k1}{z}, xmm2, xmm3/m128, ib","EVEX.128.66.0F3A.W0 42 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","","Compute packed SAD word results of unsigned bytes
in dword block from xmm2 with unsigned bytes of dword blocks transformed from
xmm3/m128 using the shuffle controls in ib. Results are written to xmm1 under
the writemask k1."
+"VDBPSADBW ymm1 {k1}{z}, ymm2, ymm3/m256, ib","EVEX.256.66.0F3A.W0 42 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","","Compute packed SAD word results of unsigned bytes
in dword block from ymm2 with unsigned bytes of dword blocks transformed from
ymm3/m256 using the shuffle controls in ib. Results are written to ymm1 under
the writemask k1."
+"VDBPSADBW zmm1 {k1}{z}, zmm2, zmm3/m512, ib","EVEX.512.66.0F3A.W0 42 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","","Compute packed SAD word results of unsigned bytes
in dword block from zmm2 with unsigned bytes of dword blocks transformed from
zmm3/m512 using the shuffle controls in ib. Results are written to zmm1 under
the writemask k1."
+"VMOVDQU16 xmm1 {k1}{z}, xmm2/m128","EVEX.128.F2.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed word integer values from
xmm2/m128 to xmm1 using writemask k1."
+"VMOVDQU16 ymm1 {k1}{z}, ymm2/m256","EVEX.256.F2.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed word integer values from
ymm2/m256 to ymm1 using writemask k1."
+"VMOVDQU16 zmm1 {k1}{z}, zmm2/m512","EVEX.512.F2.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed word integer values from
zmm2/m512 to zmm1 using writemask k1."
+"VMOVDQU16 xmm2/m128 {k1}{z}, xmm1","EVEX.128.F2.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed word integer values from
xmm1 to xmm2/m128 using writemask k1."
+"VMOVDQU16 ymm2/m256 {k1}{z}, ymm1","EVEX.256.F2.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed word integer values from
ymm1 to ymm2/m256 using writemask k1."
+"VMOVDQU16 zmm2/m512 {k1}{z}, zmm1","EVEX.512.F2.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed word integer values from
zmm1 to zmm2/m512 using writemask k1."
+"VMOVDQU8 xmm1 {k1}{z}, xmm2/m128","EVEX.128.F2.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed byte integer values from
xmm2/m128 to xmm1 using writemask k1."
+"VMOVDQU8 ymm1 {k1}{z}, ymm2/m256","EVEX.256.F2.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed byte integer values from
ymm2/m256 to ymm1 using writemask k1."
+"VMOVDQU8 zmm1 {k1}{z}, zmm2/m512","EVEX.512.F2.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed byte integer values from
zmm2/m512 to zmm1 using writemask k1."
+"VMOVDQU8 xmm2/m128 {k1}{z}, xmm1","EVEX.128.F2.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed byte integer values from
xmm1 to xmm2/m128 using writemask k1."
+"VMOVDQU8 ymm2/m256 {k1}{z}, ymm1","EVEX.256.F2.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed byte integer values from
ymm1 to ymm2/m256 using writemask k1."
+"VMOVDQU8 zmm2/m512 {k1}{z}, zmm1","EVEX.512.F2.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed byte integer values from
zmm1 to zmm2/m512 using writemask k1."
+"VPABSB xmm1 {k1}{z}, xmm2/m128","EVEX.128.66.0F38.WIG 1C
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of bytes in xmm2/m128
and store UNSIGNED result in xmm1 using writemask k1."
+"VPABSB ymm1 {k1}{z}, ymm2/m256","EVEX.256.66.0F38.WIG 1C
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of bytes in ymm2/m256
and store UNSIGNED result in ymm1 using writemask k1."
+"VPABSB zmm1 {k1}{z}, zmm2/m512","EVEX.512.66.0F38.WIG 1C
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of bytes in zmm2/m512
and store UNSIGNED result in zmm1 using writemask k1."
+"VPABSW xmm1 {k1}{z}, xmm2/m128","EVEX.128.66.0F38.WIG 1D
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 16-bit integers in
xmm2/m128 and store UNSIGNED result in xmm1 using writemask k1."
+"VPABSW ymm1 {k1}{z}, ymm2/m256","EVEX.256.66.0F38.WIG 1D
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 16-bit integers in
xmm2/m256 and store UNSIGNED result in xmm1 using writemask k1."
+"VPABSW zmm1 {k1}{z}, zmm2/m512","EVEX.512.66.0F38.WIG 1D
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 16-bit integers in
xmm2/m512 and store UNSIGNED result in xmm1 using writemask k1."
+"VPACKSSDW xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 6B
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Converts packed signed doubleword
integers from xmm2 and from xmm3/m128/m32bcst into packed signed word integers
in xmm1 using signed saturation under writemask k1."
+"VPACKSSWB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 63
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Converts packed signed word integers
from xmm2 and from xmm3/m128 into packed signed byte integers in xmm1 using
signed saturation under writemask k1."
+"VPACKSSWB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG 63
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Converts packed signed word integers
from ymm2 and from ymm3/m256 into packed signed byte integers in ymm1 using
signed saturation under writemask k1."
+"VPACKSSWB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG 63
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Converts packed signed word integers
from zmm2 and from zmm3/m512 into packed signed byte integers in zmm1 using
signed saturation under writemask k1."
+"VPACKUSDW xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 2B
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Convert packed signed doubleword
integers from xmm2 and packed signed doubleword integers from xmm3/m128/m32bcst
into packed unsigned word integers in xmm1 using unsigned saturation under
writemask k1."
+"VPACKUSDW ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 2B
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Convert packed signed doubleword
integers from ymm2 and packed signed doubleword integers from ymm3/m256/m32bcst
into packed unsigned word integers in ymm1 using unsigned saturation under
writemask k1."
+"VPACKUSDW zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 2B
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Convert packed signed doubleword
integers from zmm2 and packed signed doubleword integers from zmm3/m512/m32bcst
into packed unsigned word integers in zmm1 using unsigned saturation under
writemask k1."
+"VPACKUSWB xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 67
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Converts signed word integers from
xmm2 and signed word integers from xmm3/m128 into unsigned byte integers in
xmm1 using unsigned saturation under writemask k1."
+"VPACKUSWB ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG 67
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Converts signed word integers from
ymm2 and signed word integers from ymm3/m256 into unsigned byte integers in
ymm1 using unsigned saturation under writemask k1."
+"VPACKUSWB zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG 67
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Converts signed word integers from
zmm2 and signed word integers from zmm3/m512 into unsigned byte integers in
zmm1 using unsigned saturation under writemask k1."
+"VPADDB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG FC
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed byte integers from xmm2,
and xmm3/m128 and store in xmm1 using writemask k1."
+"VPADDB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG FC
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed byte integers from zmm2,
and zmm3/m512 and store in xmm1 using writemask k1."
+"VPADDB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG FC
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed byte integers from ymm2,
and ymm3/m256 and store in ymm1 using writemask k1."
+"VPADDSB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG EC
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed signed byte integers from
xmm2, and xmm3/m128 and store the saturated results in xmm1 under writemask k1."
+"VPADDSB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG EC
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed signed byte integers from
ymm2, and ymm3/m256 and store the saturated results in ymm1 under writemask k1."
+"VPADDSB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG EC
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed signed byte integers from
zmm2, and zmm3/m512 and store the saturated results in zmm1 under writemask k1."
+"VPADDSW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG ED
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed signed word integers from
xmm2, and xmm3/m128 and store the saturated results in xmm1 under writemask k1."
+"VPADDSW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG ED
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed signed word integers from
ymm2, and ymm3/m256 and store the saturated results in ymm1 under writemask k1."
+"VPADDSW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG ED
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed signed word integers from
zmm2, and zmm3/m512 and store the saturated results in zmm1 under writemask k1."
+"VPADDUSB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG DC
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed unsigned byte integers
from xmm2,and xmm3/m128 and store the saturated results in xmm1 under writemask
k1."
+"VPADDUSB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG DC
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed unsigned byte integers
from ymm2,and ymm3/m256 and store the saturated results in ymm1 under writemask
k1."
+"VPADDUSB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG DC
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed unsigned byte integers
from zmm2,and zmm3/m512 and store the saturated results in zmm1 under writemask
k1."
+"VPADDUSW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG DD
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed unsigned word integers
from xmm2,and xmm3/m128 and store the saturated results in xmm1 under writemask
k1."
+"VPADDUSW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG DD
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed unsigned word integers
from ymm2,and ymm3/m256 and store the saturated results in ymm1 under writemask
k1."
+"VPADDUSW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG DD
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed unsigned word integers
from zmm2,and zmm3/m512 and store the saturated results in zmm1 under writemask
k1."
+"VPADDW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG FD
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed word integers from xmm2,
and xmm3/m128 and store in xmm1 using writemask k1."
+"VPADDW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG FD
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed word integers from ymm2,
and ymm3/m256 and store in ymm1 using writemask k1."
+"VPADDW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG FD
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Add packed word integers from zmm2,
and zmm3/m512 and store in xmm1 using writemask k1."
+"VPALIGNR xmm1 {k1}{z}, xmm2, xmm3/m128, ib","EVEX.128.66.0F3A.WIG 0F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","","Concatenate xmm2 and xmm3/m128 into a 32-byte
intermediate result, extract byte aligned result shifted to the right by
constant value in ib and result is stored in xmm1."
+"VPALIGNR ymm1 {k1}{z}, ymm2, ymm3/m256, ib","EVEX.256.66.0F3A.WIG 0F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","","Concatenate pairs of 16 bytes in ymm2 and
ymm3/m256 into 32-byte intermediate result, extract byte-aligned, 16-byte
result shifted to the right by constant values in ib from each intermediate
result, and two 16-byte results are stored in ymm1."
+"VPALIGNR zmm1 {k1}{z}, zmm2, zmm3/m512, ib","EVEX.512.66.0F3A.WIG 0F /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","","Concatenate pairs of 16 bytes in zmm2 and
zmm3/m512 into 32-byte intermediate result, extract byte-aligned, 16-byte
result shifted to the right by constant values in ib from each intermediate
result, and four 16-byte results are stored in zmm1."
+"VPAVGB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG E0
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Average packed unsigned byte
integers from xmm2, and xmm3/m128 with rounding and store to xmm1 under
writemask k1."
+"VPAVGB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG E0
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Average packed unsigned byte
integers from ymm2, and ymm3/m256 with rounding and store to ymm1 under
writemask k1."
+"VPAVGB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG E0
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Average packed unsigned byte
integers from zmm2, and zmm3/m512 with rounding and store to zmm1 under
writemask k1."
+"VPAVGW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG E3
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Average packed unsigned word
integers from xmm2, xmm3/m128 with rounding to xmm1 under writemask k1."
+"VPAVGW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG E3
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Average packed unsigned word
integers from ymm2, ymm3/m256 with rounding to ymm1 under writemask k1."
+"VPAVGW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG E3
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Average packed unsigned word
integers from zmm2, zmm3/m512 with rounding to zmm1 under writemask k1."
+"VPBLENDMB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.W0 66
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Blend byte integer vector xmm2 and
byte vector xmm3/m128 and store the result in xmm1, under control mask."
+"VPBLENDMB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.W0 66
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Blend byte integer vector ymm2 and
byte vector ymm3/m256 and store the result in ymm1, under control mask."
+"VPBLENDMB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.W0 66
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Blend byte integer vector zmm2 and
byte vector zmm3/m512 and store the result in zmm1, under control mask."
+"VPBLENDMW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.W1 66
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Blend word integer vector xmm2 and
word vector xmm3/m128 and store the result in xmm1, under control mask."
+"VPBLENDMW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.W1 66
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Blend word integer vector ymm2 and
word vector ymm3/m256 and store the result in ymm1, under control mask."
+"VPBLENDMW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.W1 66
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Blend word integer vector zmm2 and
word vector zmm3/m512 and store the result in zmm1, under control mask."
+"VPBROADCASTB xmm1{k1}{z}, xmm2/m8","EVEX.128.66.0F38.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a byte integer in the source operand to
locations in xmm1 subject to writemask k1."
+"VPBROADCASTB ymm1{k1}{z}, xmm2/m8","EVEX.256.66.0F38.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a byte integer in the source operand to
locations in ymm1 subject to writemask k1."
+"VPBROADCASTB zmm1{k1}{z}, xmm2/m8","EVEX.512.66.0F38.W0 78
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a byte integer in the source operand to
64 locations in zmm1 subject to writemask k1."
+"VPBROADCASTB xmm1 {k1}{z}, r32","EVEX.128.66.0F38.W0 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast an 8-bit value from a GPR to all bytes in
the 128-bit destination subject to writemask k1."
+"VPBROADCASTB ymm1 {k1}{z}, r32","EVEX.256.66.0F38.W0 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast an 8-bit value from a GPR to all bytes in
the 256-bit destination subject to writemask k1."
+"VPBROADCASTB zmm1 {k1}{z}, r32","EVEX.512.66.0F38.W0 7A
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast an 8-bit value from a GPR to all bytes in
the 512-bit destination subject to writemask k1."
+"VPBROADCASTW xmm1{k1}{z}, xmm2/m16","EVEX.128.66.0F38.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a word integer in the source operand to
locations in xmm1 subject to writemask k1."
+"VPBROADCASTW ymm1{k1}{z}, xmm2/m16","EVEX.256.66.0F38.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a word integer in the source operand to
locations in ymm1 subject to writemask k1."
+"VPBROADCASTW zmm1{k1}{z}, xmm2/m16","EVEX.512.66.0F38.W0 79
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a word integer in the source operand to
32 locations in zmm1 subject to writemask k1."
+"VPBROADCASTW xmm1 {k1}{z}, r32","EVEX.128.66.0F38.W0 7B
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 16-bit value from a GPR to all words in
the 128-bit destination subject to writemask k1."
+"VPBROADCASTW ymm1 {k1}{z}, r32","EVEX.256.66.0F38.W0 7B
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 16-bit value from a GPR to all words in
the 256-bit destination subject to writemask k1."
+"VPBROADCASTW zmm1 {k1}{z}, r32","EVEX.512.66.0F38.W0 7B
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 16-bit value from a GPR to all words in
the 512-bit destination subject to writemask k1."
+"VPCMPB k1 {k2}, xmm2, xmm3/m128, ib","EVEX.128.66.0F3A.W0 3F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed signed byte values
in xmm3/m128 and xmm2 using bits 2:0 of ib as a comparison predicate with
writemask k2 and leave the result in mask register k1."
+"VPCMPB k1 {k2}, ymm2, ymm3/m256, ib","EVEX.256.66.0F3A.W0 3F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed signed byte values
in ymm3/m256 and ymm2 using bits 2:0 of ib as a comparison predicate with
writemask k2 and leave the result in mask register k1."
+"VPCMPB k1 {k2}, zmm2, zmm3/m512, ib","EVEX.512.66.0F3A.W0 3F /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed signed byte values
in zmm3/m512 and zmm2 using bits 2:0 of ib as a comparison predicate with
writemask k2 and leave the result in mask register k1."
+"VPCMPEQB k1 {k2}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 74
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed bytes in xmm3/m128
and xmm2 for equality and set vector mask k1 to reflect the zero/nonzero status
of each element of the result, under writemask."
+"VPCMPEQB k1 {k2}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG 74
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed bytes in ymm3/m256
and ymm2 for equality and set vector mask k1 to reflect the zero/nonzero status
of each element of the result, under writemask."
+"VPCMPEQB k1 {k2}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG 74
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed bytes in zmm3/m512
and zmm2 for equality and set vector mask k1 to reflect the zero/nonzero status
of each element of the result, under writemask."
+"VPCMPEQW k1 {k2}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 75
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed words in xmm3/m128
and xmm2 for equality and set vector mask k1 to reflect the zero/nonzero status
of each element of the result, under writemask."
+"VPCMPEQW k1 {k2}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG 75
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed words in ymm3/m256
and ymm2 for equality and set vector mask k1 to reflect the zero/nonzero status
of each element of the result, under writemask."
+"VPCMPEQW k1 {k2}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG 75
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed words in zmm3/m512
and zmm2 for equality and set vector mask k1 to reflect the zero/nonzero status
of each element of the result, under writemask."
+"VPCMPGTB k1 {k2}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 64
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in xmm2 and xmm3/m128 for greater than,and set vector mask k1 to reflect the
zero/nonzero status of each element of the result,under writemask."
+"VPCMPGTB k1 {k2}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG 64
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in ymm2 and ymm3/m256 for greater than,and set vector mask k1 to reflect the
zero/nonzero status of each element of the result,under writemask."
+"VPCMPGTB k1 {k2}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG 64
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in zmm2 and zmm3/m512 for greater than,and set vector mask k1 to reflect the
zero/nonzero status of each element of the result,under writemask."
+"VPCMPGTW k1 {k2}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 65
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in xmm2 and xmm3/m128 for greater than,and set vector mask k1 to reflect the
zero/nonzero status of each element of the result,under writemask."
+"VPCMPGTW k1 {k2}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG 65
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in ymm2 and ymm3/m256 for greater than,and set vector mask k1 to reflect the
zero/nonzero status of each element of the result,under writemask."
+"VPCMPGTW k1 {k2}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG 65
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in zmm2 and zmm3/m512 for greater than,and set vector mask k1 to reflect the
zero/nonzero status of each element of the result,under writemask."
+"VPCMPUB k1 {k2}, xmm2, xmm3/m128, ib","EVEX.128.66.0F3A.W0 3E /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed unsigned byte
values in xmm3/m128 and xmm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPCMPUB k1 {k2}, ymm2, ymm3/m256, ib","EVEX.256.66.0F3A.W0 3E /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed unsigned byte
values in ymm3/m256 and ymm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPCMPUB k1 {k2}, zmm2, zmm3/m512, ib","EVEX.512.66.0F3A.W0 3E /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed unsigned byte
values in zmm3/m512 and zmm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPCMPUW k1 {k2}, xmm2, xmm3/m128, ib","EVEX.128.66.0F3A.W1 3E /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed unsigned word
integers in xmm3/m128 and xmm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPCMPUW k1 {k2}, ymm2, ymm3/m256, ib","EVEX.256.66.0F3A.W1 3E /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed unsigned word
integers in ymm3/m256 and ymm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPCMPUW k1 {k2}, zmm2, zmm3/m512, ib","EVEX.512.66.0F3A.W1 3E /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed unsigned word
integers in zmm3/m512 and zmm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPCMPW k1 {k2}, xmm2, xmm3/m128, ib","EVEX.128.66.0F3A.W1 3F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed signed word
integers in xmm3/m128 and xmm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPCMPW k1 {k2}, ymm2, ymm3/m256, ib","EVEX.256.66.0F3A.W1 3F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed signed word
integers in ymm3/m256 and ymm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPCMPW k1 {k2}, zmm2, zmm3/m512, ib","EVEX.512.66.0F3A.W1 3F /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector Mem","Compare packed signed word
integers in zmm3/m512 and zmm2 using bits 2:0 of ib as a comparison predicate
with writemask k2 and leave the result in mask register k1."
+"VPERMI2W xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.W1 75
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Permute word integers from two
tables in xmm3/m128 and xmm2 using indexes in xmm1 and store the result in xmm1
using writemask k1."
+"VPERMI2W ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.W1 75
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Permute word integers from two
tables in ymm3/m256 and ymm2 using indexes in ymm1 and store the result in ymm1
using writemask k1."
+"VPERMI2W zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.W1 75
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Permute word integers from two
tables in zmm3/m512 and zmm2 using indexes in zmm1 and store the result in zmm1
using writemask k1."
+"VPERMT2W xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.W1 7D
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Permute word integers from two tables in
xmm3/m128 and xmm1 using indexes in xmm2 and store the result in xmm1 using
writemask k1."
+"VPERMT2W ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.W1 7D
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Permute word integers from two tables in
ymm3/m256 and ymm1 using indexes in ymm2 and store the result in ymm1 using
writemask k1."
+"VPERMT2W zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.W1 7D
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Permute word integers from two tables in
zmm3/m512 and zmm1 using indexes in zmm2 and store the result in zmm1 using
writemask k1."
+"VPERMW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.W1 8D
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Permute word integers in xmm3/m128
using indexes in xmm2 and store the result in xmm1 using writemask k1."
+"VPERMW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.W1 8D
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Permute word integers in ymm3/m256
using indexes in ymm2 and store the result in ymm1 using writemask k1."
+"VPERMW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.W1 8D
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Permute word integers in zmm3/m512
using indexes in zmm2 and store the result in zmm1 using writemask k1."
+"VPEXTRB r32/m8, xmm2, ib","EVEX.128.66.0F3A.WIG 14 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple1 Scalar","Extract a byte integer value from xmm2 at the
source byte offset specified by ib into reg or m8. The upper bits of r are
zeroed."
+"VPINSRB xmm1, xmm2, r32/m8, ib","EVEX.128.66.0F3A.WIG 20 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Merge a byte integer value from r/m8
and rest from xmm2 into xmm1 at the byte offset in ib."
+"VPINSRW xmm1, xmm2, r32/m16, ib","EVEX.128.66.0F.WIG C4 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Insert a word integer value from r/m
and rest from xmm2 into xmm1 at the word offset in ib."
+"VPMADDUBSW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG 04
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply signed and unsigned bytes,
add horizontal pair of signed words, pack saturated signed-words to xmm1 under
writemask k1."
+"VPMADDUBSW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG 04
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply signed and unsigned bytes,
add horizontal pair of signed words, pack saturated signed-words to ymm1 under
writemask k1."
+"VPMADDUBSW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG 04
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply signed and unsigned bytes,
add horizontal pair of signed words, pack saturated signed-words to zmm1 under
writemask k1."
+"VPMADDWD xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG F5
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed word integers in
xmm2 by the packed word integers in xmm3/m128, add adjacent doubleword results,
and store in xmm1 under writemask k1."
+"VPMADDWD ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG F5
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed word integers in
ymm2 by the packed word integers in ymm3/m256, add adjacent doubleword results,
and store in ymm1 under writemask k1."
+"VPMADDWD zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG F5
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed word integers in
zmm2 by the packed word integers in zmm3/m512, add adjacent doubleword results,
and store in zmm1 under writemask k1."
+"VPMAXSB xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG 3C
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in xmm2 and xmm3/m128 and store packed maximum values in xmm1 under writemask
k1."
+"VPMAXSB ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG 3C
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in ymm2 and ymm3/m256 and store packed maximum values in ymm1 under writemask
k1."
+"VPMAXSB zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG 3C
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in zmm2 and zmm3/m512 and store packed maximum values in zmm1 under writemask
k1."
+"VPMAXSW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG EE
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in xmm2 and xmm3/m128 and store packed maximum values in xmm1 under writemask
k1."
+"VPMAXSW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG EE
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in ymm2 and ymm3/m256 and store packed maximum values in ymm1 under writemask
k1."
+"VPMAXSW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG EE
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in zmm2 and zmm3/m512 and store packed maximum values in zmm1 under writemask
k1."
+"VPMAXUB xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG DE
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned byte
integers in xmm2 and xmm3/m128 and store packed maximum values in xmm1 under
writemask k1."
+"VPMAXUB ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG DE
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned byte
integers in ymm2 and ymm3/m256 and store packed maximum values in ymm1 under
writemask k1."
+"VPMAXUB zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG DE
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned byte
integers in zmm2 and zmm3/m512 and store packed maximum values in zmm1 under
writemask k1."
+"VPMAXUW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG 3E
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned word
integers in xmm2 and xmm3/m128 and store packed maximum values in xmm1 under
writemask k1."
+"VPMAXUW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG 3E
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned word
integers in ymm2 and ymm3/m256 and store packed maximum values in ymm1 under
writemask k1."
+"VPMAXUW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG 3E
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned word
integers in zmm2 and zmm3/m512 and store packed maximum values in zmm1 under
writemask k1."
+"VPMINSB xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG 38
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in xmm2 and xmm3/m128 and store packed minimum values in xmm1 under writemask
k1."
+"VPMINSB ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG 38
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in ymm2 and ymm3/m256 and store packed minimum values in ymm1 under writemask
k1."
+"VPMINSB zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG 38
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed byte integers
in zmm2 and zmm3/m512 and store packed minimum values in zmm1 under writemask
k1."
+"VPMINSW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG EA
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in xmm2 and xmm3/m128 and store packed minimum values in xmm1 under writemask
k1."
+"VPMINSW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG EA
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in ymm2 and ymm3/m256 and store packed minimum values in ymm1 under writemask
k1."
+"VPMINSW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG EA
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed signed word integers
in zmm2 and zmm3/m512 and store packed minimum values in zmm1 under writemask
k1."
+"VPMINUB xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG DA
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned byte
integers in xmm2 and xmm3/m128 and store packed minimum values in xmm1 under
writemask k1."
+"VPMINUB ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG DA
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned byte
integers in ymm2 and ymm3/m256 and store packed minimum values in ymm1 under
writemask k1."
+"VPMINUB zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG DA
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned byte
integers in zmm2 and zmm3/m512 and store packed minimum values in zmm1 under
writemask k1."
+"VPMINUW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG 3A
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned word
integers in xmm3/m128 and xmm2 and return packed minimum values in xmm1 under
writemask k1."
+"VPMINUW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG 3A
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned word
integers in ymm3/m256 and ymm2 and return packed minimum values in ymm1 under
writemask k1."
+"VPMINUW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG 3A
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Compare packed unsigned word
integers in zmm3/m512 and zmm2 and return packed minimum values in zmm1 under
writemask k1."
+"VPMOVB2M k1, xmm1","EVEX.128.F3.0F38.W0 29
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding byte in XMM1."
+"VPMOVB2M k1, ymm1","EVEX.256.F3.0F38.W0 29
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding byte in YMM1."
+"VPMOVB2M k1, zmm1","EVEX.512.F3.0F38.W0 29
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding byte in ZMM1."
+"VPMOVM2B xmm1, k1","EVEX.128.F3.0F38.W0 28
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each byte in XMM1 to all 1's or all 0's based on the value
of the corresponding bit in k1."
+"VPMOVM2B ymm1, k1","EVEX.256.F3.0F38.W0 28
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each byte in YMM1 to all 1's or all 0's based on the value
of the corresponding bit in k1."
+"VPMOVM2B zmm1, k1","EVEX.512.F3.0F38.W0 28
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each byte in ZMM1 to all 1's or all 0's based on the value
of the corresponding bit in k1."
+"VPMOVM2W xmm1, k1","EVEX.128.F3.0F38.W1 28
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each word in XMM1 to all 1's or all 0's based on the value
of the corresponding bit in k1."
+"VPMOVM2W ymm1, k1","EVEX.256.F3.0F38.W1 28
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each word in YMM1 to all 1's or all 0's based on the value
of the corresponding bit in k1."
+"VPMOVM2W zmm1, k1","EVEX.512.F3.0F38.W1 28
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each word in ZMM1 to all 1's or all 0's based on the value
of the corresponding bit in k1."
+"VPMOVSWB xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 20
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 16 packed signed word integers from ymm2
into 16 packed signed bytes in xmm1/m128 using signed saturation under
writemask k1."
+"VPMOVSWB xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 20
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed signed word integers from xmm2
into 8 packed signed bytes in xmm1/m64 using signed saturation under writemask
k1."
+"VPMOVSWB ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 20
/r","Valid","Valid","Invalid","AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 32 packed signed word integers from zmm2
into 32 packed signed bytes in ymm1/m256 using signed saturation under
writemask k1."
+"VPMOVSXBW xmm1{k1}{z}, xmm2/m64","EVEX.128.66.0F38.WIG 20
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 8 packed 8-bit integers in xmm2/m64
to 8 packed 16-bit integers in zmm1."
+"VPMOVSXBW ymm1{k1}{z}, xmm2/m128","EVEX.256.66.0F38.WIG 20
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 16 packed 8-bit integers in xmm2/m128
to 16 packed 16-bit integers in ymm1."
+"VPMOVSXBW zmm1{k1}{z}, ymm2/m256","EVEX.512.66.0F38.WIG 20
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 32 packed 8-bit integers in ymm2/m256
to 32 packed 16-bit integers in zmm1."
+"VPMOVUSWB xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 10
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 16 packed unsigned word integers from
ymm2 into 16 packed unsigned bytes in xmm1/m128 using unsigned saturation under
writemask k1."
+"VPMOVUSWB xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 10
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed unsigned word integers from
xmm2 into 8 packed unsigned bytes in 8mm1/m64 using unsigned saturation under
writemask k1."
+"VPMOVUSWB ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 10
/r","Valid","Valid","Invalid","AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 32 packed unsigned word integers from
zmm2 into 32 packed unsigned bytes in ymm1/m256 using unsigned saturation under
writemask k1."
+"VPMOVW2M k1, xmm1","EVEX.128.F3.0F38.W1 29
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding word in XMM1."
+"VPMOVW2M k1, ymm1","EVEX.256.F3.0F38.W1 29
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding word in YMM1."
+"VPMOVW2M k1, zmm1","EVEX.512.F3.0F38.W1 29
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding word in ZMM1."
+"VPMOVWB xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 30
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 16 packed word integers from ymm2 into
16 packed bytes in xmm1/m128 with truncation under writemask k1."
+"VPMOVWB xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 30
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed word integers from xmm2 into 8
packed bytes in xmm1/m64 with truncation under writemask k1."
+"VPMOVWB ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 30
/r","Valid","Valid","Invalid","AVX512BW","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 32 packed word integers from zmm2 into
32 packed bytes in ymm1/m256 with truncation under writemask k1."
+"VPMOVZXBW xmm1{k1}{z}, xmm2/m64","EVEX.128.66.0F38.WIG 30
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Zero extend 8 packed 8-bit integers in the low 8
bytes of xmm2/m64 to 8 packed 16-bit integers in xmm1."
+"VPMOVZXBW ymm1{k1}{z}, xmm2/m128","EVEX.256.66.0F38.WIG 30
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Zero extend 16 packed 8-bit integers in xmm2/m128
to 16 packed 16-bit integers in ymm1."
+"VPMOVZXBW zmm1{k1}{z}, ymm2/m256","EVEX.512.66.0F38.WIG 30
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Zero extend 32 packed 8-bit integers in ymm2/m256
to 32 packed 16-bit integers in zmm1."
+"VPMULHRSW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG 0B
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply 16-bit signed words, scale
and round signed doublewords, pack high 16 bits to xmm1 under writemask k1."
+"VPMULHRSW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG 0B
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply 16-bit signed words, scale
and round signed doublewords, pack high 16 bits to ymm1 under writemask k1."
+"VPMULHRSW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG 0B
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply 16-bit signed words, scale
and round signed doublewords, pack high 16 bits to zmm1 under writemask k1."
+"VPMULHUW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG E4
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed unsigned word
integers in xmm2 and xmm3/m128, and store the high 16 bits of the results in
xmm1 under writemask k1."
+"VPMULHUW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG E4
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed unsigned word
integers in ymm2 and ymm3/m256, and store the high 16 bits of the results in
ymm1 under writemask k1."
+"VPMULHUW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG E4
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed unsigned word
integers in zmm2 and zmm3/m512, and store the high 16 bits of the results in
zmm1 under writemask k1."
+"VPMULHW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG E5
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed signed word
integers in xmm2 and xmm3/m128, and store the high 16 bits of the results in
xmm1 under writemask k1."
+"VPMULHW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG E5
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed signed word
integers in ymm2 and ymm3/m256, and store the high 16 bits of the results in
ymm1 under writemask k1."
+"VPMULHW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG E5
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed signed word
integers in zmm2 and zmm3/m512, and store the high 16 bits of the results in
zmm1 under writemask k1."
+"VPMULLW xmm1{k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG D5
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed signed word
integers in xmm2 and xmm3/m128, and store the low 16 bits of the results in
xmm1 under writemask k1."
+"VPMULLW ymm1{k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG D5
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed signed word
integers in ymm2 and ymm3/m256, and store the low 16 bits of the results in
ymm1 under writemask k1."
+"VPMULLW zmm1{k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG D5
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Multiply the packed signed word
integers in zmm2 and zmm3/m512, and store the low 16 bits of the results in
zmm1 under writemask k1."
+"VPSADBW xmm1, xmm2, xmm3/m128","EVEX.128.66.0F.WIG F6
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Computes the absolute differences of
the packed unsigned byte integers from xmm3/m128 and xmm2; then each
consecutive 8 differences are summed separately to produce four unsigned word
integer results."
+"VPSADBW ymm1, ymm2, ymm3/m256","EVEX.256.66.0F.WIG F6
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Computes the absolute differences of
the packed unsigned byte integers from ymm3/m256 and ymm2; then each
consecutive 8 differences are summed separately to produce four unsigned word
integer results."
+"VPSADBW zmm1, zmm2, zmm3/m512","EVEX.512.66.0F.WIG F6
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Computes the absolute differences of
the packed unsigned byte integers from zmm3/m512 and zmm2; then each
consecutive 8 differences are summed separately to produce four unsigned word
integer results."
+"VPSHUFB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG 00
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shuffle bytes in xmm2 according to
contents of xmm3/m128 under write mask k1."
+"VPSHUFB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG 00
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shuffle bytes in ymm2 according to
contents of ymm3/m256 under write mask k1."
+"VPSHUFB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG 00
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shuffle bytes in zmm2 according to
contents of zmm3/m512 under write mask k1."
+"VPSHUFHW xmm1 {k1}{z}, xmm2/m128, ib","EVEX.128.F3.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shuffle the high words in xmm2/m128 based on
the encoding in ib and store the result in xmm1 under write mask k1."
+"VPSHUFHW ymm1 {k1}{z}, ymm2/m256, ib","EVEX.256.F3.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shuffle the high words in ymm2/m256 based on
the encoding in ib and store the result in ymm1 under write mask k1."
+"VPSHUFHW zmm1 {k1}{z}, zmm2/m512, ib","EVEX.512.F3.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shuffle the high words in zmm2/m512 based on
the encoding in ib and store the result in zmm1 under write mask k1."
+"VPSHUFLW xmm1 {k1}{z}, xmm2/m128, ib","EVEX.128.F2.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shuffle the low words in xmm2/m128 based on the
encoding in ib and store the result in xmm1 under write mask k1."
+"VPSHUFLW ymm1 {k1}{z}, ymm2/m256, ib","EVEX.256.F2.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shuffle the low words in ymm2/m256 based on the
encoding in ib and store the result in ymm1 under write mask k1."
+"VPSHUFLW zmm1 {k1}{z}, zmm2/m512, ib","EVEX.512.F2.0F.WIG 70 /r
ib","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shuffle the low words in zmm2/m512 based on the
encoding in ib and store the result in zmm1 under write mask k1."
+"VPSLLDQ xmm1, xmm2/m128, ib","EVEX.128.66.0F.WIG 73 /7
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift xmm2/m128 left by ib bytes while shifting
in 0s and store result in xmm1."
+"VPSLLDQ ymm1, ymm2/m256, ib","EVEX.256.66.0F.WIG 73 /7
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift ymm2/m256 left by ib bytes while shifting
in 0s and store result in ymm1."
+"VPSLLDQ zmm1, zmm2/m512, ib","EVEX.512.66.0F.WIG 73 /7
ib","Valid","Valid","Invalid","AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift zmm2/m512 left by ib bytes while shifting
in 0s and store result in zmm1."
+"VPSLLVW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.W1 12
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in xmm2 left by amount
specified in the corresponding element of xmm3/m128 while shifting in 0s using
writemask k1."
+"VPSLLVW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.W1 12
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in ymm2 left by amount
specified in the corresponding element of ymm3/m256 while shifting in 0s using
writemask k1."
+"VPSLLVW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.W1 12
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in zmm2 left by amount
specified in the corresponding element of zmm3/m512 while shifting in 0s using
writemask k1."
+"VPSLLW xmm1 {k1}{z}, xmm2/m128, ib","EVEX.128.66.0F.WIG 71 /6
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in xmm2/m128 left by ib while
shifting in 0s using writemask k1."
+"VPSLLW ymm1 {k1}{z}, ymm2/m256, ib","EVEX.256.66.0F.WIG 71 /6
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in ymm2/m256 left by ib while
shifting in 0s using writemask k1."
+"VPSLLW zmm1 {k1}{z}, zmm2/m512, ib","EVEX.512.66.0F.WIG 71 /6
ib","Valid","Valid","Invalid","AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in zmm2/m512 left by ib while
shifting in 0 using writemask k1."
+"VPSLLW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG F1
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in xmm2 left by amount specified
in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSLLW ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.WIG F1
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in ymm2 left by amount specified
in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSLLW zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.WIG F1
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in zmm2 left by amount specified
in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRAVW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.W1 11
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in xmm2 right by amount
specified in the corresponding element of xmm3/m128 while shifting in sign bits
using writemask k1."
+"VPSRAVW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.W1 11
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in ymm2 right by amount
specified in the corresponding element of ymm3/m256 while shifting in sign bits
using writemask k1."
+"VPSRAVW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.W1 11
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in zmm2 right by amount
specified in the corresponding element of zmm3/m512 while shifting in sign bits
using writemask k1."
+"VPSRAW xmm1 {k1}{z}, xmm2/m128, ib","EVEX.128.66.0F.WIG 71 /4
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in xmm2/m128 right by ib while
shifting in sign bits using writemask k1."
+"VPSRAW ymm1 {k1}{z}, ymm2/m256, ib","EVEX.256.66.0F.WIG 71 /4
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in ymm2/m256 right by ib while
shifting in sign bits using writemask k1."
+"VPSRAW zmm1 {k1}{z}, zmm2/m512, ib","EVEX.512.66.0F.WIG 71 /4
ib","Valid","Valid","Invalid","AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in zmm2/m512 right by ib while
shifting in sign bits using writemask k1."
+"VPSRAW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG E1
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in xmm2 right by amount specified
in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRAW ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.WIG E1
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in ymm2 right by amount specified
in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRAW zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.WIG E1
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in zmm2 right by amount specified
in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRLDQ xmm1, xmm2/m128, ib","EVEX.128.66.0F.WIG 73 /3
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift xmm2/m128 right by ib bytes while
shifting in 0s and store result in xmm1."
+"VPSRLDQ ymm1, ymm2/m256, ib","EVEX.256.66.0F.WIG 73 /3
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift ymm2/m256 right by ib bytes while
shifting in 0s and store result in ymm1."
+"VPSRLDQ zmm1, zmm2/m512, ib","EVEX.512.66.0F.WIG 73 /3
ib","Valid","Valid","Invalid","AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift zmm2/m512 right by ib bytes while
shifting in 0s and store result in zmm1."
+"VPSRLVW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F38.W1 10
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in xmm2 right by amount
specified in the corresponding element of xmm3/m128 while shifting in 0s using
writemask k1."
+"VPSRLVW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F38.W1 10
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in ymm2 right by amount
specified in the corresponding element of ymm3/m256 while shifting in 0s using
writemask k1."
+"VPSRLVW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F38.W1 10
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Shift words in zmm2 right by amount
specified in the corresponding element of zmm3/m512 while shifting in 0s using
writemask k1."
+"VPSRLW xmm1 {k1}{z}, xmm2/m128, ib","EVEX.128.66.0F.WIG 71 /2
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in xmm2/m128 right by ib while
shifting in 0s using writemask k1."
+"VPSRLW ymm1 {k1}{z}, ymm2/m256, ib","EVEX.256.66.0F.WIG 71 /2
ib","Valid","Valid","Invalid","AVX512VL AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in ymm2/m256 right by ib while
shifting in 0s using writemask k1."
+"VPSRLW zmm1 {k1}{z}, zmm2/m512, ib","EVEX.512.66.0F.WIG 71 /2
ib","Valid","Valid","Invalid","AVX512BW","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector Mem","Shift words in zmm2/m512 right by ib while
shifting in 0s using writemask k1."
+"VPSRLW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG D1
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in xmm2 right by amount specified
in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRLW ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.WIG D1
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in ymm2 right by amount specified
in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRLW zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.WIG D1
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift words in zmm2 right by amount specified
in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSUBB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG F8
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed byte integers in
xmm3/m128 from xmm2 and store in xmm1 using writemask k1."
+"VPSUBB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG F8
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed byte integers in
ymm3/m256 from ymm2 and store in ymm1 using writemask k1."
+"VPSUBB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG F8
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed byte integers in
zmm3/m512 from zmm2 and store in zmm1 using writemask k1."
+"VPSUBSB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG E8
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed signed byte integers
in xmm3/m128 from packed signed byte integers in xmm2 and saturate results and
store in xmm1 using writemask k1."
+"VPSUBSB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG E8
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed signed byte integers
in ymm3/m256 from packed signed byte integers in ymm2 and saturate results and
store in ymm1 using writemask k1."
+"VPSUBSB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG E8
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed signed byte integers
in zmm3/m512 from packed signed byte integers in zmm2 and saturate results and
store in zmm1 using writemask k1."
+"VPSUBSW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG E9
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed signed word integers
in xmm3/m128 from packed signed word integers in xmm2 and saturate results and
store in xmm1 using writemask k1."
+"VPSUBSW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG E9
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed signed word integers
in ymm3/m256 from packed signed word integers in ymm2 and saturate results and
store in ymm1 using writemask k1."
+"VPSUBUSB xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG D8
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed unsigned byte
integers in xmm3/m128 from packed unsigned byte integers in xmm2, saturate
results and store in xmm1 using writemask k1."
+"VPSUBUSB ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG D8
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed unsigned byte
integers in ymm3/m256 from packed unsigned byte integers in ymm2, saturate
results and store in ymm1 using writemask k1."
+"VPSUBUSB zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG D8
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed unsigned byte
integers in zmm3/m512 from packed unsigned byte integers in zmm2, saturate
results and store in zmm1 using writemask k1."
+"VPSUBUSW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG D9
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed unsigned word
integers in xmm3/m128 from packed unsigned word integers in xmm2 and saturate
results and store in xmm1 using writemask k1."
+"VPSUBUSW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG D9
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed unsigned word
integers in ymm3/m256 from packed unsigned word integers in ymm2, saturate
results and store in ymm1 using writemask k1."
+"VPSUBW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG F9
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed word integers in
xmm3/m128 from xmm2 and store in xmm1 using writemask k1."
+"VPSUBW ymm1 {k1}{z}, ymm2, ymm3/m256","EVEX.256.66.0F.WIG F9
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed word integers in
ymm3/m256 from ymm2 and store in ymm1 using writemask k1."
+"VPSUBW zmm1 {k1}{z}, zmm2, zmm3/m512","EVEX.512.66.0F.WIG F9
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Subtract packed word integers in
zmm3/m512 from zmm2 and store in zmm1 using writemask k1."
+"VPTESTMB k2 {k1}, xmm2, xmm3/m128","EVEX.128.66.0F38.W0 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise AND of packed byte integers
in xmm2 and xmm3/m128 and set mask k2 to reflect the zero/non-zero status of
each element of the result, under writemask k1."
+"VPTESTMB k2 {k1}, ymm2, ymm3/m256","EVEX.256.66.0F38.W0 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise AND of packed byte integers
in ymm2 and ymm3/m256 and set mask k2 to reflect the zero/non-zero status of
each element of the result, under writemask k1."
+"VPTESTMB k2 {k1}, zmm2, zmm3/m512","EVEX.512.66.0F38.W0 26
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise AND of packed byte integers
in zmm2 and zmm3/m512 and set mask k2 to reflect the zero/non-zero status of
each element of the result, under writemask k1."
+"VPTESTMW k2 {k1}, xmm2, xmm3/m128","EVEX.128.66.0F38.W1 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise AND of packed word integers
in xmm2 and xmm3/m128 and set mask k2 to reflect the zero/non-zero status of
each element of the result, under writemask k1."
+"VPTESTMW k2 {k1}, ymm2, ymm3/m256","EVEX.256.66.0F38.W1 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise AND of packed word integers
in ymm2 and ymm3/m256 and set mask k2 to reflect the zero/non-zero status of
each element of the result, under writemask k1."
+"VPTESTMW k2 {k1}, zmm2, zmm3/m512","EVEX.512.66.0F38.W1 26
/r","Valid","Valid","Invalid","AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise AND of packed word integers
in zmm2 and zmm3/m512 and set mask k2 to reflect the zero/non-zero status of
each element of the result, under writemask k1."
+"VPTESTNMB k2 {k1}, xmm2, xmm3/m128","EVEX.128.F3.0F38.W0 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise NAND of packed byte integers
in xmm2 and xmm3/m128 and set mask k2 to reflect the zero/non-zero status of
each element of the result,under writemask k1."
+"VPTESTNMB k2 {k1}, ymm2, ymm3/m256","EVEX.256.F3.0F38.W0 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise NAND of packed byte integers
in ymm2 and ymm3/m256 and set mask k2 to reflect the zero/non-zero status of
each element of the result,under writemask k1."
+"VPTESTNMB k2 {k1}, zmm2, zmm3/m512","EVEX.512.F3.0F38.W0 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise NAND of packed byte integers
in zmm2 and zmm3/m512 and set mask k2 to reflect the zero/non-zero status of
each element of the result,under writemask k1."
+"VPTESTNMW k2 {k1}, xmm2, xmm3/m128","EVEX.128.F3.0F38.W1 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise NAND of packed word integers
in xmm2 and xmm3/m128 and set mask k2 to reflect the zero/non-zero status of
each element of the result,under writemask k1."
+"VPTESTNMW k2 {k1}, ymm2, ymm3/m256","EVEX.256.F3.0F38.W1 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise NAND of packed word integers
in ymm2 and ymm3/m256 and set mask k2 to reflect the zero/non-zero status of
each element of the result,under writemask k1."
+"VPTESTNMW k2 {k1}, zmm2, zmm3/m512","EVEX.512.F3.0F38.W1 26
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Bitwise NAND of packed word integers
in zmm2 and zmm3/m512 and set mask k2 to reflect the zero/non-zero status of
each element of the result,under writemask k1."
+"VPUNPCKHBW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 68
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Interleave high-order bytes from
xmm2 and xmm3/m128 into xmm1 register using k1 write mask."
+"VPUNPCKHWD xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 69
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Interleave high-order words from
xmm2 and xmm3/m128 into xmm1 register using k1 write mask."
+"VPUNPCKLBW xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 60
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Interleave low-order bytes from xmm2
and xmm3/m128 into xmm1 register subject to write mask k1."
+"VPUNPCKLWD xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.WIG 61
/r","Valid","Valid","Invalid","AVX512VL AVX512BW","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector Mem","Interleave low-order words from xmm2
and xmm3/m128 into xmm1 register subject to write mask k1."
diff --git a/disas/x86-data/x86_avx512cd.csv b/disas/x86-data/x86_avx512cd.csv
new file mode 100644
index 000000000000..f1d6d7dedb69
--- /dev/null
+++ b/disas/x86-data/x86_avx512cd.csv
@@ -0,0 +1,19 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPBROADCASTMB2Q xmm1, k1","EVEX.128.F3.0F38.W1 2A
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast low byte value in k1 to two locations in xmm1."
+"VPBROADCASTMB2Q ymm1, k1","EVEX.256.F3.0F38.W1 2A
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast low byte value in k1 to four locations in ymm1."
+"VPBROADCASTMB2Q zmm1, k1","EVEX.512.F3.0F38.W1 2A
/r","Valid","Valid","Invalid","AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast low byte value in k1 to eight locations in zmm1."
+"VPBROADCASTMW2D xmm1, k1","EVEX.128.F3.0F38.W0 3A
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast low word value in k1 to four locations in xmm1."
+"VPBROADCASTMW2D ymm1, k1","EVEX.256.F3.0F38.W0 3A
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast low word value in k1 to eight locations in ymm1."
+"VPBROADCASTMW2D zmm1, k1","EVEX.512.F3.0F38.W0 3A
/r","Valid","Valid","Invalid","AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","","Broadcast low word value in k1 to sixteen locations in zmm1."
+"VPCONFLICTD xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.66.0F38.W0 C4
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Detect duplicate double-word values in
xmm2/m128/m32bcst using writemask k1."
+"VPCONFLICTD ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.66.0F38.W0 C4
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Detect duplicate double-word values in
ymm2/m256/m32bcst using writemask k1."
+"VPCONFLICTD zmm1 {k1}{z}, zmm2/m512/m32bcst","EVEX.512.66.0F38.W0 C4
/r","Valid","Valid","Invalid","AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Detect duplicate double-word values in
zmm2/m512/m32bcst using writemask k1."
+"VPCONFLICTQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F38.W1 C4
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Detect duplicate quad-word values in
xmm2/m128/m64bcst using writemask k1."
+"VPCONFLICTQ ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F38.W1 C4
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Detect duplicate quad-word values in
ymm2/m256/m64bcst using writemask k1."
+"VPCONFLICTQ zmm1 {k1}{z}, zmm2/m512/m64bcst","EVEX.512.66.0F38.W1 C4
/r","Valid","Valid","Invalid","AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Detect duplicate quad-word values in
zmm2/m512/m64bcst using writemask k1."
+"VPLZCNTD xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.66.0F38.W0 44
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Count the number of leading zero bits in each dword
element of xmm2/m128/m32bcst using writemask k1."
+"VPLZCNTD ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.66.0F38.W0 44
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Count the number of leading zero bits in each dword
element of ymm2/m256/m32bcst using writemask k1."
+"VPLZCNTD zmm1 {k1}{z}, zmm2/m512/m32bcst","EVEX.512.66.0F38.W0 44
/r","Valid","Valid","Invalid","AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Count the number of leading zero bits in each dword
element of zmm2/m512/m32bcst using writemask k1."
+"VPLZCNTQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F38.W1 44
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Count the number of leading zero bits in each qword
element of xmm2/m128/m64bcst using writemask k1."
+"VPLZCNTQ ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F38.W1 44
/r","Valid","Valid","Invalid","AVX512VL AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Count the number of leading zero bits in each qword
element of ymm2/m256/m64bcst using writemask k1."
+"VPLZCNTQ zmm1 {k1}{z}, zmm2/m512/m64bcst","EVEX.512.66.0F38.W1 44
/r","Valid","Valid","Invalid","AVX512CD","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Count the number of leading zero bits in each qword
element of zmm2/m512/m64bcst using writemask k1."
diff --git a/disas/x86-data/x86_avx512d.csv b/disas/x86-data/x86_avx512d.csv
new file mode 100644
index 000000000000..9af7418a542a
--- /dev/null
+++ b/disas/x86-data/x86_avx512d.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VREDUCESD xmm1 {k1}{z}, xmm2, xmm3/m64{sae}, ib","EVEX.LIG.66.0F3A.W1 57 /r
ib","Valid","Valid","Invalid","AVX512D","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Perform a reduction transformation
on a scalar double-precision floating point value in xmm3/m64 by subtracting a
number of fraction bits specified by the ib field. Also, upper double precision
floating-point value (bits[127:64]) from xmm2 are copied to xmm1[127:64].
Stores the result in xmm1 register."
diff --git a/disas/x86-data/x86_avx512dq.csv b/disas/x86-data/x86_avx512dq.csv
new file mode 100644
index 000000000000..ae401e958340
--- /dev/null
+++ b/disas/x86-data/x86_avx512dq.csv
@@ -0,0 +1,143 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"KADDB k1, k2, k3","VEX.L1.66.0F.W0 4A
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Add 8 bits masks in k2 and
k3 and place result in k1."
+"KADDW k1, k2, k3","VEX.L1.0F.W0 4A
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Add 16 bits masks in k2
and k3 and place result in k1."
+"KANDB k1, k2, k3","VEX.L1.66.0F.W0 41
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise AND 8 bits masks
k2 and k3 and place result in k1."
+"KANDNB k1, k2, k3","VEX.L1.66.0F.W0 42
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise AND NOT 8 bits
masks k1 and k2 and place result in k1."
+"KMOVB k1, k2/m8","VEX.L0.66.0F.W0 90
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move 8 bits mask from k2/m8 and store the result in k1."
+"KMOVB m8, k1","VEX.L0.66.0F.W0 91
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:r/m (w, ModRM:[7:6] must not be
11b)","ModRM:reg (r)","","","","Move 8 bits mask from k1 and store the result
in m8."
+"KMOVB k1, rw","VEX.L0.66.0F.W0 92
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Move 8 bits mask from r to k1."
+"KMOVB rw, k1","VEX.L0.66.0F.W0 93
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Move 8 bits mask from k1 to r."
+"KNOTB k1, k2","VEX.L0.66.0F.W0 44
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Bitwise NOT of 8 bits mask k2."
+"KORB k1, k2, k3","VEX.L1.66.0F.W0 45
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise OR 8 bits masks k2
and k3 and place result in k1."
+"KORTESTB k1, k2","VEX.L0.66.0F.W0 98
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Bitwise OR 8 bits masks k1 and k2 and
update ZF and CF accordingly."
+"KSHIFTLB k1, k2, ib","VEX.L0.66.0F3A.W0 32 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","ib","","","Shift left 8 bits in k2 by immediate and
write result in k1."
+"KSHIFTRB k1, k2, ib","VEX.L0.66.0F3A.W0 30 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","ib","","","Shift right 8 bits in k2 by immediate and
write result in k1."
+"KTESTB k1, k2","VEX.L0.66.0F.W0 99
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (r)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Set ZF and CF depending on sign bit AND and
ANDN of 8 bits mask register sources."
+"KTESTW k1, k2","VEX.L0.0F.W0 99
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (r)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Set ZF and CF depending on sign bit AND and
ANDN of 16 bits mask register sources."
+"KXNORB k1, k2, k3","VEX.L1.66.0F.W0 46
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise XNOR 8 bits masks
k2 and k3 and place result in k1."
+"KXORB k1, k2, k3","VEX.L1.66.0F.W0 47
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise XOR 8 bits masks
k2 and k3 and place result in k1."
+"VANDNPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 55
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND NOT of
packed double-precision floating-point values in xmm2 and xmm3/m128/m64bcst
subject to writemask k1."
+"VANDNPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 55
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND NOT of
packed double-precision floating-point values in ymm2 and ymm3/m256/m64bcst
subject to writemask k1."
+"VANDNPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 55
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND NOT of
packed double-precision floating-point values in zmm2 and zmm3/m512/m64bcst
subject to writemask k1."
+"VANDNPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 55
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
single-precision floating-point values in xmm2 and xmm3/m128/m32bcst subject to
writemask k1."
+"VANDNPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 55
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
single-precision floating-point values in ymm2 and ymm3/m256/m32bcst subject to
writemask k1."
+"VANDNPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.0F.W0 55
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
single-precision floating-point values in zmm2 and zmm3/m512/m32bcst subject to
writemask k1."
+"VANDPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 54
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
double-precision floating-point values in xmm2 and xmm3/m128/m64bcst subject to
writemask k1."
+"VANDPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 54
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
double-precision floating-point values in ymm2 and ymm3/m256/m64bcst subject to
writemask k1."
+"VANDPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 54
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
double-precision floating-point values in zmm2 and zmm3/m512/m64bcst subject to
writemask k1."
+"VANDPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 54
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
single-precision floating-point values in xmm2 and xmm3/m128/m32bcst subject to
writemask k1."
+"VANDPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 54
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
single-precision floating-point values in ymm2 and ymm3/m256/m32bcst subject to
writemask k1."
+"VANDPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.0F.W0 54
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical AND of packed
single-precision floating-point values in zmm2 and zmm3/m512/m32bcst subject to
writemask k1."
+"VBROADCASTF32X2 ymm1 {k1}{z}, xmm2/m64","EVEX.256.66.0F38.W0 19
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast two single-precision floating-point elements in
xmm2/m64 to locations in ymm1 using writemask k1."
+"VBROADCASTF32X2 zmm1 {k1}{z}, xmm2/m64","EVEX.512.66.0F38.W0 19
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast two single-precision floating-point elements in
xmm2/m64 to locations in zmm1 using writemask k1."
+"VBROADCASTF32X8 zmm1 {k1}{z}, m256","EVEX.512.66.0F38.W0 1B
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple8","Broadcast 256 bits of 8 single precision floating-point
data in mem to locations in zmm1 using writemask k1."
+"VBROADCASTF64X2 ymm1 {k1}{z}, m128","EVEX.256.66.0F38.W1 1A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast 128 bits of 2 double-precision floating-point
data in mem to locations in ymm1 using writemask k1."
+"VBROADCASTF64X2 zmm1 {k1}{z}, m128","EVEX.512.66.0F38.W1 1A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast 128 bits of 2 double-precision floating-point
data in mem to locations in zmm1 using writemask k1."
+"VBROADCASTI32X2 xmm1 {k1}{z}, xmm2/m64","EVEX.128.66.0F38.W0 59
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast two dword elements in source operand to
locations in xmm1 subject to writemask k1."
+"VBROADCASTI32X2 ymm1 {k1}{z}, xmm2/m64","EVEX.256.66.0F38.W0 59
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast two dword elements in source operand to
locations in ymm1 subject to writemask k1."
+"VBROADCASTI32X2 zmm1 {k1}{z}, xmm2/m64","EVEX.512.66.0F38.W0 59
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast two dword elements in source operand to
locations in zmm1 subject to writemask k1."
+"VBROADCASTI32X8 zmm1 {k1}{z}, m256","EVEX.512.66.0F38.W0 5B
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple8","Broadcast 256 bits of 8 doubleword integer data in mem to
locations in zmm1 using writemask k1."
+"VBROADCASTI64X2 ymm1 {k1}{z}, m128","EVEX.256.66.0F38.W1 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast 128 bits of 2 quadword integer data in mem to
locations in ymm1 using writemask k1."
+"VBROADCASTI64X2 zmm1 {k1}{z}, m128","EVEX.512.66.0F38.W1 5A
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple2","Broadcast 128 bits of 2 quadword integer data in mem to
locations in zmm1 using writemask k1."
+"VCVTPD2QQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F.W1 7B
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values from xmm2/m128/m64bcst to two packed quadword integers in xmm1 with
writemask k1."
+"VCVTPD2QQ ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F.W1 7B
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double-precision floating-point
values from ymm2/m256/m64bcst to four packed quadword integers in ymm1 with
writemask k1."
+"VCVTPD2QQ zmm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.66.0F.W1 7B
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values from zmm2/m512/m64bcst to eight packed quadword integers in zmm1 with
writemask k1."
+"VCVTPD2UQQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F.W1 79
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values from xmm2/mem to two packed unsigned quadword integers in xmm1 with
writemask k1."
+"VCVTPD2UQQ ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F.W1 79
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert fourth packed double-precision floating-point
values from ymm2/mem to four packed unsigned quadword integers in ymm1 with
writemask k1."
+"VCVTPD2UQQ zmm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.66.0F.W1 79
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values from zmm2/mem to eight packed unsigned quadword integers in zmm1 with
writemask k1."
+"VCVTPS2QQ xmm1 {k1}{z}, xmm2/m64/m32bcst","EVEX.128.66.0F.W0 7B
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert two packed single precision floating-point
values from xmm2/m64/m32bcst to two packed signed quadword values in xmm1
subject to writemask k1."
+"VCVTPS2QQ ymm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.256.66.0F.W0 7B
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed single precision floating-point
values from xmm2/m128/m32bcst to four packed signed quadword values in ymm1
subject to writemask k1."
+"VCVTPS2QQ zmm1 {k1}{z}, ymm2/m256/m32bcst{er}","EVEX.512.66.0F.W0 7B
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed single precision floating-point
values from ymm2/m256/m32bcst to eight packed signed quadword values in zmm1
subject to writemask k1."
+"VCVTPS2UQQ xmm1 {k1}{z}, xmm2/m64/m32bcst","EVEX.128.66.0F.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert two packed single precision floating-point
values from zmm2/m64/m32bcst to two packed unsigned quadword values in zmm1
subject to writemask k1."
+"VCVTPS2UQQ ymm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.256.66.0F.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed single precision floating-point
values from xmm2/m128/m32bcst to four packed unsigned quadword values in ymm1
subject to writemask k1."
+"VCVTPS2UQQ zmm1 {k1}{z}, ymm2/m256/m32bcst{er}","EVEX.512.66.0F.W0 79
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed single precision floating-point
values from ymm2/m256/m32bcst to eight packed unsigned quadword values in zmm1
subject to writemask k1."
+"VCVTQQ2PD xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.F3.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed quadword integers from
xmm2/m128/m64bcst to packed double-precision floating-point values in xmm1 with
writemask k1."
+"VCVTQQ2PD ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.F3.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed quadword integers from
ymm2/m256/m64bcst to packed double-precision floating-point values in ymm1 with
writemask k1."
+"VCVTQQ2PD zmm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.F3.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed quadword integers from
zmm2/m512/m64bcst to eight packed double-precision floating-point values in
zmm1 with writemask k1."
+"VCVTQQ2PS xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.0F.W1 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed quadword integers from xmm2/mem to
packed single-precision floating-point values in xmm1 with writemask k1."
+"VCVTQQ2PS xmm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.0F.W1 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed quadword integers from ymm2/mem
to packed single-precision floating-point values in xmm1 with writemask k1."
+"VCVTQQ2PS ymm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.0F.W1 5B
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed quadword integers from zmm2/mem
to eight packed single-precision floating-point values in ymm1 with writemask
k1."
+"VCVTTPD2QQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values from zmm2/m128/m64bcst to two packed quadword integers in zmm1 using
truncation with writemask k1."
+"VCVTTPD2QQ ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double-precision floating-point
values from ymm2/m256/m64bcst to four packed quadword integers in ymm1 using
truncation with writemask k1."
+"VCVTTPD2QQ zmm1 {k1}{z}, zmm2/m512/m64bcst{sae}","EVEX.512.66.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values from zmm2/m512 to eight packed quadword integers in zmm1 using
truncation with writemask k1."
+"VCVTTPD2UQQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F.W1 78
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values from xmm2/m128/m64bcst to two packed unsigned quadword integers in xmm1
using truncation with writemask k1."
+"VCVTTPD2UQQ ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F.W1 78
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double-precision floating-point
values from ymm2/m256/m64bcst to four packed unsigned quadword integers in ymm1
using truncation with writemask k1."
+"VCVTTPD2UQQ zmm1 {k1}{z}, zmm2/m512/m64bcst{sae}","EVEX.512.66.0F.W1 78
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values from zmm2/mem to eight packed unsigned quadword integers in zmm1 using
truncation with writemask k1."
+"VCVTTPS2QQ xmm1 {k1}{z}, xmm2/m64/m32bcst","EVEX.128.66.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert two packed single precision floating-point
values from xmm2/m64/m32bcst to two packed signed quadword values in xmm1 using
truncation subject to writemask k1."
+"VCVTTPS2QQ ymm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.256.66.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed single precision floating-point
values from xmm2/m128/m32bcst to four packed signed quadword values in ymm1
using truncation subject to writemask k1."
+"VCVTTPS2QQ zmm1 {k1}{z}, ymm2/m256/m32bcst{sae}","EVEX.512.66.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed single precision floating-point
values from ymm2/m256/m32bcst to eight packed signed quadword values in zmm1
using truncation subject to writemask k1."
+"VCVTTPS2UQQ xmm1 {k1}{z}, xmm2/m64/m32bcst","EVEX.128.66.0F.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert two packed single precision floating-point
values from xmm2/m64/m32bcst to two packed unsigned quadword values in xmm1
using truncation subject to writemask k1."
+"VCVTTPS2UQQ ymm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.256.66.0F.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed single precision floating-point
values from xmm2/m128/m32bcst to four packed unsigned quadword values in ymm1
using truncation subject to writemask k1."
+"VCVTTPS2UQQ zmm1 {k1}{z}, ymm2/m256/m32bcst{sae}","EVEX.512.66.0F.W0 78
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed single precision floating-point
values from ymm2/m256/m32bcst to eight packed unsigned quadword values in zmm1
using truncation subject to writemask k1."
+"VCVTUQQ2PD xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.F3.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed unsigned quadword integers from
xmm2/m128/m64bcst to two packed double-precision floating-point values in xmm1
with writemask k1."
+"VCVTUQQ2PD ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.F3.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed unsigned quadword integers from
ymm2/m256/m64bcst to packed double-precision floating-point values in ymm1 with
writemask k1."
+"VCVTUQQ2PD zmm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.F3.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed unsigned quadword integers from
zmm2/m512/m64bcst to eight packed double-precision floating-point values in
zmm1 with writemask k1."
+"VCVTUQQ2PS xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.F2.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed unsigned quadword integers from
xmm2/m128/m64bcst to packed single-precision floating-point values in zmm1 with
writemask k1."
+"VCVTUQQ2PS xmm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.F2.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed unsigned quadword integers from
ymm2/m256/m64bcst to packed single-precision floating-point values in xmm1 with
writemask k1."
+"VCVTUQQ2PS ymm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.F2.0F.W1 7A
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed unsigned quadword integers from
zmm2/m512/m64bcst to eight packed single-precision floating-point values in
zmm1 with writemask k1."
+"VEXTRACTF32X8 ymm/m256{k}{z},zmm,ib","EVEX.512.66.0F3A.W0 1b /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple8","Extract 256 bits of packed single precision
floating-point values from zmm2 and store results in ymm1/m256 subject to
writemask k1."
+"VEXTRACTF64X2 xmm/m128{k}{z},ymm,ib","EVEX.256.66.0F3A.W1 19 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple2","Extract 128 bits of packed double precision
floating-point values from ymm2 and store results in xmm1/m128 subject to
writemask k1."
+"VEXTRACTF64X2 xmm/m128{k}{z},zmm,ib","EVEX.512.66.0F3A.W1 19 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple2","Extract 128 bits of packed double precision
floating-point values from zmm2 and store results in xmm1/m128 subject to
writemask k1."
+"VEXTRACTI32X8 ymm/m256{k}{z},zmm,ib","EVEX.512.66.0F3A.W0 3b /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple8","Extract 256 bits of double-word integer values from zmm2
and store results in ymm1/m256 subject to writemask k1."
+"VEXTRACTI64X2 xmm/m128{k}{z},ymm,ib","EVEX.256.66.0F3A.W1 39 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple2","Extract 128 bits of quad-word integer values from ymm2
and store results in xmm1/m128 subject to writemask k1."
+"VEXTRACTI64X2 xmm/m128{k}{z},zmm,ib","EVEX.512.66.0F3A.W1 39 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple2","Extract 128 bits of quad-word integer values from zmm2
and store results in xmm1/m128 subject to writemask k1."
+"VFPCLASSPD k2 {k1}, xmm2/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 66 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Tests the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSPD k2 {k1}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 66 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Tests the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSPD k2 {k1}, zmm2/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 66 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Tests the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSPS k2 {k1}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 66 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Tests the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSPS k2 {k1}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 66 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Tests the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSPS k2 {k1}, zmm2/m512/m32bcst, ib","EVEX.512.66.0F3A.W0 66 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Tests the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSSD k2 {k1}, xmm2/m64, ib","EVEX.LIG.66.0F3A.W1 67 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Tuple1 Scalar","Tests the input for the following categories:
NaN, +0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate
field provides a mask bit for each of these category tests. The masked test
results are OR-ed together to form a mask result."
+"VFPCLASSSS k2 {k1}, xmm2/m32, ib","EVEX.LIG.66.0F3A.W0 67 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Tuple1 Scalar","Tests the input for the following categories:
NaN, +0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate
field provides a mask bit for each of these category tests. The masked test
results are OR-ed together to form a mask result."
+"VINSERTF32X8 zmm{k}{z},zmm,ymm/m256,ib","EVEX.512.66.0F3A.W0 1a /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple8","nsert 128 bits of packed double precision
floating-point values from xmm3/m128 and the remaining values from ymm2 into
ymm1 under writemask k1."
+"VINSERTF64X2 ymm{k}{z},ymm,xmm/m128,ib","EVEX.256.66.0F3A.W1 18 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple2","Insert 128 bits of packed double precision
floating-point values from xmm3/m128 and the remaining values from zmm2 into
zmm1 under writemask k1."
+"VINSERTF64X2 zmm{k}{z},zmm,xmm/m128,ib","EVEX.512.66.0F3A.W1 18 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple2","Insert 256 bits of packed single-precision
floating-point values from ymm3/m256 and the remaining values from zmm2 into
zmm1 under writemask k1."
+"VINSERTI32X8 zmm{k}{z},zmm,ymm/m256,ib","EVEX.512.66.0F3A.W0 3a /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple8","Insert 128 bits of packed quadword integer
values from xmm3/m128 and the remaining values from ymm2 into ymm1 under
writemask k1."
+"VINSERTI64X2 ymm{k}{z},ymm,xmm/m128,ib","EVEX.256.66.0F3A.W1 38 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple2","Insert 128 bits of packed quadword integer
values from xmm3/m128 and the remaining values from zmm2 into zmm1 under
writemask k1."
+"VINSERTI64X2 zmm{k}{z},zmm,xmm/m128,ib","EVEX.512.66.0F3A.W1 38 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple2","Insert 256 bits of packed doubleword
integer values from ymm3/m256 and the remaining values from zmm2 into zmm1
under writemask k1."
+"VORPD xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 56
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical OR of packed
double-precision floating-point values in xmm2 and xmm3/m128/m64bcst subject to
writemask k1."
+"VORPD ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 56
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical OR of packed
double-precision floating-point values in ymm2 and ymm3/m256/m64bcst subject to
writemask k1."
+"VORPD zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 56
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical OR of packed
double-precision floating-point values in zmm2 and zmm3/m512/m64bcst subject to
writemask k1."
+"VORPS xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 56
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical OR of packed
single-precision floating-point values in xmm2 and xmm3/m128/m32bcst subject to
writemask k1."
+"VORPS ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 56
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical OR of packed
single-precision floating-point values in ymm2 and ymm3/m256/m32bcst subject to
writemask k1."
+"VORPS zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.0F.W0 56
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical OR of packed
single-precision floating-point values in zmm2 and zmm3/m512/m32bcst subject to
writemask k1."
+"VPEXTRD r32/m32, xmm2, ib","EVEX.128.66.0F3A.W0 16 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple1 Scalar","Extract a dword integer value from xmm2 at the
source dword offset specified by ib into r/m."
+"VPEXTRQ r64/m64, xmm2, ib","EVEX.128.66.0F3A.W1 16 /r
ib","Valid","Invalid","Invalid","AVX512DQ","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple1 Scalar","Extract a qword integer value from xmm2 at the
source dword offset specified by ib into r/m."
+"VPINSRD xmm1, xmm2, r32/m32, ib","EVEX.128.66.0F3A.W0 22 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Insert a dword integer value from
r/m32 and rest from xmm2 into xmm1 at the dword offset in ib."
+"VPINSRQ xmm1, xmm2, r64/m64, ib","EVEX.128.66.0F3A.W1 22 /r
ib","Valid","Invalid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Insert a qword integer value from
r/m64 and rest from xmm2 into xmm1 at the qword offset in ib."
+"VPMOVD2M k1, xmm1","EVEX.128.F3.0F38.W0 39
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding doubleword in XMM1."
+"VPMOVD2M k1, ymm1","EVEX.256.F3.0F38.W0 39
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding doubleword in YMM1."
+"VPMOVD2M k1, zmm1","EVEX.512.F3.0F38.W0 39
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding doubleword in ZMM1."
+"VPMOVM2D xmm1, k1","EVEX.128.F3.0F38.W0 38
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each doubleword in XMM1 to all 1's or all 0's based on the
value of the corresponding bit in k1."
+"VPMOVM2D ymm1, k1","EVEX.256.F3.0F38.W0 38
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each doubleword in YMM1 to all 1's or all 0's based on the
value of the corresponding bit in k1."
+"VPMOVM2D zmm1, k1","EVEX.512.F3.0F38.W0 38
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each doubleword in ZMM1 to all 1's or all 0's based on the
value of the corresponding bit in k1."
+"VPMOVM2Q xmm1, k1","EVEX.128.F3.0F38.W1 38
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each quadword in XMM1 to all 1's or all 0's based on the
value of the corresponding bit in k1."
+"VPMOVM2Q ymm1, k1","EVEX.256.F3.0F38.W1 38
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each quadword in YMM1 to all 1's or all 0's based on the
value of the corresponding bit in k1."
+"VPMOVM2Q zmm1, k1","EVEX.512.F3.0F38.W1 38
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each quadword in ZMM1 to all 1's or all 0's based on the
value of the corresponding bit in k1."
+"VPMOVQ2M k1, xmm1","EVEX.128.F3.0F38.W1 39
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding quadword in XMM1."
+"VPMOVQ2M k1, ymm1","EVEX.256.F3.0F38.W1 39
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding quadword in YMM1."
+"VPMOVQ2M k1, zmm1","EVEX.512.F3.0F38.W1 39
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sets each bit in k1 to 1 or 0 based on the value of the most
significant bit of the corresponding quadword in ZMM1."
+"VPMULLQ xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 40
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply the packed qword signed
integers in xmm2 and xmm3/m128/m64bcst and store the low 64 bits of each
product in xmm1 under writemask k1."
+"VPMULLQ ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 40
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply the packed qword signed
integers in ymm2 and ymm3/m256/m64bcst and store the low 64 bits of each
product in ymm1 under writemask k1."
+"VPMULLQ zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 40
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply the packed qword signed
integers in zmm2 and zmm3/m512/m64bcst and store the low 64 bits of each
product in zmm1 under writemask k1."
+"VRANGEPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 50
/r ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Calculate two RANGE operation output
value from 2 pairs of double-precision floating-point values in xmm2 and
xmm3/m128/m32bcst, store the results to xmm1 under the writemask k1. ib
specifies the comparison and sign of the range operation."
+"VRANGEPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 50
/r ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Calculate four RANGE operation output
value from 4pairs of double-precision floating-point values in ymm2 and
ymm3/m256/m32bcst, store the results to ymm1 under the writemask k1. ib
specifies the comparison and sign of the range operation."
+"VRANGEPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{sae}, ib","EVEX.512.66.0F3A.W1
50 /r ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Calculate eight RANGE operation output
value from 8 pairs of double-precision floating-point values in zmm2 and
zmm3/m512/m32bcst, store the results to zmm1 under the writemask k1. ib
specifies the comparison and sign of the range operation."
+"VRANGEPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 50
/r ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Calculate four RANGE operation output
value from 4 pairs of single-precision floating-point values in xmm2 and
xmm3/m128/m32bcst, store the results to xmm1 under the writemask k1. ib
specifies the comparison and sign of the range operation."
+"VRANGEPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 50
/r ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Calculate eight RANGE operation output
value from 8 pairs of single-precision floating-point values in ymm2 and
ymm3/m256/m32bcst, store the results to ymm1 under the writemask k1. ib
specifies the comparison and sign of the range operation."
+"VRANGEPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{sae}, ib","EVEX.512.66.0F3A.W0
50 /r ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Calculate 16 RANGE operation output
value from 16 pairs of single-precision floating-point values in zmm2 and
zmm3/m512/m32bcst, store the results to zmm1 under the writemask k1. ib
specifies the comparison and sign of the range operation."
+"VRANGESD xmm1 {k1}{z}, xmm2, xmm3/m64{sae}, ib","EVEX.LIG.66.0F3A.W1 51 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Calculate a RANGE operation output
value from 2 double-precision floating-point values in xmm2 and xmm3/m64, store
the output to xmm1 under writemask. ib specifies the comparison and sign of the
range operation."
+"VRANGESS xmm1 {k1}{z}, xmm2, xmm3/m32{sae}, ib","EVEX.LIG.66.0F3A.W0 51 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Calculate a RANGE operation output
value from 2 single-precision floating-point values in xmm2 and xmm3/m32, store
the output to xmm1 under writemask. ib specifies the comparison and sign of the
range operation."
+"VREDUCEPD xmm1 {k1}{z}, xmm2/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 56 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on packed
double-precision floating point values in xmm2/m128/m32bcst by subtracting a
number of fraction bits specified by the ib field. Stores the result in xmm1
register under writemask k1."
+"VREDUCEPD ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 56 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on packed
double-precision floating point values in ymm2/m256/m32bcst by subtracting a
number of fraction bits specified by the ib field. Stores the result in ymm1
register under writemask k1."
+"VREDUCEPD zmm1 {k1}{z}, zmm2/m512/m64bcst{sae}, ib","EVEX.512.66.0F3A.W1 56
/r ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on
double-precision floating point values in zmm2/m512/m32bcst by subtracting a
number of fraction bits specified by the ib field. Stores the result in zmm1
register under writemask k1."
+"VREDUCEPS xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 56 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on packed
single-precision floating point values in xmm2/m128/m32bcst by subtracting a
number of fraction bits specified by the ib field. Stores the result in xmm1
register under writemask k1."
+"VREDUCEPS ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 56 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on packed
single-precision floating point values in ymm2/m256/m32bcst by subtracting a
number of fraction bits specified by the ib field. Stores the result in ymm1
register under writemask k1."
+"VREDUCEPS zmm1 {k1}{z}, zmm2/m512/m32bcst{sae}, ib","EVEX.512.66.0F3A.W0 56
/r ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on packed
single-precision floating point values in zmm2/m512/m32bcst by subtracting a
number of fraction bits specified by the ib field. Stores the result in zmm1
register under writemask k1."
+"VREDUCESS xmm1 {k1}{z}, xmm2, xmm3/m32{sae}, ib","EVEX.LIG.66.0F3A.W0 57 /r
ib","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Perform a reduction transformation
on a scalar single-precision floating point value in xmm3/m32 by subtracting a
number of fraction bits specified by the ib field. Also, upper single precision
floating-point values (bits[127:32]) from xmm2 are copied to xmm1[127:32].
Stores the result in xmm1 register."
+"VXORPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 57
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical XOR of packed
double-precision floating-point values in xmm2 and xmm3/m128/m64bcst subject to
writemask k1."
+"VXORPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 57
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical XOR of packed
double-precision floating-point values in ymm2 and ymm3/m256/m64bcst subject to
writemask k1."
+"VXORPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 57
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical XOR of packed
double-precision floating-point values in zmm2 and zmm3/m512/m64bcst subject to
writemask k1."
+"VXORPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 57
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical XOR of packed
single-precision floating-point values in xmm2 and xmm3/m128/m32bcst subject to
writemask k1."
+"VXORPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 57
/r","Valid","Valid","Invalid","AVX512VL AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical XOR of packed
single-precision floating-point values in ymm2 and ymm3/m256/m32bcst subject to
writemask k1."
+"VXORPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.0F.W0 57
/r","Valid","Valid","Invalid","AVX512DQ","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the bitwise logical XOR of packed
single-precision floating-point values in zmm2 and zmm3/m512/m32bcst subject to
writemask k1."
diff --git a/disas/x86-data/x86_avx512er.csv b/disas/x86-data/x86_avx512er.csv
new file mode 100644
index 000000000000..22441ea5c38b
--- /dev/null
+++ b/disas/x86-data/x86_avx512er.csv
@@ -0,0 +1,11 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VEXP2PD zmm1 {k1}{z}, zmm2/m512/m64bcst {sae}","EVEX.512.66.0F38.W1 C8
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (r, w)","ModRM:r/m
(r)","","","Full Vector","Computes approximations to the exponential 2^x (with
less than 2^-23 of maximum relative error) of the packed double-precision
floating-point values from zmm2/m512/m64bcst and stores the floating-point
result in zmm1with writemask k1."
+"VEXP2PS zmm1 {k1}{z}, zmm2/m512/m32bcst {sae}","EVEX.512.66.0F38.W0 C8
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (r, w)","ModRM:r/m
(r)","","","Full Vector","Computes approximations to the exponential 2^x (with
less than 2^-23 of maximum relative error) of the packed single-precision
floating-point values from zmm2/m512/m32bcst and stores the floating-point
result in zmm1with writemask k1."
+"VRCP28PD zmm1 {k1}{z}, zmm2/m512/m64bcst {sae}","EVEX.512.66.0F38.W1 CA
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocals ( < 2^-28
relative error) of the packed double-precision floating-point values in
zmm2/m512/m64bcst and stores the results in zmm1. Under writemask."
+"VRCP28PS zmm1 {k1}{z}, zmm2/m512/m32bcst {sae}","EVEX.512.66.0F38.W0 CA
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocals ( < 2^-28
relative error) of the packed single-precision floating-point values in
zmm2/m512/m32bcst and stores the results in zmm1. Under writemask."
+"VRCP28SD xmm1 {k1}{z}, xmm2, xmm3/m64 {sae}","EVEX.LIG.66.0F38.W1 CB
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes the approximate reciprocal (
< 2^-28 relative error) of the scalar double-precision floating-point value in
xmm3/m64 and stores the results in xmm1. Under writemask. Also, upper
double-precision floating-point value (bits[127:64]) from xmm2 is copied to
xmm1[127:64]."
+"VRCP28SS xmm1 {k1}{z}, xmm2, xmm3/m32 {sae}","EVEX.LIG.66.0F38.W0 CB
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes the approximate reciprocal (
< 2^-28 relative error) of the scalar single-precision floating-point value in
xmm3/m32 and stores the results in xmm1. Under writemask. Also, upper 3
single-precision floating-point values (bits[127:32]) from xmm2 is copied to
xmm1[127:32]."
+"VRSQRT28PD zmm1 {k1}{z}, zmm2/m512/m64bcst {sae}","EVEX.512.66.0F38.W1 CC
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes approximations to the Reciprocal square root
(<2^-28 relative error) of the packed double-precision floating-point values
from zmm2/m512/m64bcst and stores result in zmm1with writemask k1."
+"VRSQRT28PS zmm1 {k1}{z}, zmm2/m512/m32bcst {sae}","EVEX.512.66.0F38.W0 CC
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes approximations to the Reciprocal square root
(<2^-28 relative error) of the packed single-precision floating-point values
from zmm2/m512/m32bcst and stores result in zmm1with writemask k1."
+"VRSQRT28SD xmm1 {k1}{z}, xmm2, xmm3/m64 {sae}","EVEX.LIG.66.0F38.W1 CD
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes approximate reciprocal square
root (<2^-28 relative error) of the scalar double-precision floating-point
value from xmm3/m64 and stores result in xmm1with writemask k1. Also, upper
double-precision floating-point value (bits[127:64]) from xmm2 is copied to
xmm1[127:64]."
+"VRSQRT28SS xmm1 {k1}{z}, xmm2, xmm3/m32 {sae}","EVEX.LIG.66.0F38.W0 CD
/r","Valid","Valid","Invalid","AVX512ER","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes approximate reciprocal square
root (<2^-28 relative error) of the scalar single-precision floating-point
value from xmm3/m32 and stores result in xmm1with writemask k1. Also, upper 3
single-precision floating-point value (bits[127:32]) from xmm2 is copied to
xmm1[127:32]."
diff --git a/disas/x86-data/x86_avx512f.csv b/disas/x86-data/x86_avx512f.csv
new file mode 100644
index 000000000000..ccfbd4f13907
--- /dev/null
+++ b/disas/x86-data/x86_avx512f.csv
@@ -0,0 +1,901 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"KANDNW k1, k2, k3","VEX.L1.0F.W0 42
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bfarmitwise AND NOT 16
bits masks k2 and k3 and place result in k1."
+"KANDW k1, k2, k3","VEX.L1.0F.W0 41
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise AND 16 bits masks
k2 and k3 and place result in k1."
+"KMOVW k1, k2/m16","VEX.L0.0F.W0 90
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move 16 bits mask from k2/m16 and store the result in k1."
+"KMOVW m16, k1","VEX.L0.0F.W0 91
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w, ModRM:[7:6] must not be
11b)","ModRM:reg (r)","","","","Move 16 bits mask from k1 and store the result
in m16."
+"KMOVW k1, rw","VEX.L0.0F.W0 92
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Move 16 bits mask from r to k1."
+"KMOVW rw, k1","VEX.L0.0F.W0 93
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Move 16 bits mask from k1 to r."
+"KNOTW k1, k2","VEX.L0.0F.W0 44
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Bitwise NOT of 16 bits mask k2."
+"KORTESTW k1, k2","VEX.L0.0F.W0 98
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","","","","Bitwise OR 16 bits masks k1 and k2 and
update ZF and CF accordingly."
+"KORW k1, k2, k3","VEX.L1.0F.W0 45
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise OR 16 bits masks
k2 and k3 and place result in k1."
+"KSHIFTLW k1, k2, ib","VEX.L0.66.0F3A.W1 32 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","ib","","","Shift left 16 bits in k2 by immediate and
write result in k1."
+"KSHIFTRW k1, k2, ib","VEX.L0.66.0F3A.W1 30 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m (r,
ModRM:[7:6] must be 11b)","ib","","","Shift right 16 bits in k2 by immediate
and write result in k1."
+"KUNPCKBW k1, k2, k3","VEX.L1.66.0F.W0 4B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Unpack and interleave 8
bits masks in k2 and k3 and write word result in k1."
+"KXNORW k1, k2, k3","VEX.L1.0F.W0 46
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise XNOR 16 bits masks
k2 and k3 and place result in k1."
+"KXORW k1, k2, k3","VEX.L1.0F.W0 47
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r, ModRM:[7:6] must be 11b)","","","Bitwise XOR 16 bits masks
k2 and k3 and place result in k1."
+"VADDPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 58
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed double-precision
floating-point values from xmm3/m128/m64bcst to xmm2 and store result in xmm1
with writemask k1."
+"VADDPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 58
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed double-precision
floating-point values from ymm3/m256/m64bcst to ymm2 and store result in ymm1
with writemask k1."
+"VADDPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F.W1 58
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed double-precision
floating-point values from zmm3/m512/m64bcst to zmm2 and store result in zmm1
with writemask k1."
+"VADDPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 58
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed single-precision
floating-point values from xmm3/m128/m32bcst to xmm2 and store result in xmm1
with writemask k1."
+"VADDPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 58
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed single-precision
floating-point values from ymm3/m256/m32bcst to ymm2 and store result in ymm1
with writemask k1."
+"VADDPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst {er}","EVEX.512.0F.W0 58
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed single-precision
floating-point values from zmm3/m512/m32bcst to zmm2 and store result in zmm1
with writemask k1."
+"VADDSD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.F2.0F.W1 58
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Add the low double-precision
floating-point value from xmm3/m64 to xmm2 and store the result in xmm1 with
writemask k1."
+"VADDSS xmm1{k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.F3.0F.W0 58
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Add the low single-precision
floating-point value from xmm3/m32 to xmm2 and store the result in xmm1with
writemask k1."
+"VALIGND xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 03 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shift right and merge vectors xmm2 and
xmm3/m128/m32bcst with double-word granularity using ib as number of elements
to shift, and store the final result in xmm1, under writemask."
+"VALIGND ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 03 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shift right and merge vectors ymm2 and
ymm3/m256/m32bcst with double-word granularity using ib as number of elements
to shift, and store the final result in ymm1, under writemask."
+"VALIGND zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst, ib","EVEX.512.66.0F3A.W0 03 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shift right and merge vectors zmm2 and
zmm3/m512/m32bcst with double-word granularity using ib as number of elements
to shift, and store the final result in zmm1, under writemask."
+"VALIGNQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 03 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shift right and merge vectors xmm2 and
xmm3/m128/m64bcst with quad-word granularity using ib as number of elements to
shift, and store the final result in xmm1, under writemask."
+"VALIGNQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 03 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shift right and merge vectors ymm2 and
ymm3/m256/m64bcst with quad-word granularity using ib as number of elements to
shift, and store the final result in ymm1, under writemask."
+"VALIGNQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 03 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shift right and merge vectors zmm2 and
zmm3/m512/m64bcst with quad-word granularity using ib as number of elements to
shift, and store the final result in zmm1, under writemask."
+"VBLENDMPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 65
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend double-precision vector xmm2 and
double-precision vector xmm3/m128/m64bcst and store the result in xmm1, under
control mask."
+"VBLENDMPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 65
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend double-precision vector ymm2 and
double-precision vector ymm3/m256/m64bcst and store the result in ymm1, under
control mask."
+"VBLENDMPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 65
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend double-precision vector zmm2 and
double-precision vector zmm3/m512/m64bcst and store the result in zmm1, under
control mask."
+"VBLENDMPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 65
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend single-precision vector xmm2 and
single-precision vector xmm3/m128/m32bcst and store the result in xmm1, under
control mask."
+"VBLENDMPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 65
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend single-precision vector ymm2 and
single-precision vector ymm3/m256/m32bcst and store the result in ymm1, under
control mask."
+"VBLENDMPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 65
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend single-precision vector zmm2 and
single-precision vector zmm3/m512/m32bcst using k1 as select control and store
the result in zmm1."
+"VBROADCASTF32X4 ymm1 {k1}{z}, m128","EVEX.256.66.0F38.W0 1A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple4","Broadcast 128 bits of 4 single-precision floating-point
data in mem to locations in ymm1 using writemask k1."
+"VBROADCASTF32X4 zmm1 {k1}{z}, m128","EVEX.512.66.0F38.W0 1A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple4","Broadcast 128 bits of 4 single-precision floating-point
data in mem to locations in zmm1 using writemask k1."
+"VBROADCASTF64X4 zmm1 {k1}{z}, m256","EVEX.512.66.0F38.W1 1B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple4","Broadcast 256 bits of 4 double precision floating-point
data in mem to locations in zmm1 using writemask k1."
+"VBROADCASTI32X4 ymm1 {k1}{z}, m128","EVEX.256.66.0F38.W0 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple4","Broadcast 128 bits of 4 doubleword integer data in mem to
locations in ymm1 using writemask k1."
+"VBROADCASTI32X4 zmm1 {k1}{z}, m128","EVEX.512.66.0F38.W0 5A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple4","Broadcast 128 bits of 4 doubleword integer data in mem to
locations in zmm1 using writemask k1."
+"VBROADCASTI64X4 zmm1 {k1}{z}, m256","EVEX.512.66.0F38.W1 5B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple4","Broadcast 256 bits of 4 quadword integer data in mem to
locations in zmm1 using writemask k1."
+"VBROADCASTSD ymm1 {k1}{z}, xmm2/m64","EVEX.256.66.0F38.W1 19
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast low double-precision floating-point
element in xmm2/m64 to four locations in ymm1 using writemask k1."
+"VBROADCASTSD zmm1 {k1}{z}, xmm2/m64","EVEX.512.66.0F38.W1 19
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast low double-precision floating-point
element in xmm2/m64 to eight locations in zmm1 using writemask k1."
+"VBROADCASTSS xmm1 {k1}{z}, xmm2/m32","EVEX.128.66.0F38.W0 18
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast low single-precision floating-point
element in xmm2/m32 to all locations in xmm1 using writemask k1."
+"VBROADCASTSS ymm1 {k1}{z}, xmm2/m32","EVEX.256.66.0F38.W0 18
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast low single-precision floating-point
element in xmm2/m32 to all locations in ymm1 using writemask k1."
+"VBROADCASTSS zmm1 {k1}{z}, xmm2/m32","EVEX.512.66.0F38.W0 18
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast low single-precision floating-point
element in xmm2/m32 to all locations in zmm1 using writemask k1."
+"VCMPPD k1 {k2}, xmm2, xmm3/m128/m64bcst, ib","EVEX.128.66.0F.W1 C2 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed double-precision
floating-point values in xmm3/m128/m64bcst and xmm2 using bits 4:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VCMPPD k1 {k2}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F.W1 C2 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed double-precision
floating-point values in ymm3/m256/m64bcst and ymm2 using bits 4:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VCMPPD k1 {k2}, zmm2, zmm3/m512/m64bcst{sae}, ib","EVEX.512.66.0F.W1 C2 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed double-precision
floating-point values in zmm3/m512/m64bcst and zmm2 using bits 4:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VCMPPS k1 {k2}, xmm2, xmm3/m128/m32bcst, ib","EVEX.128.0F.W0 C2 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed single-precision
floating-point values in xmm3/m128/m32bcst and xmm2 using bits 4:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VCMPPS k1 {k2}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.0F.W0 C2 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed single-precision
floating-point values in ymm3/m256/m32bcst and ymm2 using bits 4:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VCMPPS k1 {k2}, zmm2, zmm3/m512/m32bcst{sae}, ib","EVEX.512.0F.W0 C2 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed single-precision
floating-point values in zmm3/m512/m32bcst and zmm2 using bits 4:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VCMPSD k1 {k2}, xmm2, xmm3/m64{sae}, ib","EVEX.LIG.F2.0F.W1 C2 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Compare low double-precision
floating-point value in xmm3/m64 and xmm2 using bits 4:0 of ib as comparison
predicate with writemask k2 and leave the result in mask register k1."
+"VCMPSS k1 {k2}, xmm2, xmm3/m32{sae}, ib","EVEX.LIG.F3.0F.W0 C2 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Compare low single-precision
floating-point value in xmm3/m32 and xmm2 using bits 4:0 of ib as comparison
predicate with writemask k2 and leave the result in mask register k1."
+"VCOMISD xmm1, xmm2/m64{sae}","EVEX.LIG.66.0F.W1 2F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r)","ModRM:r/m
(r)","","","Tuple1 Scalar","Compare low double-precision floating-point values
in xmm1 and xmm2/mem64 and set the EFLAGS flags accordingly."
+"VCOMISS xmm1, xmm2/m32{sae}","EVEX.LIG.0F.W0 2F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r)","ModRM:r/m
(r)","","","Tuple1 Scalar","Compare low single-precision floating-point values
in xmm1 and xmm2/mem32 and set the EFLAGS flags accordingly."
+"VCOMPRESSPD xmm1/m128/f64x2 {k1}{z}, xmm2","EVEX.128.66.0F38.W1 8A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed double-precision floating-point
values from xmm2 to xmm1/m128 using writemask k1."
+"VCOMPRESSPD ymm1/m256/f64x4 {k1}{z}, ymm2","EVEX.256.66.0F38.W1 8A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed double-precision floating-point
values from ymm2 to ymm1/m256 using writemask k1."
+"VCOMPRESSPD zmm1/m512/f64x8 {k1}{z}, zmm2","EVEX.512.66.0F38.W1 8A
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed double-precision floating-point
values from zmm2 using control mask k1 to zmm1/m512."
+"VCOMPRESSPS xmm1/m128/f32x4 {k1}{z}, xmm2","EVEX.128.66.0F38.W0 8A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed single-precision floating-point
values from xmm2 to xmm1/m128 using writemask k1."
+"VCOMPRESSPS ymm1/m256/f32x8 {k1}{z}, ymm2","EVEX.256.66.0F38.W0 8A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed single-precision floating-point
values from ymm2 to ymm1/m256 using writemask k1."
+"VCOMPRESSPS zmm1/m512/f32x16 {k1}{z}, zmm2","EVEX.512.66.0F38.W0 8A
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed single-precision floating-point
values from zmm2 using control mask k1 to zmm1/m512."
+"VCVTDQ2PD xmm1 {k1}{z}, xmm2/m64/m32bcst","EVEX.128.F3.0F.W0 E6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert 2 packed signed doubleword integers from
xmm2/m128/m32bcst to eight packed double-precision floating-point values in
xmm1 with writemask k1."
+"VCVTDQ2PD ymm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.256.F3.0F.W0 E6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert 4 packed signed doubleword integers from
xmm2/m128/m32bcst to 4 packed double-precision floating-point values in ymm1
with writemask k1."
+"VCVTDQ2PD zmm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.512.F3.0F.W0 E6
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed signed doubleword integers from
ymm2/m256/m32bcst to eight packed double-precision floating-point values in
zmm1 with writemask k1."
+"VCVTDQ2PS xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed signed doubleword integers from
xmm2/m128/m32bcst to four packed single-precision floating-point values in
xmm1with writemask k1."
+"VCVTDQ2PS ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed signed doubleword integers from
ymm2/m256/m32bcst to eight packed single-precision floating-point values in
ymm1with writemask k1."
+"VCVTDQ2PS zmm1 {k1}{z}, zmm2/m512/m32bcst{er}","EVEX.512.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed signed doubleword integers
from zmm2/m512/m32bcst to sixteen packed single-precision floating-point values
in zmm1with writemask k1."
+"VCVTPD2DQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.F2.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values in xmm2/m128/m64bcst to two signed doubleword integers in xmm1 subject
to writemask k1."
+"VCVTPD2DQ xmm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.F2.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double-precision floating-point
values in ymm2/m256/m64bcst to four signed doubleword integers in xmm1 subject
to writemask k1."
+"VCVTPD2DQ ymm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.F2.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values in zmm2/m512/m64bcst to eight signed doubleword integers in ymm1 subject
to writemask k1."
+"VCVTPD2PS xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F.W1 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values in xmm2/m128/m64bcst to two single-precision floating-point values in
xmm1with writemask k1."
+"VCVTPD2PS xmm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F.W1 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double-precision floating-point
values in ymm2/m256/m64bcst to four single-precision floating-point values in
xmm1with writemask k1."
+"VCVTPD2PS ymm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.66.0F.W1 5A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values in zmm2/m512/m64bcst to eight single-precision floating-point values in
ymm1with writemask k1."
+"VCVTPD2UDQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.0F.W1 79
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values in xmm2/m128/m64bcst to two unsigned doubleword integers in xmm1 subject
to writemask k1."
+"VCVTPD2UDQ xmm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.0F.W1 79
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double-precision floating-point
values in ymm2/m256/m64bcst to four unsigned doubleword integers in xmm1
subject to writemask k1."
+"VCVTPD2UDQ ymm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.0F.W1 79
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values in zmm2/m512/m64bcst to eight unsigned doubleword integers in ymm1
subject to writemask k1."
+"VCVTPH2PS xmm1 {k1}{z}, xmm2/m64","EVEX.128.66.0F38.W0 13
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Convert four packed half precision (16-bit)
floating-point values in xmm2/m64 to packed single-precision floating-point
values in xmm1."
+"VCVTPH2PS ymm1 {k1}{z}, xmm2/m128","EVEX.256.66.0F38.W0 13
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Convert eight packed half precision (16-bit)
floating-point values in xmm2/m128 to packed single-precision floating-point
values in ymm1."
+"VCVTPH2PS zmm1 {k1}{z}, ymm2/m256 {sae}","EVEX.512.66.0F38.W0 13
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Convert sixteen packed half precision (16-bit)
floating-point values in ymm2/m256 to packed single-precision floating-point
values in zmm1."
+"VCVTPS2DQ xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.66.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed single precision floating-point
values from xmm2/m128/m32bcst to four packed signed doubleword values in xmm1
subject to writemask k1."
+"VCVTPS2DQ ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.66.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed single precision floating-point
values from ymm2/m256/m32bcst to eight packed signed doubleword values in ymm1
subject to writemask k1."
+"VCVTPS2DQ zmm1 {k1}{z}, zmm2/m512/m32bcst{er}","EVEX.512.66.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed single-precision
floating-point values from zmm2/m512/m32bcst to sixteen packed signed
doubleword values in zmm1 subject to writemask k1."
+"VCVTPS2PD xmm1 {k1}{z}, xmm2/m64/m32bcst","EVEX.128.0F.W0 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert two packed single-precision floating-point
values in xmm2/m64/m32bcst to packed double-precision floating-point values in
xmm1 with writemask k1."
+"VCVTPS2PD zmm1 {k1}{z}, ymm2/m256/m32bcst{sae}","EVEX.512.0F.W0 5A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed single-precision floating-point
values in ymm2/m256/b32bcst to eight packed double-precision floating-point
values in zmm1 with writemask k1."
+"VCVTPS2PH xmm1/m128 {k1}{z}, ymm2, ib","EVEX.256.66.0F3A.W0 1D /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Half Vector Mem","Convert eight packed single-precision
floating-point values in ymm2 to packed half-precision (16-bit) floating-point
values in xmm1/m128. ib provides rounding controls."
+"VCVTPS2PH xmm1/m64 {k1}{z}, xmm2, ib","EVEX.128.66.0F3A.W0 1D /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Half Vector Mem","Convert four packed single-precision
floating-point values in xmm2 to packed half-precision (16-bit) floating-point
values in xmm1/m64. ib provides rounding controls."
+"VCVTPS2PH ymm1/m256 {k1}{z}, zmm2{sae}, ib","EVEX.512.66.0F3A.W0 1D /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Half Vector Mem","Convert sixteen packed single-precision
floating-point values in zmm2 to packed half-precision (16-bit) floating-point
values in ymm1/m256. ib provides rounding controls."
+"VCVTPS2UDQ xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.0F.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed single precision floating-point
values from xmm2/m128/m32bcst to four packed unsigned doubleword values in xmm1
subject to writemask k1."
+"VCVTPS2UDQ ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.0F.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed single precision floating-point
values from ymm2/m256/m32bcst to eight packed unsigned doubleword values in
ymm1 subject to writemask k1."
+"VCVTPS2UDQ zmm1 {k1}{z}, zmm2/m512/m32bcst{er}","EVEX.512.0F.W0 79
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed single-precision
floating-point values from zmm2/m512/m32bcst to sixteen packed unsigned
doubleword values in zmm1 subject to writemask k1."
+"VCVTSD2SI rw, xmm1/m64{er}","EVEX.LIG.F2.0F.W0 2D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one signed doubleword integer r."
+"VCVTSD2SI rw, xmm1/m64{er}","EVEX.LIG.F2.0F.W1 2D
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one signed quadword integer signextended into r."
+"VCVTSD2SS xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.F2.0F.W1 5A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one double-precision
floating-point value in xmm3/m64 to one single-precision floating-point value
and merge with high bits in xmm2 under writemask k1."
+"VCVTSD2USI rw, xmm1/m64{er}","EVEX.LIG.F2.0F.W0 79
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one unsigned doubleword integer r."
+"VCVTSD2USI rw, xmm1/m64{er}","EVEX.LIG.F2.0F.W1 79
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one unsigned quadword integer zeroextended into r."
+"VCVTSI2SD xmm1, xmm2, rw/mw","EVEX.LIG.F2.0F.W0 2A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one signed doubleword integer
from r/m to one double-precision floating-point value in xmm1."
+"VCVTSI2SD xmm1, xmm2, rw/mw{er}","EVEX.LIG.F2.0F.W1 2A
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one signed quadword integer
from r/m to one double-precision floating-point value in xmm1."
+"VCVTSI2SS xmm1, xmm2, rw/mw{er}","EVEX.LIG.F3.0F.W0 2A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one signed doubleword integer
from r/m to one single-precision floating-point value in xmm1."
+"VCVTSI2SS xmm1, xmm2, rw/mw{er}","EVEX.LIG.F3.0F.W1 2A
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one signed quadword integer
from r/m to one single-precision floating-point value in xmm1."
+"VCVTSS2SD xmm1{k1}{z}, xmm2, xmm3/m32{sae}","EVEX.LIG.F3.0F.W0 5A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one single-precision
floating-point value in xmm3/m32 to one double-precision floating-point value
and merge with high bits of xmm2 under writemask k1."
+"VCVTSS2SI rw, xmm1/m32{er}","EVEX.LIG.F3.0F.W0 2D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one single-precision floating-point value
from xmm1/m32 to one signed doubleword integer in r."
+"VCVTSS2SI rw, xmm1/m32{er}","EVEX.LIG.F3.0F.W1 2D
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one single-precision floating-point value
from xmm1/m32 to one signed quadword integer in r."
+"VCVTSS2USI rw, xmm1/m32{er}","EVEX.LIG.F3.0F.W0 79
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one single-precision floating-point value
from xmm1/m32 to one unsigned doubleword integer in r."
+"VCVTSS2USI rw, xmm1/m32{er}","EVEX.LIG.F3.0F.W1 79
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one single-precision floating-point value
from xmm1/m32 to one unsigned quadword integer in r."
+"VCVTTPD2DQ xmm1{k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values in xmm2/m128/m64bcst to two signed doubleword integers in xmm1 using
truncation subject to writemask k1."
+"VCVTTPD2DQ xmm1{k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double-precision floating-point
values in ymm2/m256/m64bcst to four signed doubleword integers in xmm1 using
truncation subject to writemask k1."
+"VCVTTPD2DQ ymm1{k1}{z}, zmm2/m512/m64bcst{sae}","EVEX.512.66.0F.W1 E6
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values in zmm2/m512/m64bcst to eight signed doubleword integers in ymm1 using
truncation subject to writemask k1."
+"VCVTTPD2UDQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.0F.W1 78
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double-precision floating-point
values in xmm2/m128/m64bcst to two unsigned doubleword integers in xmm1 using
truncation subject to writemask k1."
+"VCVTTPD2UDQ xmm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.0F.W1 78
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double-precision floating-point
values in ymm2/m256/m64bcst to four unsigned doubleword integers in xmm1 using
truncation subject to writemask k1."
+"VCVTTPD2UDQ ymm1 {k1}{z}, zmm2/m512/m64bcst{sae}","EVEX.512.0F.W1 78
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double-precision floating-point
values in zmm2/m512/m64bcst to eight unsigned doubleword integers in ymm1 using
truncation subject to writemask k1."
+"VCVTTPS2DQ xmm1{k1}{z}, xmm2/m128/m32bcst","EVEX.128.F3.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed single precision floating-point
values from xmm2/m128/m32bcst to four packed signed doubleword values in xmm1
using truncation subject to writemask k1."
+"VCVTTPS2DQ ymm1{k1}{z}, ymm2/m256/m32bcst","EVEX.256.F3.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed single precision floating-point
values from ymm2/m256/m32bcst to eight packed signed doubleword values in ymm1
using truncation subject to writemask k1."
+"VCVTTPS2DQ zmm1{k1}{z}, zmm2/m512/m32bcst {sae}","EVEX.512.F3.0F.W0 5B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed single-precision
floating-point values from zmm2/m512/m32bcst to sixteen packed signed
doubleword values in zmm1 using truncation subject to writemask k1."
+"VCVTTPS2UDQ xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.0F.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed single precision floating-point
values from xmm2/m128/m32bcst to four packed unsigned doubleword values in xmm1
using truncation subject to writemask k1."
+"VCVTTPS2UDQ ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.0F.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed single precision floating-point
values from ymm2/m256/m32bcst to eight packed unsigned doubleword values in
ymm1 using truncation subject to writemask k1."
+"VCVTTPS2UDQ zmm1 {k1}{z}, zmm2/m512/m32bcst{sae}","EVEX.512.0F.W0 78
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed single-precision
floating-point values from zmm2/m512/m32bcst to sixteen packed unsigned
doubleword values in zmm1 using truncation subject to writemask k1."
+"VCVTTSD2SI rw, xmm1/m64{sae}","EVEX.LIG.F2.0F.W0 2C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one signed doubleword integer in r using truncation."
+"VCVTTSD2SI rw, xmm1/m64{sae}","EVEX.LIG.F2.0F.W1 2C
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one signed quadword integer in r using truncation."
+"VCVTTSD2USI rw, xmm1/m64{sae}","EVEX.LIG.F2.0F.W0 78
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one unsigned doubleword integer r using truncation."
+"VCVTTSD2USI rw, xmm1/m64{sae}","EVEX.LIG.F2.0F.W1 78
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one double-precision floating-point value
from xmm1/m64 to one unsigned quadword integer zeroextended into r using
truncation."
+"VCVTTSS2SI rw, xmm1/m32{sae}","EVEX.LIG.F3.0F.W0 2C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one single-precision floating-point value
from xmm1/m32 to one signed doubleword integer in r using truncation."
+"VCVTTSS2SI rw, xmm1/m32{sae}","EVEX.LIG.F3.0F.W1 2C
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one single-precision floating-point value
from xmm1/m32 to one signed quadword integer in r using truncation."
+"VCVTTSS2USI rw, xmm1/m32{sae}","EVEX.LIG.F3.0F.W0 78
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one single-precision floating-point value
from xmm1/m32 to one unsigned doubleword integer in r using truncation."
+"VCVTTSS2USI rw, xmm1/m32{sae}","EVEX.LIG.F3.0F.W1 78
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Fixed","Convert one single-precision floating-point value
from xmm1/m32 to one unsigned quadword integer in r using truncation."
+"VCVTUDQ2PD xmm1 {k1}{z}, xmm2/m64/m32bcst","EVEX.128.F3.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert two packed unsigned doubleword integers from
ymm2/m64/m32bcst to packed double-precision floating-point values in zmm1 with
writemask k1."
+"VCVTUDQ2PD ymm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.256.F3.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed unsigned doubleword integers from
xmm2/m128/m32bcst to packed double-precision floating-point values in zmm1 with
writemask k1."
+"VCVTUDQ2PD zmm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.512.F3.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed unsigned doubleword integers
from ymm2/m256/m32bcst to eight packed double-precision floating-point values
in zmm1 with writemask k1."
+"VCVTUDQ2PS xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.F2.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed unsigned doubleword integers from
xmm2/m128/m32bcst to packed single-precision floating-point values in xmm1 with
writemask k1."
+"VCVTUDQ2PS ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.F2.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed unsigned doubleword integers
from ymm2/m256/m32bcst to packed single-precision floating-point values in zmm1
with writemask k1."
+"VCVTUDQ2PS zmm1 {k1}{z}, zmm2/m512/m32bcst{er}","EVEX.512.F2.0F.W0 7A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed unsigned doubleword integers
from zmm2/m512/m32bcst to sixteen packed single-precision floating-point values
in zmm1 with writemask k1."
+"VCVTUSI2SD xmm1, xmm2, rw/mw","EVEX.LIG.F2.0F.W0 7B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one unsigned doubleword
integer from r/m to one double-precision floating-point value in xmm1."
+"VCVTUSI2SD xmm1, xmm2, rw/mw{er}","EVEX.LIG.F2.0F.W1 7B
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one unsigned quadword integer
from r/m to one double-precision floating-point value in xmm1."
+"VCVTUSI2SS xmm1, xmm2, rw/mw{er}","EVEX.LIG.F3.0F.W0 7B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one signed doubleword integer
from r/m to one single-precision floating-point value in xmm1."
+"VCVTUSI2SS xmm1, xmm2, rw/mw{er}","EVEX.LIG.F3.0F.W1 7B
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert one signed quadword integer
from r/m to one single-precision floating-point value in xmm1."
+"VDIVPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 5E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed double-precision
floating-point values in xmm2 by packed double-precision floating-point values
in xmm3/m128/m64bcst and write results to xmm1 subject to writemask k1."
+"VDIVPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 5E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed double-precision
floating-point values in ymm2 by packed double-precision floating-point values
in ymm3/m256/m64bcst and write results to ymm1 subject to writemask k1."
+"VDIVPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F.W1 5E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed double-precision
floating-point values in zmm2 by packed double-precision FP values in
zmm3/m512/m64bcst and write results to zmm1 subject to writemask k1."
+"VDIVPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 5E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed single-precision
floating-point values in xmm2 by packed single-precision floating-point values
in xmm3/m128/m32bcst and write results to xmm1 subject to writemask k1."
+"VDIVPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 5E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed single-precision
floating-point values in ymm2 by packed single-precision floating-point values
in ymm3/m256/m32bcst and write results to ymm1 subject to writemask k1."
+"VDIVPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.0F.W0 5E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed single-precision
floating-point values in zmm2 by packed single-precision floating-point values
in zmm3/m512/m32bcst and write results to zmm1 subject to writemask k1."
+"VDIVSD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.F2.0F.W1 5E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Divide low double-precision
floating-point value in xmm2 by low double-precision floating-point value in
xmm3/m64."
+"VDIVSS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.F3.0F.W0 5E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Divide low single-precision
floating-point value in xmm2 by low single-precision floating-point value in
xmm3/m32."
+"VEXPANDPD xmm1 {k1}{z}, xmm2/m128/f64x2","EVEX.128.66.0F38.W1 88
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed double-precision floating-point
values from xmm2/m128 to xmm1 using writemask k1."
+"VEXPANDPD ymm1 {k1}{z}, ymm2/m256/f64x4","EVEX.256.66.0F38.W1 88
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed double-precision floating-point
values from ymm2/m256 to ymm1 using writemask k1."
+"VEXPANDPD zmm1 {k1}{z}, zmm2/m512/f64x8","EVEX.512.66.0F38.W1 88
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed double-precision floating-point
values from zmm2/m512 to zmm1 using writemask k1."
+"VEXPANDPS xmm1 {k1}{z}, xmm2/m128/f32x4","EVEX.128.66.0F38.W0 88
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed single-precision floating-point
values from xmm2/m128 to xmm1 using writemask k1."
+"VEXPANDPS ymm1 {k1}{z}, ymm2/m256/f32x8","EVEX.256.66.0F38.W0 88
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed single-precision floating-point
values from ymm2/m256 to ymm1 using writemask k1."
+"VEXPANDPS zmm1 {k1}{z}, zmm2/m512/f32x16","EVEX.512.66.0F38.W0 88
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed single-precision floating-point
values from zmm2/m512 to zmm1 using writemask k1."
+"VEXTRACTF32X4 xmm/m128{k}{z},ymm,ib","EVEX.256.66.0F3A.W0 19 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple4","Extract 128 bits of packed single precision
floating-point values from ymm2 and store results in xmm1/m128 subject to
writemask k1."
+"VEXTRACTF32X4 xmm/m128{k}{z},zmm,ib","EVEX.512.66.0F3A.W0 19 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple4","Extract 128 bits of packed single precision
floating-point values from zmm2 and store results in xmm1/m128 subject to
writemask k1."
+"VEXTRACTF64X4 ymm/m256{k}{z},zmm,ib","EVEX.512.66.0F3A.W1 1b /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple4","Extract 256 bits of packed double precision
floating-point values from zmm2 and store results in ymm1/m256 subject to
writemask k1."
+"VEXTRACTI32X4 xmm/m128{k}{z},ymm,ib","EVEX.256.66.0F3A.W0 39 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple4","Extract 128 bits of double-word integer values from ymm2
and store results in xmm1/m128 subject to writemask k1."
+"VEXTRACTI32X4 xmm/m128{k}{z},zmm,ib","EVEX.512.66.0F3A.W0 39 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple4","Extract 128 bits of double-word integer values from zmm2
and store results in xmm1/m128 subject to writemask k1."
+"VEXTRACTI64X4 ymm/m256{k}{z},zmm,ib","EVEX.512.66.0F3A.W1 3b /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple4","Extract 256 bits of quad-word integer values from zmm2
and store results in ymm1/m256 subject to writemask k1."
+"VEXTRACTPS r32/m32, xmm1, ib","EVEX.128.66.0F3A.WIG 17 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","ib","","Tuple1 Scalar","Extract one single-precision floating-point value
from xmm1 at the offset specified by ib and store the result in reg or m32.
Zero extend the results in 64-bit register if applicable."
+"VFIXUPIMMPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst, ib","EVEX.128.66.0F3A.W1
54 /r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","ib","Full Vector","Fix up special numbers
in float64 vector xmm1, float64 vector xmm2 and int64 vector xmm3/m128/m64bcst
and store the result in xmm1, under writemask."
+"VFIXUPIMMPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F3A.W1
54 /r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","ib","Full Vector","Fix up special numbers
in float64 vector ymm1, float64 vector ymm2 and int64 vector ymm3/m256/m64bcst
and store the result in ymm1, under writemask."
+"VFIXUPIMMPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{sae},
ib","EVEX.512.66.0F3A.W1 54 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Fix up elements of float64 vector in
zmm2 using int64 vector table in zmm3/m512/m64bcst, combine with preserved
elements from zmm1, and store the result in zmm1."
+"VFIXUPIMMPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst, ib","EVEX.128.66.0F3A.W0
54 /r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","ib","Full Vector","Fix up special numbers
in float32 vector xmm1, float32 vector xmm2 and int32 vector xmm3/m128/m32bcst
and store the result in xmm1, under writemask."
+"VFIXUPIMMPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.66.0F3A.W0
54 /r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","ib","Full Vector","Fix up special numbers
in float32 vector ymm1, float32 vector ymm2 and int32 vector ymm3/m256/m32bcst
and store the result in ymm1, under writemask."
+"VFIXUPIMMPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{sae},
ib","EVEX.512.66.0F3A.W0 54 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Fix up elements of float32 vector in
zmm2 using int32 vector table in zmm3/m512/m32bcst, combine with preserved
elements from zmm1, and store the result in zmm1."
+"VFIXUPIMMSD xmm1 {k1}{z}, xmm2, xmm3/m64{sae}, ib","EVEX.LIG.66.0F3A.W1 55 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Fix up a float64 number in the low
quadword element of xmm2 using scalar int32 table in xmm3/m64 and store the
result in xmm1."
+"VFIXUPIMMSS xmm1 {k1}{z}, xmm2, xmm3/m32{sae}, ib","EVEX.LIG.66.0F3A.W0 55 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Fix up a float32 number in the low
doubleword element in xmm2 using scalar int32 table in xmm3/m32 and store the
result in xmm1."
+"VFMADD132PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 98
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm3/m128/m64bcst, add to xmm2 and put result in xmm1."
+"VFMADD132PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 98
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm3/m256/m64bcst, add to ymm2 and put
result in ymm1."
+"VFMADD132PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
98 /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm3/m512/m64bcst, add to zmm2 and put
result in zmm1."
+"VFMADD132PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 98
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm3/m128/m32bcst, add to xmm2 and put
result in xmm1."
+"VFMADD132PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 98
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm3/m256/m32bcst, add to ymm2 and put
result in ymm1."
+"VFMADD132PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
98 /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm3/m512/m32bcst, add to zmm2 and put
result in zmm1."
+"VFMADD132SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 99
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm1 and xmm3/m64, add to xmm2 and put result in
xmm1."
+"VFMADD132SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 99
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm1 and xmm3/m32, add to xmm2 and put result in
xmm1."
+"VFMADD213PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 A8
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm2, add to xmm3/m128/m64bcst and put
result in xmm1."
+"VFMADD213PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 A8
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm2, add to ymm3/m256/m64bcst and put
result in ymm1."
+"VFMADD213PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
A8 /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm2, add to zmm3/m512/m64bcst and put
result in zmm1."
+"VFMADD213PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 A8
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm2, add to xmm3/m128/m32bcst and put
result in xmm1."
+"VFMADD213PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 A8
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm2, add to ymm3/m256/m32bcst and put
result in ymm1."
+"VFMADD213PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
A8 /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm2, add to zmm3/m512/m32bcst and put
result in zmm1."
+"VFMADD213SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 A9
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm1 and xmm2, add to xmm3/m64 and put result in
xmm1."
+"VFMADD213SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 A9
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm1 and xmm2, add to xmm3/m32 and put result in
xmm1."
+"VFMADD231PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 B8
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm2 and xmm3/m128/m64bcst, add to xmm1 and put
result in xmm1."
+"VFMADD231PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 B8
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm2 and ymm3/m256/m64bcst, add to ymm1 and put
result in ymm1."
+"VFMADD231PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
B8 /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm2 and zmm3/m512/m64bcst, add to zmm1 and put
result in zmm1."
+"VFMADD231PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 B8
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm2 and xmm3/m128/m32bcst, add to xmm1 and put
result in xmm1."
+"VFMADD231PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 B8
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm2 and ymm3/m256/m32bcst, add to ymm1 and put
result in ymm1."
+"VFMADD231PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
B8 /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm2 and zmm3/m512/m32bcst, add to zmm1 and put
result in zmm1."
+"VFMADD231SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 B9
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm2 and xmm3/m64, add to xmm1 and put result in
xmm1."
+"VFMADD231SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 B9
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm2 and xmm3/m32, add to xmm1 and put result in
xmm1."
+"VFMADDSUB132PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 96
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm3/m128/m64bcst,add/subtract elements in
xmm2 and put result in xmm1 subject to writemask k1."
+"VFMADDSUB132PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 96
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm3/m256/m64bcst,add/subtract elements in
ymm2 and put result in ymm1 subject to writemask k1."
+"VFMADDSUB132PD zmm1 {k1}{z}, zmm2,
zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1 96
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm3/m512/m64bcst,add/subtract elements in
zmm2 and put result in zmm1 subject to writemask k1."
+"VFMADDSUB132PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 96
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm3/m128/m32bcst, add/subtract elements in
zmm2 and put result in xmm1 subject to writemask k1."
+"VFMADDSUB132PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 96
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm3/m256/m32bcst, add/subtract elements in
ymm2 and put result in ymm1 subject to writemask k1."
+"VFMADDSUB132PS zmm1 {k1}{z}, zmm2,
zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0 96
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm3/m512/m32bcst, add/subtract elements in
zmm2 and put result in zmm1 subject to writemask k1."
+"VFMADDSUB213PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 A6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm2,add/subtract elements in
xmm3/m128/m64bcst and put result in xmm1 subject to writemask k1."
+"VFMADDSUB213PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 A6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm2,add/subtract elements in
ymm3/m256/m64bcst and put result in ymm1 subject to writemask k1."
+"VFMADDSUB213PD zmm1 {k1}{z}, zmm2,
zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1 A6
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1and zmm2,add/subtract elements in
zmm3/m512/m64bcst and put result in zmm1 subject to writemask k1."
+"VFMADDSUB213PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 A6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm2, add/subtract elements in
xmm3/m128/m32bcst and put result in xmm1 subject to writemask k1."
+"VFMADDSUB213PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 A6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm2, add/subtract elements in
ymm3/m256/m32bcst and put result in ymm1 subject to writemask k1."
+"VFMADDSUB213PS zmm1 {k1}{z}, zmm2,
zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0 A6
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm2, add/subtract elements in
zmm3/m512/m32bcst and put result in zmm1 subject to writemask k1."
+"VFMADDSUB231PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 B6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm2 and xmm3/m128/m64bcst,add/subtract elements in
xmm1 and put result in xmm1 subject to writemask k1."
+"VFMADDSUB231PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 B6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm2 and ymm3/m256/m64bcst,add/subtract elements in
ymm1 and put result in ymm1 subject to writemask k1."
+"VFMADDSUB231PD zmm1 {k1}{z}, zmm2,
zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1 B6
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm2 and zmm3/m512/m64bcst,add/subtract elements in
zmm1 and put result in zmm1 subject to writemask k1."
+"VFMADDSUB231PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 B6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm2 and xmm3/m128/m32bcst, add/subtract elements in
xmm1 and put result in xmm1 subject to writemask k1."
+"VFMADDSUB231PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 B6
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm2 and ymm3/m256/m32bcst, add/subtract elements in
ymm1 and put result in ymm1 subject to writemask k1."
+"VFMADDSUB231PS zmm1 {k1}{z}, zmm2,
zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0 B6
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm2 and zmm3/m512/m32bcst, add/subtract elements in
zmm1 and put result in zmm1 subject to writemask k1."
+"VFMSUB132PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 9A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm3/m128/m64bcst, subtract xmm2 and put
result in xmm1 subject to writemask k1."
+"VFMSUB132PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 9A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm3/m256/m64bcst, subtract ymm2 and put
result in ymm1 subject to writemask k1."
+"VFMSUB132PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
9A /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm3/m512/m64bcst, subtract zmm2 and put
result in zmm1 subject to writemask k1."
+"VFMSUB132PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 9A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm3/m128/m32bcst, subtract xmm2 and put
result in xmm1."
+"VFMSUB132PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 9A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm3/m256/m32bcst, subtract ymm2 and put
result in ymm1."
+"VFMSUB132PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
9A /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm3/m512/m32bcst, subtract zmm2 and put
result in zmm1."
+"VFMSUB132SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 9B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm1 and xmm3/m64, subtract xmm2 and put result in
xmm1."
+"VFMSUB132SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 9B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm1 and xmm3/m32, subtract xmm2 and put result in
xmm1."
+"VFMSUB213PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 AA
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm2, subtract xmm3/m128/m64bcst and put
result in xmm1 subject to writemask k1."
+"VFMSUB213PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 AA
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm2, subtract ymm3/m256/m64bcst and put
result in ymm1 subject to writemask k1."
+"VFMSUB213PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
AA /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm2, subtract zmm3/m512/m64bcst and put
result in zmm1 subject to writemask k1."
+"VFMSUB213PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 AA
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm2, subtract xmm3/m128/m32bcst and put
result in xmm1."
+"VFMSUB213PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 AA
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm2, subtract ymm3/m256/m32bcst and put
result in ymm1."
+"VFMSUB213PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
AA /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm2, subtract zmm3/m512/m32bcst and put
result in zmm1."
+"VFMSUB213SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 AB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm1 and xmm2, subtract xmm3/m64 and put result in
xmm1."
+"VFMSUB213SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 AB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm1 and xmm2, subtract xmm3/m32 and put result in
xmm1."
+"VFMSUB231PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 BA
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm2 and xmm3/m128/m64bcst, subtract xmm1 and put
result in xmm1 subject to writemask k1."
+"VFMSUB231PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 BA
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm2 and ymm3/m256/m64bcst, subtract ymm1 and put
result in ymm1 subject to writemask k1."
+"VFMSUB231PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
BA /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm2 and zmm3/m512/m64bcst, subtract zmm1 and put
result in zmm1 subject to writemask k1."
+"VFMSUB231PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 BA
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm2 and xmm3/m128/m32bcst, subtract xmm1 and put
result in xmm1."
+"VFMSUB231PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 BA
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm2 and ymm3/m256/m32bcst, subtract ymm1 and put
result in ymm1."
+"VFMSUB231PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
BA /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm2 and zmm3/m512/m32bcst, subtract zmm1 and put
result in zmm1."
+"VFMSUB231SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 BB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm2 and xmm3/m64, subtract xmm1 and put result in
xmm1."
+"VFMSUB231SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 BB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm2 and xmm3/m32, subtract xmm1 and put result in
xmm1."
+"VFMSUBADD132PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 97
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm3/m128/m64bcst,subtract/add elements in
xmm2 and put result in xmm1 subject to writemask k1."
+"VFMSUBADD132PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 97
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm3/m256/m64bcst,subtract/add elements in
ymm2 and put result in ymm1 subject to writemask k1."
+"VFMSUBADD132PD zmm1 {k1}{z}, zmm2,
zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1 97
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm3/m512/m64bcst,subtract/add elements in
zmm2 and put result in zmm1 subject to writemask k1."
+"VFMSUBADD132PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 97
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm3/m128/m32bcst, subtract/add elements in
xmm2 and put result in xmm1 subject to writemask k1."
+"VFMSUBADD132PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 97
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm3/m256/m32bcst, subtract/add elements in
ymm2 and put result in ymm1 subject to writemask k1."
+"VFMSUBADD132PS zmm1 {k1}{z}, zmm2,
zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0 97
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm3/m512/m32bcst, subtract/add elements in
zmm2 and put result in zmm1 subject to writemask k1."
+"VFMSUBADD213PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 A7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm2,subtract/add elements in
xmm3/m128/m64bcst and put result in xmm1 subject to writemask k1."
+"VFMSUBADD213PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 A7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm2,subtract/add elements in
ymm3/m256/m64bcst and put result in ymm1 subject to writemask k1."
+"VFMSUBADD213PD zmm1 {k1}{z}, zmm2,
zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1 A7
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm2,subtract/add elements in
zmm3/m512/m64bcst and put result in zmm1 subject to writemask k1."
+"VFMSUBADD213PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 A7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm2, subtract/add elements in
xmm3/m128/m32bcst and put result in xmm1 subject to writemask k1."
+"VFMSUBADD213PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 A7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm2, subtract/add elements in
ymm3/m256/m32bcst and put result in ymm1 subject to writemask k1."
+"VFMSUBADD213PS zmm1 {k1}{z}, zmm2,
zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0 A7
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm2, subtract/add elements in
zmm3/m512/m32bcst and put result in zmm1 subject to writemask k1."
+"VFMSUBADD231PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 B7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm2 and xmm3/m128/m64bcst,subtract/add elements in
xmm1 and put result in xmm1 subject to writemask k1."
+"VFMSUBADD231PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 B7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm2 and ymm3/m256/m64bcst,subtract/add elements in
ymm1 and put result in ymm1 subject to writemask k1."
+"VFMSUBADD231PD zmm1 {k1}{z}, zmm2,
zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1 B7
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm2 and zmm3/m512/m64bcst,subtract/add elements in
zmm1 and put result in zmm1 subject to writemask k1."
+"VFMSUBADD231PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 B7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm2 and xmm3/m128/m32bcst, subtract/add elements in
xmm1 and put result in xmm1 subject to writemask k1."
+"VFMSUBADD231PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 B7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm2 and ymm3/m256/m32bcst, subtract/add elements in
ymm1 and put result in ymm1 subject to writemask k1."
+"VFMSUBADD231PS zmm1 {k1}{z}, zmm2,
zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0 B7
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm2 and zmm3/m512/m32bcst, subtract/add elements in
zmm1 and put result in zmm1 subject to writemask k1."
+"VFNMADD132PD xmm0 {k1}{z}, xmm1, xmm2/m128/m64bcst","EVEX.128.66.0F38.W1 9C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm3/m128/m64bcst, negate the
multiplication result and add to xmm2 and put result in xmm1."
+"VFNMADD132PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 9C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm3/m256/m64bcst, negate the
multiplication result and add to ymm2 and put result in ymm1."
+"VFNMADD132PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
9C /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm3/m512/m64bcst, negate the
multiplication result and add to zmm2 and put result in zmm1."
+"VFNMADD132PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 9C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm3/m128/m32bcst, negate the
multiplication result and add to xmm2 and put result in xmm1."
+"VFNMADD132PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 9C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm3/m256/m32bcst, negate the
multiplication result and add to ymm2 and put result in ymm1."
+"VFNMADD132PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
9C /r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed
single-precision floating-point values from zmm1 and zmm3/m512/m32bcst, negate
the multiplication result and add to zmm2 and put result in zmm1."
+"VFNMADD132SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 9D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm1 and xmm3/m64, negate the multiplication result
and add to xmm2 and put result in xmm1."
+"VFNMADD132SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 9D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm1 and xmm3/m32, negate the multiplication result
and add to xmm2 and put result in xmm1."
+"VFNMADD213PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 AC
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm2, negate the multiplication result and
add to xmm3/m128/m64bcst and put result in xmm1."
+"VFNMADD213PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 AC
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm2, negate the multiplication result and
add to ymm3/m256/m64bcst and put result in ymm1."
+"VFNMADD213PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
AC /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm2, negate the multiplication result and
add to zmm3/m512/m64bcst and put result in zmm1."
+"VFNMADD213PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 AC
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm2, negate the multiplication result and
add to xmm3/m128/m32bcst and put result in xmm1."
+"VFNMADD213PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 AC
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm2, negate the multiplication result and
add to ymm3/m256/m32bcst and put result in ymm1."
+"VFNMADD213PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
AC /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm2, negate the multiplication result and
add to zmm3/m512/m32bcst and put result in zmm1."
+"VFNMADD213SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 AD
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm1 and xmm2, negate the multiplication result and
add to xmm3/m64 and put result in xmm1."
+"VFNMADD213SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 AD
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm1 and xmm2, negate the multiplication result and
add to xmm3/m32 and put result in xmm1."
+"VFNMADD231PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 BC
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm2 and xmm3/m128/m64bcst, negate the
multiplication result and add to xmm1 and put result in xmm1."
+"VFNMADD231PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 BC
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm2 and ymm3/m256/m64bcst, negate the
multiplication result and add to ymm1 and put result in ymm1."
+"VFNMADD231PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
BC /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm2 and zmm3/m512/m64bcst, negate the
multiplication result and add to zmm1 and put result in zmm1."
+"VFNMADD231PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 BC
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm2 and xmm3/m128/m32bcst, negate the
multiplication result and add to xmm1 and put result in xmm1."
+"VFNMADD231PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 BC
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm2 and ymm3/m256/m32bcst, negate the
multiplication result and add to ymm1 and put result in ymm1."
+"VFNMADD231PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
BC /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm2 and zmm3/m512/m32bcst, negate the
multiplication result and add to zmm1 and put result in zmm1."
+"VFNMADD231SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 BD
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm2 and xmm3/m64, negate the multiplication result
and add to xmm1 and put result in xmm1."
+"VFNMADD231SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 BD
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm2 and xmm3/m32, negate the multiplication result
and add to xmm1 and put result in xmm1."
+"VFNMSUB132PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 9E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm3/m128/m64bcst, negate the
multiplication result and subtract xmm2 and put result in xmm1."
+"VFNMSUB132PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 9E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm3/m256/m64bcst, negate the
multiplication result and subtract ymm2 and put result in ymm1."
+"VFNMSUB132PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
9E /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm3/m512/m64bcst, negate the
multiplication result and subtract zmm2 and put result in zmm1."
+"VFNMSUB132PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 9E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm3/m128/m32bcst, negate the
multiplication result and subtract xmm2 and put result in xmm1."
+"VFNMSUB132PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 9E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm3/m256/m32bcst, negate the
multiplication result and subtract ymm2 and put result in ymm1."
+"VFNMSUB132PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
9E /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm3/m512/m32bcst, negate the
multiplication result and subtract zmm2 and put result in zmm1."
+"VFNMSUB132SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 9F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm1 and xmm3/m64, negate the multiplication result
and subtract xmm2 and put result in xmm1."
+"VFNMSUB132SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 9F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm1 and xmm3/m32, negate the multiplication result
and subtract xmm2 and put result in xmm1."
+"VFNMSUB213PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 AE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm1 and xmm2, negate the multiplication result and
subtract xmm3/m128/m64bcst and put result in xmm1."
+"VFNMSUB213PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 AE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm1 and ymm2, negate the multiplication result and
subtract ymm3/m256/m64bcst and put result in ymm1."
+"VFNMSUB213PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
AE /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm1 and zmm2, negate the multiplication result and
subtract zmm3/m512/m64bcst and put result in zmm1."
+"VFNMSUB213PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 AE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm1 and xmm2, negate the multiplication result and
subtract xmm3/m128/m32bcst and put result in xmm1."
+"VFNMSUB213PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 AE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm1 and ymm2, negate the multiplication result and
subtract ymm3/m256/m32bcst and put result in ymm1."
+"VFNMSUB213PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
AE /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm1 and zmm2, negate the multiplication result and
subtract zmm3/m512/m32bcst and put result in zmm1."
+"VFNMSUB213SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 AF
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm1 and xmm2, negate the multiplication result and
subtract xmm3/m64 and put result in xmm1."
+"VFNMSUB213SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 AF
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm1 and xmm2, negate the multiplication result and
subtract xmm3/m32 and put result in xmm1."
+"VFNMSUB231PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 BE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm2 and xmm3/m128/m64bcst, negate the
multiplication result and subtract xmm1 and put result in xmm1."
+"VFNMSUB231PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 BE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm2 and ymm3/m256/m64bcst, negate the
multiplication result and subtract ymm1 and put result in ymm1."
+"VFNMSUB231PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1
BE /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from zmm2 and zmm3/m512/m64bcst, negate the
multiplication result and subtract zmm1 and put result in zmm1."
+"VFNMSUB231PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 BE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm2 and xmm3/m128/m32bcst, negate the
multiplication result subtract add to xmm1 and put result in xmm1."
+"VFNMSUB231PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 BE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm2 and ymm3/m256/m32bcst, negate the
multiplication result subtract add to ymm1 and put result in ymm1."
+"VFNMSUB231PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0
BE /r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from zmm2 and zmm3/m512/m32bcst, negate the
multiplication result subtract add to zmm1 and put result in zmm1."
+"VFNMSUB231SD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 BF
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar double-precision
floating-point value from xmm2 and xmm3/m64, negate the multiplication result
and subtract xmm1 and put result in xmm1."
+"VFNMSUB231SS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 BF
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply scalar single-precision
floating-point value from xmm2 and xmm3/m32, negate the multiplication result
and subtract xmm1 and put result in xmm1."
+"VGATHERDPD xmm1 {k1}, vm32x/f64x2","EVEX.128.66.0F38.W1 92
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather float64 vector into float64 vector xmm1 using k1 as completion
mask."
+"VGATHERDPD ymm1 {k1}, vm32x/f64x4","EVEX.256.66.0F38.W1 92
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather float64 vector into float64 vector ymm1 using k1 as completion
mask."
+"VGATHERDPD zmm1 {k1}, vm32y/f64x8","EVEX.512.66.0F38.W1 92
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather float64 vector into float64 vector zmm1 using k1 as completion
mask."
+"VGATHERDPS xmm1 {k1}, vm32x/f32x4","EVEX.128.66.0F38.W0 92
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather single-precision floating-point values from memory using k1 as
completion mask."
+"VGATHERDPS ymm1 {k1}, vm32y/f32x8","EVEX.256.66.0F38.W0 92
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather single-precision floating-point values from memory using k1 as
completion mask."
+"VGATHERDPS zmm1 {k1}, vm32z/f32x16","EVEX.512.66.0F38.W0 92
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather single-precision floating-point values from memory using k1 as
completion mask."
+"VGATHERQPD xmm1 {k1}, vm64x/f64x2","EVEX.128.66.0F38.W1 93
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather float64 vector into float64 vector xmm1 using k1 as completion
mask."
+"VGATHERQPD ymm1 {k1}, vm64y/f64x4","EVEX.256.66.0F38.W1 93
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather float64 vector into float64 vector ymm1 using k1 as completion
mask."
+"VGATHERQPD zmm1 {k1}, vm64z/f64x8","EVEX.512.66.0F38.W1 93
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather float64 vector into float64 vector zmm1 using k1 as completion
mask."
+"VGATHERQPS xmm1 {k1}, vm64x/f32x2","EVEX.128.66.0F38.W0 93
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather single-precision floating-point values from memory using k1 as
completion mask."
+"VGATHERQPS xmm1 {k1}, vm64y/f32x4","EVEX.256.66.0F38.W0 93
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather single-precision floating-point values from memory using k1 as
completion mask."
+"VGATHERQPS ymm1 {k1}, vm64z/f32x8","EVEX.512.66.0F38.W0 93
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather single-precision floating-point values from memory using k1 as
completion mask."
+"VGETEXPPD xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F38.W1 42
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of packed double-precision
floating-point values in the source operand to DP FP results representing
unbiased integer exponents and stores the results in the destination register."
+"VGETEXPPD ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F38.W1 42
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of packed double-precision
floating-point values in the source operand to DP FP results representing
unbiased integer exponents and stores the results in the destination register."
+"VGETEXPPD zmm1 {k1}{z}, zmm2/m512/m64bcst{sae}","EVEX.512.66.0F38.W1 42
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of packed double-precision
floating-point values in the source operand to DP FP results representing
unbiased integer exponents and stores the results in the destination under
writemask k1."
+"VGETEXPPS xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.66.0F38.W0 42
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of packed single-precision
floating-point values in the source operand to SP FP results representing
unbiased integer exponents and stores the results in the destination register."
+"VGETEXPPS ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.66.0F38.W0 42
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of packed single-precision
floating-point values in the source operand to SP FP results representing
unbiased integer exponents and stores the results in the destination register."
+"VGETEXPPS zmm1 {k1}{z}, zmm2/m512/m32bcst{sae}","EVEX.512.66.0F38.W0 42
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of packed single-precision
floating-point values in the source operand to SP FP results representing
unbiased integer exponents and stores the results in the destination register."
+"VGETEXPSD xmm1 {k1}{z}, xmm2, xmm3/m64{sae}","EVEX.LIG.66.0F38.W1 43
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert the biased exponent (bits
62:52) of the low double-precision floating-point value in xmm3/m64 to a DP FP
value representing unbiased integer exponent. Stores the result to the low
64-bit of xmm1 under the writemask k1 and merge with the other elements of
xmm2."
+"VGETEXPSS xmm1 {k1}{z}, xmm2, xmm3/m32{sae}","EVEX.LIG.66.0F38.W0 43
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Convert the biased exponent (bits
30:23) of the low single-precision floating-point value in xmm3/m32 to a SP FP
value representing unbiased integer exponent. Stores the result to xmm1 under
the writemask k1 and merge with the other elements of xmm2."
+"VGETMANTPD xmm1 {k1}{z}, xmm2/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 26 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get Normalized Mantissa from float64 vector
xmm2/m128/m64bcst and store the result in xmm1, using ib for sign control and
mantissa interval normalization, under writemask."
+"VGETMANTPD ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 26 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get Normalized Mantissa from float64 vector
ymm2/m256/m64bcst and store the result in ymm1, using ib for sign control and
mantissa interval normalization, under writemask."
+"VGETMANTPD zmm1 {k1}{z}, zmm2/m512/m64bcst{sae}, ib","EVEX.512.66.0F3A.W1 26
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get Normalized Mantissa from float64 vector
zmm2/m512/m64bcst and store the result in zmm1, using ib for sign control and
mantissa interval normalization, under writemask."
+"VGETMANTPS xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 26 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get normalized mantissa from float32 vector
xmm2/m128/m32bcst and store the result in xmm1, using ib for sign control and
mantissa interval normalization, under writemask."
+"VGETMANTPS ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 26 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get normalized mantissa from float32 vector
ymm2/m256/m32bcst and store the result in ymm1, using ib for sign control and
mantissa interval normalization, under writemask."
+"VGETMANTPS zmm1 {k1}{z}, zmm2/m512/m32bcst{sae}, ib","EVEX.512.66.0F3A.W0 26
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get normalized mantissa from float32 vector
zmm2/m512/m32bcst and store the result in zmm1, using ib for sign control and
mantissa interval normalization, under writemask."
+"VGETMANTSD xmm1 {k1}{z}, xmm2, xmm3/m64{sae}, ib","EVEX.LIG.66.0F3A.W1 27 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Extract the normalized mantissa of
the low float64 element in xmm3/m64 using ib for sign control and mantissa
interval normalization. Store the mantissa to xmm1 under the writemask k1 and
merge with the other elements of xmm2."
+"VGETMANTSS xmm1 {k1}{z}, xmm2, xmm3/m32{sae}, ib","EVEX.LIG.66.0F3A.W0 27 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Extract the normalized mantissa from
the low float32 element of xmm3/m32 using ib for sign control and mantissa
interval normalization, store the mantissa to xmm1 under the writemask k1 and
merge with the other elements of xmm2."
+"VINSERTF32X4 ymm{k}{z},ymm,xmm/m128,ib","EVEX.256.66.0F3A.W0 18 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple4","Insert 128 bits of packed single-precision
floating-point values from xmm3/m128 and the remaining values from ymm2 into
ymm1 under writemask k1."
+"VINSERTF32X4 zmm{k}{z},zmm,xmm/m128,ib","EVEX.512.66.0F3A.W0 18 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple4","Insert 128 bits of packed single-precision
floating-point values from xmm3/m128 and the remaining values from zmm2 into
zmm1 under writemask k1."
+"VINSERTF64X4 zmm{k}{z},zmm,ymm/m256,ib","EVEX.512.66.0F3A.W1 1a /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple4","Insert 256 bits of packed double precision
floating-point values from ymm3/m256 and the remaining values from zmm2 into
zmm1 under writemask k1."
+"VINSERTI32X4 ymm{k}{z},ymm,xmm/m128,ib","EVEX.256.66.0F3A.W0 38 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple4","Insert 128 bits of packed doubleword
integer values from xmm3/m128 and the remaining values from ymm2 into ymm1
under writemask k1."
+"VINSERTI32X4 zmm{k}{z},zmm,xmm/m128,ib","EVEX.512.66.0F3A.W0 38 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple4","Insert 128 bits of packed doubleword
integer values from xmm3/m128 and the remaining values from zmm2 into zmm1
under writemask k1."
+"VINSERTI64X4 zmm{k}{z},zmm,ymm/m256,ib","EVEX.512.66.0F3A.W1 3a /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple4","Insert 256 bits of packed quadword integer
values from ymm3/m256 and the remaining values from zmm2 into zmm1 under
writemask k1."
+"VINSERTPS xmm1, xmm2, xmm3/m32, ib","EVEX.128.66.0F3A.W0 21 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Insert a single-precision
floating-point value selected by ib from xmm3/m32 and merge with values in xmm2
at the specified destination element specified by ib and write out the result
and zero out destination elements in xmm1 as indicated in ib."
+"VMAXPD xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 5F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed
double-precision floating-point values between xmm2 and xmm3/m128/m64bcst and
store result in xmm1 subject to writemask k1."
+"VMAXPD ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 5F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed
double-precision floating-point values between ymm2 and ymm3/m256/m64bcst and
store result in ymm1 subject to writemask k1."
+"VMAXPD zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst{sae}","EVEX.512.66.0F.W1 5F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed
double-precision floating-point values between zmm2 and zmm3/m512/m64bcst and
store result in zmm1 subject to writemask k1."
+"VMAXPS xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 5F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed
single-precision floating-point values between xmm2 and xmm3/m128/m32bcst and
store result in xmm1 subject to writemask k1."
+"VMAXPS ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 5F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed
single-precision floating-point values between ymm2 and ymm3/m256/m32bcst and
store result in ymm1 subject to writemask k1."
+"VMAXPS zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst{sae}","EVEX.512.0F.W0 5F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed
single-precision floating-point values between zmm2 and zmm3/m512/m32bcst and
store result in zmm1 subject to writemask k1."
+"VMAXSD xmm1{k1}{z}, xmm2, xmm3/m64{sae}","EVEX.LIG.F2.0F.W1 5F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Return the maximum scalar
double-precision floating-point value between xmm3/m64 and xmm2."
+"VMAXSS xmm1 {k1}{z}, xmm2, xmm3/m32{sae}","EVEX.LIG.F3.0F.W0 5F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Return the maximum scalar
single-precision floating-point value between xmm3/m32 and xmm2."
+"VMINPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 5D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed
double-precision floating-point values between xmm2 and xmm3/m128/m64bcst and
store result in xmm1 subject to writemask k1."
+"VMINPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 5D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed
double-precision floating-point values between ymm2 and ymm3/m256/m64bcst and
store result in ymm1 subject to writemask k1."
+"VMINPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{sae}","EVEX.512.66.0F.W1 5D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed
double-precision floating-point values between zmm2 and zmm3/m512/m64bcst and
store result in zmm1 subject to writemask k1."
+"VMINPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 5D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed
single-precision floating-point values between xmm2 and xmm3/m128/m32bcst and
store result in xmm1 subject to writemask k1."
+"VMINPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 5D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed
single-precision floating-point values between ymm2 and ymm3/m256/m32bcst and
store result in ymm1 subject to writemask k1."
+"VMINPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{sae}","EVEX.512.0F.W0 5D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed
single-precision floating-point values between zmm2 and zmm3/m512/m32bcst and
store result in zmm1 subject to writemask k1."
+"VMINSD xmm1 {k1}{z}, xmm2, xmm3/m64{sae}","EVEX.LIG.F2.0F.W1 5D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Return the minimum scalar
double-precision floating-point value between xmm3/m64 and xmm2."
+"VMINSS xmm1 {k1}{z}, xmm2, xmm3/m32{sae}","EVEX.LIG.F3.0F.W0 5D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Return the minimum scalar
single-precision floating-point value between xmm3/m32 and xmm2."
+"VMOVAPD xmm1 {k1}{z}, xmm2/m128","EVEX.128.66.0F.W1 28
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed double-precision
floating-point values from xmm2/m128 to xmm1 using writemask k1."
+"VMOVAPD ymm1 {k1}{z}, ymm2/m256","EVEX.256.66.0F.W1 28
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed double-precision
floating-point values from ymm2/m256 to ymm1 using writemask k1."
+"VMOVAPD zmm1 {k1}{z}, zmm2/m512","EVEX.512.66.0F.W1 28
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed double-precision
floating-point values from zmm2/m512 to zmm1 using writemask k1."
+"VMOVAPD xmm2/m128 {k1}{z}, xmm1","EVEX.128.66.0F.W1 29
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed double-precision
floating-point values from xmm1 to xmm2/m128 using writemask k1."
+"VMOVAPD ymm2/m256 {k1}{z}, ymm1","EVEX.256.66.0F.W1 29
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed double-precision
floating-point values from ymm1 to ymm2/m256 using writemask k1."
+"VMOVAPD zmm2/m512 {k1}{z}, zmm1","EVEX.512.66.0F.W1 29
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed double-precision
floating-point values from zmm1 to zmm2/m512 using writemask k1."
+"VMOVAPS xmm1 {k1}{z}, xmm2/m128","EVEX.128.0F.W0 28
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed single-precision
floating-point values from xmm2/m128 to xmm1 using writemask k1."
+"VMOVAPS ymm1 {k1}{z}, ymm2/m256","EVEX.256.0F.W0 28
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed single-precision
floating-point values from ymm2/m256 to ymm1 using writemask k1."
+"VMOVAPS zmm1 {k1}{z}, zmm2/m512","EVEX.512.0F.W0 28
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed single-precision
floating-point values from zmm2/m512 to zmm1 using writemask k1."
+"VMOVAPS xmm2/m128 {k1}{z}, xmm1","EVEX.128.0F.W0 29
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed single-precision
floating-point values from xmm1 to xmm2/m128 using writemask k1."
+"VMOVAPS ymm2/m256 {k1}{z}, ymm1","EVEX.256.0F.W0 29
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed single-precision
floating-point values from ymm1 to ymm2/m256 using writemask k1."
+"VMOVAPS zmm2/m512 {k1}{z}, zmm1","EVEX.512.0F.W0 29
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed single-precision
floating-point values from zmm1 to zmm2/m512 using writemask k1."
+"VMOVD xmm1, rw/mw","EVEX.128.66.0F.W0 6E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Move doubleword from r/m to xmm1."
+"VMOVD rw/mw, xmm1","EVEX.128.66.0F.W0 7E
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Move doubleword from xmm1 register to r/m."
+"VMOVDDUP xmm1 {k1}{z}, xmm2/m64","EVEX.128.F2.0F.W1 12
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","MOVDDUP","Move double-precision floating-point value from xmm2/m64
and duplicate each element into xmm1 subject to writemask k1."
+"VMOVDDUP ymm1 {k1}{z}, ymm2/m256","EVEX.256.F2.0F.W1 12
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","MOVDDUP","Move even index double-precision floating-point values
from ymm2/m256 and duplicate each element into ymm1 subject to writemask k1."
+"VMOVDDUP zmm1 {k1}{z}, zmm2/m512","EVEX.512.F2.0F.W1 12
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","MOVDDUP","Move even index double-precision floating-point values
from zmm2/m512 and duplicate each element into zmm1 subject to writemask k1."
+"VMOVDQA32 xmm1 {k1}{z}, xmm2/m128","EVEX.128.66.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed doubleword integer values
from xmm2/m128 to xmm1 using writemask k1."
+"VMOVDQA32 ymm1 {k1}{z}, ymm2/m256","EVEX.256.66.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed doubleword integer values
from ymm2/m256 to ymm1 using writemask k1."
+"VMOVDQA32 zmm1 {k1}{z}, zmm2/m512","EVEX.512.66.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed doubleword integer values
from zmm2/m512 to zmm1 using writemask k1."
+"VMOVDQA32 xmm2/m128 {k1}{z}, xmm1","EVEX.128.66.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed doubleword integer values
from xmm1 to xmm2/m128 using writemask k1."
+"VMOVDQA32 ymm2/m256 {k1}{z}, ymm1","EVEX.256.66.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed doubleword integer values
from ymm1 to ymm2/m256 using writemask k1."
+"VMOVDQA32 zmm2/m512 {k1}{z}, zmm1","EVEX.512.66.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed doubleword integer values
from zmm1 to zmm2/m512 using writemask k1."
+"VMOVDQA64 xmm1 {k1}{z}, xmm2/m128","EVEX.128.66.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned quadword integer values from
xmm2/m128 to xmm1 using writemask k1."
+"VMOVDQA64 ymm1 {k1}{z}, ymm2/m256","EVEX.256.66.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned quadword integer values from
ymm2/m256 to ymm1 using writemask k1."
+"VMOVDQA64 zmm1 {k1}{z}, zmm2/m512","EVEX.512.66.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move aligned packed quadword integer values from
zmm2/m512 to zmm1 using writemask k1."
+"VMOVDQA64 xmm2/m128 {k1}{z}, xmm1","EVEX.128.66.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed quadword integer values from
xmm1 to xmm2/m128 using writemask k1."
+"VMOVDQA64 ymm2/m256 {k1}{z}, ymm1","EVEX.256.66.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed quadword integer values from
ymm1 to ymm2/m256 using writemask k1."
+"VMOVDQA64 zmm2/m512 {k1}{z}, zmm1","EVEX.512.66.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move aligned packed quadword integer values from
zmm1 to zmm2/m512 using writemask k1."
+"VMOVDQU32 xmm1 {k1}{z}, xmm2/m128","EVEX.128.F3.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed doubleword integer values
from xmm2/m128 to xmm1 using writemask k1."
+"VMOVDQU32 ymm1 {k1}{z}, ymm2/m256","EVEX.256.F3.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed doubleword integer values
from ymm2/m256 to ymm1 using writemask k1."
+"VMOVDQU32 zmm1 {k1}{z}, zmm2/m512","EVEX.512.F3.0F.W0 6F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed doubleword integer values
from zmm2/m512 to zmm1 using writemask k1."
+"VMOVDQU32 xmm2/m128 {k1}{z}, xmm1","EVEX.128.F3.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed doubleword integer values
from xmm1 to xmm2/m128 using writemask k1."
+"VMOVDQU32 ymm2/m256 {k1}{z}, ymm1","EVEX.256.F3.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed doubleword integer values
from ymm1 to ymm2/m256 using writemask k1."
+"VMOVDQU32 zmm2/m512 {k1}{z}, zmm1","EVEX.512.F3.0F.W0 7F
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed doubleword integer values
from zmm1 to zmm2/m512 using writemask k1."
+"VMOVDQU64 xmm1 {k1}{z}, xmm2/m128","EVEX.128.F3.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed quadword integer values
from xmm2/m128 to xmm1 using writemask k1."
+"VMOVDQU64 ymm1 {k1}{z}, ymm2/m256","EVEX.256.F3.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed quadword integer values
from ymm2/m256 to ymm1 using writemask k1."
+"VMOVDQU64 zmm1 {k1}{z}, zmm2/m512","EVEX.512.F3.0F.W1 6F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed quadword integer values
from zmm2/m512 to zmm1 using writemask k1."
+"VMOVDQU64 xmm2/m128 {k1}{z}, xmm1","EVEX.128.F3.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed quadword integer values
from xmm1 to xmm2/m128 using writemask k1."
+"VMOVDQU64 ymm2/m256 {k1}{z}, ymm1","EVEX.256.F3.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed quadword integer values
from ymm1 to ymm2/m256 using writemask k1."
+"VMOVDQU64 zmm2/m512 {k1}{z}, zmm1","EVEX.512.F3.0F.W1 7F
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed quadword integer values
from zmm1 to zmm2/m512 using writemask k1."
+"VMOVHPD xmm2, xmm1, m64","EVEX.128.66.0F.W1 16
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Merge double-precision floating-point
value from m64 and the low quadword of xmm1."
+"VMOVHPD m64, xmm1","EVEX.128.66.0F.W1 17
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Move double-precision floating-point value from
high quadword of xmm1 to m64."
+"VMOVHPS xmm2, xmm1, m64","EVEX.128.0F.W0 16
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple2","Merge two packed single-precision
floating-point values from m64 and the low quadword of xmm1."
+"VMOVHPS m64, xmm1","EVEX.128.0F.W0 17
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple2","Move two packed single-precision floating-point values
from high quadword of xmm1 to m64."
+"VMOVLPD xmm2, xmm1, m64","EVEX.128.66.0F.W1 12
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Merge double-precision floating-point
value from m64 and the high quadword of xmm1."
+"VMOVLPD m64, xmm1","EVEX.128.66.0F.W1 13
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Move double -precision floating-point value from
low quadword of xmm1 to m64."
+"VMOVLPS xmm2, xmm1, m64","EVEX.128.0F.W0 12
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple2","Merge two packed single-precision
floating-point values from m64 and the high quadword of xmm1."
+"VMOVLPS m64, xmm1","EVEX.128.0F.W0 13
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple2","Move two packed single-precision floating-point values
from low quadword of xmm1 to m64."
+"VMOVNTDQ m128, xmm1","EVEX.128.66.0F.W0 E7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed integer values in xmm1 to m128 using
non-temporal hint."
+"VMOVNTDQ m256, ymm1","EVEX.256.66.0F.W0 E7
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed integer values in zmm1 to m256 using
non-temporal hint."
+"VMOVNTDQ m512, zmm1","EVEX.512.66.0F.W0 E7
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed integer values in zmm1 to m512 using
non-temporal hint."
+"VMOVNTDQA xmm1, m128","EVEX.128.66.0F38.W0 2A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move 128-bit data from m128 to xmm using
non-temporal hint if WC memory type."
+"VMOVNTDQA ymm1, m256","EVEX.256.66.0F38.W0 2A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move 256-bit data from m256 to ymm using
non-temporal hint if WC memory type."
+"VMOVNTDQA zmm1, m512","EVEX.512.66.0F38.W0 2A
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move 512-bit data from m512 to zmm using
non-temporal hint if WC memory type."
+"VMOVNTPD m128, xmm1","EVEX.128.66.0F.W1 2B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed double-precision values in xmm1 to
m128 using non-temporal hint."
+"VMOVNTPD m256, ymm1","EVEX.256.66.0F.W1 2B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed double-precision values in ymm1 to
m256 using non-temporal hint."
+"VMOVNTPD m512, zmm1","EVEX.512.66.0F.W1 2B
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed double-precision values in zmm1 to
m512 using non-temporal hint."
+"VMOVNTPS m128, xmm1","EVEX.128.0F.W0 2B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed single-precision values in xmm1 to
m128 using non-temporal hint."
+"VMOVNTPS m256, ymm1","EVEX.256.0F.W0 2B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed single-precision values in ymm1 to
m256 using non-temporal hint."
+"VMOVNTPS m512, zmm1","EVEX.512.0F.W0 2B
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move packed single-precision values in zmm1 to
m512 using non-temporal hint."
+"VMOVQ xmm1, rw/mw","EVEX.128.66.0F.W1 6E
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Move quadword from r/m to xmm1."
+"VMOVQ rw/mw, xmm1","EVEX.128.66.0F.W1 7E
/r","Valid","Invalid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Move quadword from xmm1 register to r/m."
+"VMOVQ xmm1, xmm2/m64","EVEX.128.F3.0F.W1 7E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Move quadword from xmm2/m64 to xmm1."
+"VMOVQ xmm1/m64, xmm2","EVEX.128.66.0F.W1 D6
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Move quadword from xmm2 register to xmm1/m64."
+"VMOVSD xmm1 {k1}{z}, m64","EVEX.LIG.F2.0F.W1 10
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Load scalar double-precision floating-point value
from m64 to xmm1 register under writemask k1."
+"VMOVSD xmm1 {k1}{z}, xmm2, xmm3","EVEX.LIG.F2.0F.W1 10
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Merge scalar double-precision floating-point value
from xmm2 and xmm3 registers to xmm1 under writemask k1."
+"VMOVSD m64 {k1}, xmm1","EVEX.LIG.F2.0F.W1 11
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Store scalar double-precision floating-point value
from xmm1 register to m64 under writemask k1."
+"VMOVSD xmm1 {k1}{z}, xmm2, xmm3","EVEX.LIG.F2.0F.W1 11
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","EVEX.vvvv
(r)","ModRM:reg (r)","","","Merge scalar double-precision floating-point value
from xmm2 and xmm3 registers to xmm1 under writemask k1."
+"VMOVSHDUP xmm1 {k1}{z}, xmm2/m128","EVEX.128.F3.0F.W0 16
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move odd index single-precision floating-point
values from xmm2/m128 and duplicate each element into xmm1 under writemask."
+"VMOVSHDUP ymm1 {k1}{z}, ymm2/m256","EVEX.256.F3.0F.W0 16
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move odd index single-precision floating-point
values from ymm2/m256 and duplicate each element into ymm1 under writemask."
+"VMOVSHDUP zmm1 {k1}{z}, zmm2/m512","EVEX.512.F3.0F.W0 16
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move odd index single-precision floating-point
values from zmm2/m512 and duplicate each element into zmm1 under writemask."
+"VMOVSLDUP xmm1 {k1}{z}, xmm2/m128","EVEX.128.F3.0F.W0 12
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move even index single-precision floating-point
values from xmm2/m128 and duplicate each element into xmm1 under writemask."
+"VMOVSLDUP ymm1 {k1}{z}, ymm2/m256","EVEX.256.F3.0F.W0 12
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move even index single-precision floating-point
values from ymm2/m256 and duplicate each element into ymm1 under writemask."
+"VMOVSLDUP zmm1 {k1}{z}, zmm2/m512","EVEX.512.F3.0F.W0 12
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move even index single-precision floating-point
values from zmm2/m512 and duplicate each element into zmm1 under writemask."
+"VMOVSS xmm1 {k1}{z}, m32","EVEX.LIG.F3.0F.W0 10
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Move scalar single-precision floating-point values
from m32 to xmm1 under writemask k1."
+"VMOVSS xmm1 {k1}{z}, xmm2, xmm3","EVEX.LIG.F3.0F.W0 10
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Move scalar single-precision floating-point value
from xmm2 and xmm3 to xmm1 register under writemask k1."
+"VMOVSS m32 {k1}, xmm1","EVEX.LIG.F3.0F.W0 11
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Move scalar single-precision floating-point values
from xmm1 to m32 under writemask k1."
+"VMOVSS xmm1 {k1}{z}, xmm2, xmm3","EVEX.LIG.F3.0F.W0 11
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","EVEX.vvvv
(r)","ModRM:reg (r)","","","Move scalar single-precision floating-point value
from xmm2 and xmm3 to xmm1 register under writemask k1."
+"VMOVUPD xmm1 {k1}{z}, xmm2/m128","EVEX.128.66.0F.W1 10
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed double-precision
floating-point from xmm2/m128 to xmm1 using writemask k1."
+"VMOVUPD ymm1 {k1}{z}, ymm2/m256","EVEX.256.66.0F.W1 10
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed double-precision
floating-point from ymm2/m256 to ymm1 using writemask k1."
+"VMOVUPD zmm1 {k1}{z}, zmm2/m512","EVEX.512.66.0F.W1 10
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed double-precision
floating-point values from zmm2/m512 to zmm1 using writemask k1."
+"VMOVUPD xmm2/m128 {k1}{z}, xmm1","EVEX.128.66.0F.W1 11
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed double-precision
floating-point from xmm1 to xmm2/m128 using writemask k1."
+"VMOVUPD ymm2/m256 {k1}{z}, ymm1","EVEX.256.66.0F.W1 11
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed double-precision
floating-point from ymm1 to ymm2/m256 using writemask k1."
+"VMOVUPD zmm2/m512 {k1}{z}, zmm1","EVEX.512.66.0F.W1 11
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed double-precision
floating-point values from zmm1 to zmm2/m512 using writemask k1."
+"VMOVUPS xmm1 {k1}{z}, xmm2/m128","EVEX.128.0F.W0 10
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed single-precision
floating-point values from xmm2/m128 to xmm1 using writemask k1."
+"VMOVUPS ymm1 {k1}{z}, ymm2/m256","EVEX.256.0F.W0 10
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed single-precision
floating-point values from ymm2/m256 to ymm1 using writemask k1."
+"VMOVUPS zmm1 {k1}{z}, zmm2/m512","EVEX.512.0F.W0 10
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Move unaligned packed single-precision
floating-point values from zmm2/m512 to zmm1 using writemask k1."
+"VMOVUPS xmm2/m128 {k1}{z}, xmm1","EVEX.128.0F.W0 11
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed single-precision
floating-point values from xmm1 to xmm2/m128 using writemask k1."
+"VMOVUPS ymm2/m256 {k1}{z}, ymm1","EVEX.256.0F.W0 11
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed single-precision
floating-point values from ymm1 to ymm2/m256 using writemask k1."
+"VMOVUPS zmm2/m512 {k1}{z}, zmm1","EVEX.512.0F.W0 11
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Full Vector Mem","Move unaligned packed single-precision
floating-point values from zmm1 to zmm2/m512 using writemask k1."
+"VMULPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 59
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from xmm3/m128/m64bcst to xmm2 and store result in xmm1."
+"VMULPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 59
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values from ymm3/m256/m64bcst to ymm2 and store result in ymm1."
+"VMULPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F.W1 59
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed double-precision
floating-point values in zmm3/m512/m64bcst with zmm2 and store result in zmm1."
+"VMULPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 59
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from xmm3/m128/m32bcst to xmm2 and store result in xmm1."
+"VMULPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 59
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values from ymm3/m256/m32bcst to ymm2 and store result in ymm1."
+"VMULPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst {er}","EVEX.512.0F.W0 59
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed single-precision
floating-point values in zmm3/m512/m32bcst with zmm2 and store result in zmm1."
+"VMULSD xmm1 {k1}{z}, xmm2, xmm3/m64 {er}","EVEX.LIG.F2.0F.W1 59
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply the low double-precision
floating-point value in xmm3/m64 by low double-precision floating-point value
in xmm2."
+"VMULSS xmm1 {k1}{z}, xmm2, xmm3/m32 {er}","EVEX.LIG.F3.0F.W0 59
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Multiply the low single-precision
floating-point value in xmm3/m32 by the low single-precision floating-point
value in xmm2."
+"VPABSD xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.66.0F38.W0 1E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 32-bit integers in
xmm2/m128 and store UNSIGNED result in xmm1 using writemask k1."
+"VPABSD ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.66.0F38.W0 1E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 32-bit integers in
xmm2/m256 and store UNSIGNED result in xmm1 using writemask k1."
+"VPABSD zmm1 {k1}{z}, zmm2/m512/m32bcst","EVEX.512.66.0F38.W0 1E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 32-bit integers in
xmm2/m512 and store UNSIGNED result in xmm1 using writemask k1."
+"VPABSQ xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F38.W1 1F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 64-bit integers in
xmm2/m128 and store UNSIGNED result in xmm1 using writemask k1."
+"VPABSQ ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F38.W1 1F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 64-bit integers in
xmm2/m256 and store UNSIGNED result in xmm1 using writemask k1."
+"VPABSQ zmm1 {k1}{z}, zmm2/m512/m64bcst","EVEX.512.66.0F38.W1 1F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector Mem","Compute the absolute value of 64-bit integers in
xmm2/m512 and store UNSIGNED result in xmm1 using writemask k1."
+"VPADDD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 FE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed doubleword integers from
xmm2, and xmm3/m128/m32bcst and store in xmm1 using writemask k1."
+"VPADDD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F.W0 FE
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed doubleword integers from
ymm2, and ymm3/m256/m32bcst and store in ymm1 using writemask k1."
+"VPADDD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F.W0 FE
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed doubleword integers from
zmm2, and zmm3/m512/m32bcst and store in zmm1 using writemask k1."
+"VPADDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 D4
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed quadword integers from xmm2,
and xmm3/m128/m64bcst and store in xmm1 using writemask k1."
+"VPADDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 D4
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed quadword integers from ymm2,
and ymm3/m256/m64bcst and store in ymm1 using writemask k1."
+"VPADDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 D4
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed quadword integers from zmm2,
and zmm3/m512/m64bcst and store in zmm1 using writemask k1."
+"VPANDD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 DB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed doubleword
integers in xmm2 and xmm3/m128/m32bcst and store result in xmm1 using writemask
k1."
+"VPANDD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F.W0 DB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed doubleword
integers in ymm2 and ymm3/m256/m32bcst and store result in ymm1 using writemask
k1."
+"VPANDD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F.W0 DB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed doubleword
integers in zmm2 and zmm3/m512/m32bcst and store result in zmm1 using writemask
k1."
+"VPANDND xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 DF
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND NOT of packed doubleword
integers in xmm2 and xmm3/m128/m32bcst and store result in xmm1 using writemask
k1."
+"VPANDND ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F.W0 DF
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND NOT of packed doubleword
integers in ymm2 and ymm3/m256/m32bcst and store result in ymm1 using writemask
k1."
+"VPANDND zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F.W0 DF
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND NOT of packed doubleword
integers in zmm2 and zmm3/m512/m32bcst and store result in zmm1 using writemask
k1."
+"VPANDNQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 DF
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND NOT of packed quadword
integers in xmm2 and xmm3/m128/m64bcst and store result in xmm1 using writemask
k1."
+"VPANDNQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 DF
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND NOT of packed quadword
integers in ymm2 and ymm3/m256/m64bcst and store result in ymm1 using writemask
k1."
+"VPANDNQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 DF
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND NOT of packed quadword
integers in zmm2 and zmm3/m512/m64bcst and store result in zmm1 using writemask
k1."
+"VPANDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 DB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed quadword integers
in xmm2 and xmm3/m128/m64bcst and store result in xmm1 using writemask k1."
+"VPANDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 DB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed quadword integers
in ymm2 and ymm3/m256/m64bcst and store result in ymm1 using writemask k1."
+"VPANDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 DB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed quadword integers
in zmm2 and zmm3/m512/m64bcst and store result in zmm1 using writemask k1."
+"VPBLENDMD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 64
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend doubleword integer vector xmm2 and
doubleword vector xmm3/m128/m32bcst and store the result in xmm1, under control
mask."
+"VPBLENDMD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 64
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend doubleword integer vector ymm2 and
doubleword vector ymm3/m256/m32bcst and store the result in ymm1, under control
mask."
+"VPBLENDMD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 64
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend doubleword integer vector zmm2 and
doubleword vector zmm3/m512/m32bcst and store the result in zmm1, under control
mask."
+"VPBLENDMQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 64
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend quadword integer vector xmm2 and
quadword vector xmm3/m128/m64bcst and store the result in xmm1, under control
mask."
+"VPBLENDMQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 64
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend quadword integer vector ymm2 and
quadword vector ymm3/m256/m64bcst and store the result in ymm1, under control
mask."
+"VPBLENDMQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 64
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Blend quadword integer vector zmm2 and
quadword vector zmm3/m512/m64bcst and store the result in zmm1, under control
mask."
+"VPBROADCASTD xmm1 {k1}{z}, xmm2/m32","EVEX.128.66.0F38.W0 58
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a dword integer in the source operand to
locations in xmm1 subject to writemask k1."
+"VPBROADCASTD ymm1 {k1}{z}, xmm2/m32","EVEX.256.66.0F38.W0 58
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a dword integer in the source operand to
locations in ymm1 subject to writemask k1."
+"VPBROADCASTD zmm1 {k1}{z}, xmm2/m32","EVEX.512.66.0F38.W0 58
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a dword integer in the source operand to
locations in zmm1 subject to writemask k1."
+"VPBROADCASTD xmm1 {k1}{z}, rw","EVEX.128.66.0F38.W0 7C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 32-bit value from a GPR to all
double-words in the 128-bit destination subject to writemask k1."
+"VPBROADCASTD ymm1 {k1}{z}, rw","EVEX.256.66.0F38.W0 7C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 32-bit value from a GPR to all
double-words in the 256-bit destination subject to writemask k1."
+"VPBROADCASTD zmm1 {k1}{z}, rw","EVEX.512.66.0F38.W0 7C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 32-bit value from a GPR to all
double-words in the 512-bit destination subject to writemask k1."
+"VPBROADCASTQ xmm1 {k1}{z}, xmm2/m64","EVEX.128.66.0F38.W1 59
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a qword element in source operand to
locations in xmm1 subject to writemask k1."
+"VPBROADCASTQ ymm1 {k1}{z}, xmm2/m64","EVEX.256.66.0F38.W1 59
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a qword element in source operand to
locations in ymm1 subject to writemask k1."
+"VPBROADCASTQ zmm1 {k1}{z}, xmm2/m64","EVEX.512.66.0F38.W1 59
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a qword element in source operand to
locations in zmm1 subject to writemask k1."
+"VPBROADCASTQ xmm1 {k1}{z}, rw","EVEX.128.66.0F38.W1 7C
/r","Valid","Invalid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 64-bit value from a GPR to all
quad-words in the 128-bit destination subject to writemask k1."
+"VPBROADCASTQ ymm1 {k1}{z}, rw","EVEX.256.66.0F38.W1 7C
/r","Valid","Invalid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 64-bit value from a GPR to all
quad-words in the 256-bit destination subject to writemask k1."
+"VPBROADCASTQ zmm1 {k1}{z}, rw","EVEX.512.66.0F38.W1 7C
/r","Valid","Invalid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Broadcast a 64-bit value from a GPR to all
quad-words in the 512-bit destination subject to writemask k1."
+"VPCMPD k1 {k2}, xmm2, xmm3/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 1F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed signed doubleword
integer values in xmm3/m128/m32bcst and xmm2 using bits 2:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VPCMPD k1 {k2}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 1F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed signed doubleword
integer values in ymm3/m256/m32bcst and ymm2 using bits 2:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VPCMPD k1 {k2}, zmm2, zmm3/m512/m32bcst, ib","EVEX.512.66.0F3A.W0 1F /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed signed doubleword
integer values in zmm2 and zmm3/m512/m32bcst using bits 2:0 of ib as a
comparison predicate. The comparison results are written to the destination k1
under writemask k2."
+"VPCMPEQD k1 {k2}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 76
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Equal between int32 vector xmm2
and int32 vector xmm3/m128/m32bcst, and set vector mask k1 to reflect the
zero/nonzero status of each element of the result, under writemask."
+"VPCMPEQD k1 {k2}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F.W0 76
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Equal between int32 vector ymm2
and int32 vector ymm3/m256/m32bcst, and set vector mask k1 to reflect the
zero/nonzero status of each element of the result, under writemask."
+"VPCMPEQD k1 {k2}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F.W0 76
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Equal between int32 vectors in
zmm2 and zmm3/m512/m32bcst, and set destination k1 according to the comparison
results under writemask k2."
+"VPCMPEQQ k1 {k2}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 29
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Equal between int64 vector xmm2
and int64 vector xmm3/m128/m64bcst, and set vector mask k1 to reflect the
zero/nonzero status of each element of the result, under writemask."
+"VPCMPEQQ k1 {k2}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 29
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Equal between int64 vector ymm2
and int64 vector ymm3/m256/m64bcst, and set vector mask k1 to reflect the
zero/nonzero status of each element of the result, under writemask."
+"VPCMPEQQ k1 {k2}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 29
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Equal between int64 vector zmm2
and int64 vector zmm3/m512/m64bcst, and set vector mask k1 to reflect the
zero/nonzero status of each element of the result, under writemask."
+"VPCMPGTD k1 {k2}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 66
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Greater between int32 vector
xmm2 and int32 vector xmm3/m128/m32bcst,and set vector mask k1 to reflect the
zero/nonzero status of each element of the result,under writemask."
+"VPCMPGTD k1 {k2}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F.W0 66
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Greater between int32 vector
ymm2 and int32 vector ymm3/m256/m32bcst,and set vector mask k1 to reflect the
zero/nonzero status of each element of the result,under writemask."
+"VPCMPGTD k1 {k2}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F.W0 66
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Greater between int32 elements
in zmm2 and zmm3/m512/m32bcst,and set destination k1 according to the
comparison results under writemask. k2."
+"VPCMPGTQ k1 {k2}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 37
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Greater between int64 vector
xmm2 and int64 vector xmm3/m128/m64bcst, and set vector mask k1 to reflect the
zero/nonzero status of each element of the result, under writemask."
+"VPCMPGTQ k1 {k2}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 37
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Greater between int64 vector
ymm2 and int64 vector ymm3/m256/m64bcst, and set vector mask k1 to reflect the
zero/nonzero status of each element of the result, under writemask."
+"VPCMPGTQ k1 {k2}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 37
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare Greater between int64 vector
zmm2 and int64 vector zmm3/m512/m64bcst, and set vector mask k1 to reflect the
zero/nonzero status of each element of the result, under writemask."
+"VPCMPQ k1 {k2}, xmm2, xmm3/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 1F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed signed quadword integer
values in xmm3/m128/m64bcst and xmm2 using bits 2:0 of ib as a comparison
predicate with writemask k2 and leave the result in mask register k1."
+"VPCMPQ k1 {k2}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 1F /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed signed quadword integer
values in ymm3/m256/m64bcst and ymm2 using bits 2:0 of ib as a comparison
predicate with writemask k2 and leave the result in mask register k1."
+"VPCMPQ k1 {k2}, zmm2, zmm3/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 1F /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed signed quadword integer
values in zmm3/m512/m64bcst and zmm2 using bits 2:0 of ib as a comparison
predicate with writemask k2 and leave the result in mask register k1."
+"VPCMPUD k1 {k2}, xmm2, xmm3/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 1E /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed unsigned doubleword
integer values in xmm3/m128/m32bcst and xmm2 using bits 2:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VPCMPUD k1 {k2}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 1E /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed unsigned doubleword
integer values in ymm3/m256/m32bcst and ymm2 using bits 2:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VPCMPUD k1 {k2}, zmm2, zmm3/m512/m32bcst, ib","EVEX.512.66.0F3A.W0 1E /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed unsigned doubleword
integer values in zmm2 and zmm3/m512/m32bcst using bits 2:0 of ib as a
comparison predicate. The comparison results are written to the destination k1
under writemask k2."
+"VPCMPUQ k1 {k2}, xmm2, xmm3/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 1E /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed unsigned quadword
integer values in xmm3/m128/m64bcst and xmm2 using bits 2:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VPCMPUQ k1 {k2}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 1E /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed unsigned quadword
integer values in ymm3/m256/m64bcst and ymm2 using bits 2:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VPCMPUQ k1 {k2}, zmm2, zmm3/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 1E /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed unsigned quadword
integer values in zmm3/m512/m64bcst and zmm2 using bits 2:0 of ib as a
comparison predicate with writemask k2 and leave the result in mask register
k1."
+"VPCOMPRESSD xmm1/m128/i32x4 {k1}{z}, xmm2","EVEX.128.66.0F38.W0 8B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed doubleword integer values from xmm2
to xmm1/m128 using controlmask k1."
+"VPCOMPRESSD ymm1/m256/i32x8 {k1}{z}, ymm2","EVEX.256.66.0F38.W0 8B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed doubleword integer values from ymm2
to ymm1/m256 using controlmask k1."
+"VPCOMPRESSD zmm1/m512/i32x16 {k1}{z}, zmm2","EVEX.512.66.0F38.W0 8B
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed doubleword integer values from zmm2
to zmm1/m512 using controlmask k1."
+"VPCOMPRESSQ xmm1/m128/i64x2 {k1}{z}, xmm2","EVEX.128.66.0F38.W1 8B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed quadword integer values from xmm2
to xmm1/m128 using controlmask k1."
+"VPCOMPRESSQ ymm1/m256/i64x4 {k1}{z}, ymm2","EVEX.256.66.0F38.W1 8B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed quadword integer values from ymm2
to ymm1/m256 using controlmask k1."
+"VPCOMPRESSQ zmm1/m512/i64x8 {k1}{z}, zmm2","EVEX.512.66.0F38.W1 8B
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress packed quadword integer values from zmm2
to zmm1/m512 using controlmask k1."
+"VPERMD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 36
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute doublewords in ymm3/m256/m32bcst
using indexes in ymm2 and store the result in ymm1 using writemask k1."
+"VPERMD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 36
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute doublewords in zmm3/m512/m32bcst
using indices in zmm2 and store the result in zmm1 using writemask k1."
+"VPERMI2D xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 76
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-words from two tables in
xmm3/m128/m32bcst and xmm2 using indexes in xmm1 and store the result in xmm1
using writemask k1."
+"VPERMI2D ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 76
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-words from two tables in
ymm3/m256/m32bcst and ymm2 using indexes in ymm1 and store the result in ymm1
using writemask k1."
+"VPERMI2D zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 76
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-words from two tables in
zmm3/m512/m32bcst and zmm2 using indices in zmm1 and store the result in zmm1
using writemask k1."
+"VPERMI2PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 77
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-precision FP values from
two tables in xmm3/m128/m64bcst and xmm2 using indexes in xmm1 and store the
result in xmm1 using writemask k1."
+"VPERMI2PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 77
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-precision FP values from
two tables in ymm3/m256/m64bcst and ymm2 using indexes in ymm1 and store the
result in ymm1 using writemask k1."
+"VPERMI2PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 77
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-precision FP values from
two tables in zmm3/m512/m64bcst and zmm2 using indices in zmm1 and store the
result in zmm1 using writemask k1."
+"VPERMI2PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 77
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute single-precision FP values from
two tables in xmm3/m128/m32bcst and xmm2 using indexes in xmm1 and store the
result in xmm1 using writemask k1."
+"VPERMI2PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 77
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute single-precision FP values from
two tables in ymm3/m256/m32bcst and ymm2 using indexes in ymm1 and store the
result in ymm1 using writemask k1."
+"VPERMI2PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 77
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute single-precision FP values from
two tables in zmm3/m512/m32bcst and zmm2 using indices in zmm1 and store the
result in zmm1 using writemask k1."
+"VPERMI2Q xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 76
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute quad-words from two tables in
xmm3/m128/m64bcst and xmm2 using indexes in xmm1 and store the result in xmm1
using writemask k1."
+"VPERMI2Q ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 76
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute quad-words from two tables in
ymm3/m256/m64bcst and ymm2 using indexes in ymm1 and store the result in ymm1
using writemask k1."
+"VPERMI2Q zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 76
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute quad-words from two tables in
zmm3/m512/m64bcst and zmm2 using indices in zmm1 and store the result in zmm1
using writemask k1."
+"VPERMILPD xmm1 {k1}{z}, xmm2/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 05 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute double-precision floating-point values in
xmm2/m128/m64bcst using controls from ib and store the result in xmm1 using
writemask k1."
+"VPERMILPD ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 05 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute double-precision floating-point values in
ymm2/m256/m64bcst using controls from ib and store the result in ymm1 using
writemask k1."
+"VPERMILPD zmm1 {k1}{z}, zmm2/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 05 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute double-precision floating-point values in
zmm2/m512/m64bcst using controls from ib and store the result in zmm1 using
writemask k1."
+"VPERMILPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 0D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-precision floating-point
values in xmm2 using control from xmm3/m128/m64bcst and store the result in
xmm1 using writemask k1."
+"VPERMILPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 0D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-precision floating-point
values in ymm2 using control from ymm3/m256/m64bcst and store the result in
ymm1 using writemask k1."
+"VPERMILPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 0D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-precision floating-point
values in zmm2 using control from zmm3/m512/m64bcst and store the result in
zmm1 using writemask k1."
+"VPERMILPS xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 04 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute single-precision floating-point values
xmm2/m128/m32bcst using controls from ib and store the result in xmm1 using
writemask k1."
+"VPERMILPS ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 04 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute single-precision floating-point values
ymm2/m256/m32bcst using controls from ib and store the result in ymm1 using
writemask k1."
+"VPERMILPS zmm1 {k1}{z}, zmm2/m512/m32bcst, ib","EVEX.512.66.0F3A.W0 04 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute single-precision floating-point values
zmm2/m512/m32bcst using controls from ib and store the result in zmm1 using
writemask k1."
+"VPERMILPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 0C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute single-precision floating-point
values xmm2 using control from xmm3/m128/m32bcst and store the result in xmm1
using writemask k1."
+"VPERMILPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 0C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute single-precision floating-point
values ymm2 using control from ymm3/m256/m32bcst and store the result in ymm1
using writemask k1."
+"VPERMILPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 0C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute single-precision floating-point
values zmm2 using control from zmm3/m512/m32bcst and store the result in zmm1
using writemask k1."
+"VPERMPD ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 01 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute double-precision floating-point elements in
ymm2/m256/m64bcst using indexes in ib and store the result in ymm1 subject to
writemask k1."
+"VPERMPD zmm1 {k1}{z}, zmm2/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 01 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute double-precision floating-point elements in
zmm2/m512/m64bcst using indices in ib and store the result in zmm1 subject to
writemask k1."
+"VPERMPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 16
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-precision floating-point
elements in ymm3/m256/m64bcst using indexes in ymm2 and store the result in
ymm1 subject to writemask k1."
+"VPERMPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 16
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute double-precision floating-point
elements in zmm3/m512/m64bcst using indices in zmm2 and store the result in
zmm1 subject to writemask k1."
+"VPERMPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 16
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute single-precision floating-point
elements in ymm3/m256/m32bcst using indexes in ymm2 and store the result in
ymm1 subject to write mask k1."
+"VPERMPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 16
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute single-precision floating-point
values in zmm3/m512/m32bcst using indices in zmm2 and store the result in zmm1
subject to write mask k1."
+"VPERMQ ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 00 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute qwords in ymm2/m256/m64bcst using indexes
in ib and store the result in ymm1."
+"VPERMQ zmm1 {k1}{z}, zmm2/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 00 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Permute qwords in zmm2/m512/m64bcst using indices
in ib and store the result in zmm1."
+"VPERMQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 36
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute qwords in ymm3/m256/m64bcst
using indexes in ymm2 and store the result in ymm1."
+"VPERMQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 36
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Permute qwords in zmm3/m512/m64bcst
using indices in zmm2 and store the result in zmm1."
+"VPERMT2D xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 7E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute double-words from two tables in
xmm3/m128/m32bcst and xmm1 using indexes in xmm2 and store the result in xmm1
using writemask k1."
+"VPERMT2D ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 7E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute double-words from two tables in
ymm3/m256/m32bcst and ymm1 using indexes in ymm2 and store the result in ymm1
using writemask k1."
+"VPERMT2D zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 7E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute double-words from two tables in
zmm3/m512/m32bcst and zmm1 using indices in zmm2 and store the result in zmm1
using writemask k1."
+"VPERMT2PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute double-precision FP values from two
tables in xmm3/m128/m64bcst and xmm1 using indexes in xmm2 and store the result
in xmm1 using writemask k1."
+"VPERMT2PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute double-precision FP values from two
tables in ymm3/m256/m64bcst and ymm1 using indexes in ymm2 and store the result
in ymm1 using writemask k1."
+"VPERMT2PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 7F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute double-precision FP values from two
tables in zmm3/m512/m64bcst and zmm1 using indices in zmm2 and store the result
in zmm1 using writemask k1."
+"VPERMT2PS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute single-precision FP values from two
tables in xmm3/m128/m32bcst and xmm1 using indexes in xmm2 and store the result
in xmm1 using writemask k1."
+"VPERMT2PS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 7F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute single-precision FP values from two
tables in ymm3/m256/m32bcst and ymm1 using indexes in ymm2 and store the result
in ymm1 using writemask k1."
+"VPERMT2PS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 7F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute single-precision FP values from two
tables in zmm3/m512/m32bcst and zmm1 using indices in zmm2 and store the result
in zmm1 using writemask k1."
+"VPERMT2Q xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 7E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute quad-words from two tables in
xmm3/m128/m64bcst and xmm1 using indexes in xmm2 and store the result in xmm1
using writemask k1."
+"VPERMT2Q ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 7E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute quad-words from two tables in
ymm3/m256/m64bcst and ymm1 using indexes in ymm2 and store the result in ymm1
using writemask k1."
+"VPERMT2Q zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 7E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Permute quad-words from two tables in
zmm3/m512/m64bcst and zmm1 using indices in zmm2 and store the result in zmm1
using writemask k1."
+"VPEXPANDD xmm1 {k1}{z}, xmm2/m128/i32x4","EVEX.128.66.0F38.W0 89
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed double-word integer values from
xmm2/m128 to xmm1 using writemask k1."
+"VPEXPANDD ymm1 {k1}{z}, ymm2/m256/i32x8","EVEX.256.66.0F38.W0 89
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed double-word integer values from
ymm2/m256 to ymm1 using writemask k1."
+"VPEXPANDD zmm1 {k1}{z}, zmm2/m512/i32x16","EVEX.512.66.0F38.W0 89
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed double-word integer values from
zmm2/m512 to zmm1 using writemask k1."
+"VPEXPANDQ xmm1 {k1}{z}, xmm2/m128/i64x2","EVEX.128.66.0F38.W1 89
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed quad-word integer values from
xmm2/m128 to xmm1 using writemask k1."
+"VPEXPANDQ ymm1 {k1}{z}, ymm2/m256/i64x4","EVEX.256.66.0F38.W1 89
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed quad-word integer values from
ymm2/m256 to ymm1 using writemask k1."
+"VPEXPANDQ zmm1 {k1}{z}, zmm2/m512/i64x8","EVEX.512.66.0F38.W1 89
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expand packed quad-word integer values from
zmm2/m512 to zmm1 using writemask k1."
+"VPGATHERDD xmm1 {k1}, vm32x/i32x4","EVEX.128.66.0F38.W0 90
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather dword values from memory using writemask k1 for
merging-masking."
+"VPGATHERDD ymm1 {k1}, vm32y/i32x8","EVEX.256.66.0F38.W0 90
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather dword values from memory using writemask k1 for
merging-masking."
+"VPGATHERDD zmm1 {k1}, vm32z/i32x16","EVEX.512.66.0F38.W0 90
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather dword values from memory using writemask k1 for
merging-masking."
+"VPGATHERDQ xmm1 {k1}, vm32x/i64x2","EVEX.128.66.0F38.W1 90
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather quadword values from memory using writemask k1 for
merging-masking."
+"VPGATHERDQ ymm1 {k1}, vm32x/i64x4","EVEX.256.66.0F38.W1 90
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather quadword values from memory using writemask k1 for
merging-masking."
+"VPGATHERDQ zmm1 {k1}, vm32y/i64x8","EVEX.512.66.0F38.W1 90
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed dword
indices, gather quadword values from memory using writemask k1 for
merging-masking."
+"VPGATHERQD xmm1 {k1}, vm64x/i32x2","EVEX.128.66.0F38.W0 91
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather dword values from memory using writemask k1 for
merging-masking."
+"VPGATHERQD xmm1 {k1}, vm64y/i32x4","EVEX.256.66.0F38.W0 91
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather dword values from memory using writemask k1 for
merging-masking."
+"VPGATHERQD ymm1 {k1}, vm64z/i32x8","EVEX.512.66.0F38.W0 91
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather dword values from memory using writemask k1 for
merging-masking."
+"VPGATHERQQ xmm1 {k1}, vm64x/i64x2","EVEX.128.66.0F38.W1 91
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather quadword values from memory using writemask k1 for
merging-masking."
+"VPGATHERQQ ymm1 {k1}, vm64y/i64x4","EVEX.256.66.0F38.W1 91
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather quadword values from memory using writemask k1 for
merging-masking."
+"VPGATHERQQ zmm1 {k1}, vm64z/i64x8","EVEX.512.66.0F38.W1 91
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","BaseReg (r):
VSIB:base, VectorReg (r): VSIB:index","","","Tuple1 Scalar","Using signed qword
indices, gather quadword values from memory using writemask k1 for
merging-masking."
+"VPMAXSD xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 3D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed dword integers in
xmm2 and xmm3/m128/m32bcst and store packed maximum values in xmm1 using
writemask k1."
+"VPMAXSD ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 3D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed dword integers in
xmm2 and xmm3/m256/m32bcst and store packed maximum values in xmm1 using
writemask k1."
+"VPMAXSD zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 3D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed dword integers in
xmm2 and xmm3/m512/m32bcst and store packed maximum values in xmm1 using
writemask k1."
+"VPMAXSQ xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 3D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed qword integers in
xmm2 and xmm3/m128/m64bcst and store packed maximum values in xmm1 using
writemask k1."
+"VPMAXSQ ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 3D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed qword integers in
xmm2 and xmm3/m256/m64bcst and store packed maximum values in xmm1 using
writemask k1."
+"VPMAXSQ zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 3D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed qword integers in
xmm2 and xmm3/m512/m64bcst and store packed maximum values in xmm1 using
writemask k1."
+"VPMAXUD xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 3F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned dword integers
in xmm2 and xmm3/m128/m32bcst and store packed maximum values in xmm1 under
writemask k1."
+"VPMAXUD ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 3F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned dword integers
in ymm2 and ymm3/m256/m32bcst and store packed maximum values in ymm1 under
writemask k1."
+"VPMAXUD zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 3F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned dword integers
in zmm2 and zmm3/m512/m32bcst and store packed maximum values in zmm1 under
writemask k1."
+"VPMAXUQ xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 3F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned qword integers
in xmm2 and xmm3/m128/m64bcst and store packed maximum values in xmm1 under
writemask k1."
+"VPMAXUQ ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 3F
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned qword integers
in ymm2 and ymm3/m256/m64bcst and store packed maximum values in ymm1 under
writemask k1."
+"VPMAXUQ zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 3F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned qword integers
in zmm2 and zmm3/m512/m64bcst and store packed maximum values in zmm1 under
writemask k1."
+"VPMINSD xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 39
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed dword integers in
xmm2 and xmm3/m128 and store packed minimum values in xmm1 under writemask k1."
+"VPMINSD ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 39
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed dword integers in
ymm2 and ymm3/m256 and store packed minimum values in ymm1 under writemask k1."
+"VPMINSD zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 39
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed dword integers in
zmm2 and zmm3/m512/m32bcst and store packed minimum values in zmm1 under
writemask k1."
+"VPMINSQ xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 39
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed qword integers in
xmm2 and xmm3/m128 and store packed minimum values in xmm1 under writemask k1."
+"VPMINSQ ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 39
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed qword integers in
ymm2 and ymm3/m256 and store packed minimum values in ymm1 under writemask k1."
+"VPMINSQ zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 39
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed signed qword integers in
zmm2 and zmm3/m512/m64bcst and store packed minimum values in zmm1 under
writemask k1."
+"VPMINUD xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 3B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned dword integers
in xmm2 and xmm3/m128/m32bcst and store packed minimum values in xmm1 under
writemask k1."
+"VPMINUD ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 3B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned dword integers
in ymm2 and ymm3/m256/m32bcst and store packed minimum values in ymm1 under
writemask k1."
+"VPMINUD zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 3B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned dword integers
in zmm2 and zmm3/m512/m32bcst and store packed minimum values in zmm1 under
writemask k1."
+"VPMINUQ xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 3B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned qword integers
in xmm2 and xmm3/m128/m64bcst and store packed minimum values in xmm1 under
writemask k1."
+"VPMINUQ ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 3B
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned qword integers
in ymm2 and ymm3/m256/m64bcst and store packed minimum values in ymm1 under
writemask k1."
+"VPMINUQ zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 3B
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Compare packed unsigned qword integers
in zmm2 and zmm3/m512/m64bcst and store packed minimum values in zmm1 under
writemask k1."
+"VPMOVDB xmm1/m128 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 31
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 16 packed double-word integers from
zmm2 into 16 packed byte integers in xmm1/m128 with truncation under writemask
k1."
+"VPMOVDB xmm1/m32 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 31
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 4 packed double-word integers from
xmm2 into 4 packed byte integers in xmm1/m32 with truncation under writemask
k1."
+"VPMOVDB xmm1/m64 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 31
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 8 packed double-word integers from
ymm2 into 8 packed byte integers in xmm1/m64 with truncation under writemask
k1."
+"VPMOVDW xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 33
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed double-word integers from ymm2
into 8 packed word integers in xmm1/m128 with truncation under writemask k1."
+"VPMOVDW xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 33
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 4 packed double-word integers from xmm2
into 4 packed word integers in xmm1/m64 with truncation under writemask k1."
+"VPMOVDW ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 33
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 16 packed double-word integers from zmm2
into 16 packed word integers in ymm1/m256 with truncation under writemask k1."
+"VPMOVQB xmm1/m16 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 32
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 2 packed quad-word integers from xmm2
into 2 packed byte integers in xmm1/m16 with truncation under writemask k1."
+"VPMOVQB xmm1/m32 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 32
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 4 packed quad-word integers from ymm2
into 4 packed byte integers in xmm1/m32 with truncation under writemask k1."
+"VPMOVQB xmm1/m64 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 32
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 8 packed quad-word integers from zmm2
into 8 packed byte integers in xmm1/m64 with truncation under writemask k1."
+"VPMOVQD xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 35
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 2 packed quad-word integers from xmm2
into 2 packed double-word integers in xmm1/m128 with truncation subject to
writemask k1."
+"VPMOVQD xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 35
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 4 packed quad-word integers from ymm2
into 4 packed double-word integers in xmm1/m128 with truncation subject to
writemask k1."
+"VPMOVQD ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 35
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed quad-word integers from zmm2
into 8 packed double-word integers in ymm1/m256 with truncation subject to
writemask k1."
+"VPMOVQW xmm1/m128 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 34
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 8 packed quad-word integers from zmm2
into 8 packed word integers in xmm1/m128 with truncation under writemask k1."
+"VPMOVQW xmm1/m32 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 34
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 2 packed quad-word integers from xmm2
into 2 packed word integers in xmm1/m32 with truncation under writemask k1."
+"VPMOVQW xmm1/m64 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 34
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 4 packed quad-word integers from ymm2
into 4 packed word integers in xmm1/m64 with truncation under writemask k1."
+"VPMOVSDB xmm1/m128 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 21
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 16 packed signed double-word integers
from zmm2 into 16 packed signed byte integers in xmm1/m128 using signed
saturation under writemask k1."
+"VPMOVSDB xmm1/m32 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 21
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 4 packed signed double-word integers
from xmm2 into 4 packed signed byte integers in xmm1/m32 using signed
saturation under writemask k1."
+"VPMOVSDB xmm1/m64 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 21
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 8 packed signed double-word integers
from ymm2 into 8 packed signed byte integers in xmm1/m64 using signed
saturation under writemask k1."
+"VPMOVSDW xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 23
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed signed double-word integers
from ymm2 into 8 packed signed word integers in xmm1/m128 using signed
saturation under writemask k1."
+"VPMOVSDW xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 23
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 4 packed signed double-word integers
from xmm2 into 4 packed signed word integers in ymm1/m64 using signed
saturation under writemask k1."
+"VPMOVSDW ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 23
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 16 packed signed double-word integers
from zmm2 into 16 packed signed word integers in ymm1/m256 using signed
saturation under writemask k1."
+"VPMOVSQB xmm1/m16 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 22
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 2 packed signed quad-word integers from
xmm2 into 2 packed signed byte integers in xmm1/m16 using signed saturation
under writemask k1."
+"VPMOVSQB xmm1/m32 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 22
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 4 packed signed quad-word integers from
ymm2 into 4 packed signed byte integers in xmm1/m32 using signed saturation
under writemask k1."
+"VPMOVSQB xmm1/m64 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 22
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 8 packed signed quad-word integers from
zmm2 into 8 packed signed byte integers in xmm1/m64 using signed saturation
under writemask k1."
+"VPMOVSQD xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 25
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 4 packed signed quad-word integers from
ymm2 into 4 packed signed double-word integers in xmm1/m128 using signed
saturation subject to writemask k1."
+"VPMOVSQD xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 25
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 2 packed signed quad-word integers from
xmm2 into 2 packed signed double-word integers in xmm1/m64 using signed
saturation subject to writemask k1."
+"VPMOVSQD ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 25
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed signed quad-word integers from
zmm2 into 8 packed signed double-word integers in ymm1/m256 using signed
saturation subject to writemask k1."
+"VPMOVSQW xmm1/m128 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 24
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 8 packed signed quad-word integers
from zmm2 into 8 packed signed word integers in xmm1/m128 using signed
saturation under writemask k1."
+"VPMOVSQW xmm1/m32 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 24
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 8 packed signed quad-word integers
from zmm2 into 8 packed signed word integers in xmm1/m32 using signed
saturation under writemask k1."
+"VPMOVSQW xmm1/m64 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 24
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 4 packed signed quad-word integers
from ymm2 into 4 packed signed word integers in xmm1/m64 using signed
saturation under writemask k1."
+"VPMOVSXBD xmm1{k1}{z}, xmm2/m32","EVEX.128.66.0F38.WIG 21
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Sign extend 4 packed 8-bit integers in the low
4 bytes of xmm2/m32 to 4 packed 32-bit integers in xmm1 subject to writemask
k1."
+"VPMOVSXBD ymm1{k1}{z}, xmm2/m64","EVEX.256.66.0F38.WIG 21
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Sign extend 8 packed 8-bit integers in the low
8 bytes of xmm2/m64 to 8 packed 32-bit integers in ymm1 subject to writemask
k1."
+"VPMOVSXBD zmm1{k1}{z}, xmm2/m128","EVEX.512.66.0F38.WIG 21
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Sign extend 16 packed 8-bit integers in the
low 16 bytes of xmm2/m128 to 16 packed 32-bit integers in zmm1 subject to
writemask k1."
+"VPMOVSXBQ xmm1{k1}{z}, xmm2/m16","EVEX.128.66.0F38.WIG 22
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Oct Vector Mem","Sign extend 2 packed 8-bit integers in the low 2
bytes of xmm2/m16 to 2 packed 64-bit integers in xmm1 subject to writemask k1."
+"VPMOVSXBQ ymm1{k1}{z}, xmm2/m32","EVEX.256.66.0F38.WIG 22
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Oct Vector Mem","Sign extend 4 packed 8-bit integers in the low 4
bytes of xmm2/m32 to 4 packed 64-bit integers in ymm1 subject to writemask k1."
+"VPMOVSXBQ zmm1{k1}{z}, xmm2/m64","EVEX.512.66.0F38.WIG 22
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Oct Vector Mem","Sign extend 8 packed 8-bit integers in the low 8
bytes of xmm2/m64 to 8 packed 64-bit integers in zmm1 subject to writemask k1."
+"VPMOVSXDQ xmm1{k1}{z}, xmm2/m64","EVEX.128.66.0F38.W0 25
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 2 packed 32-bit integers in the low 8
bytes of xmm2/m64 to 2 packed 64-bit integers in zmm1 using writemask k1."
+"VPMOVSXDQ ymm1{k1}{z}, xmm2/m128","EVEX.256.66.0F38.W0 25
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 4 packed 32-bit integers in the low
16 bytes of xmm2/m128 to 4 packed 64-bit integers in zmm1 using writemask k1."
+"VPMOVSXDQ zmm1{k1}{z}, ymm2/m256","EVEX.512.66.0F38.W0 25
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 8 packed 32-bit integers in the low
32 bytes of ymm2/m256 to 8 packed 64-bit integers in zmm1 using writemask k1."
+"VPMOVSXWD xmm1{k1}{z}, xmm2/m64","EVEX.128.66.0F38.WIG 23
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 4 packed 16-bit integers in the low 8
bytes of ymm2/mem to 4 packed 32-bit integers in xmm1 subject to writemask k1."
+"VPMOVSXWD ymm1{k1}{z}, xmm2/m128","EVEX.256.66.0F38.WIG 23
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 8 packed 16-bit integers in the low
16 bytes of ymm2/m128 to 8 packed 32-bit integers in ymm1 subject to writemask
k1."
+"VPMOVSXWD zmm1{k1}{z}, ymm2/m256","EVEX.512.66.0F38.WIG 23
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Sign extend 16 packed 16-bit integers in the low
32 bytes of ymm2/m256 to 16 packed 32-bit integers in zmm1 subject to writemask
k1."
+"VPMOVSXWQ xmm1{k1}{z}, xmm2/m32","EVEX.128.66.0F38.WIG 24
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Sign extend 2 packed 16-bit integers in the
low 4 bytes of xmm2/m32 to 2 packed 64-bit integers in xmm1 subject to
writemask k1."
+"VPMOVSXWQ ymm1{k1}{z}, xmm2/m64","EVEX.256.66.0F38.WIG 24
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Sign extend 4 packed 16-bit integers in the
low 8 bytes of xmm2/m64 to 4 packed 64-bit integers in ymm1 subject to
writemask k1."
+"VPMOVSXWQ zmm1{k1}{z}, xmm2/m128","EVEX.512.66.0F38.WIG 24
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Sign extend 8 packed 16-bit integers in the
low 16 bytes of xmm2/m128 to 8 packed 64-bit integers in zmm1 subject to
writemask k1."
+"VPMOVUSDB xmm1/m128 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 11
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 16 packed unsigned double-word
integers from zmm2 into 16 packed unsigned byte integers in xmm1/m128 using
unsigned saturation under writemask k1."
+"VPMOVUSDB xmm1/m32 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 11
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 4 packed unsigned double-word
integers from xmm2 into 4 packed unsigned byte integers in xmm1/m32 using
unsigned saturation under writemask k1."
+"VPMOVUSDB xmm1/m64 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 11
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 8 packed unsigned double-word
integers from ymm2 into 8 packed unsigned byte integers in xmm1/m64 using
unsigned saturation under writemask k1."
+"VPMOVUSDW xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 13
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed unsigned double-word integers
from ymm2 into 8 packed unsigned word integers in xmm1/m128 using unsigned
saturation under writemask k1."
+"VPMOVUSDW xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 13
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 4 packed unsigned double-word integers
from xmm2 into 4 packed unsigned word integers in xmm1/m64 using unsigned
saturation under writemask k1."
+"VPMOVUSDW ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 13
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 16 packed unsigned double-word integers
from zmm2 into 16 packed unsigned word integers in ymm1/m256 using unsigned
saturation under writemask k1."
+"VPMOVUSQB xmm1/m16 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 12
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 2 packed unsigned quad-word integers from
xmm2 into 2 packed unsigned byte integers in xmm1/m16 using unsigned saturation
under writemask k1."
+"VPMOVUSQB xmm1/m32 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 12
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 4 packed unsigned quad-word integers from
ymm2 into 4 packed unsigned byte integers in xmm1/m32 using unsigned saturation
under writemask k1."
+"VPMOVUSQB xmm1/m64 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 12
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Oct Vector Mem","Converts 8 packed unsigned quad-word integers from
zmm2 into 8 packed unsigned byte integers in xmm1/m64 using unsigned saturation
under writemask k1."
+"VPMOVUSQD xmm1/m128 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 4 packed unsigned quad-word integers
from ymm2 into 4 packed unsigned double-word integers in xmm1/m128 using
unsigned saturation subject to writemask k1."
+"VPMOVUSQD xmm1/m64 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 2 packed unsigned quad-word integers
from xmm2 into 2 packed unsigned double-word integers in xmm1/m64 using
unsigned saturation subject to writemask k1."
+"VPMOVUSQD ymm1/m256 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 15
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Half Vector Mem","Converts 8 packed unsigned quad-word integers
from zmm2 into 8 packed unsigned double-word integers in ymm1/m256 using
unsigned saturation subject to writemask k1."
+"VPMOVUSQW xmm1/m128 {k1}{z}, zmm2","EVEX.512.F3.0F38.W0 14
/r","Valid","Valid","Invalid","AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 8 packed unsigned quad-word integers
from zmm2 into 8 packed unsigned word integers in xmm1/m128 using unsigned
saturation under writemask k1."
+"VPMOVUSQW xmm1/m32 {k1}{z}, xmm2","EVEX.128.F3.0F38.W0 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 2 packed unsigned quad-word integers
from xmm2 into 2 packed unsigned word integers in xmm1/m32 using unsigned
saturation under writemask k1."
+"VPMOVUSQW xmm1/m64 {k1}{z}, ymm2","EVEX.256.F3.0F38.W0 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:r/m (w)","ModRM:reg
(r)","","","Quarter Vector Mem","Converts 4 packed unsigned quad-word integers
from ymm2 into 4 packed unsigned word integers in xmm1/m64 using unsigned
saturation under writemask k1."
+"VPMOVZXBD xmm1{k1}{z}, xmm2/m32","EVEX.128.66.0F38.WIG 31
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Zero extend 4 packed 8-bit integers in the low
4 bytes of xmm2/m32 to 4 packed 32-bit integers in xmm1 subject to writemask
k1."
+"VPMOVZXBD ymm1{k1}{z}, xmm2/m64","EVEX.256.66.0F38.WIG 31
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Zero extend 8 packed 8-bit integers in the low
8 bytes of xmm2/m64 to 8 packed 32-bit integers in ymm1 subject to writemask
k1."
+"VPMOVZXBD zmm1{k1}{z}, xmm2/m128","EVEX.512.66.0F38.WIG 31
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Zero extend 16 packed 8-bit integers in
xmm2/m128 to 16 packed 32-bit integers in zmm1 subject to writemask k1."
+"VPMOVZXBQ xmm1{k1}{z}, xmm2/m16","EVEX.128.66.0F38.WIG 32
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Oct Vector Mem","Zero extend 2 packed 8-bit integers in the low 2
bytes of xmm2/m16 to 2 packed 64-bit integers in xmm1 subject to writemask k1."
+"VPMOVZXBQ ymm1{k1}{z}, xmm2/m32","EVEX.256.66.0F38.WIG 32
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Oct Vector Mem","Zero extend 4 packed 8-bit integers in the low 4
bytes of xmm2/m32 to 4 packed 64-bit integers in ymm1 subject to writemask k1."
+"VPMOVZXBQ zmm1{k1}{z}, xmm2/m64","EVEX.512.66.0F38.WIG 32
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Oct Vector Mem","Zero extend 8 packed 8-bit integers in the low 8
bytes of xmm2/m64 to 8 packed 64-bit integers in zmm1 subject to writemask k1."
+"VPMOVZXWD xmm1{k1}{z}, xmm2/m64","EVEX.128.66.0F38.WIG 33
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Zero extend 4 packed 16-bit integers in the low 8
bytes of xmm2/m64 to 4 packed 32-bit integers in xmm1 subject to writemask k1."
+"VPMOVZXWD ymm1{k1}{z}, xmm2/m128","EVEX.256.66.0F38.WIG 33
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Zero extend 8 packed 16-bit integers in xmm2/m128
to 8 packed 32-bit integers in zmm1 subject to writemask k1."
+"VPMOVZXWD zmm1{k1}{z}, ymm2/m256","EVEX.512.66.0F38.WIG 33
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector Mem","Zero extend 16 packed 16-bit integers in
ymm2/m256 to 16 packed 32-bit integers in zmm1 subject to writemask k1."
+"VPMOVZXWQ xmm1{k1}{z}, xmm2/m32","EVEX.128.66.0F38.WIG 34
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Zero extend 2 packed 16-bit integers in the
low 4 bytes of xmm2/m32 to 2 packed 64-bit integers in xmm1 subject to
writemask k1."
+"VPMOVZXWQ ymm1{k1}{z}, xmm2/m64","EVEX.256.66.0F38.WIG 34
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Zero extend 4 packed 16-bit integers in the
low 8 bytes of xmm2/m64 to 4 packed 64-bit integers in ymm1 subject to
writemask k1."
+"VPMOVZXWQ zmm1{k1}{z}, xmm2/m128","EVEX.512.66.0F38.WIG 34
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector Mem","Zero extend 8 packed 16-bit integers in
xmm2/m128 to 8 packed 64-bit integers in zmm1 subject to writemask k1."
+"VPMULDQ xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 28
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed signed doubleword
integers in xmm2 by packed signed doubleword integers in xmm3/m128/m64bcst, and
store the quadword results in xmm1 using writemask k1."
+"VPMULDQ ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 28
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed signed doubleword
integers in ymm2 by packed signed doubleword integers in ymm3/m256/m64bcst, and
store the quadword results in ymm1 using writemask k1."
+"VPMULDQ zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 28
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed signed doubleword
integers in zmm2 by packed signed doubleword integers in zmm3/m512/m64bcst, and
store the quadword results in zmm1 using writemask k1."
+"VPMULLD xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 40
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply the packed dword signed
integers in xmm2 and xmm3/m128/m32bcst and store the low 32 bits of each
product in xmm1 under writemask k1."
+"VPMULLD ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 40
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply the packed dword signed
integers in ymm2 and ymm3/m256/m32bcst and store the low 32 bits of each
product in ymm1 under writemask k1."
+"VPMULLD zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 40
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply the packed dword signed
integers in zmm2 and zmm3/m512/m32bcst and store the low 32 bits of each
product in zmm1 under writemask k1."
+"VPMULUDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 F4
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed unsigned doubleword
integers in xmm2 by packed unsigned doubleword integers in xmm3/m128/m64bcst,
and store the quadword results in xmm1 under writemask k1."
+"VPMULUDQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 F4
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed unsigned doubleword
integers in ymm2 by packed unsigned doubleword integers in ymm3/m256/m64bcst,
and store the quadword results in ymm1 under writemask k1."
+"VPMULUDQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 F4
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed unsigned doubleword
integers in zmm2 by packed unsigned doubleword integers in zmm3/m512/m64bcst,
and store the quadword results in zmm1 under writemask k1."
+"VPORD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 EB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise OR of packed doubleword integers
in xmm2 and xmm3/m128/m32bcst using writemask k1."
+"VPORD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F.W0 EB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise OR of packed doubleword integers
in ymm2 and ymm3/m256/m32bcst using writemask k1."
+"VPORD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F.W0 EB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise OR of packed doubleword integers
in zmm2 and zmm3/m512/m32bcst using writemask k1."
+"VPORQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 EB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise OR of packed quadword integers
in xmm2 and xmm3/m128/m64bcst using writemask k1."
+"VPORQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 EB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise OR of packed quadword integers
in ymm2 and ymm3/m256/m64bcst using writemask k1."
+"VPORQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 EB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise OR of packed quadword integers
in zmm2 and zmm3/m512/m64bcst using writemask k1."
+"VPROLD xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F.W0 72 /1
ib","Valid","Valid","Invalid","AVX512VL AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate doublewords in xmm2/m128/m32bcst left by ib.
Result written to xmm1 using writemask k1."
+"VPROLD ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F.W0 72 /1
ib","Valid","Valid","Invalid","AVX512VL AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate doublewords in ymm2/m256/m32bcst left by ib.
Result written to ymm1 using writemask k1."
+"VPROLD zmm1 {k1}{z}, zmm2/m512/m32bcst, ib","EVEX.512.66.0F.W0 72 /1
ib","Valid","Valid","Invalid","AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate left of doublewords in zmm3/m512/m32bcst by
ib. Result written to zmm1 using writemask k1."
+"VPROLQ xmm1 {k1}{z}, xmm2/m128/m64bcst, ib","EVEX.128.66.0F.W1 72 /1
ib","Valid","Valid","Invalid","AVX512VL AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate quadwords in xmm2/m128/m64bcst left by ib.
Result written to xmm1 using writemask k1."
+"VPROLQ ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F.W1 72 /1
ib","Valid","Valid","Invalid","AVX512VL AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate quadwords in ymm2/m256/m64bcst left by ib.
Result written to ymm1 using writemask k1."
+"VPROLQ zmm1 {k1}{z}, zmm2/m512/m64bcst, ib","EVEX.512.66.0F.W1 72 /1
ib","Valid","Valid","Invalid","AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate quadwords in zmm2/m512/m64bcst left by ib.
Result written to zmm1 using writemask k1."
+"VPROLVD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate doublewords in xmm2 left by count
in the corresponding element of xmm3/m128/m32bcst. Result written to xmm1 under
writemask k1."
+"VPROLVD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate doublewords in ymm2 left by count
in the corresponding element of ymm3/m256/m32bcst. Result written to ymm1 under
writemask k1."
+"VPROLVD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 15
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate left of doublewords in zmm2 by
count in the corresponding element of zmm3/m512/m32bcst. Result written to zmm1
using writemask k1."
+"VPROLVQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate quadwords in xmm2 left by count
in the corresponding element of xmm3/m128/m64bcst. Result written to xmm1 under
writemask k1."
+"VPROLVQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate quadwords in ymm2 left by count
in the corresponding element of ymm3/m256/m64bcst. Result written to ymm1 under
writemask k1."
+"VPROLVQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 15
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate quadwords in zmm2 left by count
in the corresponding element of zmm3/m512/m64bcst. Result written to zmm1under
writemask k1."
+"VPRORD xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F.W0 72 /0
ib","Valid","Valid","Invalid","AVX512VL AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate doublewords in xmm2/m128/m32bcst right by
ib, store result using writemask k1."
+"VPRORD ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F.W0 72 /0
ib","Valid","Valid","Invalid","AVX512VL AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate doublewords in ymm2/m256/m32bcst right by
ib, store result using writemask k1."
+"VPRORD zmm1 {k1}{z}, zmm2/m512/m32bcst, ib","EVEX.512.66.0F.W0 72 /0
ib","Valid","Valid","Invalid","AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate doublewords in zmm2/m512/m32bcst right by
ib, store result using writemask k1."
+"VPRORQ xmm1 {k1}{z}, xmm2/m128/m64bcst, ib","EVEX.128.66.0F.W1 72 /0
ib","Valid","Valid","Invalid","AVX512VL AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate quadwords in xmm2/m128/m64bcst right by ib,
store result using writemask k1."
+"VPRORQ ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F.W1 72 /0
ib","Valid","Valid","Invalid","AVX512VL AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate quadwords in ymm2/m256/m64bcst right by ib,
store result using writemask k1."
+"VPRORQ zmm1 {k1}{z}, zmm2/m512/m64bcst, ib","EVEX.512.66.0F.W1 72 /0
ib","Valid","Valid","Invalid","AVX512F","VEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Rotate quadwords in zmm2/m512/m64bcst right by ib,
store result using writemask k1."
+"VPRORVD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate doublewords in xmm2 right by
count in the corresponding element of xmm3/m128/m32bcst, store result using
writemask k1."
+"VPRORVD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate doublewords in ymm2 right by
count in the corresponding element of ymm3/m256/m32bcst, store using result
writemask k1."
+"VPRORVD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 14
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate doublewords in zmm2 right by
count in the corresponding element of zmm3/m512/m32bcst, store result using
writemask k1."
+"VPRORVQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate quadwords in xmm2 right by count
in the corresponding element of xmm3/m128/m64bcst, store result using writemask
k1."
+"VPRORVQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate quadwords in ymm2 right by count
in the corresponding element of ymm3/m256/m64bcst, store result using writemask
k1."
+"VPRORVQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 14
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Rotate quadwords in zmm2 right by count
in the corresponding element of zmm3/m512/m64bcst, store result using writemask
k1."
+"VPSCATTERDD vm32x/i32x4 {k1}, xmm1","EVEX.128.66.0F38.W0 A0
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed dword
indices, scatter dword values to memory using writemask k1."
+"VPSCATTERDD vm32y/i32x8 {k1}, ymm1","EVEX.256.66.0F38.W0 A0
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed dword
indices, scatter dword values to memory using writemask k1."
+"VPSCATTERDD vm32z/i32x16 {k1}, zmm1","EVEX.512.66.0F38.W0 A0
/r","Valid","Valid","Invalid","AVX512F","BaseReg (r): VSIB:base, VectorReg (r):
VSIB:index","ModRM:reg (r)","","","","Using signed dword indices, scatter dword
values to memory using writemask k1."
+"VPSCATTERDQ vm32x/i64x2 {k1}, xmm1","EVEX.128.66.0F38.W1 A0
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed dword
indices, scatter qword values to memory using writemask k1."
+"VPSCATTERDQ vm32x/i64x4 {k1}, ymm1","EVEX.256.66.0F38.W1 A0
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed dword
indices, scatter qword values to memory using writemask k1."
+"VPSCATTERDQ vm32y/i64x8 {k1}, zmm1","EVEX.512.66.0F38.W1 A0
/r","Valid","Valid","Invalid","AVX512F","BaseReg (r): VSIB:base, VectorReg (r):
VSIB:index","ModRM:reg (r)","","","","Using signed dword indices, scatter qword
values to memory using writemask k1."
+"VPSCATTERQD vm64x/i32x2 {k1}, xmm1","EVEX.128.66.0F38.W0 A1
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed qword
indices, scatter dword values to memory using writemask k1."
+"VPSCATTERQD vm64y/i32x4 {k1}, xmm1","EVEX.256.66.0F38.W0 A1
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed qword
indices, scatter dword values to memory using writemask k1."
+"VPSCATTERQD vm64z/i32x8 {k1}, ymm1","EVEX.512.66.0F38.W0 A1
/r","Valid","Valid","Invalid","AVX512F","BaseReg (r): VSIB:base, VectorReg (r):
VSIB:index","ModRM:reg (r)","","","","Using signed qword indices, scatter dword
values to memory using writemask k1."
+"VPSCATTERQQ vm64x/i64x2 {k1}, xmm1","EVEX.128.66.0F38.W1 A1
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed qword
indices, scatter qword values to memory using writemask k1."
+"VPSCATTERQQ vm64y/i64x4 {k1}, ymm1","EVEX.256.66.0F38.W1 A1
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed qword
indices, scatter qword values to memory using writemask k1."
+"VPSCATTERQQ vm64z/i64x8 {k1}, zmm1","EVEX.512.66.0F38.W1 A1
/r","Valid","Valid","Invalid","AVX512F","BaseReg (r): VSIB:base, VectorReg (r):
VSIB:index","ModRM:reg (r)","","","","Using signed qword indices, scatter qword
values to memory using writemask k1."
+"VPSHUFD xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F.W0 70 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Shuffle the doublewords in xmm2/m128/m32bcst based
on the encoding in ib and store the result in xmm1 using writemask k1."
+"VPSHUFD ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F.W0 70 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Shuffle the doublewords in ymm2/m256/m32bcst based
on the encoding in ib and store the result in ymm1 using writemask k1."
+"VPSHUFD zmm1 {k1}{z}, zmm2/m512/m32bcst, ib","EVEX.512.66.0F.W0 70 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Shuffle the doublewords in zmm2/m512/m32bcst based
on the encoding in ib and store the result in zmm1 using writemask k1."
+"VPSLLD xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F.W0 72 /6
ib","Valid","Valid","Invalid","AVX512VL AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in xmm2/m128/m32bcst left by ib
while shifting in 0s using writemask k1."
+"VPSLLD ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F.W0 72 /6
ib","Valid","Valid","Invalid","AVX512VL AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in ymm2/m256/m32bcst left by ib
while shifting in 0s using writemask k1."
+"VPSLLD zmm1 {k1}{z}, zmm2/m512/m32bcst, ib","EVEX.512.66.0F.W0 72 /6
ib","Valid","Valid","Invalid","AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in zmm2/m512/m32bcst left by ib
while shifting in 0s using writemask k1."
+"VPSLLD xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.W0 F2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in xmm2 left by amount
specified in xmm3/m128 while shifting in 0s under writemask k1."
+"VPSLLD ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.W0 F2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in ymm2 left by amount
specified in xmm3/m128 while shifting in 0s under writemask k1."
+"VPSLLD zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.W0 F2
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in zmm2 left by amount
specified in xmm3/m128 while shifting in 0s under writemask k1."
+"VPSLLQ xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.W1 F3
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in xmm2 left by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSLLQ ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.W1 F3
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in ymm2 left by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSLLQ zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.W1 F3
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in zmm2 left by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSLLVD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 47
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in xmm2 left by amount
specified in the corresponding element of xmm3/m128/m32bcst while shifting in
0s using writemask k1."
+"VPSLLVD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 47
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in ymm2 left by amount
specified in the corresponding element of ymm3/m256/m32bcst while shifting in
0s using writemask k1."
+"VPSLLVD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 47
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in zmm2 left by amount
specified in the corresponding element of zmm3/m512/m32bcst while shifting in
0s using writemask k1."
+"VPSLLVQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 47
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in xmm2 left by amount
specified in the corresponding element of xmm3/m128/m64bcst while shifting in
0s using writemask k1."
+"VPSLLVQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 47
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in ymm2 left by amount
specified in the corresponding element of ymm3/m256/m64bcst while shifting in
0s using writemask k1."
+"VPSLLVQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 47
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in zmm2 left by amount
specified in the corresponding element of zmm3/m512/m64bcst while shifting in
0s using writemask k1."
+"VPSRAD xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F.W0 72 /4
ib","Valid","Valid","Invalid","AVX512VL AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in xmm2/m128/m32bcst right by ib
while shifting in sign bits using writemask k1."
+"VPSRAD ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F.W0 72 /4
ib","Valid","Valid","Invalid","AVX512VL AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in ymm2/m256/m32bcst right by ib
while shifting in sign bits using writemask k1."
+"VPSRAD zmm1 {k1}{z}, zmm2/m512/m32bcst, ib","EVEX.512.66.0F.W0 72 /4
ib","Valid","Valid","Invalid","AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in zmm2/m512/m32bcst right by ib
while shifting in sign bits using writemask k1."
+"VPSRAD xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.W0 E2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in xmm2 right by amount
specified in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRAD ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.W0 E2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in ymm2 right by amount
specified in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRAD zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.W0 E2
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in zmm2 right by amount
specified in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRAQ xmm1 {k1}{z}, xmm2/m128/m64bcst, ib","EVEX.128.66.0F.W1 72 /4
ib","Valid","Valid","Invalid","AVX512VL AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift quadwords in xmm2/m128/m64bcst right by ib
while shifting in sign bits using writemask k1."
+"VPSRAQ ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F.W1 72 /4
ib","Valid","Valid","Invalid","AVX512VL AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift quadwords in ymm2/m256/m64bcst right by ib
while shifting in sign bits using writemask k1."
+"VPSRAQ zmm1 {k1}{z}, zmm2/m512/m64bcst, ib","EVEX.512.66.0F.W1 72 /4
ib","Valid","Valid","Invalid","AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift quadwords in zmm2/m512/m64bcst right by ib
while shifting in sign bits using writemask k1."
+"VPSRAQ xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.W1 E2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in xmm2 right by amount
specified in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRAQ ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.W1 E2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in ymm2 right by amount
specified in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRAQ zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.W1 E2
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in zmm2 right by amount
specified in xmm3/m128 while shifting in sign bits using writemask k1."
+"VPSRAVD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 46
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in xmm2 right by
amount specified in the corresponding element of xmm3/m128/m32bcst while
shifting in sign bits using writemask k1."
+"VPSRAVD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 46
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in ymm2 right by
amount specified in the corresponding element of ymm3/m256/m32bcst while
shifting in sign bits using writemask k1."
+"VPSRAVD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 46
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in zmm2 right by
amount specified in the corresponding element of zmm3/m512/m32bcst while
shifting in sign bits using writemask k1."
+"VPSRAVQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 46
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in xmm2 right by amount
specified in the corresponding element of xmm3/m128/m64bcst while shifting in
sign bits using writemask k1."
+"VPSRAVQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 46
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in ymm2 right by amount
specified in the corresponding element of ymm3/m256/m64bcst while shifting in
sign bits using writemask k1."
+"VPSRAVQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 46
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in zmm2 right by amount
specified in the corresponding element of zmm3/m512/m64bcst while shifting in
sign bits using writemask k1."
+"VPSRLD xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F.W0 72 /2
ib","Valid","Valid","Invalid","AVX512VL AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in xmm2/m128/m32bcst right by ib
while shifting in 0s using writemask k1."
+"VPSRLD ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F.W0 72 /2
ib","Valid","Valid","Invalid","AVX512VL AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in ymm2/m256/m32bcst right by ib
while shifting in 0s using writemask k1."
+"VPSRLD zmm1 {k1}{z}, zmm2/m512/m32bcst, ib","EVEX.512.66.0F.W0 72 /2
ib","Valid","Valid","Invalid","AVX512F","EVEX.vvvv (w)","ModRM:r/m
(r)","ib","","Full Vector","Shift doublewords in zmm2/m512/m32bcst right by ib
while shifting in 0s using writemask k1."
+"VPSRLD xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.W0 D2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in xmm2 right by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRLD ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.W0 D2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in ymm2 right by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRLD zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.W0 D2
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift doublewords in zmm2 right by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRLQ xmm1 {k1}{z}, xmm2, xmm3/m128","EVEX.128.66.0F.W1 D3
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in xmm2 right by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRLQ ymm1 {k1}{z}, ymm2, xmm3/m128","EVEX.256.66.0F.W1 D3
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in ymm2 right by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRLQ zmm1 {k1}{z}, zmm2, xmm3/m128","EVEX.512.66.0F.W1 D3
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Mem128","Shift quadwords in zmm2 right by amount
specified in xmm3/m128 while shifting in 0s using writemask k1."
+"VPSRLVD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 45
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in xmm2 right by
amount specified in the corresponding element of xmm3/m128/m32bcst while
shifting in 0s using writemask k1."
+"VPSRLVD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 45
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in ymm2 right by
amount specified in the corresponding element of ymm3/m256/m32bcst while
shifting in 0s using writemask k1."
+"VPSRLVD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 45
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift doublewords in zmm2 right by
amount specified in the corresponding element of zmm3/m512/m32bcst while
shifting in 0s using writemask k1."
+"VPSRLVQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 45
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in xmm2 right by amount
specified in the corresponding element of xmm3/m128/m64bcst while shifting in
0s using writemask k1."
+"VPSRLVQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 45
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in ymm2 right by amount
specified in the corresponding element of ymm3/m256/m64bcst while shifting in
0s using writemask k1."
+"VPSRLVQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 45
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Shift quadwords in zmm2 right by amount
specified in the corresponding element of zmm3/m512/m64bcst while shifting in
0s using writemask k1."
+"VPSUBQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 FB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed quadword integers in
xmm3/m128/m64bcst from xmm2 and store in xmm1 using writemask k1."
+"VPSUBQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 FB
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed quadword integers in
ymm3/m256/m64bcst from ymm2 and store in ymm1 using writemask k1."
+"VPSUBQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 FB
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed quadword integers in
zmm3/m512/m64bcst from zmm2 and store in zmm1 using writemask k1."
+"VPTERNLOGD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 25
/r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","ib","Full Vector","Bitwise ternary logic
taking xmm1, xmm2 and xmm3/m128/m32bcst as source operands and writing the
result to xmm1 under writemask k1 with dword granularity. The immediate value
determines the specific binary function being implemented."
+"VPTERNLOGD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 25
/r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","ib","Full Vector","Bitwise ternary logic
taking ymm1, ymm2 and ymm3/m256/m32bcst as source operands and writing the
result to ymm1 under writemask k1 with dword granularity. The immediate value
determines the specific binary function being implemented."
+"VPTERNLOGD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst, ib","EVEX.512.66.0F3A.W0 25
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Bitwise ternary logic taking zmm1,
zmm2 and zmm3/m512/m32bcst as source operands and writing the result to zmm1
under writemask k1 with dword granularity. The immediate value determines the
specific binary function being implemented."
+"VPTERNLOGQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 25
/r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","ib","Full Vector","Bitwise ternary logic
taking xmm1, xmm2 and xmm3/m128/m64bcst as source operands and writing the
result to xmm1 under writemask k1 with qword granularity. The immediate value
determines the specific binary function being implemented."
+"VPTERNLOGQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 25
/r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","ib","Full Vector","Bitwise ternary logic
taking ymm1, ymm2 and ymm3/m256/m64bcst as source operands and writing the
result to ymm1 under writemask k1 with qword granularity. The immediate value
determines the specific binary function being implemented."
+"VPTERNLOGQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 25
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Bitwise ternary logic taking zmm1,
zmm2 and zmm3/m512/m64bcst as source operands and writing the result to zmm1
under writemask k1 with qword granularity. The immediate value determines the
specific binary function being implemented."
+"VPTESTMD k2 {k1}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed doubleword
integers in xmm2 and xmm3/m128/m32bcst and set mask k2 to reflect the
zero/non-zero status of each element of the result, under writemask k1."
+"VPTESTMD k2 {k1}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed doubleword
integers in ymm2 and ymm3/m256/m32bcst and set mask k2 to reflect the
zero/non-zero status of each element of the result, under writemask k1."
+"VPTESTMD k2 {k1}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F38.W0 27
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed doubleword
integers in zmm2 and zmm3/m512/m32bcst and set mask k2 to reflect the
zero/non-zero status of each element of the result, under writemask k1."
+"VPTESTMQ k2 {k1}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed quadword integers
in xmm2 and xmm3/m128/m64bcst and set mask k2 to reflect the zero/non-zero
status of each element of the result, under writemask k1."
+"VPTESTMQ k2 {k1}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed quadword integers
in ymm2 and ymm3/m256/m64bcst and set mask k2 to reflect the zero/non-zero
status of each element of the result, under writemask k1."
+"VPTESTMQ k2 {k1}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F38.W1 27
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise AND of packed quadword integers
in zmm2 and zmm3/m512/m64bcst and set mask k2 to reflect the zero/non-zero
status of each element of the result, under writemask k1."
+"VPTESTNMD k2 {k1}, xmm2, xmm3/m128/m32bcst","EVEX.128.F3.0F38.W0 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise NAND of packed doubleword
integers in xmm2 and xmm3/m128/m32bcst and set mask k2 to reflect the
zero/non-zero status of each element of the result,under writemask k1."
+"VPTESTNMD k2 {k1}, ymm2, ymm3/m256/m32bcst","EVEX.256.F3.0F38.W0 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise NAND of packed doubleword
integers in ymm2 and ymm3/m256/m32bcst and set mask k2 to reflect the
zero/non-zero status of each element of the result,under writemask k1."
+"VPTESTNMD k2 {k1}, zmm2, zmm3/m512/m32bcst","EVEX.512.F3.0F38.W0 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise NAND of packed doubleword
integers in zmm2 and zmm3/m512/m32bcst and set mask k2 to reflect the
zero/non-zero status of each element of the result,under writemask k1."
+"VPTESTNMQ k2 {k1}, xmm2, xmm3/m128/m64bcst","EVEX.128.F3.0F38.W1 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise NAND of packed quadword integers
in xmm2 and xmm3/m128/m64bcst and set mask k2 to reflect the zero/non-zero
status of each element of the result,under writemask k1."
+"VPTESTNMQ k2 {k1}, ymm2, ymm3/m256/m64bcst","EVEX.256.F3.0F38.W1 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise NAND of packed quadword integers
in ymm2 and ymm3/m256/m64bcst and set mask k2 to reflect the zero/non-zero
status of each element of the result,under writemask k1."
+"VPTESTNMQ k2 {k1}, zmm2, zmm3/m512/m64bcst","EVEX.512.F3.0F38.W1 27
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise NAND of packed quadword integers
in zmm2 and zmm3/m512/m64bcst and set mask k2 to reflect the zero/non-zero
status of each element of the result,under writemask k1."
+"VPUNPCKHDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 6A
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Interleave high-order doublewords from
xmm2 and xmm3/m128/m32bcst into xmm1 register using k1 write mask."
+"VPUNPCKHQDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 6D
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Interleave high-order quadword from xmm2
and xmm3/m128/m64bcst into xmm1 register using k1 write mask."
+"VPUNPCKLDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 62
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Interleave low-order doublewords from
xmm2 and xmm3/m128/m32bcst into xmm1 register subject to write mask k1."
+"VPUNPCKLQDQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 6C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Interleave low-order quadword from zmm2
and zmm3/m512/m64bcst into zmm1 register subject to write mask k1."
+"VPXORD xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F.W0 EF
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise XOR of packed doubleword
integers in xmm2 and xmm3/m128 using writemask k1."
+"VPXORD ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F.W0 EF
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise XOR of packed doubleword
integers in ymm2 and ymm3/m256 using writemask k1."
+"VPXORD zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.66.0F.W0 EF
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise XOR of packed doubleword
integers in zmm2 and zmm3/m512/m32bcst using writemask k1."
+"VPXORQ xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 EF
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise XOR of packed quadword integers
in xmm2 and xmm3/m128 using writemask k1."
+"VPXORQ ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 EF
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise XOR of packed quadword integers
in ymm2 and ymm3/m256 using writemask k1."
+"VPXORQ zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 EF
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Bitwise XOR of packed quadword integers
in zmm2 and zmm3/m512/m64bcst using writemask k1."
+"VRCP14PD xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F38.W1 4C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocals of the packed
double-precision floating-point values in xmm2/m128/m64bcst and stores the
results in xmm1. Under writemask."
+"VRCP14PD ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F38.W1 4C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocals of the packed
double-precision floating-point values in ymm2/m256/m64bcst and stores the
results in ymm1. Under writemask."
+"VRCP14PD zmm1 {k1}{z}, zmm2/m512/m64bcst","EVEX.512.66.0F38.W1 4C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocals of the packed
double-precision floating-point values in zmm2/m512/m64bcst and stores the
results in zmm1. Under writemask."
+"VRCP14PS xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.66.0F38.W0 4C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocals of the packed
single-precision floating-point values in xmm2/m128/m32bcst and stores the
results in xmm1. Under writemask."
+"VRCP14PS ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.66.0F38.W0 4C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocals of the packed
single-precision floating-point values in ymm2/m256/m32bcst and stores the
results in ymm1. Under writemask."
+"VRCP14PS zmm1 {k1}{z}, zmm2/m512/m32bcst","EVEX.512.66.0F38.W0 4C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocals of the packed
single-precision floating-point values in zmm2/m512/m32bcst and stores the
results in zmm1. Under writemask."
+"VRCP14SD xmm1 {k1}{z}, xmm2, xmm3/m64","EVEX.LIG.66.0F38.W1 4D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes the approximate reciprocal of
the scalar double-precision floating-point value in xmm3/m64 and stores the
result in xmm1 using writemask k1. Also, upper double-precision floating-point
value (bits[127:64]) from xmm2 is copied to xmm1[127:64]."
+"VRCP14SS xmm1 {k1}{z}, xmm2, xmm3/m32","EVEX.LIG.66.0F38.W0 4D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes the approximate reciprocal of
the scalar single-precision floating-point value in xmm3/m32 and stores the
results in xmm1 using writemask k1. Also, upper double-precision floating-point
value (bits[127:32]) from xmm2 is copied to xmm1[127:32]."
+"VRNDSCALEPD xmm1 {k1}{z}, xmm2/m128/m64bcst, ib","EVEX.128.66.0F3A.W1 09 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Rounds packed double-precision floating point
values in xmm2/m128/m64bcst to a number of fraction bits specified by the ib
field. Stores the result in xmm1 register. Under writemask."
+"VRNDSCALEPD ymm1 {k1}{z}, ymm2/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 09 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Rounds packed double-precision floating point
values in ymm2/m256/m64bcst to a number of fraction bits specified by the ib
field. Stores the result in ymm1 register. Under writemask."
+"VRNDSCALEPD zmm1 {k1}{z}, zmm2/m512/m64bcst{sae}, ib","EVEX.512.66.0F3A.W1 09
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Rounds packed double-precision floating-point
values in zmm2/m512/m64bcst to a number of fraction bits specified by the ib
field. Stores the result in zmm1 register using writemask k1."
+"VRNDSCALEPS xmm1 {k1}{z}, xmm2/m128/m32bcst, ib","EVEX.128.66.0F3A.W0 08 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Rounds packed single-precision floating point
values in xmm2/m128/m32bcst to a number of fraction bits specified by the ib
field. Stores the result in xmm1 register. Under writemask."
+"VRNDSCALEPS ymm1 {k1}{z}, ymm2/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 08 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Rounds packed single-precision floating point
values in ymm2/m256/m32bcst to a number of fraction bits specified by the ib
field. Stores the result in ymm1 register. Under writemask."
+"VRNDSCALEPS zmm1 {k1}{z}, zmm2/m512/m32bcst{sae}, ib","EVEX.512.66.0F3A.W0 08
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Rounds packed single-precision floating-point
values in zmm2/m512/m32bcst to a number of fraction bits specified by the ib
field. Stores the result in zmm1 register using writemask."
+"VRNDSCALESD xmm1 {k1}{z}, xmm2, xmm3/m64{sae}, ib","EVEX.LIG.66.0F3A.W1 0B /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Rounds scalar double-precision
floating-point value in xmm3/m64 to a number of fraction bits specified by the
ib field. Stores the result in xmm1 register."
+"VRNDSCALESS xmm1 {k1}{z}, xmm2, xmm3/m32{sae}, ib","EVEX.LIG.66.0F3A.W0 0A /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Tuple1 Scalar","Rounds scalar single-precision
floating-point value in xmm3/m32 to a number of fraction bits specified by the
ib field. Stores the result in xmm1 register under writemask."
+"VRSQRT14PD xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F38.W1 4E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocal square roots of
the packed double-precision floating-point values in xmm2/m128/m64bcst and
stores the results in xmm1. Under writemask."
+"VRSQRT14PD ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F38.W1 4E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocal square roots of
the packed double-precision floating-point values in ymm2/m256/m64bcst and
stores the results in ymm1. Under writemask."
+"VRSQRT14PD zmm1 {k1}{z}, zmm2/m512/m64bcst","EVEX.512.66.0F38.W1 4E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocal square roots of
the packed double-precision floating-point values in zmm2/m512/m64bcst and
stores the results in zmm1 under writemask."
+"VRSQRT14PS xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.66.0F38.W0 4E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocal square roots of
the packed single-precision floating-point values in xmm2/m128/m32bcst and
stores the results in xmm1. Under writemask."
+"VRSQRT14PS ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.66.0F38.W0 4E
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocal square roots of
the packed single-precision floating-point values in ymm2/m256/m32bcst and
stores the results in ymm1. Under writemask."
+"VRSQRT14PS zmm1 {k1}{z}, zmm2/m512/m32bcst","EVEX.512.66.0F38.W0 4E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes the approximate reciprocal square roots of
the packed single-precision floating-point values in zmm2/m512/m32bcst and
stores the results in zmm1. Under writemask."
+"VRSQRT14SD xmm1 {k1}{z}, xmm2, xmm3/m64","EVEX.LIG.66.0F38.W1 4F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes the approximate reciprocal
square root of the scalar double-precision floating-point value in xmm3/m64 and
stores the result in the low quadword element of xmm1 using writemask k1.
Bits[127:64] of xmm2 is copied to xmm1[127:64]."
+"VRSQRT14SS xmm1 {k1}{z}, xmm2, xmm3/m32","EVEX.LIG.66.0F38.W0 4F
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes the approximate reciprocal
square root of the scalar single-precision floating-point value in xmm3/m32 and
stores the result in the low doubleword element of xmm1 using writemask k1.
Bits[127:32] of xmm2 is copied to xmm1[127:32]."
+"VSCALEFPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F38.W1 2C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed double-precision
floating-point values in xmm2 using values from xmm3/m128/m64bcst. Under
writemask k1."
+"VSCALEFPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F38.W1 2C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed double-precision
floating-point values in ymm2 using values from ymm3/m256/m64bcst. Under
writemask k1."
+"VSCALEFPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F38.W1 2C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed double-precision
floating-point values in zmm2 using values from zmm3/m512/m64bcst. Under
writemask k1."
+"VSCALEFPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.66.0F38.W0 2C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed single-precision
floating-point values in xmm2 using values from xmm3/m128/m32bcst. Under
writemask k1."
+"VSCALEFPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.66.0F38.W0 2C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed single-precision values
in ymm2 using floating point values from ymm3/m256/m32bcst. Under writemask k1."
+"VSCALEFPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.66.0F38.W0 2C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed single-precision
floating-point values in zmm2 using floating-point values from
zmm3/m512/m32bcst. Under writemask k1."
+"VSCALEFSD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.66.0F38.W1 2D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Scale the scalar double-precision
floating-point values in xmm2 using the value from xmm3/m64. Under writemask
k1."
+"VSCALEFSS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.66.0F38.W0 2D
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Scale the scalar single-precision
floating-point value in xmm2 using floating-point value from xmm3/m32. Under
writemask k1."
+"VSCATTERDPD vm32x/f64x2 {k1}, xmm1","EVEX.128.66.0F38.W1 A2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed dword
indices, scatter double-precision floating-point values to memory using
writemask k1."
+"VSCATTERDPD vm32x/f64x4 {k1}, ymm1","EVEX.256.66.0F38.W1 A2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed dword
indices, scatter double-precision floating-point values to memory using
writemask k1."
+"VSCATTERDPD vm32y/f64x8 {k1}, zmm1","EVEX.512.66.0F38.W1 A2
/r","Valid","Valid","Invalid","AVX512F","BaseReg (r): VSIB:base, VectorReg (r):
VSIB:index","ModRM:reg (r)","","","","Using signed dword indices, scatter
double-precision floating-point values to memory using writemask k1."
+"VSCATTERDPS vm32x/f32x4 {k1}, xmm1","EVEX.128.66.0F38.W0 A2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed dword
indices, scatter single-precision floating-point values to memory using
writemask k1."
+"VSCATTERDPS vm32y/f32x8 {k1}, ymm1","EVEX.256.66.0F38.W0 A2
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed dword
indices, scatter single-precision floating-point values to memory using
writemask k1."
+"VSCATTERDPS vm32z/f32x16 {k1}, zmm1","EVEX.512.66.0F38.W0 A2
/r","Valid","Valid","Invalid","AVX512F","BaseReg (r): VSIB:base, VectorReg (r):
VSIB:index","ModRM:reg (r)","","","","Using signed dword indices, scatter
single-precision floating-point values to memory using writemask k1."
+"VSCATTERQPD vm64x/f64x2 {k1}, xmm1","EVEX.128.66.0F38.W1 A3
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed qword
indices, scatter double-precision floating-point values to memory using
writemask k1."
+"VSCATTERQPD vm64y/f64x4 {k1}, ymm1","EVEX.256.66.0F38.W1 A3
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed qword
indices, scatter double-precision floating-point values to memory using
writemask k1."
+"VSCATTERQPD vm64z/f64x8 {k1}, zmm1","EVEX.512.66.0F38.W1 A3
/r","Valid","Valid","Invalid","AVX512F","BaseReg (r): VSIB:base, VectorReg (r):
VSIB:index","ModRM:reg (r)","","","","Using signed qword indices, scatter
double-precision floating-point values to memory using writemask k1."
+"VSCATTERQPS vm64x/f32x2 {k1}, xmm1","EVEX.128.66.0F38.W0 A3
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed qword
indices, scatter single-precision floating-point values to memory using
writemask k1."
+"VSCATTERQPS vm64y/f32x4 {k1}, xmm1","EVEX.256.66.0F38.W0 A3
/r","Valid","Valid","Invalid","AVX512VL AVX512F","BaseReg (r): VSIB:base,
VectorReg (r): VSIB:index","ModRM:reg (r)","","","","Using signed qword
indices, scatter single-precision floating-point values to memory using
writemask k1."
+"VSCATTERQPS vm64z/f32x8 {k1}, ymm1","EVEX.512.66.0F38.W0 A3
/r","Valid","Valid","Invalid","AVX512F","BaseReg (r): VSIB:base, VectorReg (r):
VSIB:index","ModRM:reg (r)","","","","Using signed qword indices, scatter
single-precision floating-point values to memory using writemask k1."
+"VSHUFF32X4 ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 23
/r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle 128-bit packed
single-precision floating-point values selected by imm8 from ymm2 and
ymm3/m256/m32bcst and place results in ymm1 subject to writemask k1."
+"VSHUFF32X4 zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst, ib","EVEX.512.66.0F3A.W0 23
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle 128-bit packed
single-precision floating-point values selected by ib from zmm2 and
zmm3/m512/m32bcst and place results in zmm1 subject to writemask k1"
+"VSHUFF64X2 ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 23
/r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle 128-bit packed double
precision floating-point values selected by imm8 from ymm2 and
ymm3/m256/m64bcst and place results in ymm1 subject to writemask k1."
+"VSHUFF64X2 zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 23
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle 128-bit packed
double-precision floating-point values selected by ib from zmm2 and
zmm3/m512/m64bcst and place results in zmm1 subject to writemask k1."
+"VSHUFI32X4 ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.66.0F3A.W0 43
/r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle 128-bit packed double-word
values selected by imm8 from ymm2 and ymm3/m256/m32bcst and place results in
ymm1 subject to writemask k1."
+"VSHUFI32X4 zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst, ib","EVEX.512.66.0F3A.W0 43
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle 128-bit packed double-word
values selected by ib from zmm2 and zmm3/m512/m32bcst and place results in zmm1
subject to writemask k1."
+"VSHUFI64X2 ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F3A.W1 43
/r ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle 128-bit packed quad-word
values selected by imm8 from ymm2 and ymm3/m256/m64bcst and place results in
ymm1 subject to writemask k1."
+"VSHUFI64X2 zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst, ib","EVEX.512.66.0F3A.W1 43
/r ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle 128-bit packed quad-word
values selected by ib from zmm2 and zmm3/m512/m64bcst and place results in zmm1
subject to writemask k1."
+"VSHUFPD xmm1{k1}{z}, xmm2, xmm3/m128/m64bcst, ib","EVEX.128.66.0F.W1 C6 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle two paris of double-precision
floating-point values from xmm2 and xmm3/m128/m64bcst using ib to select from
each pair. store interleaved results in xmm1 subject to writemask k1."
+"VSHUFPD ymm1{k1}{z}, ymm2, ymm3/m256/m64bcst, ib","EVEX.256.66.0F.W1 C6 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle four paris of double-precision
floating-point values from ymm2 and ymm3/m256/m64bcst using ib to select from
each pair. store interleaved results in ymm1 subject to writemask k1."
+"VSHUFPD zmm1{k1}{z}, zmm2, zmm3/m512/m64bcst, ib","EVEX.512.66.0F.W1 C6 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Shuffle eight paris of
double-precision floating-point values from zmm2 and zmm3/m512/m64bcst using ib
to select from each pair. store interleaved results in zmm1 subject to
writemask k1."
+"VSHUFPS xmm1{k1}{z}, xmm2, xmm3/m128/m32bcst, ib","EVEX.128.0F.W0 C6 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Select from quadruplet of
single-precision floating-point values in xmm1 and xmm2/m128 using ib,
interleaved result pairs are stored in xmm1, subject to writemask k1."
+"VSHUFPS ymm1{k1}{z}, ymm2, ymm3/m256/m32bcst, ib","EVEX.256.0F.W0 C6 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Select from quadruplet of
single-precision floating-point values in ymm2 and ymm3/m256 using ib,
interleaved result pairs are stored in ymm1, subject to writemask k1."
+"VSHUFPS zmm1{k1}{z}, zmm2, zmm3/m512/m32bcst, ib","EVEX.512.0F.W0 C6 /r
ib","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Select from quadruplet of
single-precision floating-point values in zmm2 and zmm3/m512 using ib,
interleaved result pairs are stored in zmm1, subject to writemask k1."
+"VSQRTPD xmm1 {k1}{z}, xmm2/m128/m64bcst","EVEX.128.66.0F.W1 51
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes Square Roots of the packed double-precision
floating-point values in xmm2/m128/m64bcst and stores the result in xmm1
subject to writemask k1."
+"VSQRTPD ymm1 {k1}{z}, ymm2/m256/m64bcst","EVEX.256.66.0F.W1 51
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes Square Roots of the packed double-precision
floating-point values in ymm2/m256/m64bcst and stores the result in ymm1
subject to writemask k1."
+"VSQRTPD zmm1 {k1}{z}, zmm2/m512/m64bcst{er}","EVEX.512.66.0F.W1 51
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes Square Roots of the packed double-precision
floating-point values in zmm2/m512/m64bcst and stores the result in zmm1
subject to writemask k1."
+"VSQRTPS xmm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.128.0F.W0 51
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes Square Roots of the packed single-precision
floating-point values in xmm2/m128/m32bcst and stores the result in xmm1
subject to writemask k1."
+"VSQRTPS ymm1 {k1}{z}, ymm2/m256/m32bcst","EVEX.256.0F.W0 51
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes Square Roots of the packed single-precision
floating-point values in ymm2/m256/m32bcst and stores the result in ymm1
subject to writemask k1."
+"VSQRTPS zmm1 {k1}{z}, zmm2/m512/m32bcst{er}","EVEX.512.0F.W0 51
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Computes Square Roots of the packed single-precision
floating-point values in zmm2/m512/m32bcst and stores the result in zmm1
subject to writemask k1."
+"VSQRTSD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.F2.0F.W1 51
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes square root of the low
double-precision floating-point value in xmm3/m64 and stores the results in
xmm1 under writemask k1. Also, upper double-precision floating-point value
(bits[127:64]) from xmm2 is copied to xmm1[127:64]."
+"VSQRTSS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.F3.0F.W0 51
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Computes square root of the low
single-precision floating-point value in xmm3/m32 and stores the results in
xmm1 under writemask k1. Also, upper single-precision floating-point values
(bits[127:32]) from xmm2 are copied to xmm1[127:32]."
+"VSUBPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 5C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed double-precision
floating-point values from xmm3/m128/m64bcst to xmm2 and store result in xmm1
with writemask k1."
+"VSUBPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 5C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed double-precision
floating-point values from ymm3/m256/m64bcst to ymm2 and store result in ymm1
with writemask k1."
+"VSUBPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst{er}","EVEX.512.66.0F.W1 5C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed double-precision
floating-point values from zmm3/m512/m64bcst to zmm2 and store result in zmm1
with writemask k1."
+"VSUBPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 5C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed single-precision
floating-point values from xmm3/m128/m32bcst to xmm2 and stores result in xmm1
with writemask k1."
+"VSUBPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 5C
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed single-precision
floating-point values from ymm3/m256/m32bcst to ymm2 and stores result in ymm1
with writemask k1."
+"VSUBPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}","EVEX.512.0F.W0 5C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed single-precision
floating-point values in zmm3/m512/m32bcst from zmm2 and stores result in zmm1
with writemask k1."
+"VSUBSD xmm1 {k1}{z}, xmm2, xmm3/m64{er}","EVEX.LIG.F2.0F.W1 5C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Subtract the low double-precision
floating-point value in xmm3/m64 from xmm2 and store the result in xmm1 under
writemask k1."
+"VSUBSS xmm1 {k1}{z}, xmm2, xmm3/m32{er}","EVEX.LIG.F3.0F.W0 5C
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Tuple1 Scalar","Subtract the low single-precision
floating-point value in xmm3/m32 from xmm2 and store the result in xmm1 under
writemask k1."
+"VUCOMISD xmm1, xmm2/m64{sae}","EVEX.LIG.66.0F.W1 2E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Compare low double-precision floating-point values
in xmm1 and xmm2/m64 and set the EFLAGS flags accordingly."
+"VUCOMISS xmm1, xmm2/m32{sae}","EVEX.LIG.0F.W0 2E
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Compare low single-precision floating-point values
in xmm1 and xmm2/mem32 and set the EFLAGS flags accordingly."
+"VUNPCKHPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves double precision
floating-point values from high quadwords of xmm2 and xmm3/m128/m64bcst subject
to writemask k1."
+"VUNPCKHPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves double precision
floating-point values from high quadwords of ymm2 and ymm3/m256/m64bcst subject
to writemask k1."
+"VUNPCKHPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 15
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves double-precision
floating-point values from high quadwords of zmm2 and zmm3/m512/m64bcst subject
to writemask k1."
+"VUNPCKHPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves single-precision
floating-point values from high quadwords of xmm2 and xmm3/m128/m32bcst and
write result to xmm1 subject to writemask k1."
+"VUNPCKHPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 15
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves single-precision
floating-point values from high quadwords of ymm2 and ymm3/m256/m32bcst and
write result to ymm1 subject to writemask k1."
+"VUNPCKHPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.0F.W0 15
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves single-precision
floating-point values from high quadwords of zmm2 and zmm3/m512/m32bcst and
write result to zmm1 subject to writemask k1."
+"VUNPCKLPD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst","EVEX.128.66.0F.W1 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves double precision
floating-point values from low quadwords of xmm2 and xmm3/m128/m64bcst subject
to write mask k1."
+"VUNPCKLPD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst","EVEX.256.66.0F.W1 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves double precision
floating-point values from low quadwords of ymm2 and ymm3/m256/m64bcst subject
to write mask k1."
+"VUNPCKLPD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst","EVEX.512.66.0F.W1 14
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves double-precision
floating-point values from low quadwords of zmm2 and zmm3/m512/m64bcst subject
to write mask k1."
+"VUNPCKLPS xmm1 {k1}{z}, xmm2, xmm3/m128/m32bcst","EVEX.128.0F.W0 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves single-precision
floating-point values from low quadwords of xmm2 and xmm3/mem and write result
to xmm1 subject to write mask k1."
+"VUNPCKLPS ymm1 {k1}{z}, ymm2, ymm3/m256/m32bcst","EVEX.256.0F.W0 14
/r","Valid","Valid","Invalid","AVX512VL AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves single-precision
floating-point values from low quadwords of ymm2 and ymm3/mem and write result
to ymm1 subject to write mask k1."
+"VUNPCKLPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst","EVEX.512.0F.W0 14
/r","Valid","Valid","Invalid","AVX512F","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Unpacks and Interleaves single-precision
floating-point values from low quadwords of zmm2 and zmm3/m512/m32bcst and
write result to zmm1 subject to write mask k1."
diff --git a/disas/x86-data/x86_avx512fp16.csv
b/disas/x86-data/x86_avx512fp16.csv
new file mode 100644
index 000000000000..22e2aacf4861
--- /dev/null
+++ b/disas/x86-data/x86_avx512fp16.csv
@@ -0,0 +1,237 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VADDPH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.map5.W0 58
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed FP16 value from
xmm3/m128/m16bcst to xmm2, and store result in xmm1 subject to writemask k1."
+"VADDPH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.map5.W0 58
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed FP16 value from
ymm3/m256/m16bcst to ymm2, and store result in ymm1 subject to writemask k1."
+"VADDPH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.map5.W0 58
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Add packed FP16 value from
zmm3/m512/m16bcst to zmm2, and store result in zmm1 subject to writemask k1."
+"VADDSH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.f3.map5.W0 58
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Add the low FP16 value from xmm3/m16 to xmm2,
and store the result in xmm1 subject to writemask k1. Bits 127:16 of xmm2 are
copied to xmm1[127:16]."
+"VCMPPH k{k},xmm,xmm/m128/m16bcst,ib","EVEX.128.0F3A.W0 C2 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed FP16 values in
xmm3/m128/m16bcst and xmm2 using bits 4:0 of imm8 as a comparison predicate
subject to writemask k2, and store the result in mask register k1."
+"VCMPPH k{k},ymm,ymm/m256/m16bcst,ib","EVEX.256.0F3A.W0 C2 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed FP16 values in
ymm3/m256/m16bcst and ymm2 using bits 4:0 of imm8 as a comparison predicate
subject to writemask k2, and store the result in mask register k1."
+"VCMPPH k{k},zmm,zmm/m512/m16bcst{sae},ib","EVEX.512.0F3A.W0 C2 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Vector","Compare packed FP16 values in
zmm3/m512/m16bcst and zmm2 using bits 4:0 of imm8 as a comparison predicate
subject to writemask k2, and store the result in mask register k1."
+"VCMPSH k{k},xmm,xmm/m16{sae},ib","EVEX.LIG.f3.0F3A.W0 C2 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","Scalar","Compare low FP16 values in xmm3/m16 and
xmm2 using bits 4:0 of imm8 as a comparison predicate subject to writemask k2,
and store the result in mask register k1."
+"VCOMISH xmm,xmm/m16{sae}","EVEX.LIG.map5.W0 2F
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r)","ModRM:r/m
(r)","","","Scalar","Compare low FP16 values in xmm1 and xmm2/m16, and set the
EFLAGS flags accordingly."
+"VCVTDQ2PH xmm{k}{z},xmm/m128/m32bcst","EVEX.128.map5.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed signed doubleword integers from
xmm2/m128/m32bcst to four packed FP16 values, and store the result in xmm1
subject to writemask k1."
+"VCVTDQ2PH xmm{k}{z},ymm/m256/m32bcst","EVEX.256.map5.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed signed doubleword integers from
ymm2/m256/m32bcst to eight packed FP16 values, and store the result in xmm1
subject to writemask k1."
+"VCVTDQ2PH ymm{k}{z},zmm/m512/m32bcst{er}","EVEX.512.map5.W0 5B
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed signed doubleword integers
from zmm2/m512/m32bcst to sixteen packed FP16 values, and store the result in
ymm1 subject to writemask k1."
+"VCVTPD2PH xmm{k}{z},xmm/m128/m64bcst","EVEX.128.66.map5.W1 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed double precision floating-point
values in xmm2/m128/m64bcst to two packed FP16 values, and store the result in
xmm1 subject to writemask k1."
+"VCVTPD2PH xmm{k}{z},ymm/m256/m64bcst","EVEX.256.66.map5.W1 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed double precision floating-point
values in ymm2/m256/m64bcst to four packed FP16 values, and store the result in
xmm1 subject to writemask k1."
+"VCVTPD2PH xmm{k}{z},zmm/m512/m64bcst{er}","EVEX.512.66.map5.W1 5A
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed double precision floating-point
values in zmm2/m512/m64bcst to eight packed FP16 values, and store the result
in ymm1 subject to writemask k1."
+"VCVTPH2DQ xmm{k}{z},xmm/m64/m16bcst","EVEX.128.66.map5.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed FP16 values in xmm2/m64/m16bcst
to four signed doubleword integers, and store the result in xmm1 subject to
writemask k1."
+"VCVTPH2DQ ymm{k}{z},xmm/m128/m16bcst","EVEX.256.66.map5.W0 5B
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed FP16 values in xmm2/m128/m16bcst
to eight signed doubleword integers, and store the result in ymm1 subject to
writemask k1."
+"VCVTPH2DQ zmm{k}{z},ymm/m256/m16bcst{er}","EVEX.512.66.map5.W0 5B
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert sixteen packed FP16 values in
ymm2/m256/m16bcst to sixteen signed doubleword integers, and store the result
in zmm1 subject to writemask k1."
+"VCVTPH2PD xmm{k}{z},xmm/m32/m16bcst","EVEX.128.map5.W0 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert packed FP16 values in xmm2/m32/m16bcst to
FP64 values, and store result in xmm1 subject to writemask k1."
+"VCVTPH2PD ymm{k}{z},xmm/m64/m16bcst","EVEX.256.map5.W0 5A
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert packed FP16 values in xmm2/m64/m16bcst to
FP64 values, and store result in ymm1 subject to writemask k1."
+"VCVTPH2PD zmm{k}{z},xmm/m128/m16bcst{sae}","EVEX.512.map5.W0 5A
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert packed FP16 values in xmm2/m128/m16bcst to
FP64 values, and store result in zmm1 subject to writemask k1."
+"VCVTPH2PSX xmm{k}{z},xmm/m64/m16bcst","EVEX.128.66.map6.W0 13
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed FP16 values in xmm2/m64/m16bcst
to four packed single precision floating-point values, and store result in xmm1
subject to writemask k1."
+"VCVTPH2PSX ymm{k}{z},xmm/m128/m16bcst","EVEX.256.66.map6.W0 13
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed FP16 values in xmm2/m128/m16bcst
to eight packed single precision floating-point values, and store result in
ymm1 subject to writemask k1."
+"VCVTPH2PSX zmm{k}{z},ymm/m256/m16bcst{sae}","EVEX.512.66.map6.W0 13
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert sixteen packed FP16 values in
ymm2/m256/m16bcst to sixteen packed single precision floating-point values, and
store result in zmm1 subject to writemask k1."
+"VCVTPH2QQ xmm{k}{z},xmm/m32/m16bcst","EVEX.128.66.map5.W0 7b
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert two packed FP16 values in xmm2/m32/m16bcst
to two signed quadword integers, and store the result in xmm1 subject to
writemask k1."
+"VCVTPH2QQ ymm{k}{z},xmm/m64/m16bcst","EVEX.256.66.map5.W0 7b
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert four packed FP16 values in
xmm2/m64/m16bcst to four signed quadword integers, and store the result in ymm1
subject to writemask k1."
+"VCVTPH2QQ zmm{k}{z},xmm/m128/m16bcst{er}","EVEX.512.66.map5.W0 7b
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert eight packed FP16 values in
xmm2/m128/m16bcst to eight signed quadword integers, and store the result in
zmm1 subject to writemask k1."
+"VCVTPH2UDQ xmm{k}{z},xmm/m64/m16bcst","EVEX.128.map5.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed FP16 values in xmm2/m64/m16bcst
to four unsigned doubleword integers, and store the result in xmm1 subject to
writemask k1."
+"VCVTPH2UDQ ymm{k}{z},xmm/m128/m16bcst","EVEX.256.map5.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed FP16 values in xmm2/m128/m16bcst
to eight unsigned doubleword integers, and store the result in ymm1 subject to
writemask k1."
+"VCVTPH2UDQ zmm{k}{z},ymm/m256/m16bcst{er}","EVEX.512.map5.W0 79
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert sixteen packed FP16 values in
ymm2/m256/m16bcst to sixteen unsigned doubleword integers, and store the result
in zmm1 subject to writemask k1."
+"VCVTPH2UQQ xmm{k}{z},xmm/m32/m16bcst","EVEX.128.66.map5.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert two packed FP16 values in xmm2/m32/m16bcst
to two unsigned quadword integers, and store the result in xmm1 subject to
writemask k1."
+"VCVTPH2UQQ ymm{k}{z},xmm/m64/m16bcst","EVEX.256.66.map5.W0 79
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert four packed FP16 values in
xmm2/m64/m16bcst to four unsigned quadword integers, and store the result in
ymm1 subject to writemask k1."
+"VCVTPH2UQQ zmm{k}{z},xmm/m128/m16bcst{er}","EVEX.512.66.map5.W0 79
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert eight packed FP16 values in
xmm2/m128/m16bcst to eight unsigned quadword integers, and store the result in
zmm1 subject to writemask k1."
+"VCVTPH2UW xmm{k}{z},xmm/m128/m16bcst","EVEX.128.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert packed FP16 values in xmm2/m128/m16bcst to
unsigned word integers, and store the result in xmm1."
+"VCVTPH2UW ymm{k}{z},ymm/m256/m16bcst","EVEX.256.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert packed FP16 values in ymm2/m256/m16bcst to
unsigned word integers, and store the result in ymm1."
+"VCVTPH2UW zmm{k}{z},zmm/m512/m16bcst{er}","EVEX.512.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert packed FP16 values in zmm2/m512/m16bcst to
unsigned word integers, and store the result in zmm1."
+"VCVTPH2W xmm{k}{z},xmm/m128/m16bcst","EVEX.128.66.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert packed FP16 values in xmm2/m128/m16bcst to
signed word integers, and store the result in xmm1."
+"VCVTPH2W ymm{k}{z},ymm/m256/m16bcst","EVEX.256.66.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert packed FP16 values in ymm2/m256/m16bcst to
signed word integers, and store the result in ymm1."
+"VCVTPH2W zmm{k}{z},zmm/m512/m16bcst{er}","EVEX.512.66.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert packed FP16 values in zmm2/m512/m16bcst to
signed word integers, and store the result in zmm1."
+"VCVTPS2PHX xmm{k}{z},xmm/m128/m32bcst","EVEX.128.66.map5.W0 1d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed single precision floating-point
values in xmm2/m128/m32bcst to packed FP16 values, and store the result in xmm1
subject to writemask k1."
+"VCVTPS2PHX xmm{k}{z},ymm/m256/m32bcst","EVEX.256.66.map5.W0 1d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed single precision floating-point
values in ymm2/m256/m32bcst to packed FP16 values, and store the result in xmm1
subject to writemask k1."
+"VCVTPS2PHX ymm{k}{z},zmm/m512/m32bcst{er}","EVEX.512.66.map5.W0 1d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed single precision
floating-point values in zmm2 /m512/m32bcst to packed FP16 values, and store
the result in ymm1 subject to writemask k1."
+"VCVTQQ2PH xmm{k}{z},xmm/m128/m64bcst","EVEX.128.map5.W1 5b
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed signed quadword integers in
xmm2/m128/m64bcst to packed FP16 values, and store the result in xmm1 subject
to writemask k1."
+"VCVTQQ2PH xmm{k}{z},ymm/m256/m64bcst","EVEX.256.map5.W1 5b
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed signed quadword integers in
ymm2/m256/m64bcst to packed FP16 values, and store the result in xmm1 subject
to writemask k1."
+"VCVTQQ2PH xmm{k}{z},zmm/m512/m64bcst{er}","EVEX.512.map5.W1 5b
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed signed quadword integers in
zmm2/m512/m64bcst to packed FP16 values, and store the result in xmm1 subject
to writemask k1."
+"VCVTSD2SH xmm{k}{z},xmm,xmm/m64{er}","EVEX.LIG.f2.map5.W1 5a
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert the low FP64 value in xmm3/m64 to an
FP16 value and store the result in the low element of xmm1 subject to writemask
k1. Bits 127:16 of xmm2 are copied to xmm1[127:16]."
+"VCVTSH2SD xmm,xmm,xmm/m16{sae}","EVEX.LIG.f3.map5.W0 5a
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert the low FP16 value in xmm3/m16 to an
FP64 value and store the result in the low element of xmm1 subject to writemask
k1. Bits 127:64 of xmm2 are copied to xmm1[127:64]."
+"VCVTSH2SI r32,xmm/m16{er}","EVEX.LIG.f3.map5.W0 2d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Convert the low FP16 element in xmm1/m16 to a signed
integer and store the result in r32."
+"VCVTSH2SI r64,xmm/m16{er}","EVEX.LIG.f3.map5.W1 2d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Convert the low FP16 element in xmm1/m16 to a signed
integer and store the result in r64."
+"VCVTSH2SS xmm{k}{z},xmm,xmm/m16{sae}","EVEX.LIG.map6.W0 13
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert the low FP16 element in xmm3/m16 to
an FP32 value and store in the low element of xmm1 subject to writemask k1.
Bits 127:32 of xmm2 are copied to xmm1[127:32]."
+"VCVTSH2USI r32,xmm/m16{er}","EVEX.LIG.f3.map5.W0 79
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Convert the low FP16 element in xmm1/m16 to an unsigned
integer and store the result in r32."
+"VCVTSH2USI r64,xmm/m16{er}","EVEX.LIG.f3.map5.W1 79
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Convert the low FP16 element in xmm1/m16 to an unsigned
integer and store the result in r64."
+"VCVTSI2SH xmm,xmm,r32/m32{er}","EVEX.LIG.f3.map5.W0 2a
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert the signed doubleword integer in
r32/m32 to an FP16 value and store the result in xmm1. Bits 127:16 of xmm2 are
copied to xmm1[127:16]."
+"VCVTSI2SH xmm,xmm,r64/m64{er}","EVEX.LIG.f3.map5.W1 2a
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert the signed quadword integer in
r64/m64 to an FP16 value and store the result in xmm1. Bits 127:16 of xmm2 are
copied to xmm1[127:16]."
+"VCVTSS2SH xmm,xmm,xmm/m32{er}","EVEX.LIG.map5.W0 1d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert low FP32 value in xmm3/m32 to an FP16
value and store in the low element of xmm1 subject to writemask k1. Bits 127:16
from xmm2 are copied to xmm1[127:16]."
+"VCVTTPH2DQ xmm{k}{z},xmm/m64/m16bcst","EVEX.128.f3.map5.W0 5b
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed FP16 values in xmm2/m64/m16bcst
to four signed doubleword integers, and store the result in xmm1 using
truncation subject to writemask k1."
+"VCVTTPH2DQ ymm{k}{z},xmm/m128/m16bcst","EVEX.256.f3.map5.W0 5b
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed FP16 values in xmm2/m128/m16bcst
to eight signed doubleword integers, and store the result in ymm1 using
truncation subject to writemask k1."
+"VCVTTPH2DQ zmm{k}{z},ymm/m256/m16bcst{sae}","EVEX.512.f3.map5.W0 5b
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert sixteen packed FP16 values in
ymm2/m256/m16bcst to sixteen signed doubleword integers, and store the result
in zmm1 using truncation subject to writemask k1."
+"VCVTTPH2QQ xmm{k}{z},xmm/m32/m16bcst","EVEX.128.66.map5.W0 7a
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert two packed FP16 values in xmm2/m32/m16bcst
to two signed quadword integers, and store the result in xmm1 using truncation
subject to writemask k1."
+"VCVTTPH2QQ ymm{k}{z},xmm/m64/m16bcst","EVEX.256.66.map5.W0 7a
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert four packed FP16 values in
xmm2/m64/m16bcst to four signed quadword integers, and store the result in ymm1
using truncation subject to writemask k1."
+"VCVTTPH2QQ zmm{k}{z},xmm/m128/m16bcst{sae}","EVEX.512.66.map5.W0 7a
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert eight packed FP16 values in
xmm2/m128/m16bcst to eight signed quadword integers, and store the result in
zmm1 using truncation subject to writemask k1."
+"VCVTTPH2UDQ xmm{k}{z},xmm/m64/m16bcst","EVEX.128.map5.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed FP16 values in xmm2/m64/m16bcst
to four unsigned doubleword integers, and store the result in xmm1 using
truncation subject to writemask k1."
+"VCVTTPH2UDQ ymm{k}{z},xmm/m128/m16bcst","EVEX.256.map5.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert eight packed FP16 values in xmm2/m128/m16bcst
to eight unsigned doubleword integers, and store the result in ymm1 using
truncation subject to writemask k1."
+"VCVTTPH2UDQ zmm{k}{z},ymm/m256/m16bcst{sae}","EVEX.512.map5.W0 78
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert sixteen packed FP16 values in
ymm2/m256/m16bcst to sixteen unsigned doubleword integers, and store the result
in zmm1 using truncation subject to writemask k1."
+"VCVTTPH2UQQ xmm{k}{z},xmm/m32/m16bcst","EVEX.128.66.map5.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert two packed FP16 values in xmm2/m32/m16bcst
to two unsigned quadword integers, and store the result in xmm1 using
truncation subject to writemask k1."
+"VCVTTPH2UQQ ymm{k}{z},xmm/m64/m16bcst","EVEX.256.66.map5.W0 78
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert four packed FP16 values in
xmm2/m64/m16bcst to four unsigned quadword integers, and store the result in
ymm1 using truncation subject to writemask k1."
+"VCVTTPH2UQQ zmm{k}{z},xmm/m128/m16bcst{sae}","EVEX.512.66.map5.W0 78
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Quarter Vector","Convert eight packed FP16 values in
xmm2/m128/m16bcst to eight unsigned quadword integers, and store the result in
zmm1 using truncation subject to writemask k1."
+"VCVTTPH2UW xmm{k}{z},xmm/m128/m16bcst","EVEX.128.map5.W0 7c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed FP16 values in xmm2/m128/m16bcst
to eight unsigned word integers, and store the result in xmm1 using truncation
subject to writemask k1."
+"VCVTTPH2UW ymm{k}{z},ymm/m256/m16bcst","EVEX.256.map5.W0 7c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed FP16 values in
ymm2/m256/m16bcst to sixteen unsigned word integers, and store the result in
ymm1 using truncation subject to writemask k1."
+"VCVTTPH2UW zmm{k}{z},zmm/m512/m16bcst{sae}","EVEX.512.map5.W0 7c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert thirty-two packed FP16 values in
zmm2/m512/m16bcst to thirty-two unsigned word integers, and store the result in
zmm1 using truncation subject to writemask k1."
+"VCVTTPH2W xmm{k}{z},xmm/m128/m16bcst","EVEX.128.66.map5.W0 7c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed FP16 values in xmm2/m128/m16bcst
to eight signed word integers, and store the result in xmm1 using truncation
subject to writemask k1."
+"VCVTTPH2W ymm{k}{z},ymm/m256/m16bcst","EVEX.256.66.map5.W0 7c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed FP16 values in
ymm2/m256/m16bcst to sixteen signed word integers, and store the result in ymm1
using truncation subject to writemask k1."
+"VCVTTPH2W zmm{k}{z},zmm/m512/m16bcst{sae}","EVEX.512.66.map5.W0 7c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert thirty-two packed FP16 values in
zmm2/m512/m16bcst to thirty-two signed word integers, and store the result in
zmm1 using truncation subject to writemask k1."
+"VCVTTSH2SI r32,xmm/m16{sae}","EVEX.LIG.f3.map5.W0 2c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Convert FP16 value in the low element of xmm1/m16 to a
signed integer and store the result in r32 using truncation."
+"VCVTTSH2SI r64,xmm/m16{sae}","EVEX.LIG.f3.map5.W1 2c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Convert FP16 value in the low element of xmm1/m16 to a
signed integer and store the result in r64 using truncation."
+"VCVTTSH2USI r32,xmm/m16{sae}","EVEX.LIG.f3.map5.W0 78
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Convert FP16 value in the low element of xmm1/m16 to an
unsigned integer and store the result in r32 using truncation."
+"VCVTTSH2USI r64,xmm/m16{sae}","EVEX.LIG.f3.map5.W1 78
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Convert FP16 value in the low element of xmm1/m16 to an
unsigned integer and store the result in r64 using truncation."
+"VCVTUDQ2PH xmm{k}{z},xmm/m128/m32bcst","EVEX.128.f2.map5.W0 7a
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed unsigned doubleword integers from
xmm2/m128/m32bcst to packed FP16 values, and store the result in xmm1 subject
to writemask k1."
+"VCVTUDQ2PH xmm{k}{z},ymm/m256/m32bcst","EVEX.256.f2.map5.W0 7a
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed unsigned doubleword integers
from ymm2/m256/m32bcst to packed FP16 values, and store the result in xmm1
subject to writemask k1."
+"VCVTUDQ2PH ymm{k}{z},zmm/m512/m32bcst","EVEX.512.f2.map5.W0 7a
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed unsigned doubleword integers
from zmm2/m512/m32bcst to packed FP16 values, and store the result in ymm1
subject to writemask k1."
+"VCVTUQQ2PH xmm{k}{z},xmm/m128/m64bcst","EVEX.128.f2.map5.W1 7a
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert two packed unsigned doubleword integers from
xmm2/m128/m64bcst to packed FP16 values, and store the result in xmm1 subject
to writemask k1."
+"VCVTUQQ2PH xmm{k}{z},ymm/m256/m64bcst","EVEX.256.f2.map5.W1 7a
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert four packed unsigned doubleword integers from
ymm2/m256/m64bcst to packed FP16 values, and store the result in xmm1 subject
to writemask k1."
+"VCVTUQQ2PH xmm{k}{z},zmm/m512/m64bcst","EVEX.512.f2.map5.W1 7a
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed unsigned doubleword integers
from zmm2/m512/m64bcst to packed FP16 values, and store the result in xmm1
subject to writemask k1."
+"VCVTUSI2SH xmm,xmm,r32/m32{er}","EVEX.LIG.f3.map5.W0 7b
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert an unsigned doubleword integer from
r32/m32 to an FP16 value, and store the result in xmm1. Bits 127:16 from xmm2
are copied to xmm1[127:16]."
+"VCVTUSI2SH xmm,xmm,r64/m64{er}","EVEX.LIG.f3.map5.W1 7b
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert an unsigned quadword integer from
r64/m64 to an FP16 value, and store the result in xmm1. Bits 127:16 from xmm2
are copied to xmm1[127:16]."
+"VCVTUW2PH xmm{k}{z},xmm/m128/m16bcst","EVEX.128.f2.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed unsigned word integers from
xmm2/m128/m16bcst to FP16 values, and store the result in xmm1 subject to
writemask k1."
+"VCVTUW2PH ymm{k}{z},ymm/m256/m16bcst","EVEX.256.f2.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed unsigned word integers from
ymm2/m256/m16bcst to FP16 values, and store the result in ymm1 subject to
writemask k1."
+"VCVTUW2PH zmm{k}{z},zmm/m512/m16bcst{er}","EVEX.512.f2.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert thirty-two packed unsigned word integers from
zmm2/m512/m16bcst to FP16 values, and store the result in zmm1 subject to
writemask k1."
+"VCVTW2PH xmm{k}{z},xmm/m128/m16bcst","EVEX.128.f3.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert eight packed signed word integers from
xmm2/m128/m16bcst to FP16 values, and store the result in xmm1 subject to
writemask k1."
+"VCVTW2PH ymm{k}{z},ymm/m256/m16bcst","EVEX.256.f3.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert sixteen packed signed word integers from
ymm2/m256/m16bcst to FP16 values, and store the result in ymm1 subject to
writemask k1."
+"VCVTW2PH zmm{k}{z},zmm/m512/m16bcst{er}","EVEX.512.f3.map5.W0 7d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert thirty-two packed signed word integers from
zmm2/m512/m16bcst to FP16 values, and store the result in zmm1 subject to
writemask k1."
+"VDIVPH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.map5.W0 5e
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed FP16 values in xmm2 by
packed FP16 values in xmm3/m128/m16bcst, and store the result in xmm1 subject
to writemask k1."
+"VDIVPH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.map5.W0 5e
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed FP16 values in ymm2 by
packed FP16 values in ymm3/m256/m16bcst, and store the result in ymm1 subject
to writemask k1."
+"VDIVPH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.map5.W0 5e
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Divide packed FP16 values in zmm2 by
packed FP16 values in zmm3/m512/m16bcst, and store the result in zmm1 subject
to writemask k1."
+"VDIVSH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.f3.map5.W0 5e
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Divide low FP16 value in xmm2 by low FP16
value in xmm3/m16, and store the result in xmm1 subject to writemask k1. Bits
127:16 of xmm2 are copied to xmm1[127:16]."
+"VFCMADDCPH xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.f2.map6.W0 56
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of
FP16 values from xmm2 and xmm3/m128/m32bcst, add to xmm1 and store the result
in xmm1 subject to writemask k1."
+"VFCMADDCPH ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.f2.map6.W0 56
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of
FP16 values from ymm2 and ymm3/m256/m32bcst, add to ymm1 and store the result
in ymm1 subject to writemask k1."
+"VFCMADDCPH zmm{k}{z},zmm,zmm/m512/m32bcst{er}","EVEX.512.f2.map6.W0 56
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of FP16 values
from zmm2 and zmm3/m512/m32bcst, add to zmm1 and store the result in zmm1
subject to writemask k1."
+"VFCMADDCSH xmm{k}{z},xmm,xmm/m32{er}","EVEX.LIG.f2.map6.W0 57
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Complex multiply a pair of FP16 values from
xmm2 and xmm3/m32, add to xmm1 and store the result in xmm1 subject to
writemask k1. Bits 127:32 of xmm2 are copied to xmm1[127:32]."
+"VFCMULCPH xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.f2.map6.W0 d6
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of FP16 values
from xmm2 and xmm3/m128/m32bcst, and store the result in xmm1 subject to
writemask k1."
+"VFCMULCPH ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.f2.map6.W0 d6
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of FP16 values
from ymm2 and ymm3/m256/m32bcst, and store the result in ymm1 subject to
writemask k1."
+"VFCMULCPH zmm{k}{z},zmm,zmm/m512/m32bcst{er}","EVEX.512.f2.map6.W0 d6
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of FP16 values
from zmm2 and zmm3/m512/m32bcst, and store the result in zmm1 subject to
writemask k1."
+"VFCMULCSH xmm{k}{z},xmm,xmm/m32{er}","EVEX.LIG.f2.map6.W0 d7
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Complex multiply a pair of FP16 values from
xmm2 and xmm3/m32, and store the result in xmm1 subject to writemask k1. Bits
127:32 of xmm2 are copied to xmm1[127:32]."
+"VFMADD132PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 98
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm3/m128/m16bcst, add to xmm2, and store the result in
xmm1."
+"VFMADD132PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 98
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm3/m256/m16bcst, add to ymm2, and store the result in
ymm1."
+"VFMADD132PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 98
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm3/m512/m16bcst, add to zmm2, and store the result in zmm1."
+"VFMADD132SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 99
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm1 and xmm3/m16,
add to xmm2, and store the result in xmm1."
+"VFMADD213PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 a8
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm2, add to xmm3/m128/m16bcst, and store the result in
xmm1."
+"VFMADD213PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 a8
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm2, add to ymm3/m256/m16bcst, and store the result in
ymm1."
+"VFMADD213PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 a8
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm2, add to zmm3/m512/m16bcst, and store the result in zmm1."
+"VFMADD213SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 a9
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm1 and xmm2, add
to xmm3/m16, and store the result in xmm1."
+"VFMADD231PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 b8
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm2 and xmm3/m128/m16bcst, add to xmm1, and store the result in
xmm1."
+"VFMADD231PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 b8
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm2 and ymm3/m256/m16bcst, add to ymm1, and store the result in
ymm1."
+"VFMADD231PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 b8
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm2
and zmm3/m512/m16bcst, add to zmm1, and store the result in zmm1."
+"VFMADD231SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 b9
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm2 and xmm3/m16,
add to xmm1, and store the result in xmm1."
+"VFMADDCPH xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.f3.map6.W0 56
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of
FP16 values from xmm2 and the complex conjugate of xmm3/m128/m32bcst, add to
xmm1 and store the result in xmm1 subject to writemask k1."
+"VFMADDCPH ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.f3.map6.W0 56
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of
FP16 values from ymm2 and the complex conjugate of ymm3/m256/m32bcst, add to
ymm1 and store the result in ymm1 subject to writemask k1."
+"VFMADDCPH zmm{k}{z},zmm,zmm/m512/m32bcst{er}","EVEX.512.f3.map6.W0 56
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of FP16 values
from zmm2 and the complex conjugate of zmm3/m512/m32bcst, add to zmm1 and store
the result in zmm1 subject to writemask k1."
+"VFMADDCSH xmm{k}{z},xmm,xmm/m32{er}","EVEX.LIG.f3.map6.W0 57
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Complex multiply a pair of FP16 values from
xmm2 and the complex conjugate of xmm3/m32, add to xmm1 and store the result in
xmm1 subject to writemask k1. Bits 127:32 of xmm2 are copied to xmm1[127:32]."
+"VFMADDSUB132PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 96
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm3/m128/m16bcst, add/subtract elements in xmm2, and
store the result in xmm1 subject to writemask k1."
+"VFMADDSUB132PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 96
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm3/m256/m16bcst, add/subtract elements in ymm2, and
store the result in ymm1 subject to writemask k1."
+"VFMADDSUB132PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 96
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm3/m512/m16bcst, add/subtract elements in zmm2, and store the result in
zmm1 subject to writemask k1."
+"VFMADDSUB213PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 a6
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm2, add/subtract elements in xmm3/m128/m16bcst, and
store the result in xmm1 subject to writemask k1."
+"VFMADDSUB213PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 a6
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm2, add/subtract elements in ymm3/m256/m16bcst, and
store the result in ymm1 subject to writemask k1."
+"VFMADDSUB213PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 a6
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm2, add/subtract elements in zmm3/m512/m16bcst, and store the result in
zmm1 subject to writemask k1."
+"VFMADDSUB231PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 b6
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm2 and xmm3/m128/m16bcst, add/subtract elements in xmm1, and
store the result in xmm1 subject to writemask k1."
+"VFMADDSUB231PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 b6
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm2 and ymm3/m256/m16bcst, add/subtract elements in ymm1, and
store the result in ymm1 subject to writemask k1."
+"VFMADDSUB231PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 b6
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm2
and zmm3/m512/m16bcst, add/subtract elements in zmm1, and store the result in
zmm1 subject to writemask k1."
+"VFMSUB132PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 9a
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm3/m128/m16bcst, subtract xmm2, and store the result in
xmm1 subject to writemask k1."
+"VFMSUB132PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 9a
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm3/m256/m16bcst, subtract ymm2, and store the result in
ymm1 subject to writemask k1."
+"VFMSUB132PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 9a
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm3/m512/m16bcst, subtract zmm2, and store the result in zmm1 subject to
writemask k1."
+"VFMSUB132SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 9b
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm1 and xmm3/m16,
subtract xmm2, and store the result in xmm1 subject to writemask k1."
+"VFMSUB213PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 aa
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm2, subtract xmm3/m128/m16bcst, and store the result in
xmm1 subject to writemask k1."
+"VFMSUB213PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 aa
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm2, subtract ymm3/m256/m16bcst, and store the result in
ymm1 subject to writemask k1."
+"VFMSUB213PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 aa
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm2, subtract zmm3/m512/m16bcst, and store the result in zmm1 subject to
writemask k1."
+"VFMSUB213SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 ab
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm1 and xmm2,
subtract xmm3/m16, and store the result in xmm1 subject to writemask k1."
+"VFMSUB231PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 ba
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm2 and xmm3/m128/m16bcst, subtract xmm1, and store the result in
xmm1 subject to writemask k1."
+"VFMSUB231PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 ba
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm2 and ymm3/m256/m16bcst, subtract ymm1, and store the result in
ymm1 subject to writemask k1."
+"VFMSUB231PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 ba
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm2
and zmm3/m512/m16bcst, subtract zmm1, and store the result in zmm1 subject to
writemask k1."
+"VFMSUB231SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 bb
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm2 and xmm3/m16,
subtract xmm1, and store the result in xmm1 subject to writemask k1."
+"VFMSUBADD132PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 97
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm3/m128/m16bcst, subtract/add elements in xmm2, and
store the result in xmm1 subject to writemask k1."
+"VFMSUBADD132PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 97
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm3/m256/m16bcst, subtract/add elements in ymm2, and
store the result in ymm1 subject to writemask k1."
+"VFMSUBADD132PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 97
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm3/m512/m16bcst, subtract/add elements in zmm2, and store the result in
zmm1 subject to writemask k1."
+"VFMSUBADD213PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 a7
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm2, subtract/add elements in xmm3/m128/m16bcst, and
store the result in xmm1 subject to writemask k1."
+"VFMSUBADD213PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 a7
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm2, subtract/add elements in ymm3/m256/m16bcst, and
store the result in ymm1 subject to writemask k1."
+"VFMSUBADD213PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 a7
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm2, subtract/add elements in zmm3/m512/m16bcst, and store the result in
zmm1 subject to writemask k1."
+"VFMSUBADD231PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 b7
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm2 and xmm3/m128/m16bcst, subtract/add elements in xmm1, and
store the result in xmm1 subject to writemask k1."
+"VFMSUBADD231PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 b7
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm2 and ymm3/m256/m16bcst, subtract/add elements in ymm1, and
store the result in ymm1 subject to writemask k1."
+"VFMSUBADD231PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 b7
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm2
and zmm3/m512/m16bcst, subtract/add elements in zmm1, and store the result in
zmm1 subject to writemask k1."
+"VFMULCPH xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.f3.map6.W0 d6
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of FP16 values
from xmm2 and the complex conjugate of xmm3/ m128/m32bcst, and store the result
in xmm1 subject to writemask k1."
+"VFMULCPH ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.f3.map6.W0 d6
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of FP16 values
from ymm2 and the complex conjugate of ymm3/m256/m32bcst, and store the result
in ymm1 subject to writemask k1."
+"VFMULCPH zmm{k}{z},zmm,zmm/m512/m32bcst{er}","EVEX.512.f3.map6.W0 d6
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Complex multiply a pair of FP16 values
from zmm2 and the complex conjugate of zmm3/m512/m32bcst, and store the result
in zmm1 subject to writemask k1."
+"VFMULCSH xmm{k}{z},xmm,xmm/m32{er}","EVEX.LIG.f3.map6.W0 d7
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Complex multiply a pair of FP16 values from
xmm2 and the complex conjugate of xmm3/m32, and store the result in xmm1
subject to writemask k1. Bits 127:32 of xmm2 are copied to xmm1[127:32]."
+"VFNMADD132PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 9c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm3/m128/m16bcst, and negate the value. Add this value to
xmm2, and store the result in xmm1."
+"VFNMADD132PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 9c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm3/m256/m16bcst, and negate the value. Add this value to
ymm2, and store the result in ymm1."
+"VFNMADD132PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 9c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm3/m512/m16bcst, and negate the value. Add this value to zmm2, and store
the result in zmm1."
+"VFNMADD132SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 9d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm1 and xmm3/m16,
and negate the value. Add this value to xmm2, and store the result in xmm1."
+"VFNMADD213PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 ac
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm2, and negate the value. Add this value to
xmm3/m128/m16bcst, and store the result in xmm1."
+"VFNMADD213PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 ac
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm2, and negate the value. Add this value to
ymm3/m256/m16bcst, and store the result in ymm1."
+"VFNMADD213PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 ac
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm2, and negate the value. Add this value to zmm3/m512/m16bcst, and store
the result in zmm1."
+"VFNMADD213SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 ad
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm1 and xmm2, and
negate the value. Add this value to xmm3/m16, and store the result in xmm1."
+"VFNMADD231PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 bc
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm2 and xmm3/m128/m16bcst, and negate the value. Add this value to
xmm1, and store the result in xmm1."
+"VFNMADD231PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 bc
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm2 and ymm3/m256/m16bcst, and negate the value. Add this value to
ymm1, and store the result in ymm1."
+"VFNMADD231PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 bc
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm2
and zmm3/m512/m16bcst, and negate the value. Add this value to zmm1, and store
the result in zmm1."
+"VFNMADD231SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 bd
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm2 and xmm3/m16,
and negate the value. Add this value to xmm1, and store the result in xmm1."
+"VFNMSUB132PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 9e
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm3/m128/m16bcst, and negate the value. Subtract xmm2
from this value, and store the result in xmm1 subject to writemask k1."
+"VFNMSUB132PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 9e
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm3/m256/m16bcst, and negate the value. Subtract ymm2
from this value, and store the result in ymm1 subject to writemask k1."
+"VFNMSUB132PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 9e
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm3/m512/m16bcst, and negate the value. Subtract zmm2 from this value, and
store the result in zmm1 subject to writemask k1."
+"VFNMSUB132SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 9f
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm1 and xmm3/m16,
and negate the value. Subtract xmm2 from this value, and store the result in
xmm1 subject to writemask k1."
+"VFNMSUB213PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 ae
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm1 and xmm2, and negate the value. Subtract xmm3/m128/m16bcst
from this value, and store the result in xmm1 subject to writemask k1."
+"VFNMSUB213PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 ae
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm1 and ymm2, and negate the value. Subtract ymm3/m256/m16bcst
from this value, and store the result in ymm1 subject to writemask k1."
+"VFNMSUB213PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 ae
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm1
and zmm2, and negate the value. Subtract zmm3/m512/m16bcst from this value, and
store the result in zmm1 subject to writemask k1."
+"VFNMSUB213SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 af
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm1 and xmm2, and
negate the value. Subtract xmm3/m16 from this value, and store the result in
xmm1 subject to writemask k1."
+"VFNMSUB231PH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 be
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from xmm2 and xmm3/m128/m16bcst, and negate the value. Subtract xmm1
from this value, and store the result in xmm1 subject to writemask k1."
+"VFNMSUB231PH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 be
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (r,
w)","VEX.vvvv (r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16
values from ymm2 and ymm3/m256/m16bcst, and negate the value. Subtract ymm1
from this value, and store the result in ymm1 subject to writemask k1."
+"VFNMSUB231PH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 be
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from zmm2
and zmm3/m512/m16bcst, and negate the value. Subtract zmm1 from this value, and
store the result in zmm1 subject to writemask k1."
+"VFNMSUB231SH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 bf
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply FP16 values from xmm2 and xmm3/m16,
and negate the value. Subtract xmm1 from this value, and store the result in
xmm1 subject to writemask k1."
+"VFPCLASSPH k{k},xmm/m128/m16bcst,ib","EVEX.128.0F3A.W0 66 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Test the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSPH k{k},ymm/m256/m16bcst,ib","EVEX.256.0F3A.W0 66 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Test the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSPH k{k},zmm/m512/m16bcst,ib","EVEX.512.0F3A.W0 66 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Test the input for the following categories: NaN,
+0, -0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VFPCLASSSH k{k},xmm/m16,ib","EVEX.LIG.0F3A.W0 67 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Scalar","Test the input for the following categories: NaN, +0,
-0, +Infinity, -Infinity, denormal, finite negative. The immediate field
provides a mask bit for each of these category tests. The masked test results
are OR-ed together to form a mask result."
+"VGETEXPPH xmm{k}{z},xmm/m128/m16bcst","EVEX.128.66.map6.W0 42
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of FP16 values in the source
operand to FP16 results representing unbiased integer exponents and stores the
results in the destination register subject to writemask k1."
+"VGETEXPPH ymm{k}{z},ymm/m256/m16bcst","EVEX.256.66.map6.W0 42
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of FP16 values in the source
operand to FP16 results representing unbiased integer exponents and stores the
results in the destination register subject to writemask k1."
+"VGETEXPPH zmm{k}{z},zmm/m512/m16bcst{sae}","EVEX.512.66.map6.W0 42
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Convert the exponent of FP16 values in the source
operand to FP16 results representing unbiased integer exponents and stores the
results in the destination register subject to writemask k1."
+"VGETEXPSH xmm{k}{z},xmm,xmm/m16 {sae}","EVEX.128.66.map6.W0 43
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Convert the exponent of FP16 values in the
low word of the source operand to FP16 results representing unbiased integer
exponents, and stores the results in the low word of the destination register
subject to writemask k1. Bits 127:16 of xmm2 are copied to xmm1[127:16]."
+"VGETMANTPH xmm{k}{z},xmm/m128/m16bcst,ib","EVEX.128.0F3A.W0 26 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get normalized mantissa from FP16 vector
xmm2/m128/m16bcst and store the result in xmm1, using imm8 for sign control and
mantissa interval normalization, subject to writemask k1."
+"VGETMANTPH ymm{k}{z},ymm/m256/m16bcst,ib","EVEX.256.0F3A.W0 26 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get normalized mantissa from FP16 vector
ymm2/m256/m16bcst and store the result in ymm1, using imm8 for sign control and
mantissa interval normalization, subject to writemask k1."
+"VGETMANTPH zmm{k}{z},zmm/m512/m16bcst{sae},ib","EVEX.512.0F3A.W0 26 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Get normalized mantissa from FP16 vector
zmm2/m512/m16bcst and store the result in zmm1, using imm8 for sign control and
mantissa interval normalization, subject to writemask k1."
+"VGETMANTSH xmm{k}{z},xmm,xmm/m16{sae},ib","EVEX.128.0F3A.W0 27 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","Scalar","Extract the normalized mantissa of the low
FP16 element in xmm3/m16 using imm8 for sign control and mantissa interval
normalization. Store the mantissa to xmm1 subject to writemask k1 and merge
with the other elements of xmm2. Bits 127:16 of xmm2 are copied to
xmm1[127:16]."
+"VMAXPH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.map5.W0 5f
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed FP16 values
between xmm2 and xmm3/m128/m16bcst and store the result in xmm1 subject to
writemask k1."
+"VMAXPH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.map5.W0 5f
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed FP16 values
between ymm2 and ymm3/m256/m16bcst and store the result in ymm1 subject to
writemask k1."
+"VMAXPH zmm{k}{z},zmm,zmm/m512/m16bcst{sae}","EVEX.512.map5.W0 5f
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the maximum packed FP16 values
between zmm2 and zmm3/m512/m16bcst and store the result in zmm1 subject to
writemask k1."
+"VMAXSH xmm{k}{z},xmm,xmm/m16{sae}","EVEX.LIG.f3.map5.W0 5f
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Return the maximum low FP16 value between
xmm3/m16 and xmm2 and store the result in xmm1 subject to writemask k1. Bits
127:16 of xmm2 are copied to xmm1[127:16]."
+"VMINPH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.map5.W0 5d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed FP16 values
between xmm2 and xmm3/m128/m16bcst and store the result in xmm1 subject to
writemask k1."
+"VMINPH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.map5.W0 5d
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed FP16 values
between ymm2 and ymm3/m256/m16bcst and store the result in ymm1 subject to
writemask k1."
+"VMINPH zmm{k}{z},zmm,zmm/m512/m16bcst{sae}","EVEX.512.map5.W0 5d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Return the minimum packed FP16 values
between zmm2 and zmm3/m512/m16bcst and store the result in zmm1 subject to
writemask k1."
+"VMINSH xmm{k}{z},xmm,xmm/m16{sae}","EVEX.LIG.f3.map5.W0 5d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Return the minimum low FP16 value between
xmm3/m16 and xmm2. Stores the result in xmm1 subject to writemask k1. Bits
127:16 of xmm2 are copied to xmm1[127:16]."
+"VMOVSH xmm{k}{z},m16","EVEX.LIG.f3.map5.W0 10
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (r, w)","ModRM:r/m
(r)","","","Scalar","Move FP16 value from m16 to xmm1 subject to writemask k1."
+"VMOVSH xmm{k}{z},xmm,xmm","EVEX.LIG.f3.map5.W0 10
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Move low FP16 values from xmm3 to xmm1 subject to
writemask k1. Bits 127:16 of xmm2 are copied to xmm1[127:16]."
+"VMOVSH m16{k},xmm","EVEX.LIG.f3.map5.W0 11
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:r/m (w)","ModRM:reg
(r)","","","Scalar","Move low FP16 value from xmm1 to m16 subject to writemask
k1."
+"VMOVSH xmm{k}{z},xmm,xmm","EVEX.LIG.f3.map5.W0 11
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:r/m (w)","VEX.vvvv
(r)","ModRM:reg (r)","","","Move low FP16 values from xmm3 to xmm1 subject to
writemask k1. Bits 127:16 of xmm2 are copied to xmm1[127:16]."
+"VMOVW xmm,r32/m16","EVEX.128.66.map5.wig 6e
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Copy word from reg/m16 to xmm1."
+"VMOVW r32/m16,xmm","EVEX.128.66.map5.wig 7e
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:r/m (w)","ModRM:reg
(r)","","","Scalar","Copy word from xmm1 to reg/m16."
+"VMULPH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.map5.W0 59
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from
xmm3/m128/ m16bcst to xmm2 and store the result in xmm1 subject to writemask
k1."
+"VMULPH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.map5.W0 59
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values from
ymm3/m256/ m16bcst to ymm2 and store the result in ymm1 subject to writemask
k1."
+"VMULPH zmm{k}{z},zmm,zmm/m512/m16bcst","EVEX.512.map5.W0 59
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Multiply packed FP16 values in
zmm3/m512/m16bcst with zmm2 and store the result in zmm1 subject to writemask
k1."
+"VMULSH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.f3.map5.W0 59
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Multiply the low FP16 value in xmm3/m16 by
low FP16 value in xmm2, and store the result in xmm1 subject to writemask k1.
Bits 127:16 of xmm2 are copied to xmm1[127:16]."
+"VRCPPH xmm{k}{z},xmm/m128/m16bcst","EVEX.128.66.map6.W0 4c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute the approximate reciprocals of packed FP16
values in xmm2/m128/m16bcst and store the result in xmm1 subject to writemask
k1."
+"VRCPPH ymm{k}{z},ymm/m256/m16bcst","EVEX.256.66.map6.W0 4c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute the approximate reciprocals of packed FP16
values in ymm2/m256/m16bcst and store the result in ymm1 subject to writemask
k1."
+"VRCPPH zmm{k}{z},zmm/m512/m16bcst","EVEX.512.66.map6.W0 4c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute the approximate reciprocals of packed FP16
values in zmm2/m512/m16bcst and store the result in zmm1 subject to writemask
k1."
+"VRCPSH xmm{k}{z},xmm,xmm/m16","EVEX.LIG.66.map6.W0 4d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Compute the approximate reciprocal of the low
FP16 value in xmm3/m16 and store the result in xmm1 subject to writemask k1.
Bits 127:16 from xmm2 are copied to xmm1[127:16]."
+"VREDUCEPH xmm{k}{z},xmm/m128/m16bcst,ib","EVEX.128.0F3A.W0 56 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on packed FP16
values in xmm2/m128/m16bcst by subtracting a number of fraction bits specified
by the imm8 field. Store the result in xmm1 subject to writemask k1."
+"VREDUCEPH ymm{k}{z},ymm/m256/m16bcst,ib","EVEX.256.0F3A.W0 56 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on packed FP16
values in ymm2/m256/m16bcst by subtracting a number of fraction bits specified
by the imm8 field. Store the result in ymm1 subject to writemask k1."
+"VREDUCEPH zmm{k}{z},zmm/m512/m16bcst{sae},ib","EVEX.512.0F3A.W0 56 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Perform reduction transformation on packed FP16
values in zmm2/m512/m16bcst by subtracting a number of fraction bits specified
by the imm8 field. Store the result in zmm1 subject to writemask k1."
+"VREDUCESH xmm{k}{z},xmm,xmm/m16{sae},ib","EVEX.LIG.0F3A.W0 57 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","Scalar","Perform a reduction transformation on the
low binary encoded FP16 value in xmm3/m16 by subtracting a number of fraction
bits specified by the imm8 field. Store the result in xmm1 subject to writemask
k1. Bits 127:16 from xmm2 are copied to xmm1[127:16]."
+"VRNDSCALEPH xmm{k}{z},xmm/m128/m16bcst,ib","EVEX.128.0F3A.W0 08 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Round packed FP16 values in xmm2/m128/ m16bcst to a
number of fraction bits specified by the imm8 field. Store the result in xmm1
subject to writemask k1."
+"VRNDSCALEPH ymm{k}{z},ymm/m256/m16bcst,ib","EVEX.256.0F3A.W0 08 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Round packed FP16 values in ymm2/m256/m16bcst to a
number of fraction bits specified by the imm8 field. Store the result in ymm1
subject to writemask k1."
+"VRNDSCALEPH zmm{k}{z},zmm/m512/m16bcst{sae},ib","EVEX.512.0F3A.W0 08 /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","ib","","Full Vector","Round packed FP16 values in zmm2/m512/m16bcst to a
number of fraction bits specified by the imm8 field. Store the result in zmm1
subject to writemask k1."
+"VRNDSCALESH xmm{k}{z},xmm,xmm/m16{sae},ib","EVEX.LIG.0F3A.W0 0a /r
ib","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","Scalar","Round the low FP16 value in xmm3/m16 to a
number of fraction bits specified by the imm8 field. Store the result in xmm1
subject to writemask k1. Bits 127:16 from xmm2 are copied to xmm1[127:16]."
+"VRSQRTPH xmm{k}{z},xmm/m128/m16bcst","EVEX.128.66.map6.W0 4e
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute the approximate reciprocals of the square
roots of packed FP16 values in xmm2/m128/m16bcst and store the result in xmm1
subject to writemask k1."
+"VRSQRTPH ymm{k}{z},ymm/m256/m16bcst","EVEX.256.66.map6.W0 4e
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute the approximate reciprocals of the square
roots of packed FP16 values in ymm2/m256/m16bcst and store the result in ymm1
subject to writemask k1."
+"VRSQRTPH zmm{k}{z},zmm/m512/m16bcst","EVEX.512.66.map6.W0 4e
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute the approximate reciprocals of the square
roots of packed FP16 values in zmm2/m512/m16bcst and store the result in zmm1
subject to writemask k1."
+"VRSQRTSH xmm{k}{z},xmm,xmm/m16","EVEX.LIG.66.map6.W0 4f
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Compute the approximate reciprocal square
root of the FP16 value in xmm3/m16 and store the result in the low word element
of xmm1 subject to writemask k1. Bits 127:16 of xmm2 are copied to
xmm1[127:16]."
+"VSCALEFPH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.66.map6.W0 2c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed FP16 values in xmm2
using values from xmm3/m128/m16bcst, and store the result in xmm1 subject to
writemask k1."
+"VSCALEFPH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.66.map6.W0 2c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed FP16 values in ymm2
using values from ymm3/m256/m16bcst, and store the result in ymm1 subject to
writemask k1."
+"VSCALEFPH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.66.map6.W0 2c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Scale the packed FP16 values in zmm2
using values from zmm3/m512/m16bcst, and store the result in zmm1 subject to
writemask k1."
+"VSCALEFSH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.66.map6.W0 2d
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Scale the FP16 values in xmm2 using the value
from xmm3/m16 and store the result in xmm1 subject to writemask k1. Bits 127:16
from xmm2 are copied to xmm1[127:16]."
+"VSQRTPH xmm{k}{z},xmm/m128/m16bcst","EVEX.128.map5.W0 51
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute square roots of the packed FP16 values in
xmm2/m128/m16bcst, and store the result in xmm1 subject to writemask k1."
+"VSQRTPH ymm{k}{z},ymm/m256/m16bcst","EVEX.256.map5.W0 51
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute square roots of the packed FP16 values in
ymm2/m256/m16bcst, and store the result in ymm1 subject to writemask k1."
+"VSQRTPH zmm{k}{z},zmm/m512/m16bcst{er}","EVEX.512.map5.W0 51
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Full Vector","Compute square roots of the packed FP16 values in
zmm2/m512/m16bcst, and store the result in zmm1 subject to writemask k1."
+"VSQRTSH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.f3.map5.W0 51
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Compute square root of the low FP16 value in
xmm3/m16 and store the result in xmm1 subject to writemask k1. Bits 127:16 from
xmm2 are copied to xmm1[127:16]."
+"VSUBPH xmm{k}{z},xmm,xmm/m128/m16bcst","EVEX.128.map5.W0 5c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed FP16 values from
xmm3/m128/m16bcst to xmm2, and store the result in xmm1 subject to writemask
k1."
+"VSUBPH ymm{k}{z},ymm,ymm/m256/m16bcst","EVEX.256.map5.W0 5c
/r","Valid","Valid","Invalid","AVX512VL AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed FP16 values from
ymm3/m256/m16bcst to ymm2, and store the result in ymm1 subject to writemask
k1."
+"VSUBPH zmm{k}{z},zmm,zmm/m512/m16bcst{er}","EVEX.512.map5.W0 5c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Full Vector","Subtract packed FP16 values from
zmm3/m512/m16bcst to zmm2, and store the result in zmm1 subject to writemask
k1."
+"VSUBSH xmm{k}{z},xmm,xmm/m16{er}","EVEX.LIG.f3.map5.W0 5c
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","Scalar","Subtract the low FP16 value in xmm3/m16 from
xmm2 and store the result in xmm1 subject to writemask k1. Bits 127:16 from
xmm2 are copied to xmm1[127:16]."
+"VUCOMISH xmm,xmm/m16{sae}","EVEX.LIG.map5.W0 2e
/r","Valid","Valid","Invalid","AVX512FP16","ModRM:reg (w)","ModRM:r/m
(r)","","","Scalar","Compare low FP16 values in xmm1 and xmm2/m16 and set the
EFLAGS flags accordingly."
diff --git a/disas/x86-data/x86_avx512ifma.csv
b/disas/x86-data/x86_avx512ifma.csv
new file mode 100644
index 000000000000..5bda254f33f7
--- /dev/null
+++ b/disas/x86-data/x86_avx512ifma.csv
@@ -0,0 +1,7 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPMADD52HUQ xmm{k}{z},xmm,xmm/m128/m64bcst","EVEX.128.66.0F38.W1 b5
/r","Valid","Valid","Invalid","AVX512VL AVX512IFMA","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply unsigned 52-bit
integers in xmm2 and xmm3/m128 and add the high 52 bits of the 104-bit product
to the qword unsigned integers in xmm1 using writemask k1."
+"VPMADD52HUQ ymm{k}{z},ymm,ymm/m256/m64bcst","EVEX.256.66.0F38.W1 b5
/r","Valid","Valid","Invalid","AVX512VL AVX512IFMA","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply unsigned 52-bit
integers in ymm2 and ymm3/m256 and add the high 52 bits of the 104-bit product
to the qword unsigned integers in ymm1 using writemask k1."
+"VPMADD52HUQ zmm{k}{z},zmm,zmm/m512/m64bcst","EVEX.512.66.0F38.W1 b5
/r","Valid","Valid","Invalid","AVX512IFMA","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply unsigned 52-bit integers in zmm2 and
zmm3/m512 and add the high 52 bits of the 104-bit product to the qword unsigned
integers in zmm1 using writemask k1."
+"VPMADD52LUQ xmm{k}{z},xmm,xmm/m128/m64bcst","EVEX.128.66.0F38.W1 b4
/r","Valid","Valid","Invalid","AVX512VL AVX512IFMA","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply unsigned 52-bit
integers in xmm2 and xmm3/m128 and add the low 52 bits of the 104-bit product
to the qword unsigned integers in xmm1 using writemask k1."
+"VPMADD52LUQ ymm{k}{z},ymm,ymm/m256/m64bcst","EVEX.256.66.0F38.W1 b4
/r","Valid","Valid","Invalid","AVX512VL AVX512IFMA","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply unsigned 52-bit
integers in ymm2 and ymm3/m256 and add the low 52 bits of the 104-bit product
to the qword unsigned integers in ymm1 using writemask k1."
+"VPMADD52LUQ zmm{k}{z},zmm,zmm/m512/m64bcst","EVEX.512.66.0F38.W1 b4
/r","Valid","Valid","Invalid","AVX512IFMA","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply unsigned 52-bit integers in zmm2 and
zmm3/m512 and add the low 52 bits of the 104-bit product to the qword unsigned
integers in zmm1 using writemask k1."
diff --git a/disas/x86-data/x86_avx512pf.csv b/disas/x86-data/x86_avx512pf.csv
new file mode 100644
index 000000000000..d7773d564b1a
--- /dev/null
+++ b/disas/x86-data/x86_avx512pf.csv
@@ -0,0 +1,17 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VGATHERPF0DPD vm32y/f64x8 {k1}","EVEX.512.66.0F38.W1 C6
/1","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed dword indices, prefetch
sparse byte memory locations containing double-precision data using opmask k1
and T0 hint."
+"VGATHERPF0DPS vm32z/f32x16 {k1}","EVEX.512.66.0F38.W0 C6
/1","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed dword indices, prefetch
sparse byte memory locations containing single-precision data using opmask k1
and T0 hint."
+"VGATHERPF0QPD vm64z/f64x8 {k1}","EVEX.512.66.0F38.W1 C7
/1","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed qword indices, prefetch
sparse byte memory locations containing double-precision data using opmask k1
and T0 hint."
+"VGATHERPF0QPS vm64z/f32x8 {k1}","EVEX.512.66.0F38.W0 C7
/1","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed qword indices, prefetch
sparse byte memory locations containing single-precision data using opmask k1
and T0 hint."
+"VGATHERPF1DPD vm32y/f64x8 {k1}","EVEX.512.66.0F38.W1 C6
/2","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed dword indices, prefetch
sparse byte memory locations containing double-precision data using opmask k1
and T1 hint."
+"VGATHERPF1DPS vm32z/f32x16 {k1}","EVEX.512.66.0F38.W0 C6
/2","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed dword indices, prefetch
sparse byte memory locations containing single-precision data using opmask k1
and T1 hint."
+"VGATHERPF1QPD vm64z/f64x8 {k1}","EVEX.512.66.0F38.W1 C7
/2","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed qword indices, prefetch
sparse byte memory locations containing double-precision data using opmask k1
and T1 hint."
+"VGATHERPF1QPS vm64z/f32x8 {k1}","EVEX.512.66.0F38.W0 C7
/2","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed qword indices, prefetch
sparse byte memory locations containing single-precision data using opmask k1
and T1 hint."
+"VSCATTERPF0DPD vm32y/f64x8 {k1}","EVEX.512.66.0F38.W1 C6
/5","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed dword indices, prefetch
sparse byte memory locations containing double-precision data using writemask
k1 and T0 hint with intent to write."
+"VSCATTERPF0DPS vm32z/f32x16 {k1}","EVEX.512.66.0F38.W0 C6
/5","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed dword indices, prefetch
sparse byte memory locations containing single-precision data using writemask
k1 and T0 hint with intent to write."
+"VSCATTERPF0QPD vm64z/f64x8 {k1}","EVEX.512.66.0F38.W1 C7
/5","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed qword indices, prefetch
sparse byte memory locations containing double-precision data using writemask
k1 and T0 hint with intent to write."
+"VSCATTERPF0QPS vm64z/f32x8 {k1}","EVEX.512.66.0F38.W0 C7
/5","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed qword indices, prefetch
sparse byte memory locations containing single-precision data using writemask
k1 and T0 hint with intent to write."
+"VSCATTERPF1DPD vm32y/f64x8 {k1}","EVEX.512.66.0F38.W1 C6
/6","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed dword indices, prefetch
sparse byte memory locations containing double-precision data using writemask
k1 and T1 hint with intent to write."
+"VSCATTERPF1DPS vm32z/f32x16 {k1}","EVEX.512.66.0F38.W0 C6
/6","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed dword indices, prefetch
sparse byte memory locations containing single-precision data using writemask
k1 and T1 hint with intent to write."
+"VSCATTERPF1QPD vm64z/f64x8 {k1}","EVEX.512.66.0F38.W1 C7
/6","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed qword indices, prefetch
sparse byte memory locations containing double-precision data using writemask
k1 and T1 hint with intent to write."
+"VSCATTERPF1QPS vm64z/f32x8 {k1}","EVEX.512.66.0F38.W0 C7
/6","Valid","Valid","Invalid","AVX512PF","BaseReg (r): VSIB:base, VectorReg
(r): VSIB:index","","","","Tuple1 Scalar","Using signed qword indices, prefetch
sparse byte memory locations containing single-precision data using writemask
k1 and T1 hint with intent to write."
diff --git a/disas/x86-data/x86_avx512vbmi.csv
b/disas/x86-data/x86_avx512vbmi.csv
new file mode 100644
index 000000000000..b24820134cf7
--- /dev/null
+++ b/disas/x86-data/x86_avx512vbmi.csv
@@ -0,0 +1,13 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPERMB xmm{k}{z},xmm,xmm/m128","EVEX.128.66.0F38.W0 8d
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Permute bytes in xmm3/m128 using byte
indexes in xmm2 and store the result in xmm1 using writemask k1."
+"VPERMB ymm{k}{z},ymm,ymm/m256","EVEX.256.66.0F38.W0 8d
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Permute bytes in ymm3/m256 using byte
indexes in ymm2 and store the result in ymm1 using writemask k1."
+"VPERMB zmm{k}{z},zmm,zmm/m512","EVEX.512.66.0F38.W0 8d
/r","Valid","Valid","Invalid","AVX512VBMI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Permute bytes in zmm3/m512 using byte
indexes in zmm2 and store the result in zmm1 using writemask k1."
+"VPERMI2B xmm{k}{z},xmm,xmm/m128","EVEX.128.66.0F38.W0 75
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Permute bytes in xmm3/m128
and xmm2 using byte indexes in xmm1 and store the byte results in xmm1 using
writemask k1."
+"VPERMI2B ymm{k}{z},ymm,ymm/m256","EVEX.256.66.0F38.W0 75
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Permute bytes in ymm3/m256
and ymm2 using byte indexes in ymm1 and store the byte results in ymm1 using
writemask k1."
+"VPERMI2B zmm{k}{z},zmm,zmm/m512","EVEX.512.66.0F38.W0 75
/r","Valid","Valid","Invalid","AVX512VBMI","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Permute bytes in zmm3/m512 and zmm2 using
byte indexes in zmm1 and store the byte results in zmm1 using writemask k1."
+"VPERMT2B xmm{k}{z},xmm,xmm/m128","EVEX.128.66.0F38.W0 7d
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Permute bytes in xmm3/m128
and xmm1 using byte indexes in xmm2 and store the byte results in xmm1 using
writemask k1."
+"VPERMT2B ymm{k}{z},ymm,ymm/m256","EVEX.256.66.0F38.W0 7d
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Permute bytes in ymm3/m256
and ymm1 using byte indexes in ymm2 and store the byte results in ymm1 using
writemask k1."
+"VPERMT2B zmm{k}{z},zmm,zmm/m512","EVEX.512.66.0F38.W0 7d
/r","Valid","Valid","Invalid","AVX512VBMI","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Permute bytes in zmm3/m512 and zmm1 using
byte indexes in zmm2 and store the byte results in zmm1 using writemask k1."
+"VPMULTISHIFTQB xmm{k}{z},xmm,xmm/m128/m64bcst","EVEX.128.66.0F38.W1 83
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Select unaligned bytes from qwords in
xmm3/m128/m64bcst using control bytes in xmm2, write byte results to xmm1 under
k1."
+"VPMULTISHIFTQB ymm{k}{z},ymm,ymm/m256/m64bcst","EVEX.256.66.0F38.W1 83
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Select unaligned bytes from qwords in
ymm3/m256/m64bcst using control bytes in ymm2, write byte results to ymm1 under
k1."
+"VPMULTISHIFTQB zmm{k}{z},zmm,zmm/m512/m64bcst","EVEX.512.66.0F38.W1 83
/r","Valid","Valid","Invalid","AVX512VBMI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Select unaligned bytes from qwords in
zmm3/m512/m64bcst using control bytes in zmm2, write byte results to zmm1 under
k1."
diff --git a/disas/x86-data/x86_avx512vbmi2.csv
b/disas/x86-data/x86_avx512vbmi2.csv
new file mode 100644
index 000000000000..35f478e66c77
--- /dev/null
+++ b/disas/x86-data/x86_avx512vbmi2.csv
@@ -0,0 +1,61 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPCOMPRESSB m128/i8x16{k},xmm","EVEX.128.66.0F38.W0 63
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress up to 128 bits of packed byte values from
xmm1 to m128 with writemask k1."
+"VPCOMPRESSB m256/i8x32{k},ymm","EVEX.256.66.0F38.W0 63
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress up to 256 bits of packed byte values from
ymm1 to m256 with writemask k1."
+"VPCOMPRESSB m512/i8x64{k},zmm","EVEX.512.66.0F38.W0 63
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress up to 512 bits of packed byte values from
zmm1 to m512 with writemask k1."
+"VPCOMPRESSB xmm/i8x16{k}{z},xmm","EVEX.128.66.0F38.W0 63
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Compress up to 128 bits of packed byte values from xmm2 to xmm1
with writemask k1."
+"VPCOMPRESSB ymm/i8x32{k}{z},ymm","EVEX.256.66.0F38.W0 63
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Compress up to 256 bits of packed byte values from ymm2 to ymm1
with writemask k1."
+"VPCOMPRESSB zmm/i8x64{k}{z},zmm","EVEX.512.66.0F38.W0 63
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Compress up to 512 bits of packed byte values from zmm2 to zmm1
with writemask k1."
+"VPCOMPRESSW m128/i16x8{k},xmm","EVEX.128.66.0F38.W1 63
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress up to 128 bits of packed word values from
xmm1 to m128 with writemask k1."
+"VPCOMPRESSW m256/i16x16{k},ymm","EVEX.256.66.0F38.W1 63
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress up to 256 bits of packed word values from
ymm1 to m256 with writemask k1."
+"VPCOMPRESSW m512/i16x32{k},zmm","EVEX.512.66.0F38.W1 63
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","Tuple1 Scalar","Compress up to 512 bits of packed word values from
zmm1 to m512 with writemask k1."
+"VPCOMPRESSW xmm/i16x8{k}{z},xmm","EVEX.128.66.0F38.W1 63
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Compress up to 128 bits of packed word values from xmm2 to xmm1
with writemask k1."
+"VPCOMPRESSW ymm/i16x16{k}{z},ymm","EVEX.256.66.0F38.W1 63
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Compress up to 256 bits of packed word values from ymm2 to ymm1
with writemask k1."
+"VPCOMPRESSW zmm/i16x32{k}{z},zmm","EVEX.512.66.0F38.W1 63
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Compress up to 512 bits of packed word values from zmm2 to zmm1
with writemask k1."
+"VPEXPANDB xmm{k}{z},m128/i8x16","EVEX.128.66.0F38.W0 62
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expands up to 128 bits of packed byte values from
m128 to xmm1 with writemask k1."
+"VPEXPANDB xmm{k}{z},xmm/i8x16","EVEX.128.66.0F38.W0 62
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Expands up to 128 bits of packed byte values from xmm2 to xmm1
with writemask k1."
+"VPEXPANDB ymm{k}{z},m256/i8x32","EVEX.256.66.0F38.W0 62
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expands up to 256 bits of packed byte values from
m256 to ymm1 with writemask k1."
+"VPEXPANDB ymm{k}{z},ymm/i8x32","EVEX.256.66.0F38.W0 62
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Expands up to 256 bits of packed byte values from ymm2 to ymm1
with writemask k1."
+"VPEXPANDB zmm{k}{z},m512/i8x64","EVEX.512.66.0F38.W0 62
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expands up to 512 bits of packed byte values from
m512 to zmm1 with writemask k1."
+"VPEXPANDB zmm{k}{z},zmm/i8x64","EVEX.512.66.0F38.W0 62
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Expands up to 512 bits of packed byte values from zmm2 to zmm1
with writemask k1."
+"VPEXPANDW xmm{k}{z},m128/i16x8","EVEX.128.66.0F38.W1 62
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expands up to 128 bits of packed word values from
m128 to xmm1 with writemask k1."
+"VPEXPANDW xmm{k}{z},xmm/i16x8","EVEX.128.66.0F38.W1 62
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Expands up to 128 bits of packed word values from xmm2 to xmm1
with writemask k1."
+"VPEXPANDW ymm{k}{z},m256/i16x16","EVEX.256.66.0F38.W1 62
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expands up to 256 bits of packed word values from
m256 to ymm1 with writemask k1."
+"VPEXPANDW ymm{k}{z},ymm/i16x16","EVEX.256.66.0F38.W1 62
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Expands up to 256 bits of packed word values from ymm2 to ymm1
with writemask k1."
+"VPEXPANDW zmm{k}{z},m512/i16x32","EVEX.512.66.0F38.W1 62
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","Tuple1 Scalar","Expands up to 512 bits of packed word values from
m512 to zmm1 with writemask k1."
+"VPEXPANDW zmm{k}{z},zmm/i16x32","EVEX.512.66.0F38.W1 62
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Expands up to 512 bits of packed word values from zmm2 to zmm1
with writemask k1."
+"VPSHLDD xmm{k}{z},xmm,xmm/m128/m32bcst,ib","EVEX.128.66.0F3A.W0 71 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the left by constant value in imm8 into xmm1."
+"VPSHLDD ymm{k}{z},ymm,ymm/m256/m32bcst,ib","EVEX.256.66.0F3A.W0 71 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the left by constant value in imm8 into ymm1."
+"VPSHLDD zmm{k}{z},zmm,zmm/m512/m32bcst,ib","EVEX.512.66.0F3A.W0 71 /r
ib","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the left by constant value in imm8 into zmm1."
+"VPSHLDQ xmm{k}{z},xmm,xmm/m128/m64bcst,ib","EVEX.128.66.0F3A.W1 71 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the left by constant value in imm8 into xmm1."
+"VPSHLDQ ymm{k}{z},ymm,ymm/m256/m64bcst,ib","EVEX.256.66.0F3A.W1 71 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the left by constant value in imm8 into ymm1."
+"VPSHLDQ zmm{k}{z},zmm,zmm/m512/m64bcst,ib","EVEX.512.66.0F3A.W1 71 /r
ib","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the left by constant value in imm8 into zmm1."
+"VPSHLDVD xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.66.0F38.W0 71
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Concatenate xmm1 and xmm2,
extract result shifted to the left by value in xmm3/m128 into xmm1."
+"VPSHLDVD ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.66.0F38.W0 71
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Concatenate ymm1 and ymm2,
extract result shifted to the left by value in xmm3/m256 into ymm1."
+"VPSHLDVD zmm{k}{z},zmm,zmm/m512/m32bcst","EVEX.512.66.0F38.W0 71
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Concatenate zmm1 and zmm2, extract result
shifted to the left by value in zmm3/m512 into zmm1."
+"VPSHLDVQ xmm{k}{z},xmm,xmm/m128/m64bcst","EVEX.128.66.0F38.W1 71
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Concatenate xmm1 and xmm2,
extract result shifted to the left by value in xmm3/m128 into xmm1."
+"VPSHLDVQ ymm{k}{z},ymm,ymm/m256/m64bcst","EVEX.256.66.0F38.W1 71
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Concatenate ymm1 and ymm2,
extract result shifted to the left by value in xmm3/m256 into ymm1."
+"VPSHLDVQ zmm{k}{z},zmm,zmm/m512/m64bcst","EVEX.512.66.0F38.W1 71
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Concatenate zmm1 and zmm2, extract result
shifted to the left by value in zmm3/m512 into zmm1."
+"VPSHLDVW xmm{k}{z},xmm,xmm/m128","EVEX.128.66.0F38.W1 70
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Concatenate xmm1 and xmm2,
extract result shifted to the left by value in xmm3/m128 into xmm1."
+"VPSHLDVW ymm{k}{z},ymm,ymm/m256","EVEX.256.66.0F38.W1 70
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Concatenate ymm1 and ymm2,
extract result shifted to the left by value in xmm3/m256 into ymm1."
+"VPSHLDVW zmm{k}{z},zmm,zmm/m512","EVEX.512.66.0F38.W1 70
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Concatenate zmm1 and zmm2, extract result
shifted to the left by value in zmm3/m512 into zmm1."
+"VPSHLDW xmm{k}{z},xmm,xmm/m128,ib","EVEX.128.66.0F3A.W1 70 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Mem","Concatenate destination and source
operands, extract result shifted to the left by constant value in imm8 into
xmm1."
+"VPSHLDW ymm{k}{z},ymm,ymm/m256,ib","EVEX.256.66.0F3A.W1 70 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Mem","Concatenate destination and source
operands, extract result shifted to the left by constant value in imm8 into
ymm1."
+"VPSHLDW zmm{k}{z},zmm,zmm/m512,ib","EVEX.512.66.0F3A.W1 70 /r
ib","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Mem","Concatenate destination and source
operands, extract result shifted to the left by constant value in imm8 into
zmm1."
+"VPSHRDD xmm{k}{z},xmm,xmm/m128/m32bcst,ib","EVEX.128.66.0F3A.W0 73 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the right by constant value in imm8 into xmm1."
+"VPSHRDD ymm{k}{z},ymm,ymm/m256/m32bcst,ib","EVEX.256.66.0F3A.W0 73 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the right by constant value in imm8 into ymm1."
+"VPSHRDD zmm{k}{z},zmm,zmm/m512/m32bcst,ib","EVEX.512.66.0F3A.W0 73 /r
ib","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the right by constant value in imm8 into zmm1."
+"VPSHRDQ xmm{k}{z},xmm,xmm/m128/m64bcst,ib","EVEX.128.66.0F3A.W1 73 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the right by constant value in imm8 into xmm1."
+"VPSHRDQ ymm{k}{z},ymm,ymm/m256/m64bcst,ib","EVEX.256.66.0F3A.W1 73 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the right by constant value in imm8 into ymm1."
+"VPSHRDQ zmm{k}{z},zmm,zmm/m512/m64bcst,ib","EVEX.512.66.0F3A.W1 73 /r
ib","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Concatenate destination and source operands,
extract result shifted to the right by constant value in imm8 into zmm1."
+"VPSHRDVD xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.66.0F38.W0 73
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Concatenate xmm1 and xmm2,
extract result shifted to the right by value in xmm3/m128 into xmm1."
+"VPSHRDVD ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.66.0F38.W0 73
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Concatenate ymm1 and ymm2,
extract result shifted to the right by value in xmm3/m256 into ymm1."
+"VPSHRDVD zmm{k}{z},zmm,zmm/m512/m32bcst","EVEX.512.66.0F38.W0 73
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Concatenate zmm1 and zmm2, extract result
shifted to the right by value in zmm3/m512 into zmm1."
+"VPSHRDVQ xmm{k}{z},xmm,xmm/m128/m64bcst","EVEX.128.66.0F38.W1 73
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Concatenate xmm1 and xmm2,
extract result shifted to the right by value in xmm3/m128 into xmm1."
+"VPSHRDVQ ymm{k}{z},ymm,ymm/m256/m64bcst","EVEX.256.66.0F38.W1 73
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Concatenate ymm1 and ymm2,
extract result shifted to the right by value in xmm3/m256 into ymm1."
+"VPSHRDVQ zmm{k}{z},zmm,zmm/m512/m64bcst","EVEX.512.66.0F38.W1 73
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Concatenate zmm1 and zmm2, extract result
shifted to the right by value in zmm3/m512 into zmm1."
+"VPSHRDVW xmm{k}{z},xmm,xmm/m128","EVEX.128.66.0F38.W1 72
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Concatenate xmm1 and xmm2,
extract result shifted to the right by value in xmm3/m128 into xmm1."
+"VPSHRDVW ymm{k}{z},ymm,ymm/m256","EVEX.256.66.0F38.W1 72
/r","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full Mem","Concatenate ymm1 and ymm2,
extract result shifted to the right by value in xmm3/m256 into ymm1."
+"VPSHRDVW zmm{k}{z},zmm,zmm/m512","EVEX.512.66.0F38.W1 72
/r","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Concatenate zmm1 and zmm2, extract result
shifted to the right by value in zmm3/m512 into zmm1."
+"VPSHRDW xmm{k}{z},xmm,xmm/m128,ib","EVEX.128.66.0F3A.W1 72 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Mem","Concatenate destination and source
operands, extract result shifted to the right by constant value in imm8 into
xmm1."
+"VPSHRDW ymm{k}{z},ymm,ymm/m256,ib","EVEX.256.66.0F3A.W1 72 /r
ib","Valid","Valid","Invalid","AVX512VL AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Mem","Concatenate destination and source
operands, extract result shifted to the right by constant value in imm8 into
ymm1."
+"VPSHRDW zmm{k}{z},zmm,zmm/m512,ib","EVEX.512.66.0F3A.W1 72 /r
ib","Valid","Valid","Invalid","AVX512VBMI2","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full Mem","Concatenate destination and source
operands, extract result shifted to the right by constant value in imm8 into
zmm1."
diff --git a/disas/x86-data/x86_avx512vl.csv b/disas/x86-data/x86_avx512vl.csv
new file mode 100644
index 000000000000..d8111406786a
--- /dev/null
+++ b/disas/x86-data/x86_avx512vl.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VCVTPS2PD ymm1 {k1}{z}, xmm2/m128/m32bcst","EVEX.256.0F.W0 5A
/r","Valid","Valid","Invalid","AVX512VL","ModRM:reg (w)","ModRM:r/m
(r)","","","Half Vector","Convert four packed single-precision floating-point
values in xmm2/m128/m32bcst to packed double-precision floating-point values in
ymm1 with writemask k1."
diff --git a/disas/x86-data/x86_avx512vnni.csv
b/disas/x86-data/x86_avx512vnni.csv
new file mode 100644
index 000000000000..2167968eabac
--- /dev/null
+++ b/disas/x86-data/x86_avx512vnni.csv
@@ -0,0 +1,13 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPDPBUSD xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.66.0F38.W0 50
/r","Valid","Valid","Invalid","AVX512VL AVX512VNNI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply groups of 4 pairs of
signed bytes in xmm3/m128/m32bcst with corresponding unsigned bytes of xmm2,
summing those products and adding them to doubleword result in xmm1 under
writemask k1."
+"VPDPBUSD ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.66.0F38.W0 50
/r","Valid","Valid","Invalid","AVX512VL AVX512VNNI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply groups of 4 pairs of
signed bytes in ymm3/m256/m32bcst with corresponding unsigned bytes of ymm2,
summing those products and adding them to doubleword result in ymm1 under
writemask k1."
+"VPDPBUSD zmm{k}{z},zmm,zmm/m512/m32bcst","EVEX.512.66.0F38.W0 50
/r","Valid","Valid","Invalid","AVX512VNNI","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply groups of 4 pairs of signed bytes in
zmm3/m512/m32bcst with corresponding unsigned bytes of zmm2, summing those
products and adding them to doubleword result in zmm1 under writemask k1."
+"VPDPBUSDS xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.66.0F38.W0 51
/r","Valid","Valid","Invalid","AVX512VL AVX512VNNI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply groups of 4 pairs
signed bytes in xmm3/m128/m32bcst with corresponding unsigned bytes of xmm2,
summing those products and adding them to doubleword result, with signed
saturation in xmm1, under writemask k1."
+"VPDPBUSDS ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.66.0F38.W0 51
/r","Valid","Valid","Invalid","AVX512VL AVX512VNNI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply groups of 4 pairs
signed bytes in ymm3/m256/m32bcst with corresponding unsigned bytes of ymm2,
summing those products and adding them to doubleword result, with signed
saturation in ymm1, under writemask k1."
+"VPDPBUSDS zmm{k}{z},zmm,zmm/m512/m32bcst","EVEX.512.66.0F38.W0 51
/r","Valid","Valid","Invalid","AVX512VNNI","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply groups of 4 pairs signed bytes in
zmm3/m512/m32bcst with corresponding unsigned bytes of zmm2, summing those
products and adding them to doubleword result, with signed saturation in zmm1,
under writemask k1."
+"VPDPWSSD xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.66.0F38.W0 52
/r","Valid","Valid","Invalid","AVX512VL AVX512VNNI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply groups of 2 pairs
signed words in xmm3/m128/m32bcst with corresponding signed words of xmm2,
summing those products and adding them to doubleword result in xmm1, under
writemask k1."
+"VPDPWSSD ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.66.0F38.W0 52
/r","Valid","Valid","Invalid","AVX512VL AVX512VNNI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply groups of 2 pairs
signed words in ymm3/m256/m32bcst with corresponding signed words of ymm2,
summing those products and adding them to doubleword result in ymm1, under
writemask k1."
+"VPDPWSSD zmm{k}{z},zmm,zmm/m512/m32bcst","EVEX.512.66.0F38.W0 52
/r","Valid","Valid","Invalid","AVX512VNNI","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply groups of 2 pairs signed words in
zmm3/m512/m32bcst with corresponding signed words of zmm2, summing those
products and adding them to doubleword result in zmm1, under writemask k1."
+"VPDPWSSDS xmm{k}{z},xmm,xmm/m128/m32bcst","EVEX.128.66.0F38.W0 53
/r","Valid","Valid","Invalid","AVX512VL AVX512VNNI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply groups of 2 pairs of
signed words in xmm3/m128/m32bcst with corresponding signed words of xmm2,
summing those products and adding them to doubleword result in xmm1, with
signed saturation, under writemask k1."
+"VPDPWSSDS ymm{k}{z},ymm,ymm/m256/m32bcst","EVEX.256.66.0F38.W0 53
/r","Valid","Valid","Invalid","AVX512VL AVX512VNNI","ModRM:reg (r,
w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Multiply groups of 2 pairs of
signed words in ymm3/m256/m32bcst with corresponding signed words of ymm2,
summing those products and adding them to doubleword result in ymm1, with
signed saturation, under writemask k1."
+"VPDPWSSDS zmm{k}{z},zmm,zmm/m512/m32bcst","EVEX.512.66.0F38.W0 53
/r","Valid","Valid","Invalid","AVX512VNNI","ModRM:reg (r, w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiply groups of 2 pairs of signed words in
zmm3/m512/m32bcst with corresponding signed words of zmm2, summing those
products and adding them to doubleword result in zmm1, with signed saturation,
under writemask k1."
diff --git a/disas/x86-data/x86_avx512vp2intersect.csv
b/disas/x86-data/x86_avx512vp2intersect.csv
new file mode 100644
index 000000000000..8e40ae87acee
--- /dev/null
+++ b/disas/x86-data/x86_avx512vp2intersect.csv
@@ -0,0 +1,7 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VP2INTERSECTD k{rs2},xmm,xmm/m128/m32bcst","EVEX.128.f2.0F38.W0 68
/r","Valid","Valid","Invalid","AVX512VL AVX512VP2INTERSECT","ModRM:reg
(w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Store, in an even/odd pair of
mask registers, the indicators of the locations of value matches between dwords
in xmm3/m128/m32bcst and xmm2."
+"VP2INTERSECTD k{rs2},ymm,ymm/m256/m32bcst","EVEX.256.f2.0F38.W0 68
/r","Valid","Valid","Invalid","AVX512VL AVX512VP2INTERSECT","ModRM:reg
(w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Store, in an even/odd pair of
mask registers, the indicators of the locations of value matches between dwords
in ymm3/m256/m32bcst and ymm2."
+"VP2INTERSECTD k{rs2},zmm,zmm/m512/m32bcst","EVEX.512.f2.0F38.W0 68
/r","Valid","Valid","Invalid","AVX512VP2INTERSECT","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Store, in an even/odd pair of mask registers,
the indicators of the locations of value matches between dwords in
zmm3/m512/m32bcst and zmm2."
+"VP2INTERSECTQ k{rs2},xmm,xmm/m128/m64bcst","EVEX.128.f2.0F38.W1 68
/r","Valid","Valid","Invalid","AVX512VL AVX512VP2INTERSECT","ModRM:reg
(w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Store, in an even/odd pair of
mask registers, the indicators of the locations of value matches between
quadwords in xmm3/m128/m64bcst and xmm2."
+"VP2INTERSECTQ k{rs2},ymm,ymm/m256/m64bcst","EVEX.256.f2.0F38.W1 68
/r","Valid","Valid","Invalid","AVX512VL AVX512VP2INTERSECT","ModRM:reg
(w)","EVEX.vvvv (r)","ModRM:r/m (r)","","Full","Store, in an even/odd pair of
mask registers, the indicators of the locations of value matches between
quadwords in ymm3/m256/m64bcst and ymm2."
+"VP2INTERSECTQ k{rs2},zmm,zmm/m512/m64bcst","EVEX.512.f2.0F38.W1 68
/r","Valid","Valid","Invalid","AVX512VP2INTERSECT","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Store, in an even/odd pair of mask registers,
the indicators of the locations of value matches between quadwords in
zmm3/m512/m64bcst and zmm2."
diff --git a/disas/x86-data/x86_avx512vpopcntdq.csv
b/disas/x86-data/x86_avx512vpopcntdq.csv
new file mode 100644
index 000000000000..8d5a6a92f06e
--- /dev/null
+++ b/disas/x86-data/x86_avx512vpopcntdq.csv
@@ -0,0 +1,7 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPOPCNTD xmm{k}{z},xmm/m128/m32bcst","EVEX.128.66.0F38.W0 55
/r","Valid","Valid","Invalid","AVX512VL AVX512VPOPCNTDQ","ModRM:reg
(w)","ModRM:r/m (r)","","","Full","Counts the number of bits set to one in
xmm2/m128 and puts the result in xmm1 with writemask k1."
+"VPOPCNTD ymm{k}{z},ymm/m256/m32bcst","EVEX.256.66.0F38.W0 55
/r","Valid","Valid","Invalid","AVX512VL AVX512VPOPCNTDQ","ModRM:reg
(w)","ModRM:r/m (r)","","","Full","Counts the number of bits set to one in
ymm2/m256 and puts the result in ymm1 with writemask k1."
+"VPOPCNTD zmm{k}{z},zmm/m512/m32bcst","EVEX.512.66.0F38.W0 55
/r","Valid","Valid","Invalid","AVX512VPOPCNTDQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full","Counts the number of bits set to one in zmm2/m512 and puts
the result in zmm1 with writemask k1."
+"VPOPCNTQ xmm{k}{z},xmm/m128/m64bcst","EVEX.128.66.0F38.W1 55
/r","Valid","Valid","Invalid","AVX512VL AVX512VPOPCNTDQ","ModRM:reg
(w)","ModRM:r/m (r)","","","Full","Counts the number of bits set to one in
xmm2/m128 and puts the result in xmm1 with writemask k1."
+"VPOPCNTQ ymm{k}{z},ymm/m256/m64bcst","EVEX.256.66.0F38.W1 55
/r","Valid","Valid","Invalid","AVX512VL AVX512VPOPCNTDQ","ModRM:reg
(w)","ModRM:r/m (r)","","","Full","Counts the number of bits set to one in
ymm2/m256 and puts the result in ymm1 with writemask k1."
+"VPOPCNTQ zmm{k}{z},zmm/m512/m64bcst","EVEX.512.66.0F38.W1 55
/r","Valid","Valid","Invalid","AVX512VPOPCNTDQ","ModRM:reg (w)","ModRM:r/m
(r)","","","Full","Counts the number of bits set to one in zmm2/m512 and puts
the result in zmm1 with writemask k1."
diff --git a/disas/x86-data/x86_avxneconvert.csv
b/disas/x86-data/x86_avxneconvert.csv
new file mode 100644
index 000000000000..03b1826b960a
--- /dev/null
+++ b/disas/x86-data/x86_avxneconvert.csv
@@ -0,0 +1,15 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VBCSTNEBF162PS xmm,m16","VEX.128.f3.0F38.W0 b1
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load one BF16 floating-point element from m16, convert to FP32
and store result in xmm1."
+"VBCSTNEBF162PS ymm,m16","VEX.256.f3.0F38.W0 b1
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load one BF16 floating-point element from m16, convert to FP32
and store result in ymm1."
+"VBCSTNESH2PS xmm,m16","VEX.128.66.0F38.W0 b1
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load one FP16 element from m16, convert to FP32, and store
result in xmm1."
+"VBCSTNESH2PS ymm,m16","VEX.256.66.0F38.W0 b1
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load one FP16 element from m16, convert to FP32, and store
result in ymm1."
+"VCVTNEEBF162PS xmm,m128","VEX.128.f3.0F38.W0 b0
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert even elements of packed BF16 values from m128 to FP32
values and store in xmm1."
+"VCVTNEEBF162PS ymm,m256","VEX.256.f3.0F38.W0 b0
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert even elements of packed BF16 values from m256 to FP32
values and store in ymm1."
+"VCVTNEEPH2PS xmm,m128","VEX.128.66.0F38.W0 b0
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert even elements of packed FP16 values from m128 to FP32
values and store in xmm1."
+"VCVTNEEPH2PS ymm,m256","VEX.256.66.0F38.W0 b0
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert even elements of packed FP16 values from m256 to FP32
values and store in ymm1."
+"VCVTNEOBF162PS xmm,m128","VEX.128.f2.0F38.W0 b0
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert odd elements of packed BF16 values from m128 to FP32
values and store in xmm1."
+"VCVTNEOBF162PS ymm,m256","VEX.256.f2.0F38.W0 b0
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert odd elements of packed BF16 values from m256 to FP32
values and store in ymm1."
+"VCVTNEOPH2PS xmm,m128","VEX.128.0F38.W0 b0
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert odd elements of packed FP16 values from m128 to FP32
values and store in xmm1."
+"VCVTNEOPH2PS ymm,m256","VEX.256.0F38.W0 b0
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert odd elements of packed FP16 values from m256 to FP32
values and store in ymm1."
+"VCVTNEPS2BF16 xmm,xmm/m128","VEX.128.f3.0F38.W0 72
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert packed single-precision floating-point values from
xmm2/m128 to packed BF16 values and store in xmm1."
+"VCVTNEPS2BF16 xmm,ymm/m256","VEX.256.f3.0F38.W0 72
/r","Valid","Valid","Invalid","AVXNECONVERT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert packed single-precision floating-point values from
ymm2/m256 to packed BF16 values and store in xmm1."
diff --git a/disas/x86-data/x86_avxvnni.csv b/disas/x86-data/x86_avxvnni.csv
new file mode 100644
index 000000000000..a675d1ee54f7
--- /dev/null
+++ b/disas/x86-data/x86_avxvnni.csv
@@ -0,0 +1,9 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPDPBUSD xmm,xmm,xmm/m128","VEX.128.66.0F38.W0 50
/r","Valid","Valid","Invalid","AVXVNNI","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
xmm3/m128 with corresponding unsigned bytes of xmm2, summing those products and
adding them to doubleword result in xmm1."
+"VPDPBUSD ymm,ymm,ymm/m256","VEX.256.66.0F38.W0 50
/r","Valid","Valid","Invalid","AVXVNNI","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
ymm3/m256 with corresponding unsigned bytes of ymm2, summing those products and
adding them to doubleword result in ymm1."
+"VPDPBUSDS xmm,xmm,xmm/m128","VEX.128.66.0F38.W0 51
/r","Valid","Valid","Invalid","AVXVNNI","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs signed bytes in
xmm3/m128 with corresponding unsigned bytes of xmm2, summing those products and
adding them to doubleword result, with signed saturation in xmm1."
+"VPDPBUSDS ymm,ymm,ymm/m256","VEX.256.66.0F38.W0 51
/r","Valid","Valid","Invalid","AVXVNNI","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs signed bytes in
ymm3/m256 with corresponding unsigned bytes of ymm2, summing those products and
adding them to doubleword result, with signed saturation in ymm1."
+"VPDPWSSD xmm,xmm,xmm/m128","VEX.128.66.0F38.W0 52
/r","Valid","Valid","Invalid","AVXVNNI","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 2 pairs signed words in
xmm3/m128 with corresponding signed words of xmm2, summing those products and
adding them to doubleword result in xmm1."
+"VPDPWSSD ymm,ymm,ymm/m256","VEX.256.66.0F38.W0 52
/r","Valid","Valid","Invalid","AVXVNNI","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 2 pairs signed words in
ymm3/m256 with corresponding signed words of ymm2, summing those products and
adding them to doubleword result in ymm1."
+"VPDPWSSDS xmm,xmm,xmm/m128","VEX.128.66.0F38.W0 53
/r","Valid","Valid","Invalid","AVXVNNI","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 2 pairs of signed words in
xmm3/m128 with corresponding signed words of xmm2, summing those products and
adding them to doubleword result in xmm1, with signed saturation."
+"VPDPWSSDS ymm,ymm,ymm/m256","VEX.256.66.0F38.W0 53
/r","Valid","Valid","Invalid","AVXVNNI","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 2 pairs of signed words in
ymm3/m256 with corresponding signed words of ymm2, summing those products and
adding them to doubleword result in ymm1, with signed saturation."
diff --git a/disas/x86-data/x86_avxvnniint8.csv
b/disas/x86-data/x86_avxvnniint8.csv
new file mode 100644
index 000000000000..f0428f43cb94
--- /dev/null
+++ b/disas/x86-data/x86_avxvnniint8.csv
@@ -0,0 +1,13 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VPDPBSSD xmm,xmm,xmm/m128","VEX.128.f2.0F38.W0 50
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
xmm3/m128 with corresponding signed bytes of xmm2, summing those products and
adding them to the doubleword result in xmm1."
+"VPDPBSSD ymm,ymm,ymm/m256","VEX.256.f2.0F38.W0 50
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
ymm3/m256 with corresponding signed bytes of ymm2, summing those products and
adding them to the doubleword result in ymm1."
+"VPDPBSSDS xmm,xmm,xmm/m128","VEX.128.f2.0F38.W0 51
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
xmm3/m128 with corresponding signed bytes of xmm2, summing those products and
adding them to the doubleword result, with signed saturation in xmm1."
+"VPDPBSSDS ymm,ymm,ymm/m256","VEX.256.f2.0F38.W0 51
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
ymm3/m256 with corresponding signed bytes of ymm2, summing those products and
adding them to the doubleword result, with signed saturation in ymm1."
+"VPDPBSUD xmm,xmm,xmm/m128","VEX.128.f3.0F38.W0 50
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
xmm3/m128 with corresponding unsigned bytes of xmm2, summing those products and
adding them to doubleword result in xmm1."
+"VPDPBSUD ymm,ymm,ymm/m256","VEX.256.f3.0F38.W0 50
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
ymm3/m256 with corresponding unsigned bytes of ymm2, summing those products and
adding them to doubleword result in ymm1."
+"VPDPBSUDS xmm,xmm,xmm/m128","VEX.128.f3.0F38.W0 51
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
xmm3/m128 with corresponding unsigned bytes of xmm2, summing those products and
adding them to doubleword result, with signed saturation in xmm1."
+"VPDPBSUDS ymm,ymm,ymm/m256","VEX.256.f3.0F38.W0 51
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of signed bytes in
ymm3/m256 with corresponding unsigned bytes of ymm2, summing those products and
adding them to doubleword result, with signed saturation in ymm1."
+"VPDPBUUD xmm,xmm,xmm/m128","VEX.128.0F38.W0 50
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of unsigned bytes in
xmm3/m128 with corresponding unsigned bytes of xmm2, summing those products and
adding them to doubleword result in xmm1."
+"VPDPBUUD ymm,ymm,ymm/m256","VEX.256.0F38.W0 50
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of unsigned bytes in
ymm3/m256 with corresponding unsigned bytes of ymm2, summing those products and
adding them to doubleword result in ymm1."
+"VPDPBUUDS xmm,xmm,xmm/m128","VEX.128.0F38.W0 51
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of unsigned bytes in
xmm3/m128 with corresponding unsigned bytes of xmm2, summing those products and
adding them to the doubleword result, with unsigned saturation in xmm1."
+"VPDPBUUDS ymm,ymm,ymm/m256","VEX.256.0F38.W0 51
/r","Valid","Valid","Invalid","AVXVNNIINT8","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply groups of 4 pairs of unsigned bytes in
ymm3/m256 with corresponding unsigned bytes of ymm2, summing those products and
adding them to the doubleword result, with unsigned saturation in ymm1."
diff --git a/disas/x86-data/x86_base.csv b/disas/x86-data/x86_base.csv
new file mode 100644
index 000000000000..335d2079a3e8
--- /dev/null
+++ b/disas/x86-data/x86_base.csv
@@ -0,0 +1,549 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"AAA al","LEX.WN 37","Invalid","Valid","Valid","","RAX (r,
w)","","","","","ASCII adjust AL after addition."
+"AAD ax, ib","LEX.WN D5 ib","Invalid","Valid","Valid","","RAX (r,
w)","ib","","","","Adjust AX before division to number base ib."
+"AAM ax, ib","LEX.WN D4 ib","Invalid","Valid","Valid","","RAX (r,
w)","ib","","","","Adjust AX after multiply to number base ib."
+"AAS al","LEX.WN 3F","Invalid","Valid","Valid","","RAX (r,
w)","","","","","ASCII adjust AL after subtraction."
+"ADC r8/m8, r8","LEX.WB 10 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","Add with carry byte register to r8/m8."
+"ADC rw/mw, rw","LEX.WX 11 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","Add with carry r to r/m."
+"ADC r8, r8/m8","LEX.WB 12 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Add with carry r8/m8 to byte register."
+"ADC rw, rw/mw","LEX.WX 13 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Add with carry r/m to r."
+"ADC al, ib","LEX.WN 14 ib","Valid","Valid","Valid","","RAX (r,
w)","ib","","","","Add with carry ib to AL."
+"ADC aw, iw","LEX.WX 15 iw","Valid","Valid","Valid","","RAX (r,
w)","iw","","","","Add with carry iw to EAX."
+"ADC r8/m8, ib","LEX.WB 80 /2 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","Add with carry ib to r8/m8."
+"ADC rw/mw, iw","LEX.WX 81 /2 iw lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","iw","","","","Add with CF iw to r/m."
+"ADC rw/mw, ib","LEX.WX 83 /2 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","Add with CF sign-extended ib into r/m."
+"ADD r8/m8, r8","LEX.WB 00 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","Add r8 to r8/m8."
+"ADD rw/mw, rw","LEX.WX 01 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","Add r to r/m."
+"ADD r8, r8/m8","LEX.WB 02 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Add r8/m8 to r8."
+"ADD rw, rw/mw","LEX.WX 03 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Add r/m to r."
+"ADD al, ib","LEX.WN 04 ib","Valid","Valid","Valid","","RAX (r,
w)","ib","","","","Add ib to AL."
+"ADD aw, iw","LEX.WX 05 iw","Valid","Valid","Valid","","RAX (r,
w)","iw","","","","Add sign-extended iw to AX/EAX/RAX."
+"ADD r8/m8, ib","LEX.WB 80 /0 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","Add ib to r8/m8."
+"ADD rw/mw, iw","LEX.WX 81 /0 iw lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","iw","","","","Add sign-extended iw to r/m."
+"ADD rw/mw, ib","LEX.WX 83 /0 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","Add sign-extended ib to r/m."
+"AND r8/m8, r8","LEX.WB 20 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","r8/m8 AND r8."
+"AND rw/mw, rw","LEX.WX 21 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","r/m AND r16."
+"AND r8, r8/m8","LEX.WB 22 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","r8 AND r8/m8."
+"AND rw, rw/mw","LEX.WX 23 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","r AND r/m."
+"AND al, ib","LEX.WN 24 ib","Valid","Valid","Valid","","RAX (r,
w)","ib","","","","AL AND ib."
+"AND aw, iw","LEX.WX 25 iw","Valid","Valid","Valid","","RAX (r,
w)","iw","","","","AX/EAX/RAX AND sign-extend iw."
+"AND r8/m8, ib","LEX.WB 80 /4 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","r8/m8 AND ib."
+"AND rw/mw, iw","LEX.WX 81 /4 iw lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","iw","","","","r/m AND sign-extend iw."
+"AND rw/mw, ib","LEX.WX 83 /4 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","r/m AND sign-extend ib."
+"ARPL r16/m16, r16","LEX.wn 63 /r","Invalid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Adjust RPL of r/m16 to not less than RPL of r16."
+"BOUND r16, mem","LEX.WX 62 /r o16","Invalid","Valid","Valid","","ModRM:reg
(r)","ModRM:r/m (r, ModRM:[7:6] must not be 11b)","","","","Check if r (array
index) is within bounds specified by m32&32."
+"BOUND r32, mem","LEX.WX 62 /r o32","Invalid","Valid","Valid","","ModRM:reg
(r)","ModRM:r/m (r, ModRM:[7:6] must not be 11b)","","","","Check if r (array
index) is within bounds specified by m32&32."
+"BSF rw, rw/mw","LEX.0F.WX BC /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Bit scan forward on rw/mw."
+"BSR rw, rw/mw","LEX.0F.WX BD /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Bit scan reverse on rw/mw."
+"BSWAP r32","LEX.0F.W0 C8+r","Valid","Valid","Valid","","opcode +r (r,
w)","","","","","Reverses the byte order of a 32-bit register."
+"BSWAP r64","LEX.0F.W1 C8+r","Valid","Invalid","Invalid","","opcode +r (r,
w)","","","","","Reverses the byte order of a 64-bit register."
+"BT rw/mw, rw","LEX.0F.WX A3 /r","Valid","Valid","Valid","","ModRM:r/m
(r)","ModRM:reg (r)","","","","Store selected bit in CF flag."
+"BT rw/mw, ib","LEX.0F.WX BA /4 ib","Valid","Valid","Valid","","ModRM:r/m
(r)","ib","","","","Store selected bit in CF flag."
+"BTC rw/mw, ib","LEX.0F.WX BA /7 ib
lock","Valid","Valid","Valid","","ModRM:r/m (r, w)","ib","","","","Store
selected bit in CF flag and complement."
+"BTC rw/mw, rw","LEX.0F.WX BB /r lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ModRM:reg (r)","","","","Store selected bit in CF flag and complement."
+"BTR rw/mw, rw","LEX.0F.WX B3 /r lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ModRM:reg (r)","","","","Store selected bit in CF flag and clear."
+"BTR rw/mw, ib","LEX.0F.WX BA /6 ib
lock","Valid","Valid","Valid","","ModRM:r/m (r, w)","ib","","","","Store
selected bit in CF flag and clear."
+"BTS rw/mw, rw","LEX.0F.WX AB /r lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ModRM:reg (r)","","","","Store selected bit in CF flag and set."
+"BTS rw/mw, ib","LEX.0F.WX BA /5 ib
lock","Valid","Valid","Valid","","ModRM:r/m (r, w)","ib","","","","Store
selected bit in CF flag and set."
+"CALL relw","LEX.WX E8 iwd","Valid","Valid","Valid","","iwd","RSP (r, w,
i)","","","","Call near, relative, displacement relative to next instruction.
32-bit displacement sign extended to 64-bits in 64-bit mode."
+"CALL rw/mw","LEX.WW FF /2","Valid","Valid","Valid","","ModRM:r/m (r)","RSP
(r, w, i)","","","","Call near, absolute indirect, address given in rw/mw."
+"LCALL far16:16","LEX.WW 9A iwd i16
o16","Invalid","Valid","Valid","","imm","ime","RSP (r, w, i)","","","Call far,
absolute, address given in operand."
+"LCALL far16:32","LEX.WW 9A iwd i16
o32","Invalid","Valid","Valid","","imm","ime","RSP (r, w, i)","","","Call far,
absolute, address given in operand."
+"LCALL memfar16:16","LEX.WW FF /3 o16","Valid","Valid","Valid","","ModRM:r/m
(r)","RSP (r, w, i)","","","","Call far, absolute indirect address given in
m16:16. In 32-bit mode: if selector points to a gate, then RIP = 32-bit zero
extended displacement taken from gate; else RIP = zero extended 16-bit offset
from far pointer referenced in the instruction."
+"LCALL memfar16:32","LEX.WW FF /3 o32","Invalid","Valid","Valid","","ModRM:r/m
(r)","RSP (r, w, i)","","","","In 64-bit mode: If selector points to a gate,
then RIP = 64-bit displacement taken from gate; else RIP = zero extended 32-bit
offset from far pointer referenced in the instruction."
+"LCALL memfar16:64","LEX.WW FF /3
o64","Valid","Invalid","Invalid","","ModRM:r/m (r)","RSP (r, w,
i)","","","","In 64-bit mode: If selector points to a gate, then RIP = 64-bit
displacement taken from gate; else RIP = 64-bit offset from far pointer
referenced in the instruction."
+"CBW","LEX.WX 98 o16","Valid","Valid","Valid","","RAX (r, w)","","","","","AX
:= sign-extend of AL."
+"CDQ","LEX.WX 99 o32","Valid","Valid","Valid","","RDX (w)","RAX (r,
w)","","","","EDX:EAX := sign-extend of EAX."
+"CDQE","LEX.WX 98 o64","Valid","Invalid","Invalid","","RAX (r,
w)","","","","","RAX := sign-extend of EAX."
+"CLC","LEX.WN F8","Valid","Valid","Valid","","","","","","","Clear CF flag."
+"CLD","LEX.WN FC","Valid","Valid","Valid","","","","","","","Clear DF flag."
+"CLFLUSH m8","LEX.0F.W0 AE /7","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Flushes cache line containing m8."
+"CLFLUSHOPT m8","LEX.66.0F.W0 AE /7","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Flushes cache line containing m8."
+"CLI","LEX.WN FA","Valid","Valid","Valid","","","","","","","Clear interrupt
flag; interrupts disabled when interrupt flag cleared."
+"CLTS","LEX.0F.W0 06","Valid","Valid","Valid","","","","","","","Clears TS
flag in CR0."
+"CMC","LEX.WN F5","Valid","Valid","Valid","","","","","","","Complement CF
flag."
+"CMOVA rw, rw/mw","LEX.0F.WX 47 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if above (CF=0 and ZF=0)."
+"CMOVAE rw, rw/mw","LEX.0F.WX 43 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if above or equal (CF=0)."
+"CMOVB rw, rw/mw","LEX.0F.WX 42 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if below (CF=1)."
+"CMOVBE rw, rw/mw","LEX.0F.WX 46 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if below or equal (CF=1 or ZF=1)."
+"CMOVC rw, rw/mw","LEX.0F.WX 42 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if carry (CF=1)."
+"CMOVE rw, rw/mw","LEX.0F.WX 44 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if equal (ZF=1)."
+"CMOVG rw, rw/mw","LEX.0F.WX 4F /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if greater (ZF=0 and SF=OF)."
+"CMOVGE rw, rw/mw","LEX.0F.WX 4D /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if greater or equal (SF=OF)."
+"CMOVL rw, rw/mw","LEX.0F.WX 4C /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if less (SF!=OF)."
+"CMOVLE rw, rw/mw","LEX.0F.WX 4E /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if less or equal (ZF=1 or SF!=OF)."
+"CMOVNA rw, rw/mw","LEX.0F.WX 46 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not above (CF=1 or ZF=1)."
+"CMOVNAE rw, rw/mw","LEX.0F.WX 42 /r","Valid","Valid","Valid","","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Move if not above or equal (CF=1)."
+"CMOVNB rw, rw/mw","LEX.0F.WX 43 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not below (CF=0)."
+"CMOVNBE rw, rw/mw","LEX.0F.WX 47 /r","Valid","Valid","Valid","","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Move if not below or equal (CF=0 and ZF=0)."
+"CMOVNC rw, rw/mw","LEX.0F.WX 43 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not carry (CF=0)."
+"CMOVNE rw, rw/mw","LEX.0F.WX 45 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not equal (ZF=0)."
+"CMOVNG rw, rw/mw","LEX.0F.WX 4E /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not greater (ZF=1 or SF!=OF)."
+"CMOVNGE rw, rw/mw","LEX.0F.WX 4C /r","Valid","Valid","Valid","","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Move if not greater or equal (SF!=OF)."
+"CMOVNL rw, rw/mw","LEX.0F.WX 4D /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not less (SF=OF)."
+"CMOVNLE rw, rw/mw","LEX.0F.WX 4F /r","Valid","Valid","Valid","","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Move if not less or equal (ZF=0 and SF=OF)."
+"CMOVNO rw, rw/mw","LEX.0F.WX 41 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not overflow (OF=0)."
+"CMOVNP rw, rw/mw","LEX.0F.WX 4B /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not parity (PF=0)."
+"CMOVNS rw, rw/mw","LEX.0F.WX 49 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not sign (SF=0)."
+"CMOVNZ rw, rw/mw","LEX.0F.WX 45 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if not zero (ZF=0)."
+"CMOVO rw, rw/mw","LEX.0F.WX 40 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if overflow (OF=1)."
+"CMOVP rw, rw/mw","LEX.0F.WX 4A /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if parity (PF=1)."
+"CMOVPE rw, rw/mw","LEX.0F.WX 4A /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Move if parity even (PF=1)."
+"CMP r8/m8, r8","LEX.WB 38 /r","Valid","Valid","Valid","","ModRM:r/m
(r)","ModRM:reg (r)","","","","Compare r8 with r8/m8."
+"CMP rw/mw, rw","LEX.WX 39 /r","Valid","Valid","Valid","","ModRM:r/m
(r)","ModRM:reg (r)","","","","Compare rw with rw/mw."
+"CMP r8, r8/m8","LEX.WB 3A /r","Valid","Valid","Valid","","ModRM:reg
(r)","ModRM:r/m (r)","","","","Compare r8/m8 with r8."
+"CMP rw, rw/mw","LEX.WX 3B /r","Valid","Valid","Valid","","ModRM:reg
(r)","ModRM:r/m (r)","","","","Compare r/m with rw."
+"CMP al, ib","LEX.WN 3C ib","Valid","Valid","Valid","","RAX
(r)","ib","","","","Compare ib with AL."
+"CMP aw, iw","LEX.WX 3D iw","Valid","Valid","Valid","","RAX
(r)","iw","","","","Compare sign-extended iw with AX/EAX/RAX."
+"CMP r8/m8, ib","LEX.WB 80 /7 ib","Valid","Valid","Valid","","ModRM:r/m
(r)","ib","","","","Compare ib with r8/m8."
+"CMP rw/mw, iw","LEX.WX 81 /7 iw","Valid","Valid","Valid","","ModRM:r/m
(r)","iw","","","","Compare iw with rw/mw."
+"CMP rw/mw, ib","LEX.WX 83 /7 ib","Valid","Valid","Valid","","ModRM:r/m
(r)","ib","","","","Compare ib with rw/mw."
+"CMPSB psi, pdi","LEX.WB A6 rep","Valid","Valid","Valid","","RDI (r)","RSI
(r)","","","","Compare byte at address DS:SI/ESI/RSI with byte at address
ES:DI/EDI/RDI; The status flags are set accordingly."
+"CMPSD psi, pdi","LEX.WX A7 o32 rep","Valid","Valid","Valid","","RDI (r)","RSI
(r)","","","","Compare dword at address DS:SI/ESI/RSI with word at address
ES:DI/EDI/RDI; The status flags are set accordingly."
+"CMPSQ psi, pdi","LEX.WX A7 o64 rep","Valid","Invalid","Invalid","","RDI
(r)","RSI (r)","","","","Compares qword at address DS:RSI with quadword at
address ES:RDI and sets the status flags accordingly."
+"CMPSW psi, pdi","LEX.WX A7 o16 rep","Valid","Valid","Valid","","RDI (r)","RSI
(r)","","","","Compare word at address DS:SI/ESI/RSI with word at address
ES:DI/EDI/RDI; The status flags are set accordingly."
+"CMPXCHG r8/m8, r8","LEX.0F.WB B0 /r
lock","Valid","Valid","Valid","","ModRM:r/m (r, w)","ModRM:reg (r)","RAX (r,
w)","","","Compare AL with r8/m8. If equal, ZF is set and r8 is loaded into
r8/m8. Else, clear ZF and load r8/m8 into AL."
+"CMPXCHG rw/mw, rw","LEX.0F.WX B1 /r
lock","Valid","Valid","Valid","","ModRM:r/m (r, w)","ModRM:reg (r)","RAX (r,
w)","","","Compare AX/EAX/RAX with rw/mw. If equal, ZF is set and rw is loaded
into rw/mw. Else, clear ZF and load r/m into EAX."
+"CMPXCHG16B m128","LEX.0F.W1 C7 /1
lock","Valid","Invalid","Invalid","","ModRM:r/m (r, w)","RDX (r, w)","RAX (r,
w)","","","Compare RDX:RAX with m128. If equal, set ZF and load RCX:RBX into
m128. Else, clear ZF and load m128 into RDX:RAX."
+"CMPXCHG8B m64","LEX.0F.W0 C7 /1 lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","RDX (r, w)","RAX (r, w)","","","Compare EDX:EAX with m64. If equal,
set ZF and load ECX:EBX into m64. Else, clear ZF and load m64 into EDX:EAX."
+"CPUID","LEX.0F.W0 A2","Valid","Valid","Valid","","","","","","","Returns
processor identification and feature information to the EAX, EBX, ECX, and EDX
registers, as determined by input entered in EAX (in some cases, ECX as well)."
+"CQO","LEX.WX 99 o64","Valid","Invalid","Invalid","","RDX (w)","RAX (r,
w)","","","","RDX:RAX:= sign-extend of RAX."
+"CRC32 rw, r8/m8","LEX.F2.0F38.WX F0 /r","Valid","Valid","Valid","","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Accumulate CRC32 on r8/m8."
+"CRC32 rw, rw/mw","LEX.F2.0F38.WX F1 /r","Valid","Valid","Valid","","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Accumulate CRC32 on r/m."
+"CVTPD2PI mm, xmm/m128","LEX.66.0F.W0 2D
/r","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed double-precision floating-point values from
xmm/m128 to two packed signed doubleword integers in mm."
+"CVTPI2PD xmm, mm/m64","LEX.66.0F.W0 2A
/r","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed signed doubleword integers from mm/mem64 to
two packed double-precision floating-point values in xmm."
+"CVTPI2PS xmm, mm/m64","LEX.0F.W0 2A /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Convert two signed doubleword integers from
mm/m64 to two single-precision floating-point values in xmm."
+"CVTPS2PI mm, xmm/m64","LEX.0F.W0 2D /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Convert two packed single-precision
floating-point values from xmm/m64 to two packed signed doubleword integers in
mm."
+"CVTTPD2PI mm, xmm/m128","LEX.66.0F.W0 2C
/r","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packer double-precision floating-point values from
xmm/m128 to two packed signed doubleword integers in mm using truncation."
+"CVTTPS2PI mm, xmm/m64","LEX.0F.W0 2C
/r","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two single-precision floating-point values from xmm/m64
to two signed doubleword signed integers in mm using truncation."
+"CWD","LEX.WX 99 o16","Valid","Valid","Valid","","RDX (w)","RAX (r,
w)","","","","DX:AX := sign-extend of AX."
+"CWDE","LEX.WX 98 o32","Valid","Valid","Valid","","RAX (r,
w)","","","","","EAX := sign-extend of AX."
+"DAA al","LEX.WN 27","Invalid","Valid","Valid","","RAX (r,
w)","","","","","Decimal adjust AL after addition."
+"DAS al","LEX.WN 2F","Invalid","Valid","Valid","","RAX (r,
w)","","","","","Decimal adjust AL after subtraction."
+"DEC rw","LEX.WW 48+r","Invalid","Valid","Valid","","opcode +r (r,
w)","","","","","Decrement rw by 1."
+"DEC r8/m8","LEX.WB FE /1 lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","","","","","Decrement r8/m8 by 1."
+"DEC rw/mw","LEX.WX FF /1 lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","","","","","Decrement r/m by 1."
+"DIV r8/m8","LEX.WB F6 /6","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Unsigned divide AX by r8/m8, with result stored in AL :=
Quotient, AH := Remainder."
+"DIV rw/mw","LEX.WX F7 /6","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Unsigned divide DX/EDX/RDX:AX/EAX/RAX by r/m, with result
stored in AX/EAX/RAX := Quotient, DX/EDX/RDX := Remainder."
+"EMMS","LEX.0F.W0 77","Valid","Valid","Valid","","","","","","","Set the x87
FPU tag word to empty."
+"ENTER i16, ib","LEX.WW C8 i16 ib","Valid","Valid","Valid","","imm","ime","RSP
(r, w, i)","RBP (r, w, i)","","Create a stack frame with nested pointers for a
procedure."
+"FXRSTOR64 mem","LEX.0F.W1 AE /1","Valid","Invalid","Invalid","","ModRM:r/m
(r, ModRM:[7:6] must not be 11b)","","","","","Restore the x87 FPU, MMX, XMM,
and MXCSR register state from m512byte."
+"FXSAVE64 mem","LEX.0F.W1 AE /0","Valid","Invalid","Invalid","","ModRM:r/m (w,
ModRM:[7:6] must not be 11b)","","","","","Save the x87 FPU, MMX, XMM, and
MXCSR register state to m512byte."
+"HLT","LEX.WN F4","Valid","Valid","Valid","","","","","","","Halt"
+"IDIV r8/m8","LEX.WB F6 /7","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Signed divide AX by r8/m8, with result stored in: AL :=
Quotient, AH := Remainder."
+"IDIV rw/mw","LEX.WX F7 /7","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Signed divide DX/EDX/RDX:AX/EAX/RAX by r/m, with result
stored in AX/EAX/RAX := Quotient, DX/EDX/RDX := Remainder."
+"IMUL rw, rw/mw, iw","LEX.WX 69 /r iw","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","iw","","","register := r/m * sign-extended immediate."
+"IMUL rw, rw/mw, ib","LEX.WX 6B /r ib","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","ib","","","register := r/m * sign-extended immediate."
+"IMUL rw, rw/mw","LEX.0F.W0 AF /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","register := register * r/m."
+"IMUL r8/m8","LEX.WB F6 /5","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","AX:= AL * r/m byte."
+"IMUL rw/mw","LEX.WX F7 /5","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","DX/EDX/RDX:AX/EAX/RAX := AX/EAX/RAX * r/m."
+"IN al, ib","LEX.WB E4 ib","Valid","Valid","Valid","","RAX
(w)","ib","","","","Input byte from ib I/O port address into AL."
+"IN aw, ib","LEX.WX E5 ib o32","Valid","Valid","Valid","","RAX
(w)","ib","","","","Input word from ib I/O port address into EAX."
+"IN al, dx","LEX.WB EC","Valid","Valid","Valid","","RAX (w)","RDX
(r)","","","","Input byte from I/O port in DX into AL."
+"IN aw, dx","LEX.WX ED o32","Valid","Valid","Valid","","RAX (w)","RDX
(r)","","","","Input word from I/O port in DX into EAX."
+"INC rw","LEX.WW 40+r","Invalid","Valid","Valid","","opcode +r (r,
w)","","","","","Increment word register by 1."
+"INC r8/m8","LEX.WB FE /0 lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","","","","","Increment r/m byte by 1."
+"INC rw/mw","LEX.WX FF /0 lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","","","","","Increment r/m doubleword by 1."
+"INSB pdi, dx","LEX.WB 6C rep","Valid","Valid","Valid","","RDI (r)","RDX
(r)","","","","Input byte from I/O port in DX into memory location specified in
ES:(E)DI or RDI."
+"INSD pdi, dx","LEX.WX 6D o32 rep","Valid","Valid","Valid","","RDI (r)","RDX
(r)","","","","Input doubleword from I/O port in DX into memory location
specified in ES:(E)DI or RDI."
+"INSW pdi, dx","LEX.WX 6D o16 rep","Valid","Valid","Valid","","RDI (r)","RDX
(r)","","","","Input word from I/O port in DX into memory location specified in
ES:(E)DI or RDI."
+"INT ib","LEX.WN CD ib","Valid","Valid","Valid","","ib","","","","","Generate
software interrupt with vector specified by immediate byte."
+"INT1","LEX.WN F1","Valid","Valid","Valid","","","","","","","Generate debug
trap."
+"INT3","LEX.WN CC","Valid","Valid","Valid","","","","","","","Interrupt 3,
trap to debugger."
+"INTO","LEX.WN CE","Invalid","Valid","Valid","","","","","","","Interrupt 4,
if overflow flag is 1."
+"INVD","LEX.0F.W0 08","Valid","Valid","Valid","","","","","","","Flush
internal caches; initiate flushing of external caches."
+"INVLPG m8","LEX.0F.W0 01 /7","Valid","Valid","Valid","","ModRM:r/m (r,
ModRM:[7:6] must not be 11b)","","","","","Invalidate TLB entries for page
containing m."
+"IRETD","LEX.WX CF o32","Valid","Valid","Valid","","","","","","","Interrupt
return (32-bit operand size)."
+"IRETQ","LEX.WX CF
o64","Valid","Invalid","Invalid","","","","","","","Interrupt return (64-bit
operand size)."
+"IRETW","LEX.WX CF o16","Valid","Valid","Valid","","","","","","","Interrupt
return (16-bit operand size)."
+"JA rel8","LEX.WN 77 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if above (CF=0 and ZF=0)."
+"JA relw","LEX.0F.W0 87 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if above (CF=0 and ZF=0)."
+"JAE rel8","LEX.WN 73 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if above or equal (CF=0)."
+"JAE relw","LEX.0F.W0 83 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if above or equal (CF=0)."
+"JB rel8","LEX.WN 72 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if below (CF=1)."
+"JB relw","LEX.0F.W0 82 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if below (CF=1)."
+"JBE rel8","LEX.WN 76 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if below or equal (CF=1 or ZF=1)."
+"JBE relw","LEX.0F.W0 86 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if below or equal (CF=1 or ZF=1)."
+"JC rel8","LEX.WN 72 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if carry (CF=1)."
+"JC relw","LEX.0F.W0 82 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if carry (CF=1)."
+"JCXZ rel8","LEX.WN E3 ib
a16","Invalid","Valid","Valid","","ib","","","","","Jump short if CX register
is 0."
+"JE rel8","LEX.WN 74 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if equal (ZF=1)."
+"JE relw","LEX.0F.W0 84 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if equal (ZF=1)."
+"JECXZ rel8","LEX.WN E3 ib
a32","Valid","Valid","Valid","","ib","","","","","Jump short if ECX register is
0."
+"JG rel8","LEX.WN 7F ib","Valid","Valid","Valid","","ib","","","","","Jump
short if greater (ZF=0 and SF=OF)."
+"JG relw","LEX.0F.W0 8F iw","Valid","Valid","Valid","","iw","","","","","Jump
near if greater (ZF=0 and SF=OF)."
+"JGE rel8","LEX.WN 7D ib","Valid","Valid","Valid","","ib","","","","","Jump
short if greater or equal (SF=OF)."
+"JGE relw","LEX.0F.W0 8D iw","Valid","Valid","Valid","","iw","","","","","Jump
near if greater or equal (SF=OF)."
+"JL rel8","LEX.WN 7C ib","Valid","Valid","Valid","","ib","","","","","Jump
short if less (SF!=OF)."
+"JL relw","LEX.0F.W0 8C iw","Valid","Valid","Valid","","iw","","","","","Jump
near if less (SF!=OF)."
+"JLE rel8","LEX.WN 7E ib","Valid","Valid","Valid","","ib","","","","","Jump
short if less or equal (ZF=1 or SF!=OF)."
+"JLE relw","LEX.0F.W0 8E iw","Valid","Valid","Valid","","iw","","","","","Jump
near if less or equal (ZF=1 or SF!=OF)."
+"JMP relw","LEX.WX E9 iwd","Valid","Valid","Valid","","iwd","","","","","Jump
near, relative, RIP = RIP + 32-bit displacement sign extended to 64-bits"
+"JMP rel8","LEX.WN EB ib","Valid","Valid","Valid","","ib","","","","","Jump
short, RIP = RIP + 8-bit displacement sign extended to 64-bits"
+"JMP rw/mw","LEX.WW FF /4","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Jump near, absolute indirect, address given in r/m."
+"LJMP far16:16","LEX.WW EA iwd i16
o16","Invalid","Valid","Valid","","imm","ime","","","","Jump far, absolute,
address given in operand"
+"LJMP far16:32","LEX.WW EA iwd i16
o32","Invalid","Valid","Valid","","imm","ime","","","","Jump far, absolute,
address given in operand"
+"LJMP memfar16:16","LEX.WW FF /5 o16","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Jump far, absolute indirect, address given in m16:16"
+"LJMP memfar16:32","LEX.WW FF /5 o32","Invalid","Valid","Valid","","ModRM:r/m
(r)","","","","","Jump far, absolute indirect, address given in m16:32."
+"LJMP memfar16:64","LEX.WW FF /5
o64","Valid","Invalid","Invalid","","ModRM:r/m (r)","","","","","Jump far,
absolute indirect, address given in m16:64."
+"JNA rel8","LEX.WN 76 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not above (CF=1 or ZF=1)."
+"JNA relw","LEX.0F.W0 86 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not above (CF=1 or ZF=1)."
+"JNAE rel8","LEX.WN 72 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not above or equal (CF=1)."
+"JNAE relw","LEX.0F.W0 82
iw","Valid","Valid","Valid","","iw","","","","","Jump near if not above or
equal (CF=1)."
+"JNB rel8","LEX.WN 73 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not below (CF=0)."
+"JNB relw","LEX.0F.W0 83 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not below (CF=0)."
+"JNBE rel8","LEX.WN 77 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not below or equal (CF=0 and ZF=0)."
+"JNBE relw","LEX.0F.W0 87
iw","Valid","Valid","Valid","","iw","","","","","Jump near if not below or
equal (CF=0 and ZF=0)."
+"JNC rel8","LEX.WN 73 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not carry (CF=0)."
+"JNC relw","LEX.0F.W0 83 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not carry (CF=0)."
+"JNE rel8","LEX.WN 75 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not equal (ZF=0)."
+"JNE relw","LEX.0F.W0 85 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not equal (ZF=0)."
+"JNG rel8","LEX.WN 7E ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not greater (ZF=1 or SF!=OF)."
+"JNG relw","LEX.0F.W0 8E iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not greater (ZF=1 or SF!=OF)."
+"JNGE rel8","LEX.WN 7C ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not greater or equal (SF!=OF)."
+"JNGE relw","LEX.0F.W0 8C
iw","Valid","Valid","Valid","","iw","","","","","Jump near if not greater or
equal (SF!=OF)."
+"JNL rel8","LEX.WN 7D ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not less (SF=OF)."
+"JNL relw","LEX.0F.W0 8D iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not less (SF=OF)."
+"JNLE rel8","LEX.WN 7F ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not less or equal (ZF=0 and SF=OF)."
+"JNLE relw","LEX.0F.W0 8F
iw","Valid","Valid","Valid","","iw","","","","","Jump near if not less or equal
(ZF=0 and SF=OF)."
+"JNO rel8","LEX.WN 71 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not overflow (OF=0)."
+"JNO relw","LEX.0F.W0 81 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not overflow (OF=0)."
+"JNP rel8","LEX.WN 7B ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not parity (PF=0)."
+"JNP relw","LEX.0F.W0 8B iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not parity (PF=0)."
+"JNS rel8","LEX.WN 79 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not sign (SF=0)."
+"JNS relw","LEX.0F.W0 89 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not sign (SF=0)."
+"JNZ rel8","LEX.WN 75 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if not zero (ZF=0)."
+"JNZ relw","LEX.0F.W0 85 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if not zero (ZF=0)."
+"JO rel8","LEX.WN 70 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if overflow (OF=1)."
+"JO relw","LEX.0F.W0 80 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if overflow (OF=1)."
+"JP rel8","LEX.WN 7A ib","Valid","Valid","Valid","","ib","","","","","Jump
short if parity (PF=1)."
+"JP relw","LEX.0F.W0 8A iw","Valid","Valid","Valid","","iw","","","","","Jump
near if parity (PF=1)."
+"JPE rel8","LEX.WN 7A ib","Valid","Valid","Valid","","ib","","","","","Jump
short if parity even (PF=1)."
+"JPE relw","LEX.0F.W0 8A iw","Valid","Valid","Valid","","iw","","","","","Jump
near if parity even (PF=1)."
+"JPO rel8","LEX.WN 7B ib","Valid","Valid","Valid","","ib","","","","","Jump
short if parity odd (PF=0)."
+"JPO relw","LEX.0F.W0 8B iw","Valid","Valid","Valid","","iw","","","","","Jump
near if parity odd (PF=0)."
+"JRCXZ rel8","LEX.WN E3 ib
a64","Valid","Invalid","Invalid","","ib","","","","","Jump short if RCX
register is 0."
+"JS rel8","LEX.WN 78 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if sign (SF=1)."
+"JZ rel8","LEX.WN 74 ib","Valid","Valid","Valid","","ib","","","","","Jump
short if zero (ZF = 1)."
+"JZ relw","LEX.0F.W0 84 iw","Valid","Valid","Valid","","iw","","","","","Jump
near if 0 (ZF=1)."
+"LAHF ah","LEX.WN 9F","Invalid","Valid","Valid","","RAX
(w)","","","","","Load: AH := EFLAGS(SF:ZF:0:AF:0:PF:1:CF)."
+"LAR rw, r16/m16","LEX.0F.W0 02 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","reg := access rights referenced by r/m"
+"LDS r16, memfar16:16","LEX.WX C5 /r
o16","Invalid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load DS:r16 with far pointer from memory."
+"LDS r32, memfar16:32","LEX.WX C5 /r
o32","Invalid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load DS:r32 with far pointer from memory."
+"LEA rw, m","LEX.WX 8D /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Store effective address for m in register r."
+"LEAVE","LEX.WW C9","Valid","Valid","Valid","","RSP (r, w, i)","RBP (r, w,
i)","","","","Set SP/ESP/RSP to BP/EBP/RBP, then pop BP/EBP/RBP."
+"LES r16, memfar16:16","LEX.WX C4 /r
o16","Invalid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load ES:r16 with far pointer from memory."
+"LES r32, memfar16:32","LEX.WX C4 /r
o32","Invalid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load ES:r32 with far pointer from memory."
+"LFENCE","LEX.0F.W0 AE
E8","Valid","Valid","Valid","","","","","","","Serializes load operations."
+"LFS r16, memfar16:16","LEX.0F.WX B4 /r
o16","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m (r)","","","","Load
FS:r16 with far pointer from memory."
+"LFS r32, memfar16:32","LEX.0F.WX B4 /r
o32","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m (r)","","","","Load
FS:r32 with far pointer from memory."
+"LFS r64, memfar16:64","LEX.0F.WX B4 /r
o64","Valid","Invalid","Invalid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load FS:r64 with far pointer from memory."
+"LGDT m","LEX.0F.W0 01 /2","Valid","Valid","Valid","","ModRM:r/m (r,
ModRM:[7:6] must not be 11b)","","","","","Load m into GDTR."
+"LGS r16, memfar16:16","LEX.0F.WX B5 /r
o16","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m (r)","","","","Load
GS:r16 with far pointer from memory."
+"LGS r32, memfar16:32","LEX.0F.WX B5 /r
o32","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m (r)","","","","Load
GS:r32 with far pointer from memory."
+"LGS r64, memfar16:64","LEX.0F.WX B5 /r
o64","Valid","Invalid","Invalid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load GS:r64 with far pointer from memory."
+"LIDT m","LEX.0F.W0 01 /3","Valid","Valid","Valid","","ModRM:r/m (r,
ModRM:[7:6] must not be 11b)","","","","","Load m into IDTR."
+"LLDT r32/m16","LEX.0F.W0 00 /2","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Load segment selector r/m into LDTR."
+"LLDT r64/m16","LEX.0F.W1 00 /2","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Load segment selector r/m into LDTR."
+"LMSW r32/m16","LEX.0F.W0 01 /6","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Loads r/m in machine status word of CR0."
+"LMSW r64/m16","LEX.0F.W1 01 /6","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Loads r/m in machine status word of CR0."
+"LODSB al, psi","LEX.WB AC rep","Valid","Valid","Valid","","RAX (w)","RSI
(r)","","","","Load byte at address DS:SI/ESI/RSI into AL. "
+"LODSD aw, psi","LEX.WX AD o32 rep","Valid","Valid","Valid","","RAX (w)","RSI
(r)","","","","Load dword at address DS:SI/ESI/RSI into EAX."
+"LODSQ aw, psi","LEX.WX AD o64 rep","Valid","Invalid","Invalid","","RAX
(w)","RSI (r)","","","","Load qword at address DS:RSI into RAX."
+"LODSW aw, psi","LEX.WX AD o16 rep","Valid","Valid","Valid","","RAX (w)","RSI
(r)","","","","Load word at address DS:SI/ESI/RSI into AX."
+"LOOP rel8","LEX.WN E2 ib","Valid","Valid","Valid","","ib","RCX (r,
w)","","","","Decrement count; jump short if count !=0."
+"LOOPE rel8","LEX.WN E1 ib","Valid","Valid","Valid","","ib","RCX (r,
w)","","","","Decrement count; jump short if count !=0 and ZF = 1."
+"LOOPNE rel8","LEX.WN E0 ib","Valid","Valid","Valid","","ib","RCX (r,
w)","","","","Decrement count; jump short if count !=0 and ZF = 0."
+"LOOPNZ rel8","LEX.WN E0 ib","Valid","Valid","Valid","","ib","RCX (r,
w)","","","","Decrement count; jump short if count !=0 and ZF = 0."
+"LOOPZ rel8","LEX.WN E1 ib","Valid","Valid","Valid","","ib","RCX (r,
w)","","","","Decrement count; jump short if count !=0 and ZF = 0."
+"LSL r32, r16/m16","LEX.0F.W0 03 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Load: r := segment limit, selector r/m."
+"LSL r64, r16/m16","LEX.0F.W1 03 /r","Valid","Invalid","Invalid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Load: r := segment limit, selector r/m"
+"LSS r16, memfar16:16","LEX.0F.WX B2 /r
o16","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m (r)","","","","Load
SS:r16 with far pointer from memory."
+"LSS r32, memfar16:32","LEX.0F.WX B2 /r
o32","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m (r)","","","","Load
SS:r32 with far pointer from memory."
+"LSS r64, memfar16:64","LEX.0F.WX B2 /r
o64","Valid","Invalid","Invalid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load SS:r64 with far pointer from memory."
+"LTR r32/m16","LEX.0F.W0 00 /3","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Load r/m into task register."
+"LTR r64/m16","LEX.0F.W1 00 /3","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Load r/m into task register."
+"MASKMOVQ mm1, mm2","LEX.0F.W0 F7 /r","Valid","Valid","Valid","","ModRM:reg
(r)","ModRM:r/m (r)","RDI (r)","","","Selectively write bytes from mm1 to
memory location using the byte mask in mm2. The default memory location is
specified by DS:DI/EDI/RDI."
+"MFENCE","LEX.0F.W0 AE
F0","Valid","Valid","Valid","","","","","","","Serializes load and store
operations."
+"MONITOR","LEX.0F.W0 01 C8","Valid","Valid","Valid","","RAX
(r)","","","","","Sets up a linear address range to be monitored by hardware
and activates the monitor. The address range should be a write- back memory
caching type. The address is DS:AX/EAX/RAX."
+"MOV ra, CR0-CR15","LEX.0F.W0 20 /r","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move control register to r (only CR0-CR8 are
supported)."
+"MOV ra, DR0-DR7","LEX.0F.W0 21 /r","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move debug register to r."
+"MOV CR0-CR15, ra","LEX.0F.W0 22 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move r to control register (only CR0-CR8 are
supported)."
+"MOV DR0-DR7, ra","LEX.0F.W0 23 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move r to debug register."
+"MOV r8/m8, r8","LEX.WB 88 /r","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move r8 to r8/m8."
+"MOV rw/mw, rw","LEX.WX 89 /r","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move r to r/m."
+"MOV r8, r8/m8","LEX.WB 8A /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move r8/m8 to r8."
+"MOV rw, rw/mw","LEX.WX 8B /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move r/m to r."
+"MOV r32/m16, Sreg","LEX.WN 8C /r","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move segment register to r/m."
+"MOV Sreg, r32/m16","LEX.WN 8E /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move r/m to segment register."
+"MOVABS al, moffs","LEX.WB A0 iw","Invalid","Valid","Valid","","RAX
(w)","iw","","","","Move byte at (seg:offset) to AL."
+"MOVABS al, moffs","LEX.WB A0 i64","Valid","Invalid","Invalid","","RAX
(w)","i64","","","","Move byte at (offset) to AL."
+"MOVABS aw, moffs","LEX.WX A1 iw","Invalid","Valid","Valid","","RAX
(w)","iw","","","","Move word at (seg:offset) to AX/EAX."
+"MOVABS aw, moffs","LEX.WX A1 i64","Valid","Invalid","Invalid","","RAX
(w)","i64","","","","Move quadword at (offset) to RAX."
+"MOVABS moffs, al","LEX.WB A2 iw","Invalid","Valid","Valid","","iw","RAX
(r)","","","","Move AL to byte at (seg:offset)."
+"MOVABS moffs, al","LEX.WB A2 i64","Valid","Invalid","Invalid","","i64","RAX
(r)","","","","Move AL to byte at (offset)."
+"MOVABS moffs, aw","LEX.WX A3 iw","Invalid","Valid","Valid","","iw","RAX
(r)","","","","Move AX/EAX to word at (seg:offset)."
+"MOVABS moffs, aw","LEX.WX A3 i64","Valid","Invalid","Invalid","","i64","RAX
(r)","","","","Move RAX to (offset)."
+"MOV r8, ib","LEX.WB B0+r ib","Valid","Valid","Valid","","opcode +r
(w)","ib","","","","Move ib to r8."
+"MOV rw, i16","LEX.WX B8+r i16 o16","Valid","Valid","Valid","","opcode +r
(w)","iw","","","","Move iw to r."
+"MOV rw, i32","LEX.WX B8+r i32 o32","Valid","Valid","Valid","","opcode +r
(w)","iw","","","","Move iw to r."
+"MOVABS rw, i64","LEX.WX B8+r i64 o64","Valid","Invalid","Invalid","","opcode
+r (w)","i64","","","","Move iq to r."
+"MOV r8/m8, ib","LEX.WB C6 /0 ib","Valid","Valid","Valid","","ModRM:r/m
(w)","ib","","","","Move ib to r8/m8."
+"MOV rw/mw, iw","LEX.WX C7 /0 iw","Valid","Valid","Valid","","ModRM:r/m
(w)","iw","","","","Move iw to r/m."
+"MOVBE rw, mw","LEX.0F38.W0 F0 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Reverse byte order in m and move to r."
+"MOVBE rw, mw","LEX.0F38.W1 F0 /r","Valid","Invalid","Invalid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Reverse byte order in m and move to r."
+"MOVBE mw, rw","LEX.0F38.W0 F1 /r","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Reverse byte order in r and move to m."
+"MOVBE mw, rw","LEX.0F38.W1 F1 /r","Valid","Invalid","Invalid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Reverse byte order in r and move to m."
+"MOVDQ2Q mm, xmm","LEX.F2.0F.W0 D6 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move low quadword from xmm to mmx register."
+"MOVNTI mw, rw","LEX.0F.W0 C3 /r","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move doubleword from r to m using non- temporal
hint."
+"MOVNTI mw, rw","LEX.0F.W1 C3 /r","Valid","Invalid","Invalid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move quadword from r to m using non- temporal
hint."
+"MOVNTQ m64, mm","LEX.0F.W0 E7 /r","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move quadword from mm to m64 using non- temporal
hint."
+"MOVQ2DQ xmm, mm","LEX.F3.0F.W0 D6 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move quadword from mmx to low quadword of xmm."
+"MOVSB pdi, psi","LEX.WB A4 rep","Valid","Valid","Valid","","RDI (r)","RSI
(r)","","","","For legacy mode, Move byte from address DS:SI/ESI/RSI to
ES:DI/EDI/RDI. For 64-bit mode move byte from address (R|E)SI to (R|E)DI."
+"MOVSD pdi, psi","LEX.WX A5 o32 rep","Valid","Valid","Valid","","RDI (r)","RSI
(r)","","","","For legacy mode, move dword from address DS:SI/ESI/RSI to
ES:DI/EDI/RDI. For 64-bit mode move dword from address (R|E)SI to (R|E)DI."
+"MOVSQ pdi, psi","LEX.WX A5 o64 rep","Valid","Invalid","Invalid","","RDI
(r)","RSI (r)","","","","Move qword from address RSI to RDI."
+"MOVSW pdi, psi","LEX.WX A5 o16 rep","Valid","Valid","Valid","","RDI (r)","RSI
(r)","","","","For legacy mode, move word from address DS:SI/ESI/RSI to
ES:DI/EDI/RDI. For 64-bit mode move word at address (R|E)SI to (R|E)DI."
+"MOVSX rw, r8/m8","LEX.0F.W0 BE /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move byte to doubleword with sign-extension."
+"MOVSX rw, r8/m8","LEX.0F.W1 BE /r","Valid","Invalid","Invalid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move byte to quadword with sign-extension."
+"MOVSX r32, r16/m16","LEX.0F.W0 BF /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move word to doubleword, with sign-extension."
+"MOVSX r64, r16/m16","LEX.0F.W1 BF
/r","Valid","Invalid","Invalid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move word to quadword with sign-extension."
+"MOVSXD r64, r32/m32","LEX.W1 63 /r","Valid","Invalid","Invalid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move doubleword to quadword with sign-extension."
+"MOVZX rw, r8/m8","LEX.0F.W0 B6 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move byte to doubleword, zero-extension."
+"MOVZX rw, r8/m8","LEX.0F.W1 B6 /r","Valid","Invalid","Invalid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move byte to quadword, zero-extension."
+"MOVZX rw, r16/m16","LEX.0F.W0 B7 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move word to doubleword, zero-extension."
+"MOVZX rw, r16/m16","LEX.0F.W1 B7
/r","Valid","Invalid","Invalid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move word to quadword, zero-extension."
+"MUL r8/m8","LEX.WB F6 /4","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Unsigned multiply (AX := AL * r8/m8)."
+"MUL rw/mw","LEX.WX F7 /4","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Unsigned multiply (DX/EDX/RDX:AX/EAX/RAX := AX/EAX/RAX *
r/m)."
+"MWAIT","LEX.0F.W0 01 C9","Valid","Valid","Valid","","RAX (r)","RCX
(r)","","","","A hint that allow the processor to stop instruction execution
and enter an implementation-dependent optimized state until occurrence of a
class of events."
+"NEG r8/m8","LEX.WB F6 /3 lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","","","","","Two's complement negate r8/m8."
+"NEG rw/mw","LEX.WX F7 /3 lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","","","","","Two's complement negate r/m."
+"NOP rw/mw","LEX.0F.W0 1F /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Multi-byte no-operation instruction."
+"NOP","LEX.WN 90 norexb","Valid","Valid","Valid","","","","","","","One byte
no-operation instruction."
+"NOT r8/m8","LEX.WB F6 /2 lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","","","","","Reverse each bit of r8/m8."
+"NOT rw/mw","LEX.WX F7 /2 lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","","","","","Reverse each bit of r/m."
+"OR r8/m8, r8","LEX.WB 08 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","r8/m8 OR r8."
+"OR rw/mw, rw","LEX.WX 09 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","r/m OR r."
+"OR r8, r8/m8","LEX.WB 0A /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","r8 OR r8/m8."
+"OR rw, rw/mw","LEX.WX 0B /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","r OR r/m."
+"OR al, ib","LEX.WN 0C ib","Valid","Valid","Valid","","RAX (r,
w)","ib","","","","AL OR ib."
+"OR aw, iw","LEX.WX 0D iw","Valid","Valid","Valid","","RAX (r,
w)","iw","","","","EAX OR sign-extended iw."
+"OR r8/m8, ib","LEX.WB 80 /1 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","r8/m8 OR ib."
+"OR rw/mw, iw","LEX.WX 81 /1 iw lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","iw","","","","r/m OR iw."
+"OR rw/mw, ib","LEX.WX 83 /1 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","r/m OR ib (sign-extended)."
+"OUT ib, al","LEX.WB E6 ib","Valid","Valid","Valid","","ib","RAX
(r)","","","","Output byte in AL to I/O port address ib."
+"OUT ib, aw","LEX.WX E7 ib o32","Valid","Valid","Valid","","ib","RAX
(r)","","","","Output word in AX/EAX/RAX to I/O port address ib."
+"OUT dx, al","LEX.WB EE","Valid","Valid","Valid","","RDX (r)","RAX
(r)","","","","Output byte in AL to I/O port address in DX."
+"OUT dx, aw","LEX.WX EF o32","Valid","Valid","Valid","","RDX (r)","RAX
(r)","","","","Output word in AX/EAX/RAX to I/O port address in DX."
+"OUTSB dx, psi","LEX.WB 6E rep","Valid","Valid","Valid","","RDX (r)","RSI
(r)","","","","Output byte from memory location specified in DS:(E)SI or RSI to
I/O port specified in DX."
+"OUTSD dx, psi","LEX.WX 6F o32 rep","Valid","Valid","Valid","","RDX (r)","RSI
(r)","","","","Output doubleword from memory location specified in DS:(E)SI or
RSI to I/O port specified in DX."
+"OUTSW dx, psi","LEX.WX 6F o16 rep","Valid","Valid","Valid","","RDX (r)","RSI
(r)","","","","Output word from memory location specified in DS:(E)SI or RSI to
I/O port specified in DX."
+"PAUSE","LEX.F3.WN 90 norexb","Valid","Valid","Valid","","","","","","","Gives
hint to processor that improves performance of spin-wait loops."
+"POP ES","LEX.WN 07","Invalid","Valid","Valid","","SEG (w)","RSP (r, w,
i)","","","","Pop top of stack into ES; increment stack pointer."
+"POP SS","LEX.WN 17","Invalid","Valid","Valid","","SEG (w)","RSP (r, w,
i)","","","","Pop top of stack into SS; increment stack pointer."
+"POP DS","LEX.WN 1F","Invalid","Valid","Valid","","SEG (w)","RSP (r, w,
i)","","","","Pop top of stack into DS; increment stack pointer."
+"POP rw","LEX.WW 58+r","Valid","Valid","Valid","","opcode +r (w)","RSP (r, w,
i)","","","","Pop top of stack into r16; increment stack pointer."
+"POP rw/mw","LEX.WW 8F /0","Valid","Valid","Valid","","ModRM:r/m (w)","RSP (r,
w, i)","","","","Pop top of stack into r/m; increment stack pointer."
+"POP FS","LEX.0F.W0 A1","Valid","Valid","Valid","","SEG (w)","RSP (r, w,
i)","","","","Pop top of stack into FS; increment stack pointer."
+"POP GS","LEX.0F.W0 A9","Valid","Valid","Valid","","SEG (w)","RSP (r, w,
i)","","","","Pop top of stack into GS; increment stack pointer."
+"POPA","LEX.WW 61","Invalid","Valid","Valid","","RSP (r, w,
i)","","","","","Pop [E]DI, [E]SI, [E]BP, [E]BX, [E]DX, [E]CX, and [E]AX."
+"POPAD","LEX.WW 61 o32","Invalid","Valid","Valid","","RSP (r, w,
i)","","","","","Pop EDI, ESI, EBP, EBX, EDX, ECX, and EAX."
+"POPAW","LEX.WW 61 o16","Invalid","Valid","Valid","","RSP (r, w,
i)","","","","","Pop DI, SI, BP, BX, DX, CX, and AX."
+"POPCNT rw, rw/mw","LEX.F3.0F.W0 B8 /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","POPCNT on r/m"
+"POPCNT rw, rw/mw","LEX.F3.0F.W1 B8
/r","Valid","Invalid","Invalid","","ModRM:reg (w)","ModRM:r/m
(r)","","","","POPCNT on r/m"
+"POPFD","LEX.WW 9D o32","Invalid","Valid","Valid","","RFLAGS (w, i)","RSP (r,
w, i)","","","","Pop word from stack into EFLAGS."
+"POPFQ","LEX.WW 9D o64","Valid","Invalid","Invalid","","RFLAGS (w, i)","RSP
(r, w, i)","","","","Pop word from stack into RFLAGS."
+"POPFW","LEX.WW 9D o16","Valid","Valid","Valid","","RFLAGS (w, i)","RSP (r, w,
i)","","","","Pop word from stack into FLAGS."
+"PSHUFW mm1, mm2/m64, ib","LEX.0F.W0 70 /r
ib","Valid","Valid","Valid","","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the words in mm2/m64 based on the encoding in ib and
store the result in mm1."
+"PTWRITE rw/mw","LEX.F3.0F.W0 AE /4","Valid","Valid","Invalid","","ModRM:r/m
(r)","","","","","Reads the data from r/m to encode into a PTW packet if
dependencies are met (see details below)."
+"PTWRITE rw/mw","LEX.F3.0F.W1 AE /4","Valid","Invalid","Invalid","","ModRM:r/m
(r)","","","","","Reads the data from r/m to encod into a PTW packet if
dependencies are met (see details below)."
+"PUSH ES","LEX.WN 06","Invalid","Valid","Valid","","SEG (r)","RSP (r, w,
i)","","","","Push ES."
+"PUSH CS","LEX.WN 0E","Invalid","Valid","Valid","","SEG (r)","RSP (r, w,
i)","","","","Push CS."
+"PUSH SS","LEX.WN 16","Invalid","Valid","Valid","","SEG (r)","RSP (r, w,
i)","","","","Push SS."
+"PUSH DS","LEX.WN 1E","Invalid","Valid","Valid","","SEG (r)","RSP (r, w,
i)","","","","Push DS."
+"PUSH rw","LEX.WW 50+r","Valid","Valid","Valid","","opcode +r (r)","RSP (r, w,
i)","","","","Push r."
+"PUSH iw","LEX.WN 68 iw","Valid","Valid","Valid","","iw","RSP (r, w,
i)","","","","Push iw."
+"PUSH ib","LEX.WN 6A ib","Valid","Valid","Valid","","ib","RSP (r, w,
i)","","","","Push ib."
+"PUSH FS","LEX.0F.W0 A0","Valid","Valid","Valid","","SEG (r)","RSP (r, w,
i)","","","","Push FS."
+"PUSH GS","LEX.0F.W0 A8","Valid","Valid","Valid","","SEG (r)","RSP (r, w,
i)","","","","Push GS."
+"PUSH rw/mw","LEX.WW FF /6","Valid","Valid","Valid","","ModRM:r/m (r)","RSP
(r, w, i)","","","","Push r/m."
+"PUSHA","LEX.WW 60","Invalid","Valid","Valid","","RSP (r, w,
i)","","","","","Push [E]AX, [E]CX, [E]DX, [E]BX, original [E]SP, [E]BP, [E]SI,
and [E]DI."
+"PUSHAD","LEX.WW 60 o32","Invalid","Valid","Valid","","RSP (r, w,
i)","","","","","Push [E]AX, [E]CX, [E]DX, [E]BX, original [E]SP, [E]BP, [E]SI,
and [E]DI."
+"PUSHAW","LEX.WW 60 o16","Invalid","Valid","Valid","","RSP (r, w,
i)","","","","","Push [E]AX, [E]CX, [E]DX, [E]BX, original [E]SP, [E]BP, [E]SI,
and [E]DI."
+"PUSHFD","LEX.WW 9C o32","Invalid","Valid","Valid","","RFLAGS (r, i)","RSP (r,
w, i)","","","","Push EFLAGS word onto the stack."
+"PUSHFQ","LEX.WW 9C o64","Valid","Invalid","Invalid","","RFLAGS (r, i)","RSP
(r, w, i)","","","","Push RFLAGS word onto the stack."
+"PUSHFW","LEX.WW 9C o16","Valid","Valid","Valid","","RFLAGS (r, i)","RSP (r,
w, i)","","","","Push FLAGS word onto the stack."
+"RCL r8/m8, ib","LEX.WB C0 /2 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Rotate 9 bits (CF, r8/m8) left ib times."
+"RCL rw/mw, ib","LEX.WX C1 /2 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Rotate 33 bits (CF, r/m) left ib times."
+"RCL r8/m8","LEX.WB D0 /2","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Rotate 9 bits (CF, r8/m8) left once."
+"RCL rw/mw","LEX.WX D1 /2","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Rotate 33 bits (CF, r/m) left once."
+"RCL r8/m8, CL","LEX.WB D2 /2","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Rotate 9 bits (CF, r8/m8) left CL times."
+"RCL rw/mw, CL","LEX.WX D3 /2","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Rotate 33 bits (CF, r/m) left CL times."
+"RCR r8/m8, ib","LEX.WB C0 /3 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Rotate 9 bits (CF, r8/m8) right ib times."
+"RCR rw/mw, ib","LEX.WX C1 /3 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Rotate 33 bits (CF, r/m) right ib times."
+"RCR r8/m8","LEX.WB D0 /3","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Rotate 9 bits (CF, r8/m8) right once."
+"RCR rw/mw","LEX.WX D1 /3","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Rotate 33 bits (CF, r/m) right once. Uses a 6 bit count."
+"RCR r8/m8, CL","LEX.WB D2 /3","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Rotate 9 bits (CF, r8/m8) right CL times."
+"RCR rw/mw, CL","LEX.WX D3 /3","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Rotate 33 bits (CF, r/m) right CL times."
+"RDMSR","LEX.0F.W0 32","Valid","Valid","Valid","","","","","","","Read MSR
specified by ECX into EDX:EAX."
+"RDPMC","LEX.0F.W0 33","Valid","Valid","Valid","","","","","","","Read
performance-monitoring counter specified by ECX into EDX:EAX."
+"RDTSC","LEX.0F.W0 31","Valid","Valid","Valid","","","","","","","Read
time-stamp counter into EDX:EAX."
+"RDTSCP","LEX.0F.W0 01 F9","Valid","Valid","Valid","","","","","","","Read
64-bit time-stamp counter and IA32_TSC_AUX value into EDX:EAX and ECX."
+"RET","LEX.WW C3","Valid","Valid","Valid","","RSP (r, w, i)","","","","","Near
return to calling procedure."
+"RETF","LEX.WW CB","Valid","Valid","Valid","","RSP (r, w, i)","","","","","Far
return to calling procedure."
+"RETF i16","LEX.WW CA i16","Valid","Valid","Valid","","i16","RSP (r, w,
i)","","","","Far return to calling procedure and pop iw bytes from stack."
+"RET i16","LEX.WW C2 i16","Valid","Valid","Valid","","i16","RSP (r, w,
i)","","","","Near return to calling procedure and pop iw bytes from stack."
+"ROL r8/m8, ib","LEX.WB C0 /0 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Rotate 8 bits r8/m8 left ib times."
+"ROL rw/mw, ib","LEX.WX C1 /0 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Rotate 32 bits r/m left ib times."
+"ROL r8/m8","LEX.WB D0 /0","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Rotate 8 bits r8/m8 left once."
+"ROL rw/mw","LEX.WX D1 /0","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Rotate 32 bits r/m left once."
+"ROL r8/m8, CL","LEX.WB D2 /0","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Rotate 8 bits r8/m8 left CL times."
+"ROL rw/mw, CL","LEX.WX D3 /0","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Rotate 32 bits r/m left CL times."
+"ROR r8/m8, ib","LEX.WB C0 /1 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Rotate 8 bits r8/m8 right ib times."
+"ROR rw/mw, ib","LEX.WX C1 /1 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Rotate 32 bits r/m right ib times."
+"ROR r8/m8","LEX.WB D0 /1","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Rotate 8 bits r8/m8 right once."
+"ROR rw/mw","LEX.WX D1 /1","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Rotate 32 bits r/m right once."
+"ROR r8/m8, CL","LEX.WB D2 /1","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Rotate 8 bits r8/m8 right CL times."
+"ROR rw/mw, CL","LEX.WX D3 /1","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Rotate 32 bits r/m right CL times."
+"RSM","LEX.0F.W0 AA","Valid","Valid","Valid","","","","","","","Resume
operation of interrupted program."
+"SAHF ah","LEX.WN 9E","Invalid","Valid","Valid","","RAX
(r)","","","","","Loads SF, ZF, AF, PF, and CF from AH into EFLAGS register."
+"SAR r8/m8, ib","LEX.WB C0 /7 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Signed divide r8/m8 by 2, ib time."
+"SAR rw/mw, ib","LEX.WX C1 /7 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Signed divide r/m by 2, ib times."
+"SAR r8/m8","LEX.WB D0 /7","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Signed divide r8/m8 by 2, once."
+"SAR rw/mw","LEX.WX D1 /7","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Signed divide r/m by 2, once."
+"SAR r8/m8, CL","LEX.WB D2 /7","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Signed divide r8/m8 by 2, CL times."
+"SAR rw/mw, CL","LEX.WX D3 /7","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Signed divide r/m by 2, CL times."
+"SBB r8/m8, r8","LEX.WB 18 /r lock","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Subtract with borrow r8 from r8/m8."
+"SBB rw/mw, rw","LEX.WX 19 /r lock","Valid","Valid","Valid","","ModRM:r/m
(w)","ModRM:reg (r)","","","","Subtract with borrow r from r/m."
+"SBB r8, r8/m8","LEX.WB 1A /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Subtract with borrow r8/m8 from r8."
+"SBB rw, rw/mw","LEX.WX 1B /r","Valid","Valid","Valid","","ModRM:reg
(w)","ModRM:r/m (r)","","","","Subtract with borrow r/m from r."
+"SBB al, ib","LEX.WN 1C ib","Valid","Valid","Valid","","RAX (r,
w)","ib","","","","Subtract with borrow ib from AL."
+"SBB aw, iw","LEX.WX 1D iw","Valid","Valid","Valid","","RAX (r,
w)","iw","","","","Subtract with borrow iw from EAX."
+"SBB r8/m8, ib","LEX.WB 80 /3 ib lock","Valid","Valid","Valid","","ModRM:r/m
(w)","ib","","","","Subtract with borrow ib from r8/m8."
+"SBB rw/mw, iw","LEX.WX 81 /3 iw lock","Valid","Valid","Valid","","ModRM:r/m
(w)","iw","","","","Subtract with borrow iw from r/m."
+"SBB rw/mw, ib","LEX.WX 83 /3 ib lock","Valid","Valid","Valid","","ModRM:r/m
(w)","ib","","","","Subtract with borrow sign-extended ib from r/m."
+"SCASB al, pdi","LEX.WB AE rep","Valid","Valid","Valid","","RAX (r)","RDI
(r)","","","","Compare AL with byte at ES:DI/EDI/RDI then set status flags."
+"SCASD aw, pdi","LEX.WX AF o32 rep","Valid","Valid","Valid","","RAX (r)","RDI
(r)","","","","Compare EAX with dword at ES:DI/EDI/RDI then set status flags."
+"SCASQ aw, pdi","LEX.WX AF o64 rep","Valid","Invalid","Invalid","","RAX
(r)","RDI (r)","","","","Compare RAX with quadword at ES:RDI then set status
flags."
+"SCASW aw, pdi","LEX.WX AF o16 rep","Valid","Valid","Valid","","RAX (r)","RDI
(r)","","","","Compare AX with word at ES:DI/EDI/RDI then set status flags."
+"SETA r8/m8","LEX.0F.WB 97 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if above (CF=0 and ZF=0)."
+"SETAE r8/m8","LEX.0F.WB 93 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if above or equal (CF=0)."
+"SETB r8/m8","LEX.0F.WB 92 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if below (CF=1)."
+"SETBE r8/m8","LEX.0F.WB 96 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if below or equal (CF=1 or ZF=1)."
+"SETC r8/m8","LEX.0F.WB 92 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if carry (CF=1)."
+"SETE r8/m8","LEX.0F.WB 94 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if equal (ZF=1)."
+"SETG r8/m8","LEX.0F.WB 9F /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if greater (ZF=0 and SF=OF)."
+"SETGE r8/m8","LEX.0F.WB 9D /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if greater or equal (SF=OF)."
+"SETL r8/m8","LEX.0F.WB 9C /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if less (SF!=OF)."
+"SETLE r8/m8","LEX.0F.WB 9E /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if less or equal (ZF=1 or SF!=OF)."
+"SETNA r8/m8","LEX.0F.WB 96 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not above (CF=1 or ZF=1)."
+"SETNAE r8/m8","LEX.0F.WB 92 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not above or equal (CF=1)."
+"SETNB r8/m8","LEX.0F.WB 93 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not below (CF=0)."
+"SETNBE r8/m8","LEX.0F.WB 97 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not below or equal (CF=0 and ZF=0)."
+"SETNC r8/m8","LEX.0F.WB 93 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not carry (CF=0)."
+"SETNE r8/m8","LEX.0F.WB 95 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not equal (ZF=0)."
+"SETNG r8/m8","LEX.0F.WB 9E /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not greater (ZF=1 or SF!=OF)"
+"SETNGE r8/m8","LEX.0F.WB 9C /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not greater or equal (SF!=OF)."
+"SETNL r8/m8","LEX.0F.WB 9D /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not less (SF=OF)."
+"SETNLE r8/m8","LEX.0F.WB 9F /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not less or equal (ZF=0 and SF=OF)."
+"SETNO r8/m8","LEX.0F.WB 91 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not overflow (OF=0)."
+"SETNP r8/m8","LEX.0F.WB 9B /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not parity (PF=0)."
+"SETNS r8/m8","LEX.0F.WB 99 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not sign (SF=0)."
+"SETNZ r8/m8","LEX.0F.WB 95 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if not zero (ZF=0)."
+"SETO r8/m8","LEX.0F.WB 90 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if overflow (OF=1)."
+"SETP r8/m8","LEX.0F.WB 9A /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if parity (PF=1)."
+"SETPE r8/m8","LEX.0F.WB 9A /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if parity even (PF=1)."
+"SETPO r8/m8","LEX.0F.WB 9B /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if parity odd (PF=0)."
+"SETS r8/m8","LEX.0F.WB 98 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if sign (SF=1)."
+"SETZ r8/m8","LEX.0F.WB 94 /0","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set byte if zero (ZF=1)."
+"SFENCE","LEX.0F.W0 AE
F8","Valid","Valid","Valid","","","","","","","Serializes store operations."
+"SGDT m","LEX.0F.W0 01 /0","Valid","Valid","Valid","","ModRM:r/m (w,
ModRM:[7:6] must not be 11b)","","","","","Store GDTR to m."
+"SHL r8/m8, ib","LEX.WB C0 /4 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Multiply r8/m8 by 2, ib times."
+"SHL rw/mw, ib","LEX.WX C1 /4 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Multiply r/m by 2, ib times."
+"SHL r8/m8","LEX.WB D0 /4","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Multiply r8/m8 by 2, once."
+"SHL rw/mw","LEX.WX D1 /4","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Multiply r/m by 2, once."
+"SHL r8/m8, CL","LEX.WB D2 /4","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Multiply r8/m8 by 2, CL times."
+"SHL rw/mw, CL","LEX.WX D3 /4","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Multiply r/m by 2, CL times."
+"SHLD rw/mw, rw, ib","LEX.0F.W0 A4 /r
ib","Valid","Valid","Valid","","ModRM:r/m (r, w)","ModRM:reg
(r)","ib","","","Shift r/m to left ib places while shifting bits from r in from
the right."
+"SHLD rw/mw, rw, ib","LEX.0F.W1 A4 /r
ib","Valid","Invalid","Invalid","","ModRM:r/m (r, w)","ModRM:reg
(r)","ib","","","Shift r/m to left ib places while shifting bits from r in from
the right."
+"SHLD rw/mw, rw, CL","LEX.0F.W0 A5 /r","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ModRM:reg (r)","RCX (r)","","","Shift r/m to left CL places while
shifting bits from r in from the right."
+"SHLD rw/mw, rw, CL","LEX.0F.W1 A5
/r","Valid","Invalid","Invalid","","ModRM:r/m (r, w)","ModRM:reg (r)","RCX
(r)","","","Shift r/m to left CL places while shifting bits from r in from the
right."
+"SHR r8/m8, ib","LEX.WB C0 /5 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Unsigned divide r8/m8 by 2, ib times."
+"SHR rw/mw, ib","LEX.WX C1 /5 ib","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ib","","","","Unsigned divide r/m by 2, ib times."
+"SHR r8/m8","LEX.WB D0 /5","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Unsigned divide r8/m8 by 2, once."
+"SHR rw/mw","LEX.WX D1 /5","Valid","Valid","Valid","","ModRM:r/m (r,
w)","1","","","","Unsigned divide r/m by 2, once."
+"SHR r8/m8, CL","LEX.WB D2 /5","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Unsigned divide r8/m8 by 2, CL times."
+"SHR rw/mw, CL","LEX.WX D3 /5","Valid","Valid","Valid","","ModRM:r/m (r,
w)","RCX (r)","","","","Unsigned divide r/m by 2, CL times."
+"SHRD rw/mw, rw, ib","LEX.0F.W0 AC /r
ib","Valid","Valid","Valid","","ModRM:r/m (r, w)","ModRM:reg
(r)","ib","","","Shift r/m to right ib places while shifting bits from r in
from the left."
+"SHRD rw/mw, rw, ib","LEX.0F.W1 AC /r
ib","Valid","Invalid","Invalid","","ModRM:r/m (r, w)","ModRM:reg
(r)","ib","","","Shift r/m to right ib places while shifting bits from r in
from the left."
+"SHRD rw/mw, rw, CL","LEX.0F.W0 AD /r","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ModRM:reg (r)","RCX (r)","","","Shift r/m to right CL places while
shifting bits from r in from the left."
+"SHRD rw/mw, rw, CL","LEX.0F.W1 AD
/r","Valid","Invalid","Invalid","","ModRM:r/m (r, w)","ModRM:reg (r)","RCX
(r)","","","Shift r/m to right CL places while shifting bits from r in from the
left."
+"SIDT m","LEX.0F.W0 01 /1","Valid","Valid","Valid","","ModRM:r/m (w,
ModRM:[7:6] must not be 11b)","","","","","Store IDTR to m."
+"SLDT r32/m16","LEX.0F.W0 00 /0","Valid","Valid","Valid","","ModRM:r/m
(w)","","","","","Stores segment selector from LDTR in r/m."
+"SLDT r64/m16","LEX.0F.W1 00 /0","Valid","Invalid","Invalid","","ModRM:r/m
(w)","","","","","Stores segment selector from LDTR in r/m."
+"SMSW r32/m16","LEX.0F.W0 01 /4","Valid","Valid","Valid","","ModRM:r/m
(w)","","","","","Store machine status word to r/m."
+"SMSW r64/m16","LEX.0F.W1 01 /4","Valid","Invalid","Invalid","","ModRM:r/m
(w)","","","","","Store machine status to r/m."
+"STC","LEX.WN F9","Valid","Valid","Valid","","","","","","","Set CF flag."
+"STD","LEX.WN FD","Valid","Valid","Valid","","","","","","","Set DF flag."
+"STI","LEX.WN FB","Valid","Valid","Valid","","","","","","","Set interrupt
flag; external, maskable interrupts enabled at the end of the next instruction."
+"STOSB pdi, al","LEX.WB AA rep","Valid","Valid","Valid","","RDI (r)","RAX
(r)","","","","For legacy mode, store AL at address ES:DI/EDI/RDI."
+"STOSD pdi, aw","LEX.WX AB o32 rep","Valid","Valid","Valid","","RDI (r)","RAX
(r)","","","","For legacy mode, store EAX at address ES:DI/EDI/RDI."
+"STOSQ pdi, aw","LEX.WX AB o64 rep","Valid","Invalid","Invalid","","RDI
(r)","RAX (r)","","","","Store RAX at address ES:RDI."
+"STOSW pdi, aw","LEX.WX AB o16 rep","Valid","Valid","Valid","","RDI (r)","RAX
(r)","","","","For legacy mode, store AX at address ES:DI/EDI/RDI."
+"STR r32/m16","LEX.0F.W0 00 /1","Valid","Valid","Valid","","ModRM:r/m
(w)","","","","","Stores segment selector from TR in r/m."
+"STR r64/m16","LEX.0F.W1 00 /1","Valid","Valid","Valid","","ModRM:r/m
(w)","","","","","Stores segment selector from TR in r/m."
+"SUB r8/m8, r8","LEX.WB 28 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","Subtract r8 from r8/m8."
+"SUB rw/mw, rw","LEX.WX 29 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","Subtract r from r/m."
+"SUB r8, r8/m8","LEX.WB 2A /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Subtract r8/m8 from r8."
+"SUB rw, rw/mw","LEX.WX 2B /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","Subtract r/m from r."
+"SUB al, ib","LEX.WN 2C ib","Valid","Valid","Valid","","RAX (r,
w)","ib","","","","Subtract ib from AL."
+"SUB aw, iw","LEX.WX 2D iw","Valid","Valid","Valid","","RAX (r,
w)","iw","","","","Subtract sign-extend iw from AX/EAX/RAX."
+"SUB r8/m8, ib","LEX.WB 80 /5 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","Subtract ib from r8/m8."
+"SUB rw/mw, iw","LEX.WX 81 /5 iw lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","iw","","","","Subtract iw from r/m."
+"SUB rw/mw, ib","LEX.WX 83 /5 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","Subtract sign-extended ib from r/m."
+"SWAPGS","LEX.0F.W0 01
F8","Valid","Invalid","Invalid","","","","","","","Exchanges the current GS
base register value with the value contained in MSR address C0000102H."
+"SYSCALL","LEX.0F.W0 05","Valid","Invalid","Invalid","","","","","","","Fast
call to privilege level 0 system procedures."
+"SYSENTER","LEX.0F.W0 34","Valid","Valid","Valid","","","","","","","Fast call
to privilege level 0 system procedures."
+"SYSEXIT","LEX.0F.W0 35","Valid","Valid","Valid","","","","","","","Fast
return to privilege level 3 user code."
+"SYSEXITQ","LEX.0F.W1 35","Valid","Invalid","Invalid","","","","","","","Fast
return to 64-bit mode privilege level 3 user code."
+"SYSRET","LEX.0F.W0 07","Valid","Invalid","Invalid","","","","","","","Return
to compatibility mode from fast system call"
+"SYSRETQ","LEX.0F.W1 07","Valid","Invalid","Invalid","","","","","","","Return
to 64-bit mode from fast system call"
+"TEST r8/m8, r8","LEX.WB 84 /r","Valid","Valid","Valid","","ModRM:r/m
(r)","ModRM:reg (r)","","","","AND r8 with r8/m8; set SF, ZF, PF according to
result."
+"TEST rw/mw, rw","LEX.WX 85 /r","Valid","Valid","Valid","","ModRM:r/m
(r)","ModRM:reg (r)","","","","AND r with r/m; set SF, ZF, PF according to
result."
+"TEST al, ib","LEX.WN A8 ib","Valid","Valid","Valid","","RAX
(r)","ib","","","","AND ib with AL; set SF, ZF, PF according to result."
+"TEST aw, iw","LEX.WX A9 iw","Valid","Valid","Valid","","RAX
(r)","iw","","","","AND iw with EAX; set SF, ZF, PF according to result."
+"TEST r8/m8, ib","LEX.WB F6 /0 ib","Valid","Valid","Valid","","ModRM:r/m
(r)","ib","","","","AND ib with r8/m8; set SF, ZF, PF according to result."
+"TEST rw/mw, iw","LEX.WX F7 /0 iw","Valid","Valid","Valid","","ModRM:r/m
(r)","iw","","","","AND iw with r/m; set SF, ZF, PF according to result."
+"UD0 rw, rw/mw","LEX.0F.W0 FF /r","Valid","Valid","Valid","","ModRM:reg
(r)","ModRM:r/m (r)","","","","Raise invalid opcode exception."
+"UD1 rw, rw/mw","LEX.0F.W0 B9 /r","Valid","Valid","Valid","","ModRM:reg
(r)","ModRM:r/m (r)","","","","Raise invalid opcode exception."
+"UD2","LEX.0F.W0 0B","Valid","Valid","Valid","","","","","","","Raise invalid
opcode exception."
+"VERR r16/m16","LEX.0F.W0 00 /4","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set ZF=1 if segment specified with r/m can be read."
+"VERW r16/m16","LEX.0F.W0 00 /5","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Set ZF=1 if segment specified with r/m can be written."
+"WBINVD","LEX.0F.W0 09","Valid","Valid","Valid","","","","","","","Write back
and flush Internal caches; initiate writing-back and flushing of external
caches."
+"WRMSR","LEX.0F.W0 30","Valid","Valid","Valid","","","","","","","Write the
value in EDX:EAX to MSR specified by ECX."
+"XADD r8/m8, r8","LEX.0F.W0 C0 /r lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ModRM:reg (r, w)","","","","Exchange r8 and r8/m8; load sum into
r8/m8."
+"XADD rw/mw, rw","LEX.0F.WX C1 /r lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ModRM:reg (r, w)","","","","Exchange r and r/m; load sum into r/m."
+"XCHG r8/m8, r8","LEX.WB 86 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","Exchange r8 (byte register) with byte from r8/m8."
+"XCHG rw/mw, rw","LEX.WX 87 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","Exchange r with doubleword from r/m."
+"XCHG rw, aw","LEX.WX 90+r","Valid","Valid","Valid","","opcode +r (r, w)","RAX
(r, w)","","","","Exchange AX/EAX/RAX with r."
+"XGETBV","LEX.0F.W0 01 D0","Valid","Valid","Valid","","","","","","","Reads an
XCR specified by ECX into EDX:EAX."
+"XLATB","LEX.WN D7","Valid","Valid","Valid","","","RAX (r, w)","RBX
(r)","","","Set AL to memory byte DS:[(E)BX + unsigned AL]."
+"XOR r8/m8, r8","LEX.WB 30 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","r8/m8 XOR r8."
+"XOR rw/mw, rw","LEX.WX 31 /r lock","Valid","Valid","Valid","","ModRM:r/m (r,
w)","ModRM:reg (r)","","","","r/m XOR r."
+"XOR r8, r8/m8","LEX.WB 32 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","r8 XOR r8/m8."
+"XOR rw, rw/mw","LEX.WX 33 /r","Valid","Valid","Valid","","ModRM:reg (r,
w)","ModRM:r/m (r)","","","","r XOR r/m."
+"XOR al, ib","LEX.WN 34 ib","Valid","Valid","Valid","","RAX (r,
w)","ib","","","","AL XOR ib."
+"XOR aw, iw","LEX.WX 35 iw","Valid","Valid","Valid","","RAX (r,
w)","iw","","","","AX/EAX/RAX XOR sign-extend iw."
+"XOR r8/m8, ib","LEX.WB 80 /6 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","r8/m8 XOR ib."
+"XOR rw/mw, iw","LEX.WX 81 /6 iw lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","iw","","","","r/m XOR sign-extend iw."
+"XOR rw/mw, ib","LEX.WX 83 /6 ib lock","Valid","Valid","Valid","","ModRM:r/m
(r, w)","ib","","","","r/m XOR sign-extend ib."
+"XRSTOR mem","LEX.0F.W0 AE /5","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Restore state components specified by EDX:EAX from mem."
+"XRSTOR64 mem","LEX.0F.W1 AE /5","Valid","Invalid","Invalid","","ModRM:r/m
(r)","","","","","Restore state components specified by EDX:EAX from mem."
+"XRSTORS mem","LEX.0F.W0 C7 /3","Valid","Valid","Valid","","ModRM:r/m
(r)","","","","","Restore state components specified by EDX:EAX from mem."
+"XRSTORS64 mem","LEX.0F.W1 C7 /3","Valid","Invalid","Invalid","","ModRM:r/m
(r)","","","","","Restore state components specified by EDX:EAX from mem."
+"XSAVE mem","LEX.0F.W0 AE /4","Valid","Valid","Valid","","ModRM:r/m
(w)","","","","","Save state components specified by EDX:EAX to mem."
+"XSAVE64 mem","LEX.0F.W1 AE /4","Valid","Invalid","Invalid","","ModRM:r/m
(w)","","","","","Save state components specified by EDX:EAX to mem."
+"XSAVEC mem","LEX.0F.W0 C7 /4","Valid","Valid","Valid","","ModRM:r/m
(w)","","","","","Save state components specified by EDX:EAX to mem with
compaction."
+"XSAVEC64 mem","LEX.0F.W1 C7 /4","Valid","Invalid","Invalid","","ModRM:r/m
(w)","","","","","Save state components specified by EDX:EAX to mem with
compaction."
+"XSAVES mem","LEX.0F.W0 C7 /5","Valid","Valid","Valid","","ModRM:r/m
(w)","","","","","Save state components specified by EDX:EAX to mem with
compaction, optimizing if possible."
+"XSAVES64 mem","LEX.0F.W1 C7 /5","Valid","Invalid","Invalid","","ModRM:r/m
(w)","","","","","Save state components specified by EDX:EAX to mem with
compaction, optimizing if possible."
+"XSETBV","LEX.0F.W0 01 D1","Valid","Valid","Valid","","","","","","","Write
the value in EDX:EAX to the XCR specified by ECX."
diff --git a/disas/x86-data/x86_bmi1.csv b/disas/x86-data/x86_bmi1.csv
new file mode 100644
index 000000000000..d7b2d292089a
--- /dev/null
+++ b/disas/x86-data/x86_bmi1.csv
@@ -0,0 +1,13 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"ANDN rw, rw, rw/mw","VEX.LZ.0F38.W0 F2
/r","Valid","Valid","Invalid","BMI1","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Bitwise AND of inverted r with r/m, store result in r."
+"ANDN rw, rw, rw/mw","VEX.LZ.0F38.W1 F2
/r","Valid","Invalid","Invalid","BMI1","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Bitwise AND of inverted r with r/m, store result in
r."
+"BEXTR rw, rw/mw, rw","VEX.LZ.0F38.W0 F7
/r","Valid","Valid","Invalid","BMI1","ModRM:reg (w)","ModRM:r/m (r)","VEX.vvvv
(r)","","","Contiguous bitwise extract from r/m using r as control; store
result in r."
+"BEXTR rw, rw/mw, rw","VEX.LZ.0F38.W1 F7
/r","Valid","Invalid","Invalid","BMI1","ModRM:reg (w)","ModRM:r/m
(r)","VEX.vvvv (r)","","","Contiguous bitwise extract from r/m using r as
control; store result in r."
+"BLSI rw, rw/mw","VEX.LZ.0F38.W0 F3
/3","Valid","Valid","Invalid","BMI1","VEX.vvvv (w)","ModRM:r/m
(r)","","","","Extract lowest set bit from r/m and set that bit in r."
+"BLSI rw, rw/mw","VEX.LZ.0F38.W1 F3
/3","Valid","Invalid","Invalid","BMI1","VEX.vvvv (w)","ModRM:r/m
(r)","","","","Extract lowest set bit from r/m, and set that bit in r."
+"BLSMSK rw, rw/mw","VEX.LZ.0F38.W0 F3
/2","Valid","Valid","Invalid","BMI1","VEX.vvvv (w)","ModRM:r/m
(r)","","","","Set all lower bits in r to 1 starting from bit 0 to lowest set
bit in r/m."
+"BLSMSK rw, rw/mw","VEX.LZ.0F38.W1 F3
/2","Valid","Invalid","Invalid","BMI1","VEX.vvvv (w)","ModRM:r/m
(r)","","","","Set all lower bits in r to 1 starting from bit 0 to lowest set
bit in r/m."
+"BLSR rw, rw/mw","VEX.LZ.0F38.W0 F3
/1","Valid","Valid","Invalid","BMI1","VEX.vvvv (w)","ModRM:r/m
(r)","","","","Reset lowest set bit of r/m, keep all other bits of r/m and
write result to r."
+"BLSR rw, rw/mw","VEX.LZ.0F38.W1 F3
/1","Valid","Invalid","Invalid","BMI1","VEX.vvvv (w)","ModRM:r/m
(r)","","","","Reset lowest set bit of r/m, keep all other bits of r/m and
write result to r."
+"TZCNT rw, rw/mw","LEX.F3.0F.W0 BC
/r","Valid","Valid","Invalid","BMI1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Count the number of trailing zero bits in r/m, return result in
r."
+"TZCNT rw, rw/mw","LEX.F3.0F.W1 BC
/r","Valid","Invalid","Invalid","BMI1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Count the number of trailing zero bits in r/m, return result in
r."
diff --git a/disas/x86-data/x86_bmi2.csv b/disas/x86-data/x86_bmi2.csv
new file mode 100644
index 000000000000..70f5ac7065a7
--- /dev/null
+++ b/disas/x86-data/x86_bmi2.csv
@@ -0,0 +1,17 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"BZHI rw, rw/mw, rw","VEX.LZ.0F38.W0 F5
/r","Valid","Valid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m (r)","VEX.vvvv
(r)","","","Zero bits in r/m starting with the position in r, write result to
r."
+"BZHI rw, rw/mw, rw","VEX.LZ.0F38.W1 F5
/r","Valid","Invalid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m
(r)","VEX.vvvv (r)","","","Zero bits in r/m starting with the position in r,
write result to r."
+"MULX rw, rw, rw/mw","VEX.LZ.F2.0F38.W0 F6
/r","Valid","Valid","Invalid","BMI2","ModRM:reg (w)","VEX.vvvv (w)","ModRM:r/m
(r)","RDX (r)","","Unsigned multiply of r/m with EDX without affecting
arithmetic flags."
+"MULX rw, rw, rw/mw","VEX.LZ.F2.0F38.W1 F6
/r","Valid","Invalid","Invalid","BMI2","ModRM:reg (w)","VEX.vvvv
(w)","ModRM:r/m (r)","RDX (r)","","Unsigned multiply of r/m with RDX without
affecting arithmetic flags."
+"PDEP rw, rw, rw/mw","VEX.LZ.F2.0F38.W0 F5
/r","Valid","Valid","Invalid","BMI2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Parallel deposit of bits from r using mask in r/m, result is
writ-ten to r."
+"PDEP rw, rw, rw/mw","VEX.LZ.F2.0F38.W1 F5
/r","Valid","Invalid","Invalid","BMI2","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Parallel deposit of bits from r using mask in r/m,
result is writ-ten to r."
+"PEXT rw, rw, rw/mw","VEX.LZ.F3.0F38.W0 F5
/r","Valid","Valid","Invalid","BMI2","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Parallel extract of bits from r using mask in r/m, result is
writ-ten to r."
+"PEXT rw, rw, rw/mw","VEX.LZ.F3.0F38.W1 F5
/r","Valid","Invalid","Invalid","BMI2","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Parallel extract of bits from r using mask in r/m,
result is writ-ten to r."
+"RORX rw, rw/mw, ib","VEX.LZ.F2.0F3A.W0 F0 /r
ib","Valid","Valid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Rotate 32-bit r/m right ib times without affecting arithmetic
flags."
+"RORX rw, rw/mw, ib","VEX.LZ.F2.0F3A.W1 F0 /r
ib","Valid","Invalid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Rotate 64-bit r/m right ib times without affecting arithmetic
flags."
+"SARX rw, rw/mw, rw","VEX.LZ.F3.0F38.W0 F7
/r","Valid","Valid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m (r)","VEX.vvvv
(r)","","","Shift r/m arithmetically right with count specified in the third
operand."
+"SARX rw, rw/mw, rw","VEX.LZ.F3.0F38.W1 F7
/r","Valid","Invalid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m
(r)","VEX.vvvv (r)","","","Shift r/m arithmetically right with count specified
in the third operand."
+"SHLX rw, rw/mw, rw","VEX.LZ.66.0F38.W0 F7
/r","Valid","Valid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m (r)","VEX.vvvv
(r)","","","Shift r/m logically left with count specified in the third operand."
+"SHLX rw, rw/mw, rw","VEX.LZ.66.0F38.W1 F7
/r","Valid","Invalid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m
(r)","VEX.vvvv (r)","","","Shift r/m logically left with count specified in the
third operand."
+"SHRX rw, rw/mw, rw","VEX.LZ.F2.0F38.W0 F7
/r","Valid","Valid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m (r)","VEX.vvvv
(r)","","","Shift r/m logically right with count specified in the third
operand."
+"SHRX rw, rw/mw, rw","VEX.LZ.F2.0F38.W1 F7
/r","Valid","Invalid","Invalid","BMI2","ModRM:reg (w)","ModRM:r/m
(r)","VEX.vvvv (r)","","","Shift r/m logically right with count specified in
the third operand."
diff --git a/disas/x86-data/x86_cet.csv b/disas/x86-data/x86_cet.csv
new file mode 100644
index 000000000000..4365a253d1af
--- /dev/null
+++ b/disas/x86-data/x86_cet.csv
@@ -0,0 +1,15 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"CLRSSBSY mw","LEX.F3.0F.W0 ae /6","Valid","Valid","Invalid","CET","ModRM:r/m
(r, w)","","","","","Clear busy flag in supervisor shadow stack token reference
by m64."
+"ENDBR32","LEX.F3.0F.W0 1e
fb","Valid","Valid","Invalid","CET","","","","","","Terminate indirect branch
in 32-bit and compatibility mode."
+"ENDBR64","LEX.F3.0F.W0 1e
fa","Valid","Valid","Invalid","CET","","","","","","Terminate indirect branch
in 64-bit mode."
+"INCSSPD rw","LEX.F3.0F.W0 ae /5","Valid","Valid","Invalid","CET","ModRM:r/m
(r)","","","","","Increment SSP by 4 * r32[7:0]."
+"INCSSPQ rw","LEX.F3.0F.W1 ae /5","Valid","Valid","Invalid","CET","ModRM:r/m
(r)","","","","","Increment SSP by 8 * r64[7:0]."
+"RDSSPD rw","LEX.F3.0F.W0 1e /1","Valid","Valid","Invalid","CET","ModRM:r/m
(r)","","","","","Copy low 32 bits of shadow stack pointer (SSP) to r32."
+"RDSSPQ rw","LEX.F3.0F.W1 1e /1","Valid","Valid","Invalid","CET","ModRM:r/m
(r)","","","","","Copies shadow stack pointer (SSP) to r64."
+"RSTORSSP mw","LEX.F3.0F.W0 01 /5","Valid","Valid","Invalid","CET","ModRM:r/m
(r, w)","","","","","Restore SSP."
+"SAVEPREVSSP","LEX.F3.0F.W0 01 ea","Valid","Valid","Invalid","CET","ModRM:r/m
(r)","","","","","Save a restore-shadow-stack token on previous shadow stack."
+"SETSSBSY","LEX.F3.0F.W0 01
e8","Valid","Valid","Invalid","CET","","","","","","Set busy flag in supervisor
shadow stack token reference by IA32_PL0_SSP."
+"WRSSD mw,rw","LEX.0F38.W0 f6 /r","Valid","Valid","Invalid","CET","ModRM:r/m
(w)","ModRM:reg (r)","","","","Write 4 bytes to shadow stack."
+"WRSSQ mw,rw","LEX.0F38.W1 f6 /r","Valid","Valid","Invalid","CET","ModRM:r/m
(w)","ModRM:reg (r)","","","","Write 8 bytes to shadow stack."
+"WRUSSD mw,rw","LEX.66.0F38.W0 f5
/r","Valid","Valid","Invalid","CET","ModRM:r/m (w)","ModRM:reg
(r)","","","","Write 4 bytes to shadow stack."
+"WRUSSQ mw,rw","LEX.66.0F38.W1 f5
/r","Valid","Valid","Invalid","CET","ModRM:r/m (w)","ModRM:reg
(r)","","","","Write 8 bytes to shadow stack."
diff --git a/disas/x86-data/x86_cldemote.csv b/disas/x86-data/x86_cldemote.csv
new file mode 100644
index 000000000000..4752596a0570
--- /dev/null
+++ b/disas/x86-data/x86_cldemote.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"CLDEMOTE m8","LEX.0F.W0 1c
/0","Valid","Valid","Invalid","CLDEMOTE","ModRM:r/m (w)","","","","","Hint to
hardware to move the cache line containing m8 to a more distant level of the
cache without writing back to memory."
diff --git a/disas/x86-data/x86_clwb.csv b/disas/x86-data/x86_clwb.csv
new file mode 100644
index 000000000000..f8028a9e24c3
--- /dev/null
+++ b/disas/x86-data/x86_clwb.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"CLWB m8","LEX.66.0F.W0 AE /6","Valid","Valid","Invalid","CLWB","ModRM:r/m
(r)","","","","","Writes back modified cache line containing m8, and may retain
the line in cache hierarchy in non-modified state."
diff --git a/disas/x86-data/x86_enqcmd.csv b/disas/x86-data/x86_enqcmd.csv
new file mode 100644
index 000000000000..8f7b59e830cb
--- /dev/null
+++ b/disas/x86-data/x86_enqcmd.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"ENQCMD r64,m512","LEX.F2.0F38.W0 f8
/r","Valid","Valid","Invalid","ENQCMD","ModRM:reg (w)","ModRM:r/m
(r)","","","","Atomically enqueue 64-byte user command from source memory
operand to destination offset in ES segment specified in register operand as
offset in ES segment."
+"ENQCMDS r64,m512","LEX.F3.0F38.W0 f8
/r","Valid","Valid","Invalid","ENQCMD","ModRM:reg (w)","ModRM:r/m
(r)","","","","Atomically enqueue 64-byte command with PASID from source memory
operand to destination offset in ES segment specified in register operand as
offset in ES segment."
diff --git a/disas/x86-data/x86_f16c.csv b/disas/x86-data/x86_f16c.csv
new file mode 100644
index 000000000000..a20460332c24
--- /dev/null
+++ b/disas/x86-data/x86_f16c.csv
@@ -0,0 +1,5 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VCVTPH2PS xmm1, xmm2/m64","VEX.128.66.0F38.W0 13
/r","Valid","Valid","Invalid","F16C","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed half precision (16-bit) floating-point
values in xmm2/m64 to packed single-precision floating-point value in xmm1."
+"VCVTPH2PS ymm1, xmm2/m128","VEX.256.66.0F38.W0 13
/r","Valid","Valid","Invalid","F16C","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert eight packed half precision (16-bit) floating-point
values in xmm2/m128 to packed single-precision floating-point value in ymm1."
+"VCVTPS2PH xmm1/m128, ymm2, ib","VEX.256.66.0F3A.W0 1D /r
ib","Valid","Valid","Invalid","F16C","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Convert eight packed single-precision floating-point values in
ymm2 to packed half-precision (16-bit) floating-point values in xmm1/m128. ib
provides rounding controls."
+"VCVTPS2PH xmm1/m64, xmm2, ib","VEX.128.66.0F3A.W0 1D /r
ib","Valid","Valid","Invalid","F16C","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Convert four packed single-precision floating-point values in
xmm2 to packed half-precision (16-bit) floating-point values in xmm1/m64. ib
provides rounding controls."
diff --git a/disas/x86-data/x86_fma.csv b/disas/x86-data/x86_fma.csv
new file mode 100644
index 000000000000..05a689d4c33e
--- /dev/null
+++ b/disas/x86-data/x86_fma.csv
@@ -0,0 +1,97 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VFMADD132PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 98
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm3/mem, add to xmm2 and put result in xmm1."
+"VFMADD132PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 98
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm3/mem, add to ymm2 and put result in ymm1."
+"VFMADD132PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 98
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm3/mem, add to xmm2 and put result in xmm1."
+"VFMADD132PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 98
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm3/mem, add to ymm2 and put result in ymm1."
+"VFMADD132SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 99
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm1 and xmm3/m64, add to xmm2 and put result in xmm1."
+"VFMADD132SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 99
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm1 and xmm3/m32, add to xmm2 and put result in xmm1."
+"VFMADD213PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 A8
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm2, add to xmm3/mem and put result in xmm1."
+"VFMADD213PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 A8
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm2, add to ymm3/mem and put result in ymm1."
+"VFMADD213PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 A8
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm2, add to xmm3/mem and put result in xmm1."
+"VFMADD213PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 A8
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm2, add to ymm3/mem and put result in ymm1."
+"VFMADD213SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 A9
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm1 and xmm2, add to xmm3/m64 and put result in xmm1."
+"VFMADD213SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 A9
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm1 and xmm2, add to xmm3/m32 and put result in xmm1."
+"VFMADD231PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 B8
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm2 and xmm3/mem, add to xmm1 and put result in xmm1."
+"VFMADD231PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 B8
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm2 and ymm3/mem, add to ymm1 and put result in ymm1."
+"VFMADD231PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 B8
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm2 and xmm3/mem, add to xmm1 and put result in xmm1."
+"VFMADD231PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 B8
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm2 and ymm3/mem, add to ymm1 and put result in ymm1."
+"VFMADD231SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 B9
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm2 and xmm3/m64, add to xmm1 and put result in xmm1."
+"VFMADD231SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 B9
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm2 and xmm3/m32, add to xmm1 and put result in xmm1."
+"VFMADDSUB132PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 96
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm3/mem,add/subtract elements in xmm2 and put result in
xmm1."
+"VFMADDSUB132PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 96
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm3/mem,add/subtract elements in ymm2 and put result in
ymm1."
+"VFMADDSUB132PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 96
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm3/mem, add/subtract elements in xmm2 and put result in
xmm1."
+"VFMADDSUB132PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 96
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm3/mem, add/subtract elements in ymm2 and put result in
ymm1."
+"VFMADDSUB213PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 A6
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm2,add/subtract elements in xmm3/mem and put result in
xmm1."
+"VFMADDSUB213PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 A6
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm2,add/subtract elements in ymm3/mem and put result in
ymm1."
+"VFMADDSUB213PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 A6
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm2, add/subtract elements in xmm3/mem and put result in
xmm1."
+"VFMADDSUB213PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 A6
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm2, add/subtract elements in ymm3/mem and put result in
ymm1."
+"VFMADDSUB231PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 B6
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm2 and xmm3/mem,add/subtract elements in xmm1 and put result in
xmm1."
+"VFMADDSUB231PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 B6
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm2 and ymm3/mem,add/subtract elements in ymm1 and put result in
ymm1."
+"VFMADDSUB231PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 B6
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm2 and xmm3/mem, add/subtract elements in xmm1 and put result in
xmm1."
+"VFMADDSUB231PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 B6
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm2 and ymm3/mem, add/subtract elements in ymm1 and put result in
ymm1."
+"VFMSUB132PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 9A
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm3/mem, subtract xmm2 and put result in xmm1."
+"VFMSUB132PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 9A
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm3/mem, subtract ymm2 and put result in ymm1."
+"VFMSUB132PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 9A
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm3/mem, subtract xmm2 and put result in xmm1."
+"VFMSUB132PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 9A
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm3/mem, subtract ymm2 and put result in ymm1."
+"VFMSUB132SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 9B
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm1 and xmm3/m64, subtract xmm2 and put result in xmm1."
+"VFMSUB132SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 9B
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm1 and xmm3/m32, subtract xmm2 and put result in xmm1."
+"VFMSUB213PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 AA
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm2, subtract xmm3/mem and put result in xmm1."
+"VFMSUB213PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 AA
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm2, subtract ymm3/mem and put result in ymm1."
+"VFMSUB213PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 AA
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm2, subtract xmm3/mem and put result in xmm1."
+"VFMSUB213PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 AA
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm2, subtract ymm3/mem and put result in ymm1."
+"VFMSUB213SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 AB
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm1 and xmm2, subtract xmm3/m64 and put result in xmm1."
+"VFMSUB213SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 AB
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm1 and xmm2, subtract xmm3/m32 and put result in xmm1."
+"VFMSUB231PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 BA
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm2 and xmm3/mem, subtract xmm1 and put result in xmm1."
+"VFMSUB231PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 BA
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm2 and ymm3/mem, subtract ymm1 and put result in ymm1.S"
+"VFMSUB231PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 BA
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm2 and xmm3/mem, subtract xmm1 and put result in xmm1."
+"VFMSUB231PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 BA
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm2 and ymm3/mem, subtract ymm1 and put result in ymm1."
+"VFMSUB231SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 BB
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm2 and xmm3/m64, subtract xmm1 and put result in xmm1."
+"VFMSUB231SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 BB
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm2 and xmm3/m32, subtract xmm1 and put result in xmm1."
+"VFMSUBADD132PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 97
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm3/mem,subtract/add elements in xmm2 and put result in
xmm1."
+"VFMSUBADD132PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 97
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm3/mem,subtract/add elements in ymm2 and put result in
ymm1."
+"VFMSUBADD132PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 97
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm3/mem, subtract/add elements in xmm2 and put result in
xmm1."
+"VFMSUBADD132PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 97
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm3/mem, subtract/add elements in ymm2 and put result in
ymm1."
+"VFMSUBADD213PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 A7
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm2,subtract/add elements in xmm3/mem and put result in
xmm1."
+"VFMSUBADD213PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 A7
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm2,subtract/add elements in ymm3/mem and put result in
ymm1."
+"VFMSUBADD213PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 A7
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm2, subtract/add elements in xmm3/mem and put result in
xmm1."
+"VFMSUBADD213PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 A7
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm2, subtract/add elements in ymm3/mem and put result in
ymm1."
+"VFMSUBADD231PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 B7
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm2 and xmm3/mem,subtract/add elements in xmm1 and put result in
xmm1."
+"VFMSUBADD231PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 B7
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm2 and ymm3/mem,subtract/add elements in ymm1 and put result in
ymm1."
+"VFMSUBADD231PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 B7
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm2 and xmm3/mem, subtract/add elements in xmm1 and put result in
xmm1."
+"VFMSUBADD231PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 B7
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm2 and ymm3/mem, subtract/add elements in ymm1 and put result in
ymm1."
+"VFNMADD132PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 9C
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm3/mem, negate the multiplication result and add to xmm2
and put result in xmm1."
+"VFNMADD132PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 9C
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm3/mem, negate the multiplication result and add to ymm2
and put result in ymm1."
+"VFNMADD132PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 9C
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm3/mem, negate the multiplication result and add to xmm2
and put result in xmm1."
+"VFNMADD132PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 9C
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm3/mem, negate the multiplication result and add to ymm2
and put result in ymm1."
+"VFNMADD132SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 9D
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm1 and xmm3/mem, negate the multiplication result and add to xmm2
and put result in xmm1."
+"VFNMADD132SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 9D
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm1 and xmm3/m32, negate the multiplication result and add to xmm2
and put result in xmm1."
+"VFNMADD213PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 AC
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm2, negate the multiplication result and add to xmm3/mem
and put result in xmm1."
+"VFNMADD213PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 AC
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm2, negate the multiplication result and add to ymm3/mem
and put result in ymm1."
+"VFNMADD213PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 AC
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm2, negate the multiplication result and add to xmm3/mem
and put result in xmm1."
+"VFNMADD213PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 AC
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm2, negate the multiplication result and add to ymm3/mem
and put result in ymm1."
+"VFNMADD213SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 AD
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm1 and xmm2, negate the multiplication result and add to xmm3/mem
and put result in xmm1."
+"VFNMADD213SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 AD
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm1 and xmm2, negate the multiplication result and add to xmm3/m32
and put result in xmm1."
+"VFNMADD231PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 BC
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm2 and xmm3/mem, negate the multiplication result and add to xmm1
and put result in xmm1."
+"VFNMADD231PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 BC
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm2 and ymm3/mem, negate the multiplication result and add to ymm1
and put result in ymm1."
+"VFNMADD231PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 BC
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm2 and xmm3/mem, negate the multiplication result and add to xmm1
and put result in xmm1."
+"VFNMADD231PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 BC
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm2 and ymm3/mem, negate the multiplication result and add to ymm1
and put result in ymm1."
+"VFNMADD231SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 BD
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm2 and xmm3/mem, negate the multiplication result and add to xmm1
and put result in xmm1."
+"VFNMADD231SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 BD
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm2 and xmm3/m32, negate the multiplication result and add to xmm1
and put result in xmm1."
+"VFNMSUB132PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 9E
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm3/mem, negate the multiplication result and subtract
xmm2 and put result in xmm1."
+"VFNMSUB132PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 9E
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm3/mem, negate the multiplication result and subtract
ymm2 and put result in ymm1."
+"VFNMSUB132PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 9E
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm3/mem, negate the multiplication result and subtract
xmm2 and put result in xmm1."
+"VFNMSUB132PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 9E
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm3/mem, negate the multiplication result and subtract
ymm2 and put result in ymm1."
+"VFNMSUB132SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 9F
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm1 and xmm3/mem, negate the multiplication result and subtract
xmm2 and put result in xmm1."
+"VFNMSUB132SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 9F
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm1 and xmm3/m32, negate the multiplication result and subtract
xmm2 and put result in xmm1."
+"VFNMSUB213PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 AE
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm1 and xmm2, negate the multiplication result and subtract
xmm3/mem and put result in xmm1."
+"VFNMSUB213PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 AE
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm1 and ymm2, negate the multiplication result and subtract
ymm3/mem and put result in ymm1."
+"VFNMSUB213PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 AE
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm1 and xmm2, negate the multiplication result and subtract
xmm3/mem and put result in xmm1."
+"VFNMSUB213PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 AE
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm1 and ymm2, negate the multiplication result and subtract
ymm3/mem and put result in ymm1."
+"VFNMSUB213SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 AF
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm1 and xmm2, negate the multiplication result and subtract
xmm3/mem and put result in xmm1."
+"VFNMSUB213SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 AF
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm1 and xmm2, negate the multiplication result and subtract
xmm3/m32 and put result in xmm1."
+"VFNMSUB231PD xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W1 BE
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from xmm2 and xmm3/mem, negate the multiplication result and subtract
xmm1 and put result in xmm1."
+"VFNMSUB231PD ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W1 BE
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed double-precision floating-point
values from ymm2 and ymm3/mem, negate the multiplication result and subtract
ymm1 and put result in ymm1."
+"VFNMSUB231PS xmm1, xmm2, xmm3/m128","VEX.128.66.0F38.W0 BE
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from xmm2 and xmm3/mem, negate the multiplication result and subtract
xmm1 and put result in xmm1."
+"VFNMSUB231PS ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.W0 BE
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply packed single-precision floating-point
values from ymm2 and ymm3/mem, negate the multiplication result and subtract
ymm1 and put result in ymm1."
+"VFNMSUB231SD xmm1, xmm2, xmm3/m64","VEX.LIG.66.0F38.W1 BF
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar double-precision floating-point
value from xmm2 and xmm3/mem, negate the multiplication result and subtract
xmm1 and put result in xmm1."
+"VFNMSUB231SS xmm1, xmm2, xmm3/m32","VEX.LIG.66.0F38.W0 BF
/r","Valid","Valid","Invalid","FMA","ModRM:reg (r, w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiply scalar single-precision floating-point
value from xmm2 and xmm3/m32, negate the multiplication result and subtract
xmm1 and put result in xmm1."
diff --git a/disas/x86-data/x86_fsgsbase.csv b/disas/x86-data/x86_fsgsbase.csv
new file mode 100644
index 000000000000..e1e56d96677d
--- /dev/null
+++ b/disas/x86-data/x86_fsgsbase.csv
@@ -0,0 +1,9 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"RDFSBASE rw","LEX.F3.0F.W0 AE
/0","Valid","Invalid","Invalid","FSGSBASE","ModRM:r/m (w)","","","","","Load
the 32-bit destination register with the FS base address."
+"RDFSBASE rw","LEX.F3.0F.W1 AE
/0","Valid","Invalid","Invalid","FSGSBASE","ModRM:r/m (w)","","","","","Load
the 64-bit destination register with the FS base address."
+"RDGSBASE rw","LEX.F3.0F.W0 AE
/1","Valid","Invalid","Invalid","FSGSBASE","ModRM:r/m (w)","","","","","Load
the 32-bit destination register with the GS base address."
+"RDGSBASE rw","LEX.F3.0F.W1 AE
/1","Valid","Invalid","Invalid","FSGSBASE","ModRM:r/m (w)","","","","","Load
the 64-bit destination register with the GS base address."
+"WRFSBASE rw","LEX.F3.0F.W0 AE
/2","Valid","Invalid","Invalid","FSGSBASE","ModRM:r/m (r)","","","","","Load
the FS base address with the 32-bit value in the source register."
+"WRFSBASE rw","LEX.F3.0F.W1 AE
/2","Valid","Invalid","Invalid","FSGSBASE","ModRM:r/m (r)","","","","","Load
the FS base address with the 64-bit value in the source register."
+"WRGSBASE rw","LEX.F3.0F.W0 AE
/3","Valid","Invalid","Invalid","FSGSBASE","ModRM:r/m (r)","","","","","Load
the GS base address with the 32-bit value in the source register."
+"WRGSBASE rw","LEX.F3.0F.W1 AE
/3","Valid","Invalid","Invalid","FSGSBASE","ModRM:r/m (r)","","","","","Load
the GS base address with the 64-bit value in the source register."
diff --git a/disas/x86-data/x86_gfni.csv b/disas/x86-data/x86_gfni.csv
new file mode 100644
index 000000000000..5516183c0461
--- /dev/null
+++ b/disas/x86-data/x86_gfni.csv
@@ -0,0 +1,19 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"GF2P8AFFINEINVQB xmm,xmm/m128,ib","LEX.66.0F3A.W0 cf /r
ib","Valid","Valid","Invalid","GFNI","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Computes inverse affine transformation in the finite field
GF(2^8)."
+"GF2P8AFFINEQB xmm,xmm/m128,ib","LEX.66.0F3A.W0 ce /r
ib","Valid","Valid","Invalid","GFNI","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Computes affine transformation in the finite field GF(2^8)."
+"GF2P8MULB xmm,xmm/m128","LEX.66.0F38.W0 cf
/r","Valid","Valid","Invalid","GFNI","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiplies elements in the finite field GF(2^8)."
+"VGF2P8AFFINEINVQB xmm,xmm,xmm/m128,ib","VEX.128.66.0F3A.W1 cf /r
ib","Valid","Valid","Invalid","AVX GFNI","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","","Computes inverse affine transformation in the
finite field GF(2^8)."
+"VGF2P8AFFINEINVQB xmm{k}{z},xmm,xmm/m128/m64bcst,ib","EVEX.128.66.0F3A.W1 cf
/r ib","Valid","Valid","Invalid","AVX512VL GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Computes inverse affine transformation in the
finite field GF(2^8)."
+"VGF2P8AFFINEINVQB ymm,ymm,ymm/m256,ib","VEX.256.66.0F3A.W1 cf /r
ib","Valid","Valid","Invalid","AVX GFNI","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","","Computes inverse affine transformation in the
finite field GF(2^8)."
+"VGF2P8AFFINEINVQB ymm{k}{z},ymm,ymm/m256/m64bcst,ib","EVEX.256.66.0F3A.W1 cf
/r ib","Valid","Valid","Invalid","AVX512VL GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Computes inverse affine transformation in the
finite field GF(2^8)."
+"VGF2P8AFFINEINVQB zmm{k}{z},zmm,zmm/m512/m64bcst,ib","EVEX.512.66.0F3A.W1 cf
/r ib","Valid","Valid","Invalid","AVX512F GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Computes inverse affine transformation in the
finite field GF(2^8)."
+"VGF2P8AFFINEQB xmm,xmm,xmm/m128,ib","VEX.128.66.0F3A.W1 ce /r
ib","Valid","Valid","Invalid","AVX GFNI","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","","Computes affine transformation in the finite
field GF(2^8)."
+"VGF2P8AFFINEQB xmm{k}{z},xmm,xmm/m128/m64bcst,ib","EVEX.128.66.0F3A.W1 ce /r
ib","Valid","Valid","Invalid","AVX512VL GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Computes affine transformation in the finite
field GF(2^8)."
+"VGF2P8AFFINEQB ymm,ymm,ymm/m256,ib","VEX.256.66.0F3A.W1 ce /r
ib","Valid","Valid","Invalid","AVX GFNI","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","","Computes affine transformation in the finite
field GF(2^8)."
+"VGF2P8AFFINEQB ymm{k}{z},ymm,ymm/m256/m64bcst,ib","EVEX.256.66.0F3A.W1 ce /r
ib","Valid","Valid","Invalid","AVX512VL GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Computes affine transformation in the finite
field GF(2^8)."
+"VGF2P8AFFINEQB zmm{k}{z},zmm,zmm/m512/m64bcst,ib","EVEX.512.66.0F3A.W1 ce /r
ib","Valid","Valid","Invalid","AVX512F GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","ib","Full","Computes affine transformation in the finite
field GF(2^8)."
+"VGF2P8MULB xmm,xmm,xmm/m128","VEX.128.66.0F38.W0 cf
/r","Valid","Valid","Invalid","AVX GFNI","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiplies elements in the finite field GF(2^8)."
+"VGF2P8MULB xmm{k}{z},xmm,xmm/m128","EVEX.128.66.0F38.W0 cf
/r","Valid","Valid","Invalid","AVX512VL GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiplies elements in the finite field
GF(2^8)."
+"VGF2P8MULB ymm,ymm,ymm/m256","VEX.256.66.0F38.W0 cf
/r","Valid","Valid","Invalid","AVX GFNI","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","","","Multiplies elements in the finite field GF(2^8)."
+"VGF2P8MULB ymm{k}{z},ymm,ymm/m256","EVEX.256.66.0F38.W0 cf
/r","Valid","Valid","Invalid","AVX512VL GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full","Multiplies elements in the finite field
GF(2^8)."
+"VGF2P8MULB zmm{k}{z},zmm,zmm/m512","EVEX.512.66.0F38.W0 cf
/r","Valid","Valid","Invalid","AVX512F GFNI","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Multiplies elements in the finite field
GF(2^8)."
diff --git a/disas/x86-data/x86_hreset.csv b/disas/x86-data/x86_hreset.csv
new file mode 100644
index 000000000000..5ee644846790
--- /dev/null
+++ b/disas/x86-data/x86_hreset.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"HRESET ib","LEX.F3.0F3A.W0 F0 C0
ib","Valid","Valid","Invalid","HRESET","ib","RAX (r)","","","","Processor
history reset request. Controlled by the EAX implicit operand."
diff --git a/disas/x86-data/x86_invpcid.csv b/disas/x86-data/x86_invpcid.csv
new file mode 100644
index 000000000000..b09612909a21
--- /dev/null
+++ b/disas/x86-data/x86_invpcid.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"INVPCID r64, m128","LEX.66.0F38.W0 82
/r","Valid","Valid","Invalid","INVPCID","ModRM:reg (r)","ModRM:r/m (r,
ModRM:[7:6] must not be 11b)","","","","Invalidates entries in the TLBs and
paging-structure caches based on invalidation type in r and descrip-tor in
m128."
diff --git a/disas/x86-data/x86_lzcnt.csv b/disas/x86-data/x86_lzcnt.csv
new file mode 100644
index 000000000000..b9b2af7ed7c4
--- /dev/null
+++ b/disas/x86-data/x86_lzcnt.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"LZCNT rw, rw/mw","LEX.F3.0F.W0 BD
/r","Valid","Valid","Valid","LZCNT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Count the number of leading zero bits in r/m, return result in
r."
+"LZCNT rw, rw/mw","LEX.F3.0F.W1 BD
/r","Valid","Invalid","Invalid","LZCNT","ModRM:reg (w)","ModRM:r/m
(r)","","","","Count the number of leading zero bits in r/m, return result in
r."
diff --git a/disas/x86-data/x86_mmx.csv b/disas/x86-data/x86_mmx.csv
new file mode 100644
index 000000000000..af9b2e9f7631
--- /dev/null
+++ b/disas/x86-data/x86_mmx.csv
@@ -0,0 +1,60 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"MOVD mm, rw/mw","LEX.0F.W0 6E /r","Valid","Valid","Invalid","MMX","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move doubleword from r/m to mm."
+"MOVD rw/mw, mm","LEX.0F.W0 7E /r","Valid","Valid","Invalid","MMX","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move doubleword from mm to r/m."
+"MOVQ mm, rw/mw","LEX.0F.W1 6E
/r","Valid","Invalid","Invalid","MMX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move quadword from r/m to mm."
+"MOVQ mm, mm/m64","LEX.0F.W0 6F /r","Valid","Valid","Invalid","MMX","ModRM:reg
(w)","ModRM:r/m (r)","","","","Move quadword from mm/m64 to mm."
+"MOVQ rw/mw, mm","LEX.0F.W1 7E
/r","Valid","Invalid","Invalid","MMX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move quadword from mm to r/m."
+"MOVQ mm/m64, mm","LEX.0F.W0 7F /r","Valid","Valid","Invalid","MMX","ModRM:r/m
(w)","ModRM:reg (r)","","","","Move quadword from mm to mm/m64."
+"PACKSSDW mm1, mm2/m64","LEX.0F.W0 6B
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Converts 2 packed signed doubleword integers from mm1 and from
mm2/m64 into 4 packed signed word integers in mm1 using signed saturation."
+"PACKSSWB mm1, mm2/m64","LEX.0F.W0 63
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Converts 4 packed signed word integers from mm1 and from mm2/m64
into 8 packed signed byte integers in mm1 using signed saturation."
+"PACKUSWB mm, mm/m64","LEX.0F.W0 67
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Converts 4 signed word integers from mm and 4 signed word
integers from mm/m64 into 8 unsigned byte integers in mm using unsigned
saturation."
+"PADDB mm, mm/m64","LEX.0F.W0 FC
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed byte integers from mm/m64 and mm."
+"PADDD mm, mm/m64","LEX.0F.W0 FE
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed doubleword integers from mm/m64 and mm."
+"PADDQ mm, mm/m64","LEX.0F.W0 D4
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed quadword integers from mm/m64 and mm."
+"PADDSB mm, mm/m64","LEX.0F.W0 EC
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed signed byte integers from mm/m64 and mm and saturate
the results."
+"PADDSW mm, mm/m64","LEX.0F.W0 ED
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed signed word integers from mm/m64 and mm and saturate
the results."
+"PADDUSB mm, mm/m64","LEX.0F.W0 DC
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed unsigned byte integers from mm/m64 and mm and
saturate the results."
+"PADDUSW mm, mm/m64","LEX.0F.W0 DD
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed unsigned word integers from mm/m64 and mm and
saturate the results."
+"PADDW mm, mm/m64","LEX.0F.W0 FD
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed word integers from mm/m64 and mm."
+"PAND mm, mm/m64","LEX.0F.W0 DB /r","Valid","Valid","Invalid","MMX","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Bitwise AND mm/m64 and mm."
+"PANDN mm, mm/m64","LEX.0F.W0 DF
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Bitwise AND NOT of mm/m64 and mm."
+"PCMPEQB mm, mm/m64","LEX.0F.W0 74
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed bytes in mm/m64 and mm for equality."
+"PCMPEQD mm, mm/m64","LEX.0F.W0 76
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed doublewords in mm/m64 and mm for equality."
+"PCMPEQW mm, mm/m64","LEX.0F.W0 75
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed words in mm/m64 and mm for equality."
+"PCMPGTB mm, mm/m64","LEX.0F.W0 64
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed byte integers in mm and mm/m64 for greater
than."
+"PCMPGTD mm, mm/m64","LEX.0F.W0 66
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed doubleword integers in mm and mm/m64 for
greater than."
+"PCMPGTW mm, mm/m64","LEX.0F.W0 65
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed word integers in mm and mm/m64 for greater
than."
+"PMADDWD mm, mm/m64","LEX.0F.W0 F5
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed words in mm by the packed words in mm/m64,
add adjacent doubleword results, and store in mm."
+"PMULHW mm, mm/m64","LEX.0F.W0 E5
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed signed word integers in mm1 register and
mm2/m64, and store the high 16 bits of the results in mm1."
+"PMULLW mm, mm/m64","LEX.0F.W0 D5
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed signed word integers in mm1 register and
mm2/m64, and store the low 16 bits of the results in mm1."
+"POR mm, mm/m64","LEX.0F.W0 EB /r","Valid","Valid","Invalid","MMX","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Bitwise OR of mm/m64 and mm."
+"PSLLD mm, ib","LEX.0F.W0 72 /6 ib","Valid","Valid","Invalid","MMX","ModRM:r/m
(r, w)","ib","","","","Shift doublewords in mm left by ib while shifting in 0s."
+"PSLLD mm, mm/m64","LEX.0F.W0 F2
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift doublewords in mm left by mm/m64 while shifting in 0s."
+"PSLLQ mm, ib","LEX.0F.W0 73 /6 ib","Valid","Valid","Invalid","MMX","ModRM:r/m
(r, w)","ib","","","","Shift quadword in mm left by ib while shifting in 0s."
+"PSLLQ mm, mm/m64","LEX.0F.W0 F3
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift quadword in mm left by mm/m64 while shifting in 0s."
+"PSLLW mm1, ib","LEX.0F.W0 71 /6
ib","Valid","Valid","Invalid","MMX","ModRM:r/m (r, w)","ib","","","","Shift
words in mm left by ib while shifting in 0s."
+"PSLLW mm, mm/m64","LEX.0F.W0 F1
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift words in mm left mm/m64 while shifting in 0s."
+"PSRAD mm, ib","LEX.0F.W0 72 /4 ib","Valid","Valid","Invalid","MMX","ModRM:r/m
(r, w)","ib","","","","Shift doublewords in mm right by ib while shifting in
sign bits."
+"PSRAD mm, mm/m64","LEX.0F.W0 E2
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift doublewords in mm right by mm/m64 while shifting in sign
bits."
+"PSRAW mm, ib","LEX.0F.W0 71 /4 ib","Valid","Valid","Invalid","MMX","ModRM:r/m
(r, w)","ib","","","","Shift words in mm right by ib while shifting in sign
bits"
+"PSRAW mm, mm/m64","LEX.0F.W0 E1
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift words in mm right by mm/m64 while shifting in sign bits."
+"PSRLD mm, ib","LEX.0F.W0 72 /2 ib","Valid","Valid","Invalid","MMX","ModRM:r/m
(r, w)","ib","","","","Shift doublewords in mm right by ib while shifting in
0s."
+"PSRLD mm, mm/m64","LEX.0F.W0 D2
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift doublewords in mm right by amount specified in mm/m64
while shifting in 0s."
+"PSRLQ mm, ib","LEX.0F.W0 73 /2 ib","Valid","Valid","Invalid","MMX","ModRM:r/m
(r, w)","ib","","","","Shift mm right by ib while shifting in 0s."
+"PSRLQ mm, mm/m64","LEX.0F.W0 D3
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift mm right by amount specified in mm/m64 while shifting in
0s."
+"PSRLW mm, ib","LEX.0F.W0 71 /2 ib","Valid","Valid","Invalid","MMX","ModRM:r/m
(r, w)","ib","","","","Shift words in mm right by ib while shifting in 0s."
+"PSRLW mm, mm/m64","LEX.0F.W0 D1
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift words in mm right by amount specified in mm/m64 while
shifting in 0s."
+"PSUBB mm, mm/m64","LEX.0F.W0 F8
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed byte integers in mm/m64 from packed byte
integers in mm."
+"PSUBD mm, mm/m64","LEX.0F.W0 FA
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed doubleword integers in mm/m64 from packed
doubleword integers in mm."
+"PSUBSB mm, mm/m64","LEX.0F.W0 E8
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract signed packed bytes in mm/m64 from signed packed bytes
in mm and saturate results."
+"PSUBSW mm, mm/m64","LEX.0F.W0 E9
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract signed packed words in mm/m64 from signed packed words
in mm and saturate results."
+"PSUBUSB mm, mm/m64","LEX.0F.W0 D8
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract unsigned packed bytes in mm/m64 from unsigned packed
bytes in mm and saturate result."
+"PSUBUSW mm, mm/m64","LEX.0F.W0 D9
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract unsigned packed words in mm/m64 from unsigned packed
words in mm and saturate result."
+"PSUBW mm, mm/m64","LEX.0F.W0 F9
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed word integers in mm/m64 from packed word
integers in mm."
+"PUNPCKHBW mm, mm/m64","LEX.0F.W0 68
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpack and interleave high-order bytes from mm and mm/m64 into
mm."
+"PUNPCKHDQ mm, mm/m64","LEX.0F.W0 6A
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpack and interleave high-order doublewords from mm and mm/m64
into mm."
+"PUNPCKHWD mm, mm/m64","LEX.0F.W0 69
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpack and interleave high-order words from mm and mm/m64 into
mm."
+"PUNPCKLBW mm, mm/m32","LEX.0F.W0 60
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Interleave low-order bytes from mm and mm/m32 into mm."
+"PUNPCKLDQ mm, mm/m32","LEX.0F.W0 62
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Interleave low-order doublewords from mm and mm/m32 into mm."
+"PUNPCKLWD mm, mm/m32","LEX.0F.W0 61
/r","Valid","Valid","Invalid","MMX","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Interleave low-order words from mm and mm/m32 into mm."
+"PXOR mm, mm/m64","LEX.0F.W0 EF /r","Valid","Valid","Invalid","MMX","ModRM:reg
(r, w)","ModRM:r/m (r)","","","","Bitwise XOR of mm/m64 and mm."
diff --git a/disas/x86-data/x86_movdir64b.csv b/disas/x86-data/x86_movdir64b.csv
new file mode 100644
index 000000000000..c177b1d6f98d
--- /dev/null
+++ b/disas/x86-data/x86_movdir64b.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"MOVDIR64B ra, m512","LEX.66.0F38.W0 F8
/r","Valid","Valid","Invalid","MOVDIR64B","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move 64-bytes as Direct Store."
diff --git a/disas/x86-data/x86_movdiri.csv b/disas/x86-data/x86_movdiri.csv
new file mode 100644
index 000000000000..f6f6c4f7fc44
--- /dev/null
+++ b/disas/x86-data/x86_movdiri.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"MOVDIRI mw, rw","LEX.0F38.W0 F9 /r
o32","Valid","Valid","Invalid","MOVDIRI","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move doubleword as Direct Store."
+"MOVDIRI mw, rw","LEX.0F38.W1 F9 /r
o64","Valid","Valid","Invalid","MOVDIRI","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move quadword as Direct Store."
diff --git a/disas/x86-data/x86_mpx.csv b/disas/x86-data/x86_mpx.csv
new file mode 100644
index 000000000000..ebe7c6cebf10
--- /dev/null
+++ b/disas/x86-data/x86_mpx.csv
@@ -0,0 +1,9 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"BNDCL bnd, rw/mw","LEX.F3.0F.W0 1A
/r","Valid","Valid","Invalid","MPX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Generate a #BR if the address in r/m is lower than the lower
bound in bnd.LB."
+"BNDCN bnd, rw/mw","LEX.F2.0F.W0 1B
/r","Valid","Valid","Invalid","MPX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Generate a #BR if the address in r/m is higher than the upper
bound in bnd.UB (bnb.UB not in 1's complement form)."
+"BNDCU bnd, rw/mw","LEX.F2.0F.W0 1A
/r","Valid","Valid","Invalid","MPX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Generate a #BR if the address in r/m is higher than the upper
bound in bnd.UB (bnb.UB in 1's complement form)."
+"BNDLDX bnd, mib","LEX.0F.W0 1A /r","Valid","Valid","Invalid","MPX","ModRM:reg
(w)","SIB.base (r): Address of pointer SIB.index (r)","","","","Load the bounds
stored in a bound table entry (BTE) into bnd with address translation using the
base of mib and conditional on the index of mib matching the pointer value in
the BTE."
+"BNDMK bnd, mem","LEX.F3.0F.W0 1B
/r","Valid","Valid","Invalid","MPX","ModRM:reg (w)","ModRM:r/m (r, ModRM:[7:6]
must not be 11b)","","","","Make lower and upper bounds from m32 and store them
in bnd."
+"BNDMOV bnd, bnd/mem","LEX.66.0F.W0 1A
/r","Valid","Valid","Invalid","MPX","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move lower and upper bound from bnd2/m64 to bound register bnd1."
+"BNDMOV bnd/mem, bnd","LEX.66.0F.W0 1B
/r","Valid","Valid","Invalid","MPX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move lower and upper bound from bnd2 to bnd1/m64."
+"BNDSTX mib, bnd","LEX.0F.W0 1B /r","Valid","Valid","Invalid","MPX","SIB.base
(r): Address of pointer SIB.index (r)","ModRM:reg (r)","","","","Store the
bounds in bnd and the pointer value in the index register of mib to a bound
table entry (BTE) with address translation using the base of mib."
diff --git a/disas/x86-data/x86_msrlist.csv b/disas/x86-data/x86_msrlist.csv
new file mode 100644
index 000000000000..0c94ba6470a8
--- /dev/null
+++ b/disas/x86-data/x86_msrlist.csv
@@ -0,0 +1,4 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"RDMSRLIST","LEX.F2.0F.W0 01 C6","Valid","Valid","Invalid","MSRLIST","RDI
(r)","RSI (r)","RCX (r)","","","Read the requested list of MSRs, and store the
read values to memory."
+"WRMSRLIST","LEX.F3.0F.W0 01 C6","Valid","Valid","Invalid","MSRLIST","RDI
(r)","RSI (r)","RCX (r)","","","Write requested list of MSRs with the values
specified in memory."
+"WRMSRNS","LEX.0F.W0 01 C6","Valid","Valid","Invalid","MSRLIST","RDX (r)","RAX
(r)","RCX (r)","","","Write the value in EDX:EAX to MSR specified by ECX."
diff --git a/disas/x86-data/x86_ospke.csv b/disas/x86-data/x86_ospke.csv
new file mode 100644
index 000000000000..99247830b63e
--- /dev/null
+++ b/disas/x86-data/x86_ospke.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"RDPKRU","LEX.0F.W0 01
EE","Valid","Valid","Valid","OSPKE","","","","","","Reads PKRU into EAX."
+"WRPKRU","LEX.0F.W0 01
EF","Valid","Valid","Valid","OSPKE","","","","","","Writes EAX into PKRU."
diff --git a/disas/x86-data/x86_pclmulqdq.csv b/disas/x86-data/x86_pclmulqdq.csv
new file mode 100644
index 000000000000..723d959fe9d4
--- /dev/null
+++ b/disas/x86-data/x86_pclmulqdq.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"PCLMULQDQ xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 44 /r
ib","Valid","Valid","Invalid","PCLMULQDQ","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Carry-less multiplication of one quadword of xmm1 by one
quadword of xmm2/m128, stores the 128-bit result in xmm1. The immediate is used
to determine which quadwords of xmm1 and xmm2/m128 should be used."
+"VPCLMULQDQ xmm1, xmm2, xmm3/m128, ib","VEX.128.66.0F3A.WIG 44 /r
ib","Valid","Valid","Invalid","PCLMULQDQ AVX","ModRM:reg (w)","VEX.vvvv
(r)","ModRM:r/m (r)","ib","","Carry-less multiplication of one quadword of xmm2
by one quadword of xmm3/m128, stores the 128-bit result in xmm1. The immediate
is used to determine which quadwords of xmm2 and xmm3/m128 should be used."
diff --git a/disas/x86-data/x86_pconfig.csv b/disas/x86-data/x86_pconfig.csv
new file mode 100644
index 000000000000..edc2fa9b7c0e
--- /dev/null
+++ b/disas/x86-data/x86_pconfig.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"PCONFIG","LEX.0F.W0 01
c5","Valid","Valid","Invalid","PCONFIG","","","","","","This instruction is
used to execute functions for configuring platform features."
diff --git a/disas/x86-data/x86_prefetchw.csv b/disas/x86-data/x86_prefetchw.csv
new file mode 100644
index 000000000000..b4c6f4338b06
--- /dev/null
+++ b/disas/x86-data/x86_prefetchw.csv
@@ -0,0 +1,7 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"PREFETCHNTA m8","LEX.0F.W0 18
/0","Valid","Valid","Valid","PREFETCHW","ModRM:r/m (r)","","","","","Move data
from m8 closer to the processor using NTA hint."
+"PREFETCHT0 m8","LEX.0F.W0 18
/1","Valid","Valid","Valid","PREFETCHW","ModRM:r/m (r)","","","","","Move data
from m8 closer to the processor using T0 hint."
+"PREFETCHT1 m8","LEX.0F.W0 18
/2","Valid","Valid","Valid","PREFETCHW","ModRM:r/m (r)","","","","","Move data
from m8 closer to the processor using T1 hint."
+"PREFETCHT2 m8","LEX.0F.W0 18
/3","Valid","Valid","Valid","PREFETCHW","ModRM:r/m (r)","","","","","Move data
from m8 closer to the processor using T2 hint."
+"PREFETCHW m8","LEX.0F.W0 0D
/1","Valid","Valid","Invalid","PREFETCHW","ModRM:r/m (r)","","","","","Move
data from m8 closer to the processor in anticipation of a write."
+"PREFETCHWT1 m8","LEX.0F.W0 0D
/2","Valid","Valid","Invalid","PREFETCHW","ModRM:r/m (r)","","","","","Move
data from m8 closer to the processor using T1 hint with intent to write."
diff --git a/disas/x86-data/x86_raoint.csv b/disas/x86-data/x86_raoint.csv
new file mode 100644
index 000000000000..7a6dea2fe716
--- /dev/null
+++ b/disas/x86-data/x86_raoint.csv
@@ -0,0 +1,9 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"AADD mw, rw","LEX.0F38.W0 fc
/r","Valid","Valid","Invalid","RAOINT","ModRM:r/m (r, w, ModRM:[7:6] must not
be 11b)","ModRM:reg (r)","","","","Atomically Add."
+"AADD mw, rw","LEX.0F38.W1 fc
/r","Valid","Invalid","Invalid","RAOINT","ModRM:r/m (r, w, ModRM:[7:6] must not
be 11b)","ModRM:reg (r)","","","","Atomically Add."
+"AAND mw, rw","LEX.66.0F38.W0 fc
/r","Valid","Valid","Invalid","RAOINT","ModRM:r/m (r, w, ModRM:[7:6] must not
be 11b)","ModRM:reg (r)","","","","Atomically AND."
+"AAND mw, rw","LEX.66.0F38.W1 fc
/r","Valid","Invalid","Invalid","RAOINT","ModRM:r/m (r, w, ModRM:[7:6] must not
be 11b)","ModRM:reg (r)","","","","Atomically AND."
+"AOR mw, rw","LEX.F2.0F38.W0 fc
/r","Valid","Valid","Invalid","RAOINT","ModRM:r/m (r, w, ModRM:[7:6] must not
be 11b)","ModRM:reg (r)","","","","Atomically OR."
+"AOR mw, rw","LEX.F2.0F38.W1 fc
/r","Valid","Invalid","Invalid","RAOINT","ModRM:r/m (r, w, ModRM:[7:6] must not
be 11b)","ModRM:reg (r)","","","","Atomically OR."
+"AXOR mw, rw","LEX.F3.0F38.W0 fc
/r","Valid","Valid","Invalid","RAOINT","ModRM:r/m (r, w, ModRM:[7:6] must not
be 11b)","ModRM:reg (r)","","","","Atomically XOR."
+"AXOR mw, rw","LEX.F3.0F38.W1 fc
/r","Valid","Invalid","Invalid","RAOINT","ModRM:r/m (r, w, ModRM:[7:6] must not
be 11b)","ModRM:reg (r)","","","","Atomically XOR."
diff --git a/disas/x86-data/x86_rdpid.csv b/disas/x86-data/x86_rdpid.csv
new file mode 100644
index 000000000000..ecf7a2e7b052
--- /dev/null
+++ b/disas/x86-data/x86_rdpid.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"RDPID rw","LEX.F3.0F.W0 C7 /7","Valid","Valid","Invalid","RDPID","ModRM:r/m
(w)","","","","","Read IA32_TSC_AUX into r."
diff --git a/disas/x86-data/x86_rdrand.csv b/disas/x86-data/x86_rdrand.csv
new file mode 100644
index 000000000000..d2ed1147d47b
--- /dev/null
+++ b/disas/x86-data/x86_rdrand.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"RDRAND rw","LEX.0F.WX C7 /6","Valid","Valid","Invalid","RDRAND","ModRM:r/m
(w)","","","","","Read a 16/32/64-bit random number and store in the
destination register."
diff --git a/disas/x86-data/x86_rdseed.csv b/disas/x86-data/x86_rdseed.csv
new file mode 100644
index 000000000000..d884a9d4d620
--- /dev/null
+++ b/disas/x86-data/x86_rdseed.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"RDSEED rw","LEX.0F.WX C7 /7","Valid","Valid","Invalid","RDSEED","ModRM:r/m
(w)","","","","","Read a 16/32/64-bit NIST SP800-90B & C compliant random value
and store in the destination register."
diff --git a/disas/x86-data/x86_rtm.csv b/disas/x86-data/x86_rtm.csv
new file mode 100644
index 000000000000..a358aadba6ef
--- /dev/null
+++ b/disas/x86-data/x86_rtm.csv
@@ -0,0 +1,5 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"XABORT ib","LEX.WN C6 F8
ib","Valid","Valid","Invalid","RTM","ib","","","","","Causes an RTM abort if in
RTM execution"
+"XBEGIN relw","LEX.WN C7 F8
iw","Valid","Valid","Invalid","RTM","iw","","","","","Specifies the start of an
RTM region. Provides a 32-bit relative offset to compute the address of the
fallback instruction address at which execution resumes following an RTM abort."
+"XEND","LEX.0F.W0 01
D5","Valid","Valid","Invalid","RTM","","","","","","Specifies the end of an RTM
code region."
+"XTEST","LEX.0F.W0 01 D6","Valid","Valid","Invalid","HLE
RTM","","","","","","Test if executing in a transactional region"
diff --git a/disas/x86-data/x86_serialize.csv b/disas/x86-data/x86_serialize.csv
new file mode 100644
index 000000000000..5e5d1c2544a8
--- /dev/null
+++ b/disas/x86-data/x86_serialize.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"SERIALIZE","LEX.0F.W0 01
E8","Valid","Valid","Invalid","SERIALIZE","","","","","","Serializes
instruction execution."
diff --git a/disas/x86-data/x86_sha.csv b/disas/x86-data/x86_sha.csv
new file mode 100644
index 000000000000..de9f5331ce76
--- /dev/null
+++ b/disas/x86-data/x86_sha.csv
@@ -0,0 +1,8 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"SHA1MSG1 xmm1, xmm2/m128","LEX.0F38.W0 C9
/r","Valid","Valid","Invalid","SHA","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Performs an intermediate calculation for the next four SHA1
message dwords using previous message dwords from xmm1 and xmm2/m128, storing
the result in xmm1."
+"SHA1MSG2 xmm1, xmm2/m128","LEX.0F38.W0 CA
/r","Valid","Valid","Invalid","SHA","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Performs the final calculation for the next four SHA1 message
dwords using intermediate results from xmm1 and the previous message dwords
from xmm2/m128, storing the result in xmm1."
+"SHA1NEXTE xmm1, xmm2/m128","LEX.0F38.W0 C8
/r","Valid","Valid","Invalid","SHA","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Calculates SHA1 state variable E after four rounds of operation
from the current SHA1 state variable A in xmm1. The calculated value of the
SHA1 state variable E is added to the scheduled dwords in xmm2/m128, and stored
with some of the scheduled dwords in xmm1."
+"SHA1RNDS4 xmm1, xmm2/m128, ib","LEX.0F3A.W0 CC /r
ib","Valid","Valid","Invalid","SHA","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Performs four rounds of SHA1 operation operating on SHA1 state
(A,B,C,D) from xmm1, with a pre-computed sum of the next 4 round message dwords
and state variable E from xmm2/m128. The immediate byte controls logic
functions and round constants."
+"SHA256MSG1 xmm1, xmm2/m128","LEX.0F38.W0 CC
/r","Valid","Valid","Invalid","SHA","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Performs an intermediate calculation for the next four SHA256
message dwords using previous message dwords from xmm1 and xmm2/m128, storing
the result in xmm1."
+"SHA256MSG2 xmm1, xmm2/m128","LEX.0F38.W0 CD
/r","Valid","Valid","Invalid","SHA","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Performs the final calculation for the next four SHA256 message
dwords using previous message dwords from xmm1 and xmm2/m128, storing the
result in xmm1."
+"SHA256RNDS2 xmm1, xmm2/m128, <XMM0>","LEX.0F38.W0 CB
/r","Valid","Valid","Invalid","SHA","ModRM:reg (r, w)","ModRM:r/m
(r)","Implicit XMM0 (r)","","","Perform 2 rounds of SHA256 operation using an
initial SHA256 state (C,D,G,H) from xmm1, an initial SHA256 state (A,B,E,F)
from xmm2/m128, and a pre-computed sum of the next 2 round mes-sage dwords and
the corresponding round constants from the implicit operand XMM0, storing the
updated SHA256 state (A,B,E,F) result in xmm1."
diff --git a/disas/x86-data/x86_smap.csv b/disas/x86-data/x86_smap.csv
new file mode 100644
index 000000000000..e4e9b06a420e
--- /dev/null
+++ b/disas/x86-data/x86_smap.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"CLAC","LEX.0F.W0 01
CA","Valid","Valid","Invalid","SMAP","","","","","","Clear the AC flag in the
EFLAGS register."
+"STAC","LEX.0F.W0 01 CB","Valid","Valid","Invalid","SMAP","","","","","","Set
the AC flag in the EFLAGS register."
diff --git a/disas/x86-data/x86_sse.csv b/disas/x86-data/x86_sse.csv
new file mode 100644
index 000000000000..2d9c84a4ab0b
--- /dev/null
+++ b/disas/x86-data/x86_sse.csv
@@ -0,0 +1,58 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"ADDPS xmm1, xmm2/m128","LEX.0F.W0 58
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed single-precision floating-point values from xmm2/m128
to xmm1 and store result in xmm1."
+"ADDSS xmm1, xmm2/m32","LEX.F3.0F.W0 58
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add the low single-precision floating-point value from xmm2/mem
to xmm1 and store the result in xmm1."
+"ANDNPS xmm1, xmm2/m128","LEX.0F.W0 55
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the bitwise logical AND NOT of packed single-precision
floating-point values in xmm1 and xmm2/mem."
+"ANDPS xmm1, xmm2/m128","LEX.0F.W0 54
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the bitwise logical AND of packed single-precision
floating-point values in xmm1 and xmm2/mem."
+"CMPPS xmm1, xmm2/m128, ib","LEX.0F.W0 C2 /r
ib","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Compare packed single-precision floating-point values in
xmm2/m128 and xmm1 using bits 2:0 of ib as a comparison predicate."
+"CMPSS xmm1, xmm2/m32, ib","LEX.F3.0F.W0 C2 /r
ib","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Compare low single-precision floating-point value in xmm2/m32
and xmm1 using bits 2:0 of ib as comparison predicate."
+"COMISS xmm1, xmm2/m32","LEX.0F.W0 2F
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r)","ModRM:r/m
(r)","","","","Compare low single-precision floating-point values in xmm1 and
xmm2/mem32 and set the EFLAGS flags accordingly."
+"DIVPS xmm1, xmm2/m128","LEX.0F.W0 5E
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Divide packed single-precision floating-point values in xmm1 by
packed single-precision floating-point values in xmm2/mem."
+"DIVSS xmm1, xmm2/m32","LEX.F3.0F.W0 5E
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Divide low single-precision floating-point value in xmm1 by low
single-precision floating-point value in xmm2/m32."
+"LDMXCSR m32","LEX.0F.W0 AE /2","Valid","Valid","Invalid","SSE","ModRM:r/m (r,
ModRM:[7:6] must not be 11b)","","","","","Load MXCSR register from m32."
+"MAXPS xmm1, xmm2/m128","LEX.0F.W0 5F
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the maximum single-precision floating-point values
between xmm1 and xmm2/mem."
+"MAXSS xmm1, xmm2/m32","LEX.F3.0F.W0 5F
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the maximum scalar single-precision floating-point value
between xmm2/m32 and xmm1."
+"MINPS xmm1, xmm2/m128","LEX.0F.W0 5D
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the minimum single-precision floating-point values
between xmm1 and xmm2/mem."
+"MINSS xmm1, xmm2/m32","LEX.F3.0F.W0 5D
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the minimum scalar single-precision floating-point value
between xmm2/m32 and xmm1."
+"MOVAPS xmm1, xmm2/m128","LEX.0F.W0 28
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed single-precision floating-point values from
xmm2/mem to xmm1."
+"MOVAPS xmm2/m128, xmm1","LEX.0F.W0 29
/r","Valid","Valid","Invalid","SSE","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed single-precision floating-point values from
xmm1 to xmm2/mem."
+"MOVHLPS xmm1, xmm2","LEX.0F.W0 12
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move two packed single-precision floating-point values from high
quadword of xmm2 to low quadword of xmm1."
+"MOVHPS xmm1, m64","LEX.0F.W0 16
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Move two packed single-precision floating-point values from m64
to high quadword of xmm1."
+"MOVHPS m64, xmm1","LEX.0F.W0 17
/r","Valid","Valid","Invalid","SSE","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move two packed single-precision floating-point values from high
quadword of xmm1 to m64."
+"MOVLHPS xmm1, xmm2","LEX.0F.W0 16
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move two packed single-precision floating-point values from low
quadword of xmm2 to high quadword of xmm1."
+"MOVLPS xmm1, m64","LEX.0F.W0 12
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Move two packed single-precision floating-point values from m64
to low quadword of xmm1."
+"MOVLPS m64, xmm1","LEX.0F.W0 13
/r","Valid","Valid","Invalid","SSE","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move two packed single-precision floating-point values from low
quadword of xmm1 to m64."
+"MOVMSKPS rw, xmm","LEX.0F.W0 50
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Extract 4-bit sign mask from xmm and store in reg. The upper
bits of r are are zeroed."
+"MOVNTPS m128, xmm1","LEX.0F.W0 2B
/r","Valid","Valid","Invalid","SSE","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed single-precision values xmm1 to mem using
non-temporal hint."
+"MOVSS xmm1, m32","LEX.F3.0F.W0 10
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Load scalar single-precision floating-point value from m32 to
xmm1 register."
+"MOVSS xmm1, xmm2","LEX.F3.0F.W0 10
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Merge scalar single-precision floating-point value from xmm2 to
xmm1 register."
+"MOVSS xmm2/m32, xmm1","LEX.F3.0F.W0 11
/r","Valid","Valid","Invalid","SSE","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move scalar single-precision floating-point value from xmm1
register to xmm2/m32."
+"MOVUPS xmm1, xmm2/m128","LEX.0F.W0 10
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed single-precision floating-point from
xmm2/mem to xmm1."
+"MOVUPS xmm2/m128, xmm1","LEX.0F.W0 11
/r","Valid","Valid","Invalid","SSE","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move unaligned packed single-precision floating-point from xmm1
to xmm2/mem."
+"MULPS xmm1, xmm2/m128","LEX.0F.W0 59
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply packed single-precision floating-point values in
xmm2/m128 with xmm1 and store result in xmm1."
+"MULSS xmm1, xmm2/m32","LEX.F3.0F.W0 59
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the low single-precision floating-point value in
xmm2/m32 by the low single-precision floating-point value in xmm1."
+"ORPS xmm1, xmm2/m128","LEX.0F.W0 56
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the bitwise logical OR of packed single-precision
floating-point values in xmm1 and xmm2/mem."
+"PAVGB mm1, mm2/m64","LEX.0F.W0 E0
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Average packed unsigned byte integers from mm2/m64 and mm1 with
rounding."
+"PAVGW mm1, mm2/m64","LEX.0F.W0 E3
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Average packed unsigned word integers from mm2/m64 and mm1 with
rounding."
+"PEXTRW r32, mm, ib","LEX.0F.W0 C5 /r
ib","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Extract the word specified by ib from mm and move it to reg,
bits 15-0. The upper bits of r are zeroed."
+"PINSRW mm, r32/m16, ib","LEX.0F.W0 C4 /r
ib","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Insert the low word from r32 or from m16 into mm at the word
position specified by ib."
+"PMAXSW mm1, mm2/m64","LEX.0F.W0 EE
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare signed word integers in mm2/m64 and mm1 and return
maximum values."
+"PMAXUB mm1, mm2/m64","LEX.0F.W0 DE
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare unsigned byte integers in mm2/m64 and mm1 and returns
maximum values."
+"PMINSW mm1, mm2/m64","LEX.0F.W0 EA
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare signed word integers in mm2/m64 and mm1 and return
minimum values."
+"PMINUB mm1, mm2/m64","LEX.0F.W0 DA
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare unsigned byte integers in mm2/m64 and mm1 and returns
minimum values."
+"PMOVMSKB r32, mm","LEX.0F.W0 D7
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move a byte mask of mm to reg. The upper bits of r are zeroed"
+"PMULHUW mm1, mm2/m64","LEX.0F.W0 E4
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed unsigned word integers in mm1 register and
mm2/m64, and store the high 16 bits of the results in mm1."
+"PSADBW mm1, mm2/m64","LEX.0F.W0 F6
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Computes the absolute differences of the packed unsigned byte
integers from mm2 /m64 and mm1; differences are then summed to produce an
unsigned word integer result."
+"RCPPS xmm1, xmm2/m128","LEX.0F.W0 53
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes the approximate reciprocals of the packed
single-precision floating-point values in xmm2/m128 and stores the results in
xmm1."
+"RCPSS xmm1, xmm2/m32","LEX.F3.0F.W0 53
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes the approximate reciprocal of the scalar
single-precision floating-point value in xmm2/m32 and stores the result in
xmm1."
+"RSQRTPS xmm1, xmm2/m128","LEX.0F.W0 52
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes the approximate reciprocals of the square roots of the
packed single-precision floating-point values in xmm2/m128 and stores the
results in xmm1."
+"RSQRTSS xmm1, xmm2/m32","LEX.F3.0F.W0 52
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes the approximate reciprocal of the square root of the
low single-precision floating-point value in xmm2/m32 and stores the results in
xmm1."
+"SHUFPS xmm1, xmm3/m128, ib","LEX.0F.W0 C6 /r
ib","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Select from quadruplet of single-precision floating-point
values in xmm1 and xmm2/m128 using ib, interleaved result pairs are stored in
xmm1."
+"SQRTPS xmm1, xmm2/m128","LEX.0F.W0 51
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes Square Roots of the packed single-precision
floating-point values in xmm2/m128 and stores the result in xmm1."
+"SQRTSS xmm1, xmm2/m32","LEX.F3.0F.W0 51
/r","Valid","Valid","Invalid","SSE","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes square root of the low single-precision floating-point
value in xmm2/m32 and stores the results in xmm1."
+"STMXCSR m32","LEX.0F.W0 AE /3","Valid","Valid","Invalid","SSE","ModRM:r/m (w,
ModRM:[7:6] must not be 11b)","","","","","Store contents of MXCSR register to
m32."
+"SUBPS xmm1, xmm2/m128","LEX.0F.W0 5C
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed single-precision floating-point values in
xmm2/mem from xmm1 and store result in xmm1."
+"SUBSS xmm1, xmm2/m32","LEX.F3.0F.W0 5C
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract the low single-precision floating-point value in
xmm2/m32 from xmm1 and store the result in xmm1."
+"UCOMISS xmm1, xmm2/m32","LEX.0F.W0 2E
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r)","ModRM:r/m
(r)","","","","Compare low single-precision floating-point values in xmm1 and
xmm2/mem32 and set the EFLAGS flags accordingly."
+"UNPCKHPS xmm1, xmm2/m128","LEX.0F.W0 15
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpacks and Interleaves single-precision floating-point values
from high quadwords of xmm1 and xmm2/m128."
+"UNPCKLPS xmm1, xmm2/m128","LEX.0F.W0 14
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpacks and Interleaves single-precision floating-point values
from low quadwords of xmm1 and xmm2/m128."
+"XORPS xmm1, xmm2/m128","LEX.0F.W0 57
/r","Valid","Valid","Invalid","SSE","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the bitwise logical XOR of packed single-precision
floating-point values in xmm1 and xmm2/mem."
diff --git a/disas/x86-data/x86_sse2.csv b/disas/x86-data/x86_sse2.csv
new file mode 100644
index 000000000000..c43aa4e77c65
--- /dev/null
+++ b/disas/x86-data/x86_sse2.csv
@@ -0,0 +1,148 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"ADDPD xmm1, xmm2/m128","LEX.66.0F.W0 58
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed double-precision floating-point values from xmm2/mem
to xmm1 and store result in xmm1."
+"ADDSD xmm1, xmm2/m64","LEX.F2.0F.W0 58
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add the low double-precision floating-point value from xmm2/mem
to xmm1 and store the result in xmm1."
+"ANDNPD xmm1, xmm2/m128","LEX.66.0F.W0 55
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the bitwise logical AND NOT of packed double-precision
floating-point values in xmm1 and xmm2/mem."
+"ANDPD xmm1, xmm2/m128","LEX.66.0F.W0 54
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the bitwise logical AND of packed double-precision
floating-point values in xmm1 and xmm2/mem."
+"CMPPD xmm1, xmm2/m128, ib","LEX.66.0F.W0 C2 /r
ib","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Compare packed double-precision floating-point values in
xmm2/m128 and xmm1 using bits 2:0 of ib as a comparison predicate."
+"CMPSD xmm1, xmm2/m64, ib","LEX.F2.0F.W0 C2 /r
ib","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Compare low double-precision floating-point value in xmm2/m64
and xmm1 using bits 2:0 of ib as comparison predicate."
+"COMISD xmm1, xmm2/m64","LEX.66.0F.W0 2F
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r)","ModRM:r/m
(r)","","","","Compare low double-precision floating-point values in xmm1 and
xmm2/mem64 and set the EFLAGS flags accordingly."
+"CVTDQ2PD xmm1, xmm2/m64","LEX.F3.0F.W0 E6
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed signed doubleword integers from xmm2/mem to
two packed double-precision floating-point values in xmm1."
+"CVTDQ2PS xmm1, xmm2/m128","LEX.0F.W0 5B
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed signed doubleword integers from xmm2/mem to
four packed single-precision floating-point values in xmm1."
+"CVTPD2DQ xmm1, xmm2/m128","LEX.F2.0F.W0 E6
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed double-precision floating-point values in
xmm2/mem to two signed doubleword integers in xmm1."
+"CVTPD2PS xmm1, xmm2/m128","LEX.66.0F.W0 5A
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed double-precision floating-point values in
xmm2/mem to two single-precision floating-point values in xmm1."
+"CVTPS2DQ xmm1, xmm2/m128","LEX.66.0F.W0 5B
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed single-precision floating-point values from
xmm2/mem to four packed signed doubleword values in xmm1."
+"CVTPS2PD xmm1, xmm2/m64","LEX.0F.W0 5A
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed single-precision floating-point values in
xmm2/m64 to two packed double-precision floating-point values in xmm1."
+"CVTSD2SI rw, xmm1/m64","LEX.F2.0F.W0 2D
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one double-precision floating-point value from xmm1/m64
to one signed doubleword integer r."
+"CVTSD2SI rw, xmm1/m64","LEX.F2.0F.W1 2D
/r","Valid","Invalid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one double-precision floating-point value from xmm1/m64
to one signed quadword integer signextended into r."
+"CVTSD2SS xmm1, xmm2/m64","LEX.F2.0F.W0 5A
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one double-precision floating-point value in xmm2/m64 to
one single-precision floating-point value in xmm1."
+"CVTSI2SD xmm1, rw/mw","LEX.F2.0F.W0 2A
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one signed doubleword integer from r/m to one
double-precision floating-point value in xmm1."
+"CVTSI2SD xmm1, rw/mw","LEX.F2.0F.W1 2A
/r","Valid","Invalid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one signed quadword integer from r/m to one
double-precision floating-point value in xmm1."
+"CVTSI2SS xmm1, rw/mw","LEX.F3.0F.W0 2A
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one signed doubleword integer from r/m to one
single-precision floating-point value in xmm1."
+"CVTSI2SS xmm1, rw/mw","LEX.F3.0F.W1 2A
/r","Valid","Invalid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one signed quadword integer from r/m to one
single-precision floating-point value in xmm1."
+"CVTSS2SD xmm1, xmm2/m32","LEX.F3.0F.W0 5A
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value in xmm2/m32 to
one double-precision floating-point value in xmm1."
+"CVTSS2SI rw, xmm1/m32","LEX.F3.0F.W0 2D
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value from xmm1/m32
to one signed doubleword integer in r."
+"CVTSS2SI rw, xmm1/m32","LEX.F3.0F.W1 2D
/r","Valid","Invalid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value from xmm1/m32
to one signed quadword integer in r."
+"CVTTPD2DQ xmm1, xmm2/m128","LEX.66.0F.W0 E6
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert two packed double-precision floating-point values in
xmm2/mem to two signed doubleword integers in xmm1 using truncation."
+"CVTTPS2DQ xmm1, xmm2/m128","LEX.F3.0F.W0 5B
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert four packed single-precision floating-point values from
xmm2/mem to four packed signed doubleword values in xmm1 using truncation."
+"CVTTSD2SI rw, xmm1/m64","LEX.F2.0F.W0 2C
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one double-precision floating-point value from xmm1/m64
to one signed doubleword integer in r using truncation."
+"CVTTSD2SI rw, xmm1/m64","LEX.F2.0F.W1 2C
/r","Valid","Invalid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one double-precision floating-point value from xmm1/m64
to one signed quadword integer in r using truncation."
+"CVTTSS2SI rw, xmm1/m32","LEX.F3.0F.W0 2C
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value from xmm1/m32
to one signed doubleword integer in r using truncation."
+"CVTTSS2SI rw, xmm1/m32","LEX.F3.0F.W1 2C
/r","Valid","Invalid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Convert one single-precision floating-point value from xmm1/m32
to one signed quadword integer in r using truncation."
+"DIVPD xmm1, xmm2/m128","LEX.66.0F.W0 5E
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Divide packed double-precision floating-point values in xmm1 by
packed double-precision floating-point values in xmm2/mem."
+"DIVSD xmm1, xmm2/m64","LEX.F2.0F.W0 5E
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Divide low double-precision floating-point value in xmm1 by low
double-precision floating-point value in xmm2/m64."
+"MASKMOVDQU xmm1, xmm2","LEX.66.0F.W0 F7
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r)","ModRM:r/m (r)","RDI
(r)","","","Selectively write bytes from xmm1 to memory location using the byte
mask in xmm2. The default memory location is specified by DS:DI/EDI/RDI."
+"MAXPD xmm1, xmm2/m128","LEX.66.0F.W0 5F
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the maximum double-precision floating-point values
between xmm1 and xmm2/m128."
+"MAXSD xmm1, xmm2/m64","LEX.F2.0F.W0 5F
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the maximum scalar double-precision floating-point value
between xmm2/m64 and xmm1."
+"MINPD xmm1, xmm2/m128","LEX.66.0F.W0 5D
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the minimum double-precision floating-point values
between xmm1 and xmm2/mem"
+"MINSD xmm1, xmm2/m64","LEX.F2.0F.W0 5D
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the minimum scalar double-precision floating-point value
between xmm2/m64 and xmm1."
+"MOVAPD xmm1, xmm2/m128","LEX.66.0F.W0 28
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed double-precision floating-point values from
xmm2/mem to xmm1."
+"MOVAPD xmm2/m128, xmm1","LEX.66.0F.W0 29
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed double-precision floating-point values from
xmm1 to xmm2/mem."
+"MOVD xmm, rw/mw","LEX.66.0F.W0 6E
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move doubleword from r/m to xmm."
+"MOVD rw/mw, xmm","LEX.66.0F.W0 7E
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move doubleword from xmm register to r/m."
+"MOVDQA xmm1, xmm2/m128","LEX.66.0F.W0 6F
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move aligned packed integer values from xmm2/mem to xmm1."
+"MOVDQA xmm2/m128, xmm1","LEX.66.0F.W0 7F
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move aligned packed integer values from xmm1 to xmm2/mem."
+"MOVDQU xmm1, xmm2/m128","LEX.F3.0F.W0 6F
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed integer values from xmm2/m128 to xmm1."
+"MOVDQU xmm2/m128, xmm1","LEX.F3.0F.W0 7F
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (r)","ModRM:reg
(w)","","","","Move unaligned packed integer values from xmm1 to xmm2/m128."
+"MOVHPD xmm1, m64","LEX.66.0F.W0 16
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Move double-precision floating-point value from m64 to high
quadword of xmm1."
+"MOVHPD m64, xmm1","LEX.66.0F.W0 17
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move double-precision floating-point value from high quadword of
xmm1 to m64."
+"MOVLPD xmm1, m64","LEX.66.0F.W0 12
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Move double-precision floating-point value from m64 to low
quadword of xmm1."
+"MOVLPD m64, xmm1","LEX.66.0F.W0 13
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move double-precision floating-point value from low quadword of
xmm1 to m64."
+"MOVMSKPD rw, xmm","LEX.66.0F.W0 50
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Extract 2-bit sign mask from xmm and store in reg. The upper
bits of r are zeroed."
+"MOVNTDQ m128, xmm1","LEX.66.0F.W0 E7
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed integer values in xmm1 to m128 using non-temporal
hint."
+"MOVNTPD m128, xmm1","LEX.66.0F.W0 2B
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move packed double-precision values in xmm1 to m128 using
non-temporal hint."
+"MOVQ xmm, rw/mw","LEX.66.0F.W1 6E
/r","Valid","Invalid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move quadword from r/m to xmm."
+"MOVQ rw/mw, xmm","LEX.66.0F.W1 7E
/r","Valid","Invalid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move quadword from xmm register to r/m."
+"MOVQ xmm1, xmm2/m64","LEX.F3.0F.W0 7E
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move quadword from xmm2/mem64 to xmm1."
+"MOVQ xmm2/m64, xmm1","LEX.66.0F.W0 D6
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move quadword from xmm1 to xmm2/mem64."
+"MOVSD xmm1, m64","LEX.F2.0F.W0 10
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Load scalar double-precision floating-point value from m64 to
xmm1 register."
+"MOVSD xmm1, xmm2","LEX.F2.0F.W0 10
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Move scalar double-precision floating-point value from xmm2 to
xmm1 register."
+"MOVSD xmm1/m64, xmm2","LEX.F2.0F.W0 11
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move scalar double-precision floating-point value from xmm2
register to xmm1/m64."
+"MOVUPD xmm1, xmm2/m128","LEX.66.0F.W0 10
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move unaligned packed double-precision floating-point from
xmm2/mem to xmm1."
+"MOVUPD xmm2/m128, xmm1","LEX.66.0F.W0 11
/r","Valid","Valid","Invalid","SSE2","ModRM:r/m (w)","ModRM:reg
(r)","","","","Move unaligned packed double-precision floating-point from xmm1
to xmm2/mem."
+"MULPD xmm1, xmm2/m128","LEX.66.0F.W0 59
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply packed double-precision floating-point values in
xmm2/m128 with xmm1 and store result in xmm1."
+"MULSD xmm1, xmm2/m64","LEX.F2.0F.W0 59
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the low double-precision floating-point value in
xmm2/m64 by low double-precision floating-point value in xmm1."
+"ORPD xmm1, xmm2/m128","LEX.66.0F.W0 56
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the bitwise logical OR of packed double-precision
floating-point values in xmm1 and xmm2/mem."
+"PACKSSDW xmm1, xmm2/m128","LEX.66.0F.W0 6B
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Converts 4 packed signed doubleword integers from xmm1 and from
xxm2/m128 into 8 packed signed word integers in xxm1 using signed saturation."
+"PACKSSWB xmm1, xmm2/m128","LEX.66.0F.W0 63
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Converts 8 packed signed word integers from xmm1 and from
xxm2/m128 into 16 packed signed byte integers in xxm1 using signed saturation."
+"PACKUSWB xmm1, xmm2/m128","LEX.66.0F.W0 67
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Converts 8 signed word integers from xmm1 and 8 signed word
integers from xmm2/m128 into 16 unsigned byte integers in xmm1 using unsigned
saturation."
+"PADDB xmm1, xmm2/m128","LEX.66.0F.W0 FC
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed byte integers from xmm2/m128 and xmm1."
+"PADDD xmm1, xmm2/m128","LEX.66.0F.W0 FE
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed doubleword integers from xmm2/m128 and xmm1."
+"PADDQ xmm1, xmm2/m128","LEX.66.0F.W0 D4
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed quadword integers from xmm2/m128 and xmm1."
+"PADDSB xmm1, xmm2/m128","LEX.66.0F.W0 EC
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed signed byte integers from xmm2/m128 and xmm1 saturate
the results."
+"PADDSW xmm1, xmm2/m128","LEX.66.0F.W0 ED
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed signed word integers from xmm2/m128 and xmm1 and
saturate the results."
+"PADDUSB xmm1, xmm2/m128","LEX.66.0F.W0 DC
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed unsigned byte integers from xmm2/m128 and xmm1
saturate the results."
+"PADDUSW xmm1, xmm2/m128","LEX.66.0F.W0 DD
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed unsigned word integers from xmm2/m128 to xmm1 and
saturate the results."
+"PADDW xmm1, xmm2/m128","LEX.66.0F.W0 FD
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add packed word integers from xmm2/m128 and xmm1."
+"PAND xmm1, xmm2/m128","LEX.66.0F.W0 DB
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Bitwise AND of xmm2/m128 and xmm1."
+"PANDN xmm1, xmm2/m128","LEX.66.0F.W0 DF
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Bitwise AND NOT of xmm2/m128 and xmm1."
+"PAVGB xmm1, xmm2/m128","LEX.66.0F.W0 E0
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Average packed unsigned byte integers from xmm2/m128 and xmm1
with rounding."
+"PAVGW xmm1, xmm2/m128","LEX.66.0F.W0 E3
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Average packed unsigned word integers from xmm2/m128 and xmm1
with rounding."
+"PCMPEQB xmm1, xmm2/m128","LEX.66.0F.W0 74
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed bytes in xmm2/m128 and xmm1 for equality."
+"PCMPEQD xmm1, xmm2/m128","LEX.66.0F.W0 76
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed doublewords in xmm2/m128 and xmm1 for equality."
+"PCMPEQW xmm1, xmm2/m128","LEX.66.0F.W0 75
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed words in xmm2/m128 and xmm1 for equality."
+"PCMPGTB xmm1, xmm2/m128","LEX.66.0F.W0 64
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed byte integers in xmm1 and xmm2/m128 for
greater than."
+"PCMPGTD xmm1, xmm2/m128","LEX.66.0F.W0 66
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed doubleword integers in xmm1 and xmm2/m128
for greater than."
+"PCMPGTW xmm1, xmm2/m128","LEX.66.0F.W0 65
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed word integers in xmm1 and xmm2/m128 for
greater than."
+"PEXTRW r32, xmm, ib","LEX.66.0F.W0 C5 /r
ib","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Extract the word specified by ib from xmm and move it to reg,
bits 15-0. The upper bits of r are zeroed."
+"PINSRW xmm, r32/m16, ib","LEX.66.0F.W0 C4 /r
ib","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Move the low word of r32 or from m16 into xmm at the word
position specified by ib."
+"PMADDWD xmm1, xmm2/m128","LEX.66.0F.W0 F5
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed word integers in xmm1 by the packed word
integers in xmm2/m128, add adjacent doubleword results, and store in xmm1."
+"PMAXSW xmm1, xmm2/m128","LEX.66.0F.W0 EE
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed word integers in xmm2/m128 and xmm1 and
stores maximum packed values in xmm1."
+"PMAXUB xmm1, xmm2/m128","LEX.66.0F.W0 DE
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed unsigned byte integers in xmm1 and xmm2/m128 and
store packed maximum values in xmm1."
+"PMINSW xmm1, xmm2/m128","LEX.66.0F.W0 EA
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed word integers in xmm2/m128 and xmm1 and
store packed minimum values in xmm1."
+"PMINUB xmm1, xmm2/m128","LEX.66.0F.W0 DA
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed unsigned byte integers in xmm1 and xmm2/m128 and
store packed minimum values in xmm1."
+"PMOVMSKB r32, xmm","LEX.66.0F.W0 D7
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move a byte mask of xmm to reg. The upper bits of r are zeroed"
+"PMULHUW xmm1, xmm2/m128","LEX.66.0F.W0 E4
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed unsigned word integers in xmm1 and
xmm2/m128, and store the high 16 bits of the results in xmm1."
+"PMULHW xmm1, xmm2/m128","LEX.66.0F.W0 E5
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed signed word integers in xmm1 and xmm2/m128,
and store the high 16 bits of the results in xmm1."
+"PMULLW xmm1, xmm2/m128","LEX.66.0F.W0 D5
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed signed word integers in xmm1 and xmm2/m128,
and store the low 16 bits of the results in xmm1."
+"PMULUDQ mm1, mm2/m64","LEX.0F.W0 F4
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply unsigned doubleword integer in mm1 by unsigned
doubleword integer in mm2/m64, and store the quadword result in mm1."
+"PMULUDQ xmm1, xmm2/m128","LEX.66.0F.W0 F4
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply packed unsigned doubleword integers in xmm1 by packed
unsigned doubleword integers in xmm2/m128, and store the quadword results in
xmm1."
+"POR xmm1, xmm2/m128","LEX.66.0F.W0 EB
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Bitwise OR of xmm2/m128 and xmm1."
+"PSADBW xmm1, xmm2/m128","LEX.66.0F.W0 F6
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Computes the absolute differences of the packed unsigned byte
integers from xmm2/m128 and xmm1; the 8 low differences and 8 high differences
are then summed separately to produce two unsigned word integer results."
+"PSHUFD xmm1, xmm2/m128, ib","LEX.66.0F.W0 70 /r
ib","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the doublewords in xmm2/m128 based on the encoding in
ib and store the result in xmm1."
+"PSHUFHW xmm1, xmm2/m128, ib","LEX.F3.0F.W0 70 /r
ib","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the high words in xmm2/m128 based on the encoding in
ib and store the result in xmm1."
+"PSHUFLW xmm1, xmm2/m128, ib","LEX.F2.0F.W0 70 /r
ib","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Shuffle the low words in xmm2/m128 based on the encoding in ib
and store the result in xmm1."
+"PSLLD xmm1, ib","LEX.66.0F.W0 72 /6
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
doublewords in xmm1 left by ib while shifting in 0s."
+"PSLLD xmm1, xmm2/m128","LEX.66.0F.W0 F2
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift doublewords in xmm1 left by xmm2/m128 while shifting in
0s."
+"PSLLDQ xmm1, ib","LEX.66.0F.W0 73 /7
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
xmm1 left by ib bytes while shifting in 0s."
+"PSLLQ xmm1, ib","LEX.66.0F.W0 73 /6
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
quadwords in xmm1 left by ib while shifting in 0s."
+"PSLLQ xmm1, xmm2/m128","LEX.66.0F.W0 F3
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift quadwords in xmm1 left by xmm2/m128 while shifting in 0s."
+"PSLLW xmm1, ib","LEX.66.0F.W0 71 /6
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
words in xmm1 left by ib while shifting in 0s."
+"PSLLW xmm1, xmm2/m128","LEX.66.0F.W0 F1
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift words in xmm1 left by xmm2/m128 while shifting in 0s."
+"PSRAD xmm1, ib","LEX.66.0F.W0 72 /4
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
doublewords in xmm1 right by ib while shifting in sign bits."
+"PSRAD xmm1, xmm2/m128","LEX.66.0F.W0 E2
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift doubleword in xmm1 right by xmm2 /m128 while shifting in
sign bits."
+"PSRAW xmm1, ib","LEX.66.0F.W0 71 /4
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
words in xmm1 right by ib while shifting in sign bits"
+"PSRAW xmm1, xmm2/m128","LEX.66.0F.W0 E1
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift words in xmm1 right by xmm2/m128 while shifting in sign
bits."
+"PSRLD xmm1, ib","LEX.66.0F.W0 72 /2
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
doublewords in xmm1 right by ib while shifting in 0s."
+"PSRLD xmm1, xmm2/m128","LEX.66.0F.W0 D2
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift doublewords in xmm1 right by amount specified in xmm2/m128
while shifting in 0s."
+"PSRLDQ xmm1, ib","LEX.66.0F.W0 73 /3
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
xmm1 right by ib while shifting in 0s."
+"PSRLQ xmm1, ib","LEX.66.0F.W0 73 /2
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
quadwords in xmm1 right by ib while shifting in 0s."
+"PSRLQ xmm1, xmm2/m128","LEX.66.0F.W0 D3
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift quadwords in xmm1 right by amount specified in xmm2/m128
while shifting in 0s."
+"PSRLW xmm1, ib","LEX.66.0F.W0 71 /2
ib","Valid","Valid","Invalid","SSE2","ModRM:r/m (r, w)","ib","","","","Shift
words in xmm1 right by ib while shifting in 0s."
+"PSRLW xmm1, xmm2/m128","LEX.66.0F.W0 D1
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shift words in xmm1 right by amount specified in xmm2/m128 while
shifting in 0s."
+"PSUBB xmm1, xmm2/m128","LEX.66.0F.W0 F8
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed byte integers in xmm2/m128 from packed byte
integers in xmm1."
+"PSUBD xmm1, xmm2/m128","LEX.66.0F.W0 FA
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed doubleword integers in xmm2/mem128 from packed
doubleword integers in xmm1."
+"PSUBQ mm1, mm2/m64","LEX.0F.W0 FB
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract quadword integer in mm1 from mm2 /m64."
+"PSUBQ xmm1, xmm2/m128","LEX.66.0F.W0 FB
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed quadword integers in xmm1 from xmm2/m128."
+"PSUBSB xmm1, xmm2/m128","LEX.66.0F.W0 E8
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed signed byte integers in xmm2/m128 from packed
signed byte integers in xmm1 and saturate results."
+"PSUBSW xmm1, xmm2/m128","LEX.66.0F.W0 E9
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed signed word integers in xmm2/m128 from packed
signed word integers in xmm1 and saturate results."
+"PSUBUSB xmm1, xmm2/m128","LEX.66.0F.W0 D8
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed unsigned byte integers in xmm2/m128 from packed
unsigned byte integers in xmm1 and saturate result."
+"PSUBUSW xmm1, xmm2/m128","LEX.66.0F.W0 D9
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed unsigned word integers in xmm2/m128 from packed
unsigned word integers in xmm1 and saturate result."
+"PSUBW xmm1, xmm2/m128","LEX.66.0F.W0 F9
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed word integers in xmm2/m128 from packed word
integers in xmm1."
+"PUNPCKHBW xmm1, xmm2/m128","LEX.66.0F.W0 68
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpack and interleave high-order bytes from xmm1 and xmm2/m128
into xmm1."
+"PUNPCKHDQ xmm1, xmm2/m128","LEX.66.0F.W0 6A
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpack and interleave high-order doublewords from xmm1 and
xmm2/m128 into xmm1."
+"PUNPCKHQDQ xmm1, xmm2/m128","LEX.66.0F.W0 6D
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpack and interleave high-order quadwords from xmm1 and
xmm2/m128 into xmm1."
+"PUNPCKHWD xmm1, xmm2/m128","LEX.66.0F.W0 69
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpack and interleave high-order words from xmm1 and xmm2/m128
into xmm1."
+"PUNPCKLBW xmm1, xmm2/m128","LEX.66.0F.W0 60
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Interleave low-order bytes from xmm1 and xmm2/m128 into xmm1."
+"PUNPCKLDQ xmm1, xmm2/m128","LEX.66.0F.W0 62
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Interleave low-order doublewords from xmm1 and xmm2/m128 into
xmm1."
+"PUNPCKLQDQ xmm1, xmm2/m128","LEX.66.0F.W0 6C
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Interleave low-order quadword from xmm1 and xmm2/m128 into xmm1
register."
+"PUNPCKLWD xmm1, xmm2/m128","LEX.66.0F.W0 61
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Interleave low-order words from xmm1 and xmm2/m128 into xmm1."
+"PXOR xmm1, xmm2/m128","LEX.66.0F.W0 EF
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Bitwise XOR of xmm2/m128 and xmm1."
+"SHUFPD xmm1, xmm2/m128, ib","LEX.66.0F.W0 C6 /r
ib","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Shuffle two pairs of double-precision floating-point values
from xmm1 and xmm2/m128 using ib to select from each pair, interleaved result
is stored in xmm1."
+"SQRTPD xmm1, xmm2/m128","LEX.66.0F.W0 51
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes Square Roots of the packed double-precision
floating-point values in xmm2/m128 and stores the result in xmm1."
+"SQRTSD xmm1, xmm2/m64","LEX.F2.0F.W0 51
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (w)","ModRM:r/m
(r)","","","","Computes square root of the low double-precision floating-point
value in xmm2/m64 and stores the results in xmm1."
+"SUBPD xmm1, xmm2/m128","LEX.66.0F.W0 5C
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract packed double-precision floating-point values in
xmm2/mem from xmm1 and store result in xmm1."
+"SUBSD xmm1, xmm2/m64","LEX.F2.0F.W0 5C
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract the low double-precision floating-point value in
xmm2/m64 from xmm1 and store the result in xmm1."
+"UCOMISD xmm1, xmm2/m64","LEX.66.0F.W0 2E
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r)","ModRM:r/m
(r)","","","","Compare low double-precision floating-point values in xmm1 and
xmm2/mem64 and set the EFLAGS flags accordingly."
+"UNPCKHPD xmm1, xmm2/m128","LEX.66.0F.W0 15
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpacks and Interleaves double-precision floating-point values
from high quadwords of xmm1 and xmm2/m128."
+"UNPCKLPD xmm1, xmm2/m128","LEX.66.0F.W0 14
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Unpacks and Interleaves double-precision floating-point values
from low quadwords of xmm1 and xmm2/m128."
+"XORPD xmm1, xmm2/m128","LEX.66.0F.W0 57
/r","Valid","Valid","Invalid","SSE2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Return the bitwise logical XOR of packed double-precision
floating-point values in xmm1 and xmm2/mem."
diff --git a/disas/x86-data/x86_sse3.csv b/disas/x86-data/x86_sse3.csv
new file mode 100644
index 000000000000..93bdb4ec0323
--- /dev/null
+++ b/disas/x86-data/x86_sse3.csv
@@ -0,0 +1,11 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"ADDSUBPD xmm1, xmm2/m128","LEX.66.0F.W0 D0
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add/subtract double-precision floating-point values from
xmm2/m128 to xmm1."
+"ADDSUBPS xmm1, xmm2/m128","LEX.F2.0F.W0 D0
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add/subtract single-precision floating-point values from
xmm2/m128 to xmm1."
+"HADDPD xmm1, xmm2/m128","LEX.66.0F.W0 7C
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Horizontal add packed double-precision floating-point values
from xmm2/m128 to xmm1."
+"HADDPS xmm1, xmm2/m128","LEX.F2.0F.W0 7C
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Horizontal add packed single-precision floating-point values
from xmm2/m128 to xmm1."
+"HSUBPD xmm1, xmm2/m128","LEX.66.0F.W0 7D
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Horizontal subtract packed double-precision floating-point
values from xmm2/m128 to xmm1."
+"HSUBPS xmm1, xmm2/m128","LEX.F2.0F.W0 7D
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Horizontal subtract packed single-precision floating-point
values from xmm2/m128 to xmm1."
+"LDDQU xmm1, m128","LEX.F2.0F.W0 F0
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Load unaligned data from mem and return double quadword in xmm1."
+"MOVDDUP xmm1, xmm2/m64","LEX.F2.0F.W0 12
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move double-precision floating-point value from xmm2/m64 and
duplicate into xmm1."
+"MOVSHDUP xmm1, xmm2/m128","LEX.F3.0F.W0 16
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move odd index single-precision floating-point values from
xmm2/mem and duplicate each element into xmm1."
+"MOVSLDUP xmm1, xmm2/m128","LEX.F3.0F.W0 12
/r","Valid","Valid","Invalid","SSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move even index single-precision floating-point values from
xmm2/mem and duplicate each element into xmm1."
diff --git a/disas/x86-data/x86_sse4_1.csv b/disas/x86-data/x86_sse4_1.csv
new file mode 100644
index 000000000000..5f86b35f9713
--- /dev/null
+++ b/disas/x86-data/x86_sse4_1.csv
@@ -0,0 +1,48 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"BLENDPD xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 0D /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Select packed DP-FP values from xmm1 and xmm2/m128 from mask
specified in ib and store the values into xmm1."
+"BLENDPS xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 0C /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Select packed single precision floating-point values from xmm1
and xmm2/m128 from mask specified in ib and store the values into xmm1."
+"BLENDVPD xmm1, xmm2/m128 , <XMM0>","LEX.66.0F38.W0 15
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","Implicit XMM0 (r)","","","Select packed DP FP values from xmm1 and xmm2
from mask specified in XMM0 and store the values in xmm1."
+"BLENDVPS xmm1, xmm2/m128, <XMM0>","LEX.66.0F38.W0 14
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","Implicit XMM0 (r)","","","Select packed single precision floating-point
values from xmm1 and xmm2/m128 from mask specified in XMM0 and store the values
into xmm1."
+"DPPD xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 41 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Selectively multiply packed DP floating-point values from xmm1
with packed DP floating-point values from xmm2, add and selectively store the
packed DP floating-point values to xmm1."
+"DPPS xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 40 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Selectively multiply packed SP floating-point values from xmm1
with packed SP floating-point values from xmm2, add and selectively store the
packed SP floating-point values or zero values to xmm1."
+"EXTRACTPS rw/mw, xmm1, ib","LEX.66.0F3A.W0 17 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract one single-precision floating-point value from xmm1 at
the offset specified by ib and store the result in reg or m32. Zero extend the
results in 64-bit register if applicable."
+"INSERTPS xmm1, xmm2/m32, ib","LEX.66.0F3A.W0 21 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Insert a single-precision floating-point value selected by ib
from xmm2/m32 into xmm1 at the specified destination element specified by ib
and zero out destination elements in xmm1 as indicated in ib."
+"MOVNTDQA xmm1, m128","LEX.66.0F38.W0 2A
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Move double quadword from m128 to xmm1 using non-temporal hint
if WC memory type."
+"MPSADBW xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 42 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Sums absolute 8-bit integer difference of adjacent groups of 4
byte integers in xmm1 and xmm2/m128 and writes the results in xmm1. Starting
offsets within xmm1 and xmm2/m128 are determined by ib."
+"PACKUSDW xmm1, xmm2/m128","LEX.66.0F38.W0 2B
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Convert 4 packed signed doubleword integers from xmm1 and 4
packed signed doubleword integers from xmm2/m128 into 8 packed unsigned word
integers in xmm1 using unsigned saturation."
+"PBLENDVB xmm1, xmm2/m128, <XMM0>","LEX.66.0F38.W0 10
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","Implicit XMM0 (r)","","","Select byte values from xmm1 and xmm2/m128 from
mask specified in the high bit of each byte in XMM0 and store the values into
xmm1."
+"PBLENDW xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 0E /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Select words from xmm1 and xmm2/m128 from mask specified in ib
and store the values into xmm1."
+"PCMPEQQ xmm1, xmm2/m128","LEX.66.0F38.W0 29
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed qwords in xmm2/m128 and xmm1 for equality."
+"PEXTRB r32/m8, xmm2, ib","LEX.66.0F3A.W0 14 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract a byte integer value from xmm2 at the source byte
offset specified by ib into reg or m8. The upper bits of r are zeroed."
+"PEXTRW r32/m16, xmm, ib","LEX.66.0F3A.W0 15 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract the word specified by ib from xmm and copy it to
lowest 16 bits of reg or m16. Zero-extend the result in the destination, r."
+"PHMINPOSUW xmm1, xmm2/m128","LEX.66.0F38.W0 41
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Find the minimum unsigned word in xmm2/m128 and place its value
in the low word of xmm1 and its index in the second-lowest word of xmm1."
+"PINSRB xmm1, r32/m8, ib","LEX.66.0F3A.W0 20 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Insert a byte integer value from r8/m8 into xmm1 at the
destination element in xmm1 specified by ib."
+"PINSRD xmm1, r32/m32, ib","LEX.66.0F3A.W0 22 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Insert a dword integer value from r/m32 into the xmm1 at the
destination element specified by ib."
+"PINSRQ xmm1, r64/m64, ib","LEX.66.0F3A.W1 22 /r
ib","Valid","Invalid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Insert a qword integer value from r/m64 into the xmm1 at the
destination element specified by ib."
+"PMAXSB xmm1, xmm2/m128","LEX.66.0F38.W0 3C
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed byte integers in xmm1 and xmm2/m128 and
store packed maximum values in xmm1."
+"PMAXSD xmm1, xmm2/m128","LEX.66.0F38.W0 3D
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed dword integers in xmm1 and xmm2/m128 and
store packed maximum values in xmm1."
+"PMAXUD xmm1, xmm2/m128","LEX.66.0F38.W0 3F
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed unsigned dword integers in xmm1 and xmm2/m128 and
store packed maximum values in xmm1."
+"PMAXUW xmm1, xmm2/m128","LEX.66.0F38.W0 3E
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed unsigned word integers in xmm2/m128 and xmm1 and
stores maximum packed values in xmm1."
+"PMINSB xmm1, xmm2/m128","LEX.66.0F38.W0 38
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed byte integers in xmm1 and xmm2/m128 and
store packed minimum values in xmm1."
+"PMINSD xmm1, xmm2/m128","LEX.66.0F38.W0 39
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed dword integers in xmm1 and xmm2/m128 and
store packed minimum values in xmm1."
+"PMINUD xmm1, xmm2/m128","LEX.66.0F38.W0 3B
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed unsigned dword integers in xmm1 and xmm2/m128 and
store packed minimum values in xmm1."
+"PMINUW xmm1, xmm2/m128","LEX.66.0F38.W0 3A
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed unsigned word integers in xmm2/m128 and xmm1 and
store packed minimum values in xmm1."
+"PMOVSXBD xmm1, xmm2/m32","LEX.66.0F38.W0 21
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 4 packed 8-bit integers in the low 4 bytes of
xmm2/m32 to 4 packed 32-bit integers in xmm1."
+"PMOVSXBQ xmm1, xmm2/m16","LEX.66.0F38.W0 22
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 2 packed 8-bit integers in the low 2 bytes of
xmm2/m16 to 2 packed 64-bit integers in xmm1."
+"PMOVSXBW xmm1, xmm2/m64","LEX.66.0F38.W0 20
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 8 packed 8-bit integers in the low 8 bytes of
xmm2/m64 to 8 packed 16-bit integers in xmm1."
+"PMOVSXDQ xmm1, xmm2/m64","LEX.66.0F38.W0 25
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 2 packed 32-bit integers in the low 8 bytes of
xmm2/m64 to 2 packed 64-bit integers in xmm1."
+"PMOVSXWD xmm1, xmm2/m64","LEX.66.0F38.W0 23
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 4 packed 16-bit integers in the low 8 bytes of
xmm2/m64 to 4 packed 32-bit integers in xmm1."
+"PMOVSXWQ xmm1, xmm2/m32","LEX.66.0F38.W0 24
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Sign extend 2 packed 16-bit integers in the low 4 bytes of
xmm2/m32 to 2 packed 64-bit integers in xmm1."
+"PMOVZXBD xmm1, xmm2/m32","LEX.66.0F38.W0 31
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 4 packed 8-bit integers in the low 4 bytes of
xmm2/m32 to 4 packed 32-bit integers in xmm1."
+"PMOVZXBQ xmm1, xmm2/m16","LEX.66.0F38.W0 32
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 2 packed 8-bit integers in the low 2 bytes of
xmm2/m16 to 2 packed 64-bit integers in xmm1."
+"PMOVZXBW xmm1, xmm2/m64","LEX.66.0F38.W0 30
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 8 packed 8-bit integers in the low 8 bytes of
xmm2/m64 to 8 packed 16-bit integers in xmm1."
+"PMOVZXDQ xmm1, xmm2/m64","LEX.66.0F38.W0 35
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 2 packed 32-bit integers in the low 8 bytes of
xmm2/m64 to 2 packed 64-bit integers in xmm1."
+"PMOVZXWD xmm1, xmm2/m64","LEX.66.0F38.W0 33
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 4 packed 16-bit integers in the low 8 bytes of
xmm2/m64 to 4 packed 32-bit integers in xmm1."
+"PMOVZXWQ xmm1, xmm2/m32","LEX.66.0F38.W0 34
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","","","","Zero extend 2 packed 16-bit integers in the low 4 bytes of
xmm2/m32 to 2 packed 64-bit integers in xmm1."
+"PMULDQ xmm1, xmm2/m128","LEX.66.0F38.W0 28
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply packed signed doubleword integers in xmm1 by packed
signed doubleword integers in xmm2/m128, and store the quadword results in
xmm1."
+"PMULLD xmm1, xmm2/m128","LEX.66.0F38.W0 40
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply the packed dword signed integers in xmm1 and xmm2/m128
and store the low 32 bits of each product in xmm1."
+"PTEST xmm1, xmm2/m128","LEX.66.0F38.W0 17
/r","Valid","Valid","Invalid","SSE4_1","ModRM:reg (r)","ModRM:r/m
(r)","","","","Set ZF if xmm2/m128 AND xmm1 result is all 0s. Set CF if
xmm2/m128 AND NOT xmm1 result is all 0s."
+"ROUNDPD xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 09 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Round packed double precision floating-point values in
xmm2/m128 and place the result in xmm1. The rounding mode is determined by ib."
+"ROUNDPS xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 08 /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Round packed single precision floating-point values in
xmm2/m128 and place the result in xmm1. The rounding mode is determined by ib."
+"ROUNDSD xmm1, xmm2/m64, ib","LEX.66.0F3A.W0 0B /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Round the low packed double precision floating-point value in
xmm2/m64 and place the result in xmm1. The rounding mode is determined by ib."
+"ROUNDSS xmm1, xmm2/m32, ib","LEX.66.0F3A.W0 0A /r
ib","Valid","Valid","Invalid","SSE4_1","ModRM:reg (w)","ModRM:r/m
(r)","ib","","","Round the low packed single precision floating-point value in
xmm2/m32 and place the result in xmm1. The rounding mode is determined by ib."
diff --git a/disas/x86-data/x86_sse4_2.csv b/disas/x86-data/x86_sse4_2.csv
new file mode 100644
index 000000000000..660d5d8c612a
--- /dev/null
+++ b/disas/x86-data/x86_sse4_2.csv
@@ -0,0 +1,7 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"PCMPESTRI xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 61 /r
ib","Valid","Valid","Invalid","SSE4_2","ModRM:reg (r)","ModRM:r/m
(r)","ib","","","Perform a packed comparison of string data with explicit
lengths, generating an index, and storing the result in ECX."
+"PCMPESTRM xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 60 /r
ib","Valid","Valid","Invalid","SSE4_2","ModRM:reg (r)","ModRM:r/m
(r)","ib","","","Perform a packed comparison of string data with explicit
lengths, generating a mask, and storing the result in XMM0."
+"PCMPGTQ xmm1, xmm2/m128","LEX.66.0F38.W0 37
/r","Valid","Valid","Invalid","SSE4_2","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Compare packed signed qwords in xmm2/m128 and xmm1 for greater
than."
+"PCMPISTRI xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 63 /r
ib","Valid","Valid","Invalid","SSE4_2","ModRM:reg (r)","ModRM:r/m
(r)","ib","","","Perform a packed comparison of string data with implicit
lengths, generating an index, and storing the result in ECX."
+"PCMPISTRM xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 62 /r
ib","Valid","Valid","Invalid","SSE4_2","ModRM:reg (r)","ModRM:r/m
(r)","ib","","","Perform a packed comparison of string data with implicit
lengths, generating a mask, and storing the result in XMM0."
+"PEXTRD r32/m32, xmm2, ib","LEX.66.0F3A.W0 16 /r
ib","Valid","Valid","Invalid","SSE4_2","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract a dword integer value from xmm2 at the source dword
offset specified by ib into r/m32."
diff --git a/disas/x86-data/x86_sse4_3.csv b/disas/x86-data/x86_sse4_3.csv
new file mode 100644
index 000000000000..f57757ff8f94
--- /dev/null
+++ b/disas/x86-data/x86_sse4_3.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"PEXTRQ r64/m64, xmm2, ib","LEX.66.0F3A.W1 16 /r
ib","Valid","Invalid","Invalid","SSE4_3","ModRM:r/m (w)","ModRM:reg
(r)","ib","","","Extract a qword integer value from xmm2 at the source qword
offset specified by ib into r/m64."
diff --git a/disas/x86-data/x86_ssse3.csv b/disas/x86-data/x86_ssse3.csv
new file mode 100644
index 000000000000..379014eb5d1a
--- /dev/null
+++ b/disas/x86-data/x86_ssse3.csv
@@ -0,0 +1,33 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"PABSB mm1, mm2/m64","LEX.0F38.W0 1C
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of bytes in mm2/m64 and store
UNSIGNED result in mm1."
+"PABSB xmm1, xmm2/m128","LEX.66.0F38.W0 1C
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of bytes in xmm2/m128 and store
UNSIGNED result in xmm1."
+"PABSD mm1, mm2/m64","LEX.0F38.W0 1E
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of 32-bit integers in mm2/m64 and
store UNSIGNED result in mm1."
+"PABSD xmm1, xmm2/m128","LEX.66.0F38.W0 1E
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of 32-bit integers in xmm2/m128 and
store UNSIGNED result in xmm1."
+"PABSW mm1, mm2/m64","LEX.0F38.W0 1D
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of 16-bit integers in mm2/m64 and
store UNSIGNED result in mm1."
+"PABSW xmm1, xmm2/m128","LEX.66.0F38.W0 1D
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (w)","ModRM:r/m
(r)","","","","Compute the absolute value of 16-bit integers in xmm2/m128 and
store UNSIGNED result in xmm1."
+"PALIGNR mm1, mm2/m64, ib","LEX.0F3A.W0 0F /r
ib","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Concatenate destination and source operands, extract
byte-aligned result shifted to the right by constant value in ib into mm1."
+"PALIGNR xmm1, xmm2/m128, ib","LEX.66.0F3A.W0 0F /r
ib","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","ib","","","Concatenate destination and source operands, extract
byte-aligned result shifted to the right by constant value in ib into xmm1."
+"PHADDD mm1, mm2/m64","LEX.0F38.W0 02
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add 32-bit integers horizontally, pack to mm1."
+"PHADDD xmm1, xmm2/m128","LEX.66.0F38.W0 02
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add 32-bit integers horizontally, pack to xmm1."
+"PHADDSW mm1, mm2/m64","LEX.0F38.W0 03
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add 16-bit signed integers horizontally, pack saturated integers
to mm1."
+"PHADDSW xmm1, xmm2/m128","LEX.66.0F38.W0 03
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add 16-bit signed integers horizontally, pack saturated integers
to xmm1."
+"PHADDW mm1, mm2/m64","LEX.0F38.W0 01
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add 16-bit integers horizontally, pack to mm1."
+"PHADDW xmm1, xmm2/m128","LEX.66.0F38.W0 01
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Add 16-bit integers horizontally, pack to xmm1."
+"PHSUBD mm1, mm2/m64","LEX.0F38.W0 06
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract 32-bit signed integers horizontally, pack to mm1."
+"PHSUBD xmm1, xmm2/m128","LEX.66.0F38.W0 06
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract 32-bit signed integers horizontally, pack to xmm1."
+"PHSUBSW mm1, mm2/m64","LEX.0F38.W0 07
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract 16-bit signed integer horizontally, pack saturated
integers to mm1."
+"PHSUBSW xmm1, xmm2/m128","LEX.66.0F38.W0 07
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract 16-bit signed integer horizontally, pack saturated
integers to xmm1."
+"PHSUBW mm1, mm2/m64","LEX.0F38.W0 05
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract 16-bit signed integers horizontally, pack to mm1."
+"PHSUBW xmm1, xmm2/m128","LEX.66.0F38.W0 05
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Subtract 16-bit signed integers horizontally, pack to xmm1."
+"PMADDUBSW mm1, mm2/m64","LEX.0F38.W0 04
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply signed and unsigned bytes, add horizontal pair of
signed words, pack saturated signed-words to mm1."
+"PMADDUBSW xmm1, xmm2/m128","LEX.66.0F38.W0 04
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply signed and unsigned bytes, add horizontal pair of
signed words, pack saturated signed-words to xmm1."
+"PMULHRSW mm1, mm2/m64","LEX.0F38.W0 0B
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply 16-bit signed words, scale and round signed
doublewords, pack high 16 bits to mm1."
+"PMULHRSW xmm1, xmm2/m128","LEX.66.0F38.W0 0B
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Multiply 16-bit signed words, scale and round signed
doublewords, pack high 16 bits to xmm1."
+"PSHUFB mm1, mm2/m64","LEX.0F38.W0 00
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shuffle bytes in mm1 according to contents of mm2/m64."
+"PSHUFB xmm1, xmm2/m128","LEX.66.0F38.W0 00
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Shuffle bytes in xmm1 according to contents of xmm2/m128."
+"PSIGNB mm1, mm2/m64","LEX.0F38.W0 08
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Negate/zero/preserve packed byte integers in mm1 depending on
the corresponding sign in mm2/m64."
+"PSIGNB xmm1, xmm2/m128","LEX.66.0F38.W0 08
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Negate/zero/preserve packed byte integers in xmm1 depending on
the corresponding sign in xmm2/m128."
+"PSIGND mm1, mm2/m64","LEX.0F38.W0 0A
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Negate/zero/preserve packed doubleword integers in mm1 depending
on the corresponding sign in mm2/m128."
+"PSIGND xmm1, xmm2/m128","LEX.66.0F38.W0 0A
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Negate/zero/preserve packed doubleword integers in xmm1
depending on the corresponding sign in xmm2/m128."
+"PSIGNW mm1, mm2/m64","LEX.0F38.W0 09
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Negate/zero/preserve packed word integers in mm1 depending on
the corresponding sign in mm2/m128."
+"PSIGNW xmm1, xmm2/m128","LEX.66.0F38.W0 09
/r","Valid","Valid","Invalid","SSSE3","ModRM:reg (r, w)","ModRM:r/m
(r)","","","","Negate/zero/preserve packed word integers in xmm1 depending on
the corresponding sign in xmm2/m128."
diff --git a/disas/x86-data/x86_uintr.csv b/disas/x86-data/x86_uintr.csv
new file mode 100644
index 000000000000..7de80b61637f
--- /dev/null
+++ b/disas/x86-data/x86_uintr.csv
@@ -0,0 +1,6 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"CLUI","LEX.F3.0F.W0 01
ee","Valid","Valid","Invalid","UINTR","","","","","","Clear user interrupt
flag; user interrupts blocked when user interrupt flag cleared."
+"SENDUIPI rw","LEX.F3.0F.W0 c7
/6","Valid","Valid","Invalid","UINTR","ModRM:r/m (r)","","","","","Send
interprocessor user interrupt."
+"STUI","LEX.F3.0F.W0 01
ef","Valid","Valid","Invalid","UINTR","","","","","","Set user interrupt flag."
+"TESTUI","LEX.F3.0F.W0 01
ed","Valid","Valid","Invalid","UINTR","","","","","","Copies the current value
of UIF into EFLAGS.CF."
+"UIRET","LEX.F3.0F.W0 01
ec","Valid","Valid","Invalid","UINTR","","","","","","Return from handling a
user interrupt."
diff --git a/disas/x86-data/x86_vaes.csv b/disas/x86-data/x86_vaes.csv
new file mode 100644
index 000000000000..e7dc7f512c31
--- /dev/null
+++ b/disas/x86-data/x86_vaes.csv
@@ -0,0 +1,17 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"VAESDEC xmm1, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG DE
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform one round of an AES decryption
flow, using the Equivalent Inverse Cipher, using one 128-bit data (state) from
xmm2 with one 128-bit round key from xmm3/m128; store the result in xmm1."
+"VAESDEC ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG DE
/r","Valid","Valid","Invalid","VAES","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Perform one round of an AES decryption flow, using the Equivalent
Inverse Cipher, using two 128-bit data (state) from ymm2 with two 128-bit round
keys from ymm3/m256; store the result in ymm1."
+"VAESDEC ymm1, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG DE
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform one round of an AES decryption
flow, using the Equivalent Inverse Cipher, using two 128-bit data (state) from
ymm2 with two 128-bit round keys from ymm3/m256; store the result in ymm1."
+"VAESDEC zmm1, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG DE
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform one round of an AES decryption
flow, using the Equivalent Inverse Cipher, using four 128-bit data (state) from
zmm2 with four 128-bit round keys from zmm3/m512; store the result in zmm1."
+"VAESDECLAST xmm1, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG DF
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform the last round of an AES decryption
flow, using the Equivalent Inverse Cipher, using one 128-bit data (state) from
xmm2 with one 128-bit round key from xmm3/m128; store the result in xmm1."
+"VAESDECLAST ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG DF
/r","Valid","Valid","Invalid","VAES","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Perform the last round of an AES decryption flow, using the
Equivalent Inverse Cipher, using two 128-bit data (state) from ymm2 with two
128-bit round keys from ymm3/m256; store the result in ymm1."
+"VAESDECLAST ymm1, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG DF
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform the last round of an AES decryption
flow, using the Equivalent Inverse Cipher, using two 128-bit data (state) from
ymm2 with two 128-bit round keys from ymm3/m256; store the result in ymm1."
+"VAESDECLAST zmm1, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG DF
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform the last round of an AES decryption
flow, using the Equivalent Inverse Cipher, using four128-bit data (state) from
zmm2 with four 128-bit round keys from zmm3/m512; store the result in zmm1."
+"VAESENC xmm1, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG DC
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform one round of an AES encryption
flow, using one 128-bit data (state) from xmm2 with one 128-bit round key from
the xmm3/m128; store the result in xmm1."
+"VAESENC ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG DC
/r","Valid","Valid","Invalid","VAES","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Perform one round of an AES encryption flow, using two 128-bit data
(state) from ymm2 with two 128-bit round keys from the ymm3/m256; store the
result in ymm1."
+"VAESENC ymm1, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG DC
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform one round of an AES encryption
flow, using two 128-bit data (state) from ymm2 with two 128-bit round keys from
the ymm3/m256; store the result in ymm1."
+"VAESENC zmm1, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG DC
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform one round of an AES encryption
flow, using four 128-bit data (state) from zmm2 with four 128-bit round keys
from the zmm3/m512; store the result in zmm1."
+"VAESENCLAST xmm1, xmm2, xmm3/m128","EVEX.128.66.0F38.WIG DD
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform the last round of an AES encryption
flow, using one 128-bit data (state) from xmm2 with one 128-bit round key from
xmm3/m128; store the result in xmm1."
+"VAESENCLAST ymm1, ymm2, ymm3/m256","VEX.256.66.0F38.WIG DD
/r","Valid","Valid","Invalid","VAES","ModRM:reg (w)","VEX.vvvv (r)","ModRM:r/m
(r)","","","Perform the last round of an AES encryption flow, using two 128-bit
data (state) from ymm2 with two 128-bit round keys from ymm3/m256; store the
result in ymm1."
+"VAESENCLAST ymm1, ymm2, ymm3/m256","EVEX.256.66.0F38.WIG DD
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform the last round of an AES encryption
flow, using two 128-bit data (state) from ymm2 with two 128-bit round keys from
ymm3/m256; store the result in ymm1."
+"VAESENCLAST zmm1, zmm2, zmm3/m512","EVEX.512.66.0F38.WIG DD
/r","Valid","Valid","Invalid","VAES AVX512VL","ModRM:reg (w)","EVEX.vvvv
(r)","ModRM:r/m (r)","","Full Mem","Perform the last round of an AES encryption
flow, using four 128-bit data (state) from zmm2 with four 128-bit round keys
from zmm3/m512; store the result in zmm1."
diff --git a/disas/x86-data/x86_vmx.csv b/disas/x86-data/x86_vmx.csv
new file mode 100644
index 000000000000..94f83d134f28
--- /dev/null
+++ b/disas/x86-data/x86_vmx.csv
@@ -0,0 +1,14 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"INVEPT r64,m128","LEX.66.0F38.W0 80
/r","Valid","Valid","Invalid","VMX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Invalidates EPT-derived entries in the TLBs and paging-structure
caches"
+"INVVPID r64,m128","LEX.66.0F38.W0 81
/r","Valid","Valid","Invalid","VMX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Invalidates entries in the TLBs and paging-structure caches
based on VPID"
+"VMCALL","LEX.0F.W0 01
c1","Valid","Valid","Invalid","VMX","","","","","","Call to VM monitor by
causing VM exit."
+"VMCLEAR m64","LEX.66.0F.W0 c7 /6","Valid","Valid","Invalid","VMX","ModRM:r/m
(r)","","","","","Clear Virtual-Machine Control Structure"
+"VMFUNC","LEX.0F.W0 01 d4","Valid","Valid","Invalid","VMX","RAX
(r)","","","","","Invoke VM function specified in EAX."
+"VMLAUNCH","LEX.0F.W0 01
c2","Valid","Valid","Invalid","VMX","","","","","","Launch Virtual Machine"
+"VMPTRLD m64","LEX.0F.W0 c7 /6","Valid","Valid","Invalid","VMX","ModRM:r/m
(r)","","","","","Load Pointer to Virtual-Machine Control Structure"
+"VMPTRST m64","LEX.0F.W0 c7 /7","Valid","Valid","Invalid","VMX","ModRM:r/m
(w)","","","","","Store Pointer to Virtual-Machine Control Structure"
+"VMREAD r64/m64,r64","LEX.0F.W0 78
/r","Valid","Valid","Invalid","VMX","ModRM:r/m (w)","ModRM:reg
(r)","","","","Read Field from Virtual-Machine Control Structure"
+"VMRESUME","LEX.0F.W0 01
c3","Valid","Valid","Invalid","VMX","","","","","","Resume Virtual Machine"
+"VMWRITE r64,r64/m64","LEX.0F.W0 79
/r","Valid","Valid","Invalid","VMX","ModRM:reg (r)","ModRM:r/m
(r)","","","","Write Field to Virtual-Machine Control Structure"
+"VMXOFF","LEX.0F.W0 01
c4","Valid","Valid","Invalid","VMX","","","","","","Leave VMX Operation"
+"VMXON m64","LEX.F3.0F.W0 c7 /6","Valid","Valid","Invalid","VMX","ModRM:r/m
(r)","","","","","Enter VMX Operation"
diff --git a/disas/x86-data/x86_waitpkg.csv b/disas/x86-data/x86_waitpkg.csv
new file mode 100644
index 000000000000..a695148fa0e7
--- /dev/null
+++ b/disas/x86-data/x86_waitpkg.csv
@@ -0,0 +1,4 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"TPAUSE rw","LEX.66.0F.W0 ae
/6","Valid","Valid","Invalid","WAITPKG","ModRM:r/m (r)","RDX (r)","RAX
(r)","","","Directs the processor to enter an implementation-dependent
optimized state until the TSC reaches the value in EDX:EAX."
+"UMONITOR rw","LEX.F3.0F.W0 ae
/6","Valid","Valid","Invalid","WAITPKG","ModRM:r/m (r)","","","","","Sets up a
linear address range to be monitored by hardware and activates the monitor. The
address range should be a write-back memory caching type. The address is
contained in r16/r32/r64."
+"UMWAIT rw","LEX.F2.0F.W0 ae
/6","Valid","Valid","Invalid","WAITPKG","ModRM:r/m (r)","RDX (r)","RAX
(r)","","","A hint that allows the processor to stop instruction execution and
enter an implementation-dependent optimized state until occurrence of a class
of events."
diff --git a/disas/x86-data/x86_wbnoinvd.csv b/disas/x86-data/x86_wbnoinvd.csv
new file mode 100644
index 000000000000..06882ddd0910
--- /dev/null
+++ b/disas/x86-data/x86_wbnoinvd.csv
@@ -0,0 +1,2 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"WBNOINVD","LEX.F3.0F.W0
09","Valid","Valid","Invalid","WBNOINVD","","","","","","Write back and do not
flush internal caches; initiate writing-back without flushing of external
caches."
diff --git a/disas/x86-data/x86_x87.csv b/disas/x86-data/x86_x87.csv
new file mode 100644
index 000000000000..1ff1f6ec6bf6
--- /dev/null
+++ b/disas/x86-data/x86_x87.csv
@@ -0,0 +1,145 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"F2XM1","LEX.WN D9 F0","Valid","Valid","Valid","X87","","","","","","Replace
ST(0) with (2 ^ (ST(0)-1))."
+"FABS","LEX.WN D9 E1","Valid","Valid","Valid","X87","","","","","","Replace ST
with its absolute value."
+"FADD ST(0), ST(i)","LEX.WN D8 C0+r","Valid","Valid","Valid","X87","ST0 (r,
w)","opcode +r (r)","","","","Add ST(0) to ST(i) and store result in ST(0)."
+"FADD m32fp","LEX.WN D8 /0","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Add m32fp to ST(0) and store result in ST(0)."
+"FADD ST(i), ST(0)","LEX.WN DC C0+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Add ST(i) to ST(0) and store result in ST(i)."
+"FADD m64fp","LEX.WN DC /0","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Add m64fp to ST(0) and store result in ST(0)."
+"FADDP ST(i), ST(0)","LEX.WN DE C0+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Add ST(0) to ST(i), store result in ST(i), and pop
the register stack."
+"FBLD m80dec","LEX.WN DF /4","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Convert BCD value to floating-point and push onto the FPU
stack."
+"FBSTP m80bcd","LEX.WN DF /6","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m80bcd and pop ST(0)."
+"FCHS","LEX.WN D9
E0","Valid","Valid","Valid","X87","","","","","","Complements sign of ST(0)."
+"FCLEX","LEX.9B.WN DB E2","Valid","Valid","Valid","X87","","","","","","Clear
floating-point exception flags after checking for pending unmasked
floating-point exceptions."
+"FCMOVB ST(0), ST(i)","LEX.WN DA C0+r","Valid","Valid","Valid","X87","ST0
(w)","opcode +r (r)","","","","Move if below (CF=1)."
+"FCMOVBE ST(0), ST(i)","LEX.WN DA D0+r","Valid","Valid","Valid","X87","ST0
(w)","opcode +r (r)","","","","Move if below or equal (CF=1 or ZF=1)."
+"FCMOVE ST(0), ST(i)","LEX.WN DA C8+r","Valid","Valid","Valid","X87","ST0
(w)","opcode +r (r)","","","","Move if equal (ZF=1)."
+"FCMOVNB ST(0), ST(i)","LEX.WN DB C0+r","Valid","Valid","Valid","X87","ST0
(w)","opcode +r (r)","","","","Move if not below (CF=0)."
+"FCMOVNBE ST(0), ST(i)","LEX.WN DB D0+r","Valid","Valid","Valid","X87","ST0
(w)","opcode +r (r)","","","","Move if not below or equal (CF=0 and ZF=0)."
+"FCMOVNE ST(0), ST(i)","LEX.WN DB C8+r","Valid","Valid","Valid","X87","ST0
(w)","opcode +r (r)","","","","Move if not equal (ZF=0)."
+"FCMOVNU ST(0), ST(i)","LEX.WN DB D8+r","Valid","Valid","Valid","X87","ST0
(w)","opcode +r (r)","","","","Move if not unordered (PF=0)."
+"FCMOVU ST(0), ST(i)","LEX.WN DA D8+r","Valid","Valid","Valid","X87","ST0
(w)","opcode +r (r)","","","","Move if unordered (PF=1)."
+"FCOM ST(i)","LEX.WN D8 D0+r","Valid","Valid","Valid","X87","opcode +r
(r)","ST0 (r)","","","","Compare ST(0) with ST(i)."
+"FCOM m32fp","LEX.WN D8 /2","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Compare ST(0) with m32fp."
+"FCOM m64fp","LEX.WN DC /2","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Compare ST(0) with m64fp."
+"FCOMI ST(0), ST(i)","LEX.WN DB F0+r","Valid","Valid","Valid","X87","ST0
(r)","opcode +r (r)","","","","Compare ST(0) with ST(i) and set status flags
accordingly."
+"FCOMIP ST(0), ST(i)","LEX.WN DF F0+r","Valid","Valid","Valid","X87","ST0
(r)","opcode +r (r)","","","","Compare ST(0) with ST(i), set status flags
accordingly, and pop register stack."
+"FCOMP ST(i)","LEX.WN D8 D8+r","Valid","Valid","Valid","X87","opcode +r
(r)","ST0 (r)","","","","Compare ST(0) with ST(i) and pop register stack."
+"FCOMP m32fp","LEX.WN D8 /3","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Compare ST(0) with m32fp and pop register stack."
+"FCOMP m64fp","LEX.WN DC /3","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Compare ST(0) with m64fp and pop register stack."
+"FCOMPP","LEX.WN DE D9","Valid","Valid","Valid","X87","","","","","","Compare
ST(0) with ST(1) and pop register stack twice."
+"FCOS","LEX.WN D9 FF","Valid","Valid","Valid","X87","","","","","","Replace
ST(0) with its approximate cosine."
+"FDECSTP","LEX.WN D9
F6","Valid","Valid","Valid","X87","","","","","","Decrement TOP field in FPU
status word."
+"FDIV ST(0), ST(i)","LEX.WN D8 F0+r","Valid","Valid","Valid","X87","ST0 (r,
w)","opcode +r (r)","","","","Divide ST(0) by ST(i) and store result in ST(0)."
+"FDIV m32fp","LEX.WN D8 /6","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Divide ST(0) by m32fp and store result in ST(0)."
+"FDIV ST(i), ST(0)","LEX.WN DC F8+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Divide ST(i) by ST(0) and store result in ST(i)."
+"FDIV m64fp","LEX.WN DC /6","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Divide ST(0) by m64fp and store result in ST(0)."
+"FDIVP ST(i), ST(0)","LEX.WN DE F8+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Divide ST(i) by ST(0), store result in ST(i), and
pop the register stack."
+"FDIVR ST(0), ST(i)","LEX.WN D8 F8+r","Valid","Valid","Valid","X87","ST0 (r,
w)","opcode +r (r)","","","","Divide ST(i) by ST(0) and store result in ST(0)."
+"FDIVR m32fp","LEX.WN D8 /7","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Divide m32fp by ST(0) and store result in ST(0)."
+"FDIVR ST(i), ST(0)","LEX.WN DC F0+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Divide ST(0) by ST(i) and store result in ST(i)."
+"FDIVR m64fp","LEX.WN DC /7","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Divide m64fp by ST(0) and store result in ST(0)."
+"FDIVRP ST(i), ST(0)","LEX.WN DE F0+r","Valid","Valid","Valid","X87","opcode
+r (r, w)","ST0 (r)","","","","Divide ST(0) by ST(i), store result in ST(i),
and pop the register stack."
+"FFREE ST(i)","LEX.WN DD C0+r","Valid","Valid","Valid","X87","opcode +r (r,
w)","","","","","Sets tag for ST(i) to empty."
+"FIADD m32int","LEX.WN DA /0","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Add m32int to ST(0) and store result in ST(0)."
+"FIADD m16int","LEX.WN DE /0","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Add m16int to ST(0) and store result in ST(0)."
+"FICOM m32int","LEX.WN DA /2","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Compare ST(0) with m32int."
+"FICOM m16int","LEX.WN DE /2","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Compare ST(0) with m16int."
+"FICOMP m32int","LEX.WN DA /3","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Compare ST(0) with m32int and pop stack register."
+"FICOMP m16int","LEX.WN DE /3","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Compare ST(0) with m16int and pop stack register."
+"FIDIV m32int","LEX.WN DA /6","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Divide ST(0) by m32int and store result in ST(0)."
+"FIDIV m16int","LEX.WN DE /6","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Divide ST(0) by m16int and store result in ST(0)."
+"FIDIVR m32int","LEX.WN DA /7","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Divide m32int by ST(0) and store result in ST(0)."
+"FIDIVR m16int","LEX.WN DE /7","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Divide m16int by ST(0) and store result in ST(0)."
+"FILD m32int","LEX.WN DB /0","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Push m32int onto the FPU register stack."
+"FILD m16int","LEX.WN DF /0","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Push m16int onto the FPU register stack."
+"FILD m64int","LEX.WN DF /5","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Push m64int onto the FPU register stack."
+"FIMUL m32int","LEX.WN DA /1","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Multiply ST(0) by m32int and store result in ST(0)."
+"FIMUL m16int","LEX.WN DE /1","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Multiply ST(0) by m16int and store result in ST(0)."
+"FINCSTP","LEX.WN D9
F7","Valid","Valid","Valid","X87","","","","","","Increment the TOP field in
the FPU status register."
+"FINIT","LEX.9B.WN DB
E3","Valid","Valid","Valid","X87","","","","","","Initialize FPU after checking
for pending unmasked floating-point exceptions."
+"FIST m32int","LEX.WN DB /2","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m32int."
+"FIST m16int","LEX.WN DF /2","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m16int."
+"FISTP m32int","LEX.WN DB /3","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m32int and pop register stack."
+"FISTP m16int","LEX.WN DF /3","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m16int and pop register stack."
+"FISTP m64int","LEX.WN DF /7","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m64int and pop register stack."
+"FISTTP m32int","LEX.WN DB /1","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m32int with truncation."
+"FISTTP m64int","LEX.WN DD /1","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m64int with truncation."
+"FISTTP m16int","LEX.WN DF /1","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store ST(0) in m16int with truncation."
+"FISUB m32int","LEX.WN DA /4","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Subtract m32int from ST(0) and store result in ST(0)."
+"FISUB m16int","LEX.WN DE /4","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Subtract m16int from ST(0) and store result in ST(0)."
+"FISUBR m32int","LEX.WN DA /5","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Subtract ST(0) from m32int and store result in ST(0)."
+"FISUBR m16int","LEX.WN DE /5","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Subtract ST(0) from m16int and store result in ST(0)."
+"FLD ST(i)","LEX.WN D9 C0+r","Valid","Valid","Valid","X87","opcode +r
(r)","","","","","Push ST(i) onto the FPU register stack."
+"FLD m32fp","LEX.WN D9 /0","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Push m32fp onto the FPU register stack."
+"FLD m80fp","LEX.WN DB /5","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Push m80fp onto the FPU register stack."
+"FLD m64fp","LEX.WN DD /0","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Push m64fp onto the FPU register stack."
+"FLD1","LEX.WN D9 E8","Valid","Valid","Valid","X87","","","","","","Push +1.0
onto the FPU register stack."
+"FLDCW m16","LEX.WN D9 /5","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Load FPU control word from m2byte."
+"FLDENV mem","LEX.WN D9 /4","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Load FPU environment from m14byte or m28byte."
+"FLDL2E","LEX.WN D9 EA","Valid","Valid","Valid","X87","","","","","","Push log
2 e onto the FPU register stack."
+"FLDL2T","LEX.WN D9 E9","Valid","Valid","Valid","X87","","","","","","Push log
2 10 onto the FPU register stack."
+"FLDLG2","LEX.WN D9 EC","Valid","Valid","Valid","X87","","","","","","Push log
10 2 onto the FPU register stack."
+"FLDLN2","LEX.WN D9 ED","Valid","Valid","Valid","X87","","","","","","Push log
e 2 onto the FPU register stack."
+"FLDPI","LEX.WN D9 EB","Valid","Valid","Valid","X87","","","","","","Push Pi
onto the FPU register stack."
+"FLDZ","LEX.WN D9 EE","Valid","Valid","Valid","X87","","","","","","Push +0.0
onto the FPU register stack."
+"FMUL ST(0), ST(i)","LEX.WN D8 C8+r","Valid","Valid","Valid","X87","ST0 (r,
w)","opcode +r (r)","","","","Multiply ST(0) by ST(i) and store result in
ST(0)."
+"FMUL m32fp","LEX.WN D8 /1","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Multiply ST(0) by m32fp and store result in ST(0)."
+"FMUL ST(i), ST(0)","LEX.WN DC C8+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Multiply ST(i) by ST(0) and store result in ST(i)."
+"FMUL m64fp","LEX.WN DC /1","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Multiply ST(0) by m64fp and store result in ST(0)."
+"FMULP ST(i), ST(0)","LEX.WN DE C8+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Multiply ST(i) by ST(0), store result in ST(i), and
pop the register stack."
+"FNCLEX","LEX.WN DB E2","Valid","Valid","Valid","X87","","","","","","Clear
floating-point exception flags without checking for pending unmasked
floating-point exceptions."
+"FNDISI","LEX.WN DB E1","Valid","Valid","Valid","X87","","","","","","Treated
as Integer NOP."
+"FNENI","LEX.WN DB E0","Valid","Valid","Valid","X87","","","","","","Treated
as Integer NOP."
+"FNINIT","LEX.WN DB
E3","Valid","Valid","Valid","X87","","","","","","Initialize FPU without
checking for pending unmasked floating-point exceptions."
+"FNOP","LEX.WN D9 D0","Valid","Valid","Valid","X87","","","","","","No
operation is performed."
+"FNSAVE mem","LEX.WN DD /6","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store FPU environment to m94byte or m108byte without checking
for pending unmasked floating- point exceptions. Then re-initialize the FPU."
+"FNSETPM","LEX.WN DB E4","Valid","Valid","Valid","X87","","","","","","Treated
as Integer NOP."
+"FNSTCW m16","LEX.WN D9 /7","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store FPU control word to m2byte without checking for pending
unmasked floating-point exceptions."
+"FNSTENV mem","LEX.WN D9 /6","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store FPU environment to m14byte or m28byte without checking
for pending unmasked floating- point exceptions. Then mask all floating- point
exceptions."
+"FNSTSW m16","LEX.WN DD /7","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store FPU status word at m2byte without checking for pending
unmasked floating-point exceptions."
+"FNSTSW ax","LEX.WN DF E0","Valid","Valid","Valid","X87","RAX
(w)","","","","","Store FPU status word in AX register without checking for
pending unmasked floating-point exceptions."
+"FPATAN","LEX.WN D9 F3","Valid","Valid","Valid","X87","","","","","","Replace
ST(1) with arctan(ST(1)/ST(0)) and pop the register stack."
+"FPREM","LEX.WN D9 F8","Valid","Valid","Valid","X87","","","","","","Replace
ST(0) with the remainder obtained from dividing ST(0) by ST(1)."
+"FPREM1","LEX.WN D9 F5","Valid","Valid","Valid","X87","","","","","","Replace
ST(0) with the IEEE remainder obtained from dividing ST(0) by ST(1)."
+"FPTAN","LEX.WN D9 F2","Valid","Valid","Valid","X87","","","","","","Replace
ST(0) with its approximate tangent and push 1 onto the FPU stack."
+"FRNDINT","LEX.WN D9 FC","Valid","Valid","Valid","X87","","","","","","Round
ST(0) to an integer."
+"FRSTOR mem","LEX.WN DD /4","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Load FPU state from m94byte or m108byte."
+"FSAVE mem","LEX.9B.WN DD /6","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store FPU state to m94byte or m108byte after checking for
pending unmasked floating-point exceptions. Then re-initialize the FPU."
+"FSCALE","LEX.WN D9 FD","Valid","Valid","Valid","X87","","","","","","Scale
ST(0) by ST(1)."
+"FSIN","LEX.WN D9 FE","Valid","Valid","Valid","X87","","","","","","Replace
ST(0) with the approximate of its sine."
+"FSINCOS","LEX.WN D9 FB","Valid","Valid","Valid","X87","","","","","","Compute
the sine and cosine of ST(0); replace ST(0) with the approximate sine, and push
the approximate cosine onto the register stack."
+"FSQRT","LEX.WN D9 FA","Valid","Valid","Valid","X87","","","","","","Computes
square root of ST(0) and stores the result in ST(0)."
+"FST m32fp","LEX.WN D9 /2","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Copy ST(0) to m32fp."
+"FST ST(i)","LEX.WN DD D0+r","Valid","Valid","Valid","X87","opcode +r
(w)","","","","","Copy ST(0) to ST(i)."
+"FST m64fp","LEX.WN DD /2","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Copy ST(0) to m64fp."
+"FSTCW m16","LEX.9B.WN D9 /7","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store FPU control word to m2byte after checking for pending
unmasked floating-point exceptions."
+"FSTENV mem","LEX.9B.WN D9 /6","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store FPU environment to m14byte or m28byte after checking
for pending unmasked floating-point exceptions. Then mask all floating-point
exceptions."
+"FSTP m32fp","LEX.WN D9 /3","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Copy ST(0) to m32fp and pop register stack."
+"FSTP m80fp","LEX.WN DB /7","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Copy ST(0) to m80fp and pop register stack."
+"FSTP ST(i)","LEX.WN DD D8+r","Valid","Valid","Valid","X87","opcode +r
(w)","ST0 (r)","","","","Copy ST(0) to ST(i) and pop register stack.F"
+"FSTP m64fp","LEX.WN DD /3","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Copy ST(0) to m64fp and pop register stack."
+"FSTSW m16","LEX.9B.WN DD /7","Valid","Valid","Valid","X87","ModRM:r/m
(w)","","","","","Store FPU status word at m2byte after checking for pending
unmasked floating-point exceptions."
+"FSTSW ax","LEX.9B.WN DF E0","Valid","Valid","Valid","X87","RAX
(w)","","","","","Store FPU status word in AX register after checking for
pending unmasked floating-point exceptions."
+"FSUB ST(0), ST(i)","LEX.WN D8 E0+r","Valid","Valid","Valid","X87","ST0 (r,
w)","opcode +r (r)","","","","Subtract ST(i) from ST(0) and store result in
ST(0)."
+"FSUB m32fp","LEX.WN D8 /4","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Subtract m32fp from ST(0) and store result in ST(0)."
+"FSUB ST(i), ST(0)","LEX.WN DC E8+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Subtract ST(0) from ST(i) and store result in
ST(i)."
+"FSUB m64fp","LEX.WN DC /4","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Subtract m64fp from ST(0) and store result in ST(0)."
+"FSUBP ST(i), ST(0)","LEX.WN DE E8+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Subtract ST(0) from ST(i), store result in ST(i),
and pop register stack."
+"FSUBR ST(0), ST(i)","LEX.WN D8 E8+r","Valid","Valid","Valid","X87","ST0 (r,
w)","opcode +r (r)","","","","Subtract ST(0) from ST(i) and store result in
ST(0)."
+"FSUBR m32fp","LEX.WN D8 /5","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Subtract ST(0) from m32fp and store result in ST(0)."
+"FSUBR ST(i), ST(0)","LEX.WN DC E0+r","Valid","Valid","Valid","X87","opcode +r
(r, w)","ST0 (r)","","","","Subtract ST(i) from ST(0) and store result in
ST(i)."
+"FSUBR m64fp","LEX.WN DC /5","Valid","Valid","Valid","X87","ModRM:r/m
(r)","","","","","Subtract ST(0) from m64fp and store result in ST(0)."
+"FSUBRP ST(i), ST(0)","LEX.WN DE E0+r","Valid","Valid","Valid","X87","opcode
+r (r, w)","ST0 (r)","","","","Subtract ST(i) from ST(0), store result in
ST(i), and pop register stack."
+"FTST","LEX.WN D9 E4","Valid","Valid","Valid","X87","","","","","","Compare
ST(0) with 0.0."
+"FUCOM ST(i)","LEX.WN DD E0+r","Valid","Valid","Valid","X87","opcode +r
(r)","ST0 (r)","","","","Compare ST(0) with ST(i)."
+"FUCOMI ST(0), ST(i)","LEX.WN DB E8+r","Valid","Valid","Valid","X87","ST0
(r)","opcode +r (r)","","","","Compare ST(0) with ST(i), check for ordered
values, and set status flags accordingly."
+"FUCOMIP ST(0), ST(i)","LEX.WN DF E8+r","Valid","Valid","Valid","X87","ST0
(r)","opcode +r (r)","","","","Compare ST(0) with ST(i), check for ordered
values, set status flags accordingly, and pop register stack."
+"FUCOMP ST(i)","LEX.WN DD E8+r","Valid","Valid","Valid","X87","opcode +r
(r)","ST0 (r)","","","","Compare ST(0) with ST(i) and pop register stack."
+"FUCOMPP","LEX.WN DA E9","Valid","Valid","Valid","X87","","","","","","Compare
ST(0) with ST(1) and pop register stack twice."
+"FXAM","LEX.WN D9 E5","Valid","Valid","Valid","X87","","","","","","Classify
value or number in ST(0)."
+"FXCH ST(i)","LEX.WN D9 C8+r","Valid","Valid","Valid","X87","opcode +r (r,
w)","ST0 (r, w)","","","","Exchange the contents of ST(0) and ST(i)."
+"FXRSTOR mem","LEX.0F.W0 AE /1","Valid","Valid","Valid","X87","ModRM:r/m (r,
ModRM:[7:6] must not be 11b)","","","","","Restore the x87 FPU, MMX, XMM, and
MXCSR register state from m512byte."
+"FXSAVE mem","LEX.0F.W0 AE /0","Valid","Valid","Valid","X87","ModRM:r/m (w,
ModRM:[7:6] must not be 11b)","","","","","Save the x87 FPU, MMX, XMM, and
MXCSR register state to m512byte."
+"FXTRACT","LEX.WN D9
F4","Valid","Valid","Valid","X87","","","","","","Separate value in ST(0) into
exponent and significand, store exponent in ST(0), and push the significand
onto the register stack."
+"FYL2X","LEX.WN D9 F1","Valid","Valid","Valid","X87","","","","","","Replace
ST(1) with (ST(1) * log ST(0)) and pop the register stack."
+"FYL2XP1","LEX.WN D9 F9","Valid","Valid","Valid","X87","","","","","","Replace
ST(1) with ST(1) * log (ST(0) + 1.0) and pop the register stack."
diff --git a/disas/x86-data/x86_xsaveopt.csv b/disas/x86-data/x86_xsaveopt.csv
new file mode 100644
index 000000000000..d64ba7f92f90
--- /dev/null
+++ b/disas/x86-data/x86_xsaveopt.csv
@@ -0,0 +1,3 @@
+"Instruction","Opcode","Valid 64-bit","Valid 32-bit","Valid 16-bit","Feature
Flags","Operand 1","Operand 2","Operand 3","Operand 4","Tuple
Type","Description"
+"XSAVEOPT mem","LEX.0F.W0 AE
/6","Valid","Valid","Invalid","XSAVEOPT","ModRM:r/m (w)","","","","","Save
state components specified by EDX:EAX to mem, optimizing if possible."
+"XSAVEOPT64 mem","LEX.0F.W1 AE
/6","Valid","Valid","Invalid","XSAVEOPT","ModRM:r/m (w)","","","","","Save
state components specified by EDX:EAX to mem, optimizing if possible."
--
2.43.0