aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2021-06-26 01:32:08 -0700
committeriximeow <me@iximeow.net>2021-06-26 01:39:04 -0700
commitd951f4bbce1102ddab30e3a5f65ddac8ab221ac9 (patch)
tree0de4ae9d1c3368e8d355ed3de3974ac22fbc18d1 /src
parenta801fefb208c83a8d32f2be4d88b1f384e3017dc (diff)
add long-mode avx512 support, except for compressed displacements
Diffstat (limited to 'src')
-rw-r--r--src/long_mode/display.rs366
-rw-r--r--src/long_mode/evex.rs6
-rw-r--r--src/long_mode/evex/generated.rs276
-rw-r--r--src/long_mode/mod.rs506
-rw-r--r--src/shared/evex.in4874
-rw-r--r--src/shared/generated_evex.in1499
6 files changed, 7504 insertions, 23 deletions
diff --git a/src/long_mode/display.rs b/src/long_mode/display.rs
index 02d8382..0af8bfc 100644
--- a/src/long_mode/display.rs
+++ b/src/long_mode/display.rs
@@ -5,7 +5,7 @@ use core::fmt;
use yaxpeax_arch::{Colorize, ShowContextual, NoColors, YaxColors};
use yaxpeax_arch::display::*;
-use crate::long_mode::{RegSpec, Opcode, Operand, InstDecoder, Instruction, Segment, PrefixRex, OperandSpec};
+use crate::long_mode::{RegSpec, Opcode, Operand, MergeMode, InstDecoder, Instruction, SaeMode, Segment, PrefixRex, OperandSpec};
impl fmt::Display for InstDecoder {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
@@ -177,6 +177,44 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Operand {
&Operand::Register(ref spec) => {
f.write_str(regspec_label(spec))
}
+ &Operand::RegisterMaskMerge(ref spec, ref mask, merge_mode) => {
+ f.write_str(regspec_label(spec))?;
+ if mask.num != 0 {
+ f.write_str("{")?;
+ f.write_str(regspec_label(mask))?;
+ f.write_str("}")?;
+ }
+ if let MergeMode::Zero = merge_mode {
+ f.write_str("{z}")?;
+ }
+ Ok(())
+ }
+ &Operand::RegisterMaskMergeSae(ref spec, ref mask, merge_mode, sae_mode) => {
+ f.write_str(regspec_label(spec))?;
+ if mask.num != 0 {
+ f.write_str("{")?;
+ f.write_str(regspec_label(mask))?;
+ f.write_str("}")?;
+ }
+ if let MergeMode::Zero = merge_mode {
+ f.write_str("{z}")?;
+ }
+ f.write_str(sae_mode.label())?;
+ Ok(())
+ }
+ &Operand::RegisterMaskMergeSaeNoround(ref spec, ref mask, merge_mode) => {
+ f.write_str(regspec_label(spec))?;
+ if mask.num != 0 {
+ f.write_str("{")?;
+ f.write_str(regspec_label(mask))?;
+ f.write_str("}")?;
+ }
+ if let MergeMode::Zero = merge_mode {
+ f.write_str("{z}")?;
+ }
+ f.write_str("{sae}")?;
+ Ok(())
+ }
&Operand::DisplacementU32(imm) => {
write!(f, "[{}]", colors.address(u32_hex(imm)))
}
@@ -238,6 +276,69 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Operand {
format_number_i32(colors, f, disp, NumberStyleHint::HexSignedWithSignSplit)?;
write!(f, "]")
},
+ &Operand::RegDispMasked(ref spec, disp, ref mask_reg) => {
+ write!(f, "[{} ", regspec_label(spec))?;
+ format_number_i32(colors, f, disp, NumberStyleHint::HexSignedWithSignSplit)?;
+ write!(f, "]")?;
+ write!(f, "{{{}}}", regspec_label(mask_reg))
+ },
+ &Operand::RegDerefMasked(ref spec, ref mask_reg) => {
+ f.write_str("[")?;
+ f.write_str(regspec_label(spec))?;
+ f.write_str("]")?;
+ write!(f, "{{{}}}", regspec_label(mask_reg))
+ },
+ &Operand::RegScaleMasked(ref spec, scale, ref mask_reg) => {
+ write!(f, "[{} * {}]",
+ regspec_label(spec),
+ colors.number(scale)
+ )?;
+ write!(f, "{{{}}}", regspec_label(mask_reg))
+ },
+ &Operand::RegScaleDispMasked(ref spec, scale, disp, ref mask_reg) => {
+ write!(f, "[{} * {} ",
+ regspec_label(spec),
+ colors.number(scale),
+ )?;
+ format_number_i32(colors, f, disp, NumberStyleHint::HexSignedWithSignSplit)?;
+ write!(f, "]")?;
+ write!(f, "{{{}}}", regspec_label(mask_reg))
+ },
+ &Operand::RegIndexBaseMasked(ref base, ref index, ref mask_reg) => {
+ f.write_str("[")?;
+ f.write_str(regspec_label(base))?;
+ f.write_str(" + ")?;
+ f.write_str(regspec_label(index))?;
+ f.write_str("]")?;
+ write!(f, "{{{}}}", regspec_label(mask_reg))
+ }
+ &Operand::RegIndexBaseDispMasked(ref base, ref index, disp, ref mask_reg) => {
+ write!(f, "[{} + {} ",
+ regspec_label(base),
+ regspec_label(index),
+ )?;
+ format_number_i32(colors, f, disp, NumberStyleHint::HexSignedWithSignSplit)?;
+ write!(f, "]")?;
+ write!(f, "{{{}}}", regspec_label(mask_reg))
+ },
+ &Operand::RegIndexBaseScaleMasked(ref base, ref index, scale, ref mask_reg) => {
+ write!(f, "[{} + {} * {}]",
+ regspec_label(base),
+ regspec_label(index),
+ colors.number(scale)
+ )?;
+ write!(f, "{{{}}}", regspec_label(mask_reg))
+ }
+ &Operand::RegIndexBaseScaleDispMasked(ref base, ref index, scale, disp, ref mask_reg) => {
+ write!(f, "[{} + {} * {} ",
+ regspec_label(base),
+ regspec_label(index),
+ colors.number(scale),
+ )?;
+ format_number_i32(colors, f, disp, NumberStyleHint::HexSignedWithSignSplit)?;
+ write!(f, "]")?;
+ write!(f, "{{{}}}", regspec_label(mask_reg))
+ },
&Operand::Nothing => { Ok(()) },
}
}
@@ -938,6 +1039,7 @@ const MNEMONICS: &[&'static str] = &[
"vpmulhrsw",
"vpmulhuw",
"vpmulhw",
+ "vpmullq",
"vpmulld",
"vpmullw",
"vpmuludq",
@@ -1367,6 +1469,7 @@ const MNEMONICS: &[&'static str] = &[
"vgetmantss",
"vinsertf32x4",
"vinsertf64x4",
+ "vinserti64x4",
"vmovdqa32",
"vmovdqa64",
"vmovdqu32",
@@ -1417,8 +1520,8 @@ const MNEMONICS: &[&'static str] = &[
"vpsravq",
"vptestnmd",
"vptestnmq",
- "vpterlogd",
- "vpterlogq",
+ "vpternlogd",
+ "vpternlogq",
"vptestmd",
"vptestmq",
"vrcp14pd",
@@ -1427,7 +1530,7 @@ const MNEMONICS: &[&'static str] = &[
"vrcp14ss",
"vrndscalepd",
"vrndscaleps",
- "vrndcsalesd",
+ "vrndscalesd",
"vrndscaless",
"vrsqrt14pd",
"vrsqrt14ps",
@@ -1469,7 +1572,6 @@ const MNEMONICS: &[&'static str] = &[
"vpmovm2q",
"vpmovb2d",
"vpmovq2m",
- "vpmulllq",
"vrangepd",
"vrangeps",
"vrangesd",
@@ -1606,6 +1708,97 @@ const MNEMONICS: &[&'static str] = &[
"bndmov",
"bndldx",
"bndstx",
+
+
+
+ "vgf2p8affineqb",
+ "vgf2p8affineinvqb",
+ "vpshrdq",
+ "vpshrdd",
+ "vpshrdw",
+ "vpshldq",
+ "vpshldd",
+ "vpshldw",
+ "vbroadcastf32x8",
+ "vbroadcastf64x4",
+ "vbroadcastf32x4",
+ "vbroadcastf64x2",
+ "vbroadcastf32x2",
+ "vbroadcasti32x8",
+ "vbroadcasti64x4",
+ "vbroadcasti32x4",
+ "vbroadcasti64x2",
+ "vbroadcasti32x2",
+ "vextracti32x8",
+ "vextractf32x8",
+ "vinserti32x8",
+ "vinsertf32x8",
+ "vinserti32x4",
+ "v4fnmaddss",
+ "v4fnmaddps",
+ "vcvtneps2bf16",
+ "v4fmaddss",
+ "v4fmaddps",
+ "vcvtne2ps2bf16",
+ "vp2intersectd",
+ "vp2intersectq",
+ "vp4dpwssds",
+ "vp4dpwssd",
+ "vpdpwssds",
+ "vpdpwssd",
+ "vpdpbusds",
+ "vdpbf16ps",
+ "vpbroadcastmw2d",
+ "vpbroadcastmb2q",
+ "vpmovd2m",
+ "vpmovqd",
+ "vpmovwb",
+ "vpmovdb",
+ "vpmovdw",
+ "vpmovqb",
+ "vpmovqw",
+ "vgf2p8mulb",
+ "vpmadd52huq",
+ "vpmadd52luq",
+ "vpshufbitqmb",
+ "vpermb",
+ "vpexpandd",
+ "vpexpandq",
+ "vpabsq",
+ "vprorvd",
+ "vprorvq",
+ "vpmultishiftqb",
+ "vpermt2b",
+ "vpermt2w",
+ "vpshrdvq",
+ "vpshrdvd",
+ "vpshrdvw",
+ "vpshldvq",
+ "vpshldvd",
+ "vpshldvw",
+ "vpcompressb",
+ "vpcompressw",
+ "vpexpandb",
+ "vpexpandw",
+ "vpopcntd",
+ "vpopcntq",
+ "vpopcntb",
+ "vpopcntw",
+ "vscalefss",
+ "vscalefsd",
+ "vscalefps",
+ "vscalefpd",
+ "vpdpbusd",
+ "vcvtusi2sd",
+ "vcvtusi2ss",
+ "vpxord",
+ "vpxorq",
+ "vpord",
+ "vporq",
+ "vpandnd",
+ "vpandnq",
+ "vpandd",
+ "vpandq",
];
impl Opcode {
@@ -1624,6 +1817,95 @@ impl Opcode {
impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode {
fn colorize(&self, colors: &Y, out: &mut T) -> fmt::Result {
match self {
+ Opcode::VGF2P8AFFINEQB |
+ Opcode::VGF2P8AFFINEINVQB |
+ Opcode::VPSHRDQ |
+ Opcode::VPSHRDD |
+ Opcode::VPSHRDW |
+ Opcode::VPSHLDQ |
+ Opcode::VPSHLDD |
+ Opcode::VPSHLDW |
+ Opcode::VBROADCASTF32X8 |
+ Opcode::VBROADCASTF64X4 |
+ Opcode::VBROADCASTF32X4 |
+ Opcode::VBROADCASTF64X2 |
+ Opcode::VBROADCASTF32X2 |
+ Opcode::VBROADCASTI32X8 |
+ Opcode::VBROADCASTI64X4 |
+ Opcode::VBROADCASTI32X4 |
+ Opcode::VBROADCASTI64X2 |
+ Opcode::VBROADCASTI32X2 |
+ Opcode::VEXTRACTI32X8 |
+ Opcode::VEXTRACTF32X8 |
+ Opcode::VINSERTI32X8 |
+ Opcode::VINSERTF32X8 |
+ Opcode::VINSERTI32X4 |
+ Opcode::V4FNMADDSS |
+ Opcode::V4FNMADDPS |
+ Opcode::VCVTNEPS2BF16 |
+ Opcode::V4FMADDSS |
+ Opcode::V4FMADDPS |
+ Opcode::VCVTNE2PS2BF16 |
+ Opcode::VP2INTERSECTD |
+ Opcode::VP2INTERSECTQ |
+ Opcode::VP4DPWSSDS |
+ Opcode::VP4DPWSSD |
+ Opcode::VPDPWSSDS |
+ Opcode::VPDPWSSD |
+ Opcode::VPDPBUSDS |
+ Opcode::VDPBF16PS |
+ Opcode::VPBROADCASTMW2D |
+ Opcode::VPBROADCASTMB2Q |
+ Opcode::VPMOVD2M |
+ Opcode::VPMOVQD |
+ Opcode::VPMOVWB |
+ Opcode::VPMOVDB |
+ Opcode::VPMOVDW |
+ Opcode::VPMOVQB |
+ Opcode::VPMOVQW |
+ Opcode::VGF2P8MULB |
+ Opcode::VPMADD52HUQ |
+ Opcode::VPMADD52LUQ |
+ Opcode::VPSHUFBITQMB |
+ Opcode::VPERMB |
+ Opcode::VPEXPANDD |
+ Opcode::VPEXPANDQ |
+ Opcode::VPABSQ |
+ Opcode::VPRORVD |
+ Opcode::VPRORVQ |
+ Opcode::VPMULTISHIFTQB |
+ Opcode::VPERMT2B |
+ Opcode::VPERMT2W |
+ Opcode::VPSHRDVQ |
+ Opcode::VPSHRDVD |
+ Opcode::VPSHRDVW |
+ Opcode::VPSHLDVQ |
+ Opcode::VPSHLDVD |
+ Opcode::VPSHLDVW |
+ Opcode::VPCOMPRESSB |
+ Opcode::VPCOMPRESSW |
+ Opcode::VPEXPANDB |
+ Opcode::VPEXPANDW |
+ Opcode::VPOPCNTD |
+ Opcode::VPOPCNTQ |
+ Opcode::VPOPCNTB |
+ Opcode::VPOPCNTW |
+ Opcode::VSCALEFSS |
+ Opcode::VSCALEFSD |
+ Opcode::VSCALEFPS |
+ Opcode::VSCALEFPD |
+ Opcode::VPDPBUSD |
+ Opcode::VCVTUSI2SD |
+ Opcode::VCVTUSI2SS |
+ Opcode::VPXORD |
+ Opcode::VPXORQ |
+ Opcode::VPORD |
+ Opcode::VPORQ |
+ Opcode::VPANDND |
+ Opcode::VPANDNQ |
+ Opcode::VPANDD |
+ Opcode::VPANDQ |
+
Opcode::VHADDPS |
Opcode::VHSUBPS |
Opcode::VADDSUBPS |
@@ -1704,7 +1986,6 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode {
Opcode::VMULPS |
Opcode::VMULSD |
Opcode::VMULSS |
- Opcode::VPMULLLQ |
Opcode::VPABSB |
Opcode::VPABSD |
Opcode::VPABSW |
@@ -1731,6 +2012,7 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode {
Opcode::VPMULHRSW |
Opcode::VPMULHUW |
Opcode::VPMULHW |
+ Opcode::VPMULLQ |
Opcode::VPMULLD |
Opcode::VPMULLW |
Opcode::VPMULUDQ |
@@ -1762,7 +2044,7 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode {
Opcode::VRCP14SS |
Opcode::VRNDSCALEPD |
Opcode::VRNDSCALEPS |
- Opcode::VRNDCSALESD |
+ Opcode::VRNDSCALESD |
Opcode::VRNDSCALESS |
Opcode::VRSQRT14PD |
Opcode::VRSQRT14PS |
@@ -2250,6 +2532,7 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode {
Opcode::VINSERTF64X2 |
Opcode::VINSERTF64X4 |
Opcode::VINSERTI64X2 |
+ Opcode::VINSERTI64X4 |
Opcode::VSHUFF32X4 |
Opcode::VSHUFF64X2 |
Opcode::VSHUFI32X4 |
@@ -2637,8 +2920,8 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode {
Opcode::KTESTQ |
Opcode::VPTESTNMD |
Opcode::VPTESTNMQ |
- Opcode::VPTERLOGD |
- Opcode::VPTERLOGQ |
+ Opcode::VPTERNLOGD |
+ Opcode::VPTERNLOGQ |
Opcode::VPTESTMD |
Opcode::VPTESTMQ |
Opcode::VPTESTNMB |
@@ -3022,6 +3305,17 @@ impl Instruction {
}
}
+const MEM_SIZE_STRINGS: [&'static str; 64] = [
+ "byte", "word", "BUG", "dword", "BUG", "BUG", "BUG", "qword",
+ "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "xmmword",
+ "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG",
+ "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "ymmword",
+ "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG",
+ "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG",
+ "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG",
+ "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "BUG", "zmmword",
+];
+
fn contextualize_intel<T: fmt::Write, Y: YaxColors>(instr: &Instruction, colors: &Y, _address: u64, _context: Option<&NoContext>, out: &mut T) -> fmt::Result {
if instr.prefixes.lock() {
write!(out, "lock ")?;
@@ -3054,6 +3348,10 @@ fn contextualize_intel<T: fmt::Write, Y: YaxColors>(instr: &Instruction, colors:
}
let x = Operand::from_spec(instr, instr.operands[0]);
+ if x.is_memory() {
+ out.write_str(MEM_SIZE_STRINGS[instr.mem_size as usize - 1])?;
+ out.write_str(" ")?;
+ }
x.colorize(colors, out)?;
for i in 1..instr.operand_count {
@@ -3094,7 +3392,7 @@ fn contextualize_intel<T: fmt::Write, Y: YaxColors>(instr: &Instruction, colors:
}
}
let x = Operand::from_spec(instr, instr.operands[i as usize]);
- x.colorize(colors, out)?
+ x.colorize(colors, out)?;
},
_ => {
match &instr.operands[i as usize] {
@@ -3107,7 +3405,53 @@ fn contextualize_intel<T: fmt::Write, Y: YaxColors>(instr: &Instruction, colors:
write!(out, "{}:", prefix)?;
}
let x = Operand::from_spec(instr, instr.operands[i as usize]);
- x.colorize(colors, out)?
+ if x.is_memory() {
+ out.write_str(MEM_SIZE_STRINGS[instr.mem_size as usize - 1])?;
+ out.write_str(" ")?;
+ }
+ x.colorize(colors, out)?;
+ if let Some(evex) = instr.prefixes.evex() {
+ if evex.broadcast() && x.is_memory() {
+ let scale = if instr.opcode == Opcode::VCVTPD2PS || instr.opcode == Opcode::VCVTTPD2UDQ || instr.opcode == Opcode::VCVTPD2UDQ || instr.opcode == Opcode::VCVTUDQ2PD || instr.opcode == Opcode::VCVTPS2PD || instr.opcode == Opcode::VCVTQQ2PS || instr.opcode == Opcode::VCVTDQ2PD || instr.opcode == Opcode::VCVTTPD2DQ || instr.opcode == Opcode::VFPCLASSPS || instr.opcode == Opcode::VFPCLASSPD || instr.opcode == Opcode::VCVTNEPS2BF16 || instr.opcode == Opcode::VCVTUQQ2PS || instr.opcode == Opcode::VCVTPD2DQ || instr.opcode == Opcode::VCVTTPS2UQQ || instr.opcode == Opcode::VCVTPS2UQQ || instr.opcode == Opcode::VCVTTPS2QQ || instr.opcode == Opcode::VCVTPS2QQ {
+ if instr.opcode == Opcode::VFPCLASSPS || instr.opcode == Opcode::VCVTNEPS2BF16 {
+ if evex.vex().l() {
+ 8
+ } else if evex.lp() {
+ 16
+ } else {
+ 4
+ }
+ } else if instr.opcode == Opcode::VFPCLASSPD {
+ if evex.vex().l() {
+ 4
+ } else if evex.lp() {
+ 8
+ } else {
+ 2
+ }
+ } else {
+ // vcvtpd2ps is "cool": in broadcast mode, it can read a
+ // double-precision float (qword), resize to single-precision,
+ // then broadcast that to the whole destination register. this
+ // means we need to show `xmm, qword [addr]{1to4}` if vector
+ // size is 256. likewise, scale of 8 for the same truncation
+ // reason if vector size is 512.
+ // vcvtudq2pd is the same story.
+ // vfpclassp{s,d} is a mystery to me.
+ if evex.vex().l() {
+ 4
+ } else if evex.lp() {
+ 8
+ } else {
+ 2
+ }
+ }
+ } else {
+ Operand::from_spec(instr, instr.operands[i as usize - 1]).width() / instr.mem_size
+ };
+ write!(out, "{{1to{}}}", scale)?;
+ }
+ }
}
}
}
diff --git a/src/long_mode/evex.rs b/src/long_mode/evex.rs
new file mode 100644
index 0000000..88f0494
--- /dev/null
+++ b/src/long_mode/evex.rs
@@ -0,0 +1,6 @@
+// use crate::long_mode::{OperandSpec, DecodeError, RegSpec, RegisterBank, Instruction, Opcode};
+use crate::long_mode::{DecodeError, RegSpec, RegisterBank, Instruction, Opcode};
+use crate::long_mode::{read_modrm, read_E, read_E_xmm, read_E_ymm, read_E_zmm, read_imm_unsigned};
+
+include!("../shared/generated_evex.in");
+include!("../shared/evex.in");
diff --git a/src/long_mode/evex/generated.rs b/src/long_mode/evex/generated.rs
new file mode 100644
index 0000000..0b0103e
--- /dev/null
+++ b/src/long_mode/evex/generated.rs
@@ -0,0 +1,276 @@
+use crate::long_mode::Opcode;
+use crate::long_mode::evex::EVEXOperandCode;
+
+pub(crate) const TABLES: [&'static [[(Opcode, EVEXOperandCode); 8]; 256]; 12] = [
+ &DUMMY,
+ &DUMMY,
+ &DUMMY,
+ &DUMMY,
+ &DUMMY,
+ &DUMMY,
+ &DUMMY,
+ &DUMMY,
+ &DUMMY,
+ &EVEX_66_0f3a,
+ &DUMMY,
+ &DUMMY,
+];
+
+pub(crate) const DUMMY: [[(Opcode, EVEXOperandCode); 8]; 256] = [
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+ [(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing),(Opcode::Invalid, EVEXOperandCode::Nothing)],
+];
diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs
index 88cae67..bbfcd07 100644
--- a/src/long_mode/mod.rs
+++ b/src/long_mode/mod.rs
@@ -1,4 +1,5 @@
mod vex;
+mod evex;
#[cfg(feature = "fmt")]
mod display;
pub mod uarch;
@@ -150,6 +151,19 @@ impl RegSpec {
}
}
+ /// construct a `RegSpec` for mask reg `num`
+ #[inline]
+ pub fn mask(num: u8) -> RegSpec {
+ if num >= 8 {
+ panic!("invalid x86 mask reg {}", num);
+ }
+
+ RegSpec {
+ num,
+ bank: RegisterBank::K
+ }
+ }
+
/// construct a `RegSpec` for dword reg `num`
#[inline]
pub fn d(num: u8) -> RegSpec {
@@ -440,6 +454,9 @@ pub enum Operand {
ImmediateU64(u64),
ImmediateI64(i64),
Register(RegSpec),
+ RegisterMaskMerge(RegSpec, RegSpec, MergeMode),
+ RegisterMaskMergeSae(RegSpec, RegSpec, MergeMode, SaeMode),
+ RegisterMaskMergeSaeNoround(RegSpec, RegSpec, MergeMode),
DisplacementU32(u32),
DisplacementU64(u64),
RegDeref(RegSpec),
@@ -450,10 +467,32 @@ pub enum Operand {
RegScaleDisp(RegSpec, u8, i32),
RegIndexBaseScale(RegSpec, RegSpec, u8),
RegIndexBaseScaleDisp(RegSpec, RegSpec, u8, i32),
+ RegDerefMasked(RegSpec, RegSpec),
+ RegDispMasked(RegSpec, i32, RegSpec),
+ RegScaleMasked(RegSpec, u8, RegSpec),
+ RegIndexBaseMasked(RegSpec, RegSpec, RegSpec),
+ RegIndexBaseDispMasked(RegSpec, RegSpec, i32, RegSpec),
+ RegScaleDispMasked(RegSpec, u8, i32, RegSpec),
+ RegIndexBaseScaleMasked(RegSpec, RegSpec, u8, RegSpec),
+ RegIndexBaseScaleDispMasked(RegSpec, RegSpec, u8, i32, RegSpec),
Nothing,
}
impl OperandSpec {
+ fn masked(self) -> Self {
+ match self {
+ OperandSpec::RegRRR => OperandSpec::RegRRR_maskmerge,
+ OperandSpec::RegMMM => OperandSpec::RegMMM_maskmerge,
+ OperandSpec::RegVex => OperandSpec::RegVex_maskmerge,
+ OperandSpec::Deref => OperandSpec::Deref_mask,
+ OperandSpec::RegDisp => OperandSpec::RegDisp_mask,
+ OperandSpec::RegScale => OperandSpec::RegScale_mask,
+ OperandSpec::RegScaleDisp => OperandSpec::RegScaleDisp_mask,
+ OperandSpec::RegIndexBaseScale => OperandSpec::RegIndexBaseScale_mask,
+ OperandSpec::RegIndexBaseScaleDisp => OperandSpec::RegIndexBaseScaleDisp_mask,
+ o => o,
+ }
+ }
pub fn is_memory(&self) -> bool {
match self {
OperandSpec::DispU32 |
@@ -465,7 +504,13 @@ impl OperandSpec {
OperandSpec::RegScale |
OperandSpec::RegScaleDisp |
OperandSpec::RegIndexBaseScale |
- OperandSpec::RegIndexBaseScaleDisp => {
+ OperandSpec::RegIndexBaseScaleDisp |
+ OperandSpec::Deref_mask |
+ OperandSpec::RegDisp_mask |
+ OperandSpec::RegScale_mask |
+ OperandSpec::RegScaleDisp_mask |
+ OperandSpec::RegIndexBaseScale_mask |
+ OperandSpec::RegIndexBaseScaleDisp_mask => {
true
},
OperandSpec::ImmI8 |
@@ -475,8 +520,14 @@ impl OperandSpec {
OperandSpec::ImmU8 |
OperandSpec::ImmU16 |
OperandSpec::RegRRR |
+ OperandSpec::RegRRR_maskmerge |
+ OperandSpec::RegRRR_maskmerge_sae |
+ OperandSpec::RegRRR_maskmerge_sae_noround |
OperandSpec::RegMMM |
+ OperandSpec::RegMMM_maskmerge |
+ OperandSpec::RegMMM_maskmerge_sae_noround |
OperandSpec::RegVex |
+ OperandSpec::RegVex_maskmerge |
OperandSpec::Reg4 |
OperandSpec::ImmInDispField |
OperandSpec::Nothing => {
@@ -485,6 +536,54 @@ impl OperandSpec {
}
}
}
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum MergeMode {
+ Merge,
+ Zero,
+}
+impl From<bool> for MergeMode {
+ fn from(b: bool) -> Self {
+ if b {
+ MergeMode::Zero
+ } else {
+ MergeMode::Merge
+ }
+ }
+}
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum SaeMode {
+ RoundNearest,
+ RoundDown,
+ RoundUp,
+ RoundZero,
+}
+const SAE_MODES: [SaeMode; 4] = [
+ SaeMode::RoundNearest,
+ SaeMode::RoundDown,
+ SaeMode::RoundUp,
+ SaeMode::RoundZero,
+];
+impl SaeMode {
+ pub fn label(&self) -> &'static str {
+ match self {
+ SaeMode::RoundNearest => "{rne-sae}",
+ SaeMode::RoundDown => "{rd-sae}",
+ SaeMode::RoundUp => "{ru-sae}",
+ SaeMode::RoundZero => "{rz-sae}",
+ }
+ }
+
+ fn from(l: bool, lp: bool) -> Self {
+ let mut idx = 0;
+ if l {
+ idx |= 1;
+ }
+ if lp {
+ idx |= 2;
+ }
+ SAE_MODES[idx]
+ }
+}
impl Operand {
fn from_spec(inst: &Instruction, spec: OperandSpec) -> Operand {
match spec {
@@ -495,13 +594,56 @@ impl Operand {
OperandSpec::RegRRR => {
Operand::Register(inst.modrm_rrr)
}
+ OperandSpec::RegRRR_maskmerge => {
+ Operand::RegisterMaskMerge(
+ inst.modrm_rrr,
+ RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()),
+ MergeMode::from(inst.prefixes.evex_unchecked().merge()),
+ )
+ }
+ OperandSpec::RegRRR_maskmerge_sae => {
+ Operand::RegisterMaskMergeSae(
+ inst.modrm_rrr,
+ RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()),
+ MergeMode::from(inst.prefixes.evex_unchecked().merge()),
+ SaeMode::from(inst.prefixes.evex_unchecked().vex().l(), inst.prefixes.evex_unchecked().lp()),
+ )
+ }
+ OperandSpec::RegRRR_maskmerge_sae_noround => {
+ Operand::RegisterMaskMergeSaeNoround(
+ inst.modrm_rrr,
+ RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()),
+ MergeMode::from(inst.prefixes.evex_unchecked().merge()),
+ )
+ }
// the register in modrm_mmm (eg modrm mod bits were 11)
OperandSpec::RegMMM => {
Operand::Register(inst.modrm_mmm)
}
+ OperandSpec::RegMMM_maskmerge => {
+ Operand::RegisterMaskMerge(
+ inst.modrm_mmm,
+ RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()),
+ MergeMode::from(inst.prefixes.evex_unchecked().merge()),
+ )
+ }
+ OperandSpec::RegMMM_maskmerge_sae_noround => {
+ Operand::RegisterMaskMergeSaeNoround(
+ inst.modrm_mmm,
+ RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()),
+ MergeMode::from(inst.prefixes.evex_unchecked().merge()),
+ )
+ }
OperandSpec::RegVex => {
Operand::Register(inst.vex_reg)
}
+ OperandSpec::RegVex_maskmerge => {
+ Operand::RegisterMaskMerge(
+ inst.vex_reg,
+ RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()),
+ MergeMode::from(inst.prefixes.evex_unchecked().merge()),
+ )
+ }
OperandSpec::Reg4 => {
Operand::Register(RegSpec { num: inst.imm as u8, bank: inst.vex_reg.bank })
}
@@ -538,6 +680,48 @@ impl Operand {
OperandSpec::RegIndexBaseScaleDisp => {
Operand::RegIndexBaseScaleDisp(inst.modrm_mmm, inst.sib_index, inst.scale, inst.disp as i32)
}
+ OperandSpec::Deref_mask => {
+ if inst.prefixes.evex_unchecked().mask_reg() != 0 {
+ Operand::RegDerefMasked(inst.modrm_mmm, RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()))
+ } else {
+ Operand::RegDeref(inst.modrm_mmm)
+ }
+ }
+ OperandSpec::RegDisp_mask => {
+ if inst.prefixes.evex_unchecked().mask_reg() != 0 {
+ Operand::RegDispMasked(inst.modrm_mmm, inst.disp as i32, RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()))
+ } else {
+ Operand::RegDisp(inst.modrm_mmm, inst.disp as i32)
+ }
+ }
+ OperandSpec::RegScale_mask => {
+ if inst.prefixes.evex_unchecked().mask_reg() != 0 {
+ Operand::RegScaleMasked(inst.sib_index, inst.scale, RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()))
+ } else {
+ Operand::RegScale(inst.sib_index, inst.scale)
+ }
+ }
+ OperandSpec::RegScaleDisp_mask => {
+ if inst.prefixes.evex_unchecked().mask_reg() != 0 {
+ Operand::RegScaleDispMasked(inst.sib_index, inst.scale, inst.disp as i32, RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()))
+ } else {
+ Operand::RegScaleDisp(inst.sib_index, inst.scale, inst.disp as i32)
+ }
+ }
+ OperandSpec::RegIndexBaseScale_mask => {
+ if inst.prefixes.evex_unchecked().mask_reg() != 0 {
+ Operand::RegIndexBaseScaleMasked(inst.modrm_mmm, inst.sib_index, inst.scale, RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()))
+ } else {
+ Operand::RegIndexBaseScale(inst.modrm_mmm, inst.sib_index, inst.scale)
+ }
+ }
+ OperandSpec::RegIndexBaseScaleDisp_mask => {
+ if inst.prefixes.evex_unchecked().mask_reg() != 0 {
+ Operand::RegIndexBaseScaleDispMasked(inst.modrm_mmm, inst.sib_index, inst.scale, inst.disp as i32, RegSpec::mask(inst.prefixes.evex_unchecked().mask_reg()))
+ } else {
+ Operand::RegIndexBaseScaleDisp(inst.modrm_mmm, inst.sib_index, inst.scale, inst.disp as i32)
+ }
+ }
}
}
@@ -552,7 +736,15 @@ impl Operand {
Operand::RegIndexBaseDisp(_, _, _) |
Operand::RegScaleDisp(_, _, _) |
Operand::RegIndexBaseScale(_, _, _) |
- Operand::RegIndexBaseScaleDisp(_, _, _, _) => {
+ Operand::RegIndexBaseScaleDisp(_, _, _, _) |
+ Operand::RegDerefMasked(_, _) |
+ Operand::RegDispMasked(_, _, _) |
+ Operand::RegScaleMasked(_, _, _) |
+ Operand::RegIndexBaseMasked(_, _, _) |
+ Operand::RegIndexBaseDispMasked(_, _, _, _) |
+ Operand::RegScaleDispMasked(_, _, _, _) |
+ Operand::RegIndexBaseScaleMasked(_, _, _, _) |
+ Operand::RegIndexBaseScaleDispMasked(_, _, _, _, _) => {
true
},
Operand::ImmediateI8(_) |
@@ -564,6 +756,9 @@ impl Operand {
Operand::ImmediateU64(_) |
Operand::ImmediateI64(_) |
Operand::Register(_) |
+ Operand::RegisterMaskMerge(_, _, _) |
+ Operand::RegisterMaskMergeSae(_, _, _, _) |
+ Operand::RegisterMaskMergeSaeNoround(_, _, _) |
Operand::Nothing => {
false
}
@@ -582,6 +777,9 @@ impl Operand {
Operand::Register(reg) => {
reg.width()
}
+ Operand::RegisterMaskMerge(reg, _, _) => {
+ reg.width()
+ }
Operand::ImmediateI8(_) |
Operand::ImmediateU8(_) => {
1
@@ -1568,6 +1766,7 @@ pub enum Opcode {
VPMULHRSW,
VPMULHUW,
VPMULHW,
+ VPMULLQ,
VPMULLD,
VPMULLW,
VPMULUDQ,
@@ -2012,6 +2211,7 @@ pub enum Opcode {
VGETMANTSS,
VINSERTF32X4,
VINSERTF64X4,
+ VINSERTI64X4,
VMOVDQA32,
VMOVDQA64,
VMOVDQU32,
@@ -2062,8 +2262,8 @@ pub enum Opcode {
VPSRAVQ,
VPTESTNMD,
VPTESTNMQ,
- VPTERLOGD,
- VPTERLOGQ,
+ VPTERNLOGD,
+ VPTERNLOGQ,
VPTESTMD,
VPTESTMQ,
VRCP14PD,
@@ -2072,7 +2272,7 @@ pub enum Opcode {
VRCP14SS,
VRNDSCALEPD,
VRNDSCALEPS,
- VRNDCSALESD,
+ VRNDSCALESD,
VRNDSCALESS,
VRSQRT14PD,
VRSQRT14PS,
@@ -2114,7 +2314,6 @@ pub enum Opcode {
VPMOVM2Q,
VPMOVB2D,
VPMOVQ2M,
- VPMULLLQ,
VRANGEPD,
VRANGEPS,
VRANGESD,
@@ -2251,6 +2450,95 @@ pub enum Opcode {
BNDMOV,
BNDLDX,
BNDSTX,
+
+ VGF2P8AFFINEQB,
+ VGF2P8AFFINEINVQB,
+ VPSHRDQ,
+ VPSHRDD,
+ VPSHRDW,
+ VPSHLDQ,
+ VPSHLDD,
+ VPSHLDW,
+ VBROADCASTF32X8,
+ VBROADCASTF64X4,
+ VBROADCASTF32X4,
+ VBROADCASTF64X2,
+ VBROADCASTF32X2,
+ VBROADCASTI32X8,
+ VBROADCASTI64X4,
+ VBROADCASTI32X4,
+ VBROADCASTI64X2,
+ VBROADCASTI32X2,
+ VEXTRACTI32X8,
+ VEXTRACTF32X8,
+ VINSERTI32X8,
+ VINSERTF32X8,
+ VINSERTI32X4,
+ V4FNMADDSS,
+ V4FNMADDPS,
+ VCVTNEPS2BF16,
+ V4FMADDSS,
+ V4FMADDPS,
+ VCVTNE2PS2BF16,
+ VP2INTERSECTD,
+ VP2INTERSECTQ,
+ VP4DPWSSDS,
+ VP4DPWSSD,
+ VPDPWSSDS,
+ VPDPWSSD,
+ VPDPBUSDS,
+ VDPBF16PS,
+ VPBROADCASTMW2D,
+ VPBROADCASTMB2Q,
+ VPMOVD2M,
+ VPMOVQD,
+ VPMOVWB,
+ VPMOVDB,
+ VPMOVDW,
+ VPMOVQB,
+ VPMOVQW,
+ VGF2P8MULB,
+ VPMADD52HUQ,
+ VPMADD52LUQ,
+ VPSHUFBITQMB,
+ VPERMB,
+ VPEXPANDD,
+ VPEXPANDQ,
+ VPABSQ,
+ VPRORVD,
+ VPRORVQ,
+ VPMULTISHIFTQB,
+ VPERMT2B,
+ VPERMT2W,
+ VPSHRDVQ,
+ VPSHRDVD,
+ VPSHRDVW,
+ VPSHLDVQ,
+ VPSHLDVD,
+ VPSHLDVW,
+ VPCOMPRESSB,
+ VPCOMPRESSW,
+ VPEXPANDB,
+ VPEXPANDW,
+ VPOPCNTD,
+ VPOPCNTQ,
+ VPOPCNTB,
+ VPOPCNTW,
+ VSCALEFSS,
+ VSCALEFSD,
+ VSCALEFPS,
+ VSCALEFPD,
+ VPDPBUSD,
+ VCVTUSI2SD,
+ VCVTUSI2SS,
+ VPXORD,
+ VPXORQ,
+ VPORD,
+ VPORQ,
+ VPANDND,
+ VPANDNQ,
+ VPANDD,
+ VPANDQ,
}
#[derive(Debug)]
@@ -2277,7 +2565,7 @@ impl yaxpeax_arch::Instruction for Instruction {
}
}
-#[derive(Debug, PartialEq)]
+#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[non_exhaustive]
pub enum DecodeError {
ExhaustedInput,
@@ -2300,10 +2588,24 @@ enum OperandSpec {
Nothing,
// the register in modrm_rrr
RegRRR,
+ // the register in modrm_rrr and is EVEX-encoded (may have a mask register, is merged or
+ // zeroed)
+ RegRRR_maskmerge,
+ // the register in modrm_rrr and is EVEX-encoded (may have a mask register, is merged or
+ // zeroed). additionally, this instruction has exceptions suppressed with a potentially
+ // custom rounding mode.
+ RegRRR_maskmerge_sae,
+ // the register in modrm_rrr and is EVEX-encoded (may have a mask register, is merged or
+ // zeroed). additionally, this instruction has exceptions suppressed.
+ RegRRR_maskmerge_sae_noround,
// the register in modrm_mmm (eg modrm mod bits were 11)
RegMMM,
+ // same as `RegRRR`: the register is modrm's `mmm` bits, and may be masekd.
+ RegMMM_maskmerge,
+ RegMMM_maskmerge_sae_noround,
// the register selected by vex-vvvv bits
RegVex,
+ RegVex_maskmerge,
// the register selected by a handful of avx2 vex-coded instructions,
// stuffed in imm4.
Reg4,
@@ -2327,7 +2629,13 @@ enum OperandSpec {
RegScale,
RegScaleDisp,
RegIndexBaseScale,
- RegIndexBaseScaleDisp
+ RegIndexBaseScaleDisp,
+ Deref_mask,
+ RegDisp_mask,
+ RegScale_mask,
+ RegScaleDisp_mask,
+ RegIndexBaseScale_mask,
+ RegIndexBaseScaleDisp_mask,
}
// the Hash, Eq, and PartialEq impls here are possibly misleading.
@@ -2852,6 +3160,47 @@ impl InstDecoder {
self
}
+ pub fn avx512(&self) -> bool {
+ let avx512_mask =
+ (1 << 19) |
+ (1 << 20) |
+ (1 << 23) |
+ (1 << 27) |
+ (1 << 28) |
+ (1 << 29) |
+ (1 << 31) |
+ (1 << 32) |
+ (1 << 34) |
+ (1 << 35) |
+ (1 << 40) |
+ (1 << 41) |
+ (1 << 42) |
+ (1 << 43);
+
+ (self.flags & avx512_mask) == avx512_mask
+ }
+
+ pub fn with_avx512(mut self) -> Self {
+ let avx512_mask =
+ (1 << 19) |
+ (1 << 20) |
+ (1 << 23) |
+ (1 << 27) |
+ (1 << 28) |
+ (1 << 29) |
+ (1 << 31) |
+ (1 << 32) |
+ (1 << 34) |
+ (1 << 35) |
+ (1 << 40) |
+ (1 << 41) |
+ (1 << 42) |
+ (1 << 43);
+
+ self.flags |= avx512_mask;
+ self
+ }
+
pub fn cx8(&self) -> bool {
self.flags & (1 << 44) != 0
}
@@ -3051,6 +3400,13 @@ impl InstDecoder {
/// Optionally reject or reinterpret instruction according to the decoder's
/// declared extensions.
fn revise_instruction(&self, inst: &mut Instruction) -> Result<(), DecodeError> {
+ if inst.prefixes.evex().is_some() {
+ if !self.avx512() {
+ return Err(DecodeError::InvalidOpcode);
+ } else {
+ return Ok(());
+ }
+ }
match inst.opcode {
Opcode::TZCNT => {
if !self.bmi1() {
@@ -3493,6 +3849,7 @@ impl InstDecoder {
Opcode::VPMULHRSW |
Opcode::VPMULHUW |
Opcode::VPMULHW |
+ Opcode::VPMULLQ |
Opcode::VPMULLD |
Opcode::VPMULLW |
Opcode::VPMULUDQ |
@@ -3928,11 +4285,47 @@ impl Instruction {
}
#[derive(Debug, Copy, Clone)]
+pub struct EvexData {
+ // data: present, z, b, Lp, Rp. aaa
+ bits: u8,
+}
+
+#[derive(Debug, Copy, Clone)]
pub struct Prefixes {
bits: u8,
rex: PrefixRex,
segment: Segment,
- _pad: u8,
+ evex_data: EvexData,
+}
+
+#[derive(Debug, Copy, Clone)]
+pub struct PrefixEvex {
+ vex: PrefixVex,
+ evex_data: EvexData,
+}
+
+impl PrefixEvex {
+ fn present(&self) -> bool {
+ self.evex_data.present()
+ }
+ fn vex(&self) -> &PrefixVex {
+ &self.vex
+ }
+ fn mask_reg(&self) -> u8 {
+ self.evex_data.aaa()
+ }
+ fn broadcast(&self) -> bool {
+ self.evex_data.b()
+ }
+ fn merge(&self) -> bool {
+ self.evex_data.z()
+ }
+ fn lp(&self) -> bool {
+ self.evex_data.lp()
+ }
+ fn rp(&self) -> bool {
+ self.evex_data.rp()
+ }
}
#[derive(Debug, Copy, Clone)]
@@ -3966,7 +4359,7 @@ impl Prefixes {
bits: bits,
rex: PrefixRex { bits: 0 },
segment: Segment::DS,
- _pad: 0,
+ evex_data: EvexData { bits: 0 },
}
}
#[inline]
@@ -4025,6 +4418,17 @@ impl Prefixes {
fn rex(&self) -> &PrefixRex { &self.rex }
#[inline]
fn vex(&self) -> PrefixVex { PrefixVex { bits: self.rex.bits } }
+ #[inline]
+ fn evex_unchecked(&self) -> PrefixEvex { PrefixEvex { vex: PrefixVex { bits: self.rex.bits }, evex_data: self.evex_data } }
+ #[inline]
+ fn evex(&self) -> Option<PrefixEvex> {
+ let evex = self.evex_unchecked();
+ if evex.present() {
+ Some(evex)
+ } else {
+ None
+ }
+ }
#[inline]
fn rex_from(&mut self, bits: u8) {
@@ -4045,11 +4449,68 @@ impl Prefixes {
fn vex_from_c4(&mut self, high: u8, low: u8) {
let w = low & 0x80;
let rxb = (high >> 5) ^ 0x07;
- let wrxb = rxb | w >> 4;
+ let wrxb = rxb | (w >> 4);
let l = (low & 0x04) << 2;
let synthetic_rex = wrxb | l | 0x80;
self.rex.from(synthetic_rex);
}
+
+ #[inline]
+ fn evex_from(&mut self, b1: u8, b2: u8, b3: u8) {
+ let w = b2 & 0x80;
+ let rxb = ((b1 >> 5) & 0b111) ^ 0b111; // `rxb` is provided in inverted form
+ let wrxb = rxb | (w >> 4);
+ let l = (b3 & 0x20) >> 1;
+ let synthetic_rex = wrxb | l | 0x80;
+ self.rex.from(synthetic_rex);
+
+ // R' is provided in inverted form
+ let rp = ((b1 & 0x10) >> 4) ^ 1;
+ let lp = (b3 & 0x40) >> 6;
+ let aaa = b3 & 0b111;
+ let z = (b3 & 0x80) >> 7;
+ let b = (b3 & 0x10) >> 4;
+ self.evex_data.from(rp, lp, z, b, aaa);
+ }
+}
+
+impl EvexData {
+ fn from(&mut self, rp: u8, lp: u8, z: u8, b: u8, aaa: u8) {
+ let mut bits = 0;
+ bits |= aaa;
+ bits |= b << 3;
+ bits |= z << 4;
+ bits |= lp << 5;
+ bits |= rp << 6;
+ bits |= 0x80;
+ self.bits = bits;
+ }
+}
+
+impl EvexData {
+ pub(crate) fn present(&self) -> bool {
+ self.bits & 0b1000_0000 != 0
+ }
+
+ pub(crate) fn aaa(&self) -> u8 {
+ self.bits & 0b111
+ }
+
+ pub(crate) fn b(&self) -> bool {
+ (self.bits & 0b0000_1000) != 0
+ }
+
+ pub(crate) fn z(&self) -> bool {
+ (self.bits & 0b0001_0000) != 0
+ }
+
+ pub(crate) fn lp(&self) -> bool {
+ (self.bits & 0b0010_0000) != 0
+ }
+
+ pub(crate) fn rp(&self) -> bool {
+ (self.bits & 0b0100_0000) != 0
+ }
}
impl PrefixRex {
@@ -4763,7 +5224,7 @@ const OPCODES: [OpcodeRecord; 256] = [
// 0x60
OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing),
OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing),
- OpcodeRecord(Interpretation::Instruction(Opcode::Invalid), OperandCode::Nothing),
+ OpcodeRecord(Interpretation::Prefix, OperandCode::Nothing),
OpcodeRecord(Interpretation::Instruction(Opcode::MOVSXD), OperandCode::Gdq_Ed),
OpcodeRecord(Interpretation::Prefix, OperandCode::Nothing),
OpcodeRecord(Interpretation::Prefix, OperandCode::Nothing),
@@ -4987,6 +5448,14 @@ pub(self) fn read_E_ymm<T: Iterator<Item=u8>>(bytes_iter: &mut T, instr: &mut In
read_M(bytes_iter, instr, modrm, length)
}
}
+#[allow(non_snake_case)]
+pub(self) fn read_E_zmm<T: Iterator<Item=u8>>(bytes_iter: &mut T, instr: &mut Instruction, modrm: u8, length: &mut u8) -> Result<OperandSpec, DecodeError> {
+ if modrm >= 0b11000000 {
+ read_modrm_reg(instr, modrm, RegisterBank::Z)
+ } else {
+ read_M(bytes_iter, instr, modrm, length)
+ }
+}
#[allow(non_snake_case)]
fn read_modrm_reg(instr: &mut Instruction, modrm: u8, reg_bank: RegisterBank) -> Result<OperandSpec, DecodeError> {
@@ -6558,6 +7027,19 @@ fn read_instr<T: Iterator<Item=u8>>(decoder: &InstDecoder, mut bytes_iter: T, in
}
return Ok(());
}
+ } else if b == 0x62 {
+ if prefixes.rex().present() || prefixes.lock() || prefixes.operand_size() || prefixes.rep() || prefixes.repnz() {
+ // rex and then evex is invalid! reject it.
+ instruction.opcode = Opcode::Invalid;
+ return Err(DecodeError::InvalidPrefixes);
+ } else {
+ instruction.prefixes = prefixes;
+ evex::read_evex(&mut bytes_iter, instruction, length)?;
+ if decoder != &InstDecoder::default() {
+ decoder.revise_instruction(instruction)?;
+ }
+ return Ok(());
+ }
}
prefixes.rex_from(0);
diff --git a/src/shared/evex.in b/src/shared/evex.in
new file mode 100644
index 0000000..e997cf0
--- /dev/null
+++ b/src/shared/evex.in
@@ -0,0 +1,4874 @@
+use super::OperandSpec;
+
+#[inline(never)]
+pub(crate) fn read_evex<T: Iterator<Item=u8>>(bytes: &mut T, instruction: &mut Instruction, mut length: u8) -> Result<(), DecodeError> {
+ let evex_byte_one = bytes.next().ok_or(DecodeError::ExhaustedInput)?;
+ let evex_byte_two = bytes.next().ok_or(DecodeError::ExhaustedInput)?;
+ let evex_byte_three = bytes.next().ok_or(DecodeError::ExhaustedInput)?;
+ length += 3;
+ let p = evex_byte_two & 0x03;
+ let m = evex_byte_one & 0x03;
+ if m == 0 {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ let m = m - 1;
+ // instead of enums for the lookup bits, these are used to select a TABLES entry in the first
+ // place
+ /*
+ let p = [
+ EVEXOpcodePrefix::None,
+ EVEXOpcodePrefix::Prefix66,
+ EVEXOpcodePrefix::PrefixF3,
+ EVEXOpcodePrefix::PrefixF2,
+ ][p];
+ let m = [
+ Ok(EVEXOpcodeMap::Map0F),
+ Ok(EVEXOpcodeMap::Map0F38),
+ Ok(EVEXOpcodeMap::Map0F3A),
+ Err(DecodeError::InvalidOpcode),
+ ][m - 1]?;
+ */
+
+ let vp = ((evex_byte_three >> 3) & 1) << 4;
+ let vvvvv = ((evex_byte_two >> 3) & 0b1111) | vp;
+
+ instruction.vex_reg = RegSpec {
+ bank: RegisterBank::X,
+ num: vvvvv ^ 0b11111 // `vvvvv` is provided in inverted form
+ };
+
+ instruction.prefixes.evex_from(evex_byte_one, evex_byte_two, evex_byte_three);
+
+ let opc = bytes.next().ok_or(DecodeError::ExhaustedInput)?;
+ length += 1;
+ let table_idx = ((m << 2) | p) as usize;
+ let table = generated::TABLES[table_idx];
+ if table as *const [_] == &generated::DUMMY[..] as *const [_] {
+ panic!("no table for m={}, p={}", m, p);
+ }
+ let mut index_lower = 0;
+ if instruction.prefixes.evex_unchecked().vex().l() {
+ index_lower |= 1;
+ }
+ if instruction.prefixes.evex_unchecked().lp() {
+ index_lower |= 2;
+ }
+ if let Ok(entry) = table.binary_search_by_key(&opc, |x| x.0) {
+ let (opcode, operand_code) = table[entry].1[index_lower];
+ instruction.opcode = opcode;
+ read_evex_operands(bytes, instruction, operand_code, &mut length)?;
+ // TODO: apply rp and bp?
+ } else {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ instruction.length = length;
+ Ok(())
+}
+
+fn deny_z(inst: &Instruction) -> Result<(), DecodeError> {
+ if inst.prefixes.evex_unchecked().merge() {
+ Err(DecodeError::InvalidOperand)
+ } else {
+ Ok(())
+ }
+}
+
+fn deny_vex_reg(inst: &Instruction) -> Result<(), DecodeError> {
+ if inst.vex_reg.num != 0 {
+ Err(DecodeError::InvalidOperand)
+ } else {
+ Ok(())
+ }
+}
+
+#[allow(non_snake_case)]
+fn ensure_W(inst: &Instruction, w: u8) -> Result<(), DecodeError> {
+ if inst.prefixes.evex_unchecked().vex().w() ^ (w != 0) {
+ Err(DecodeError::InvalidOpcode)
+ } else {
+ Ok(())
+ }
+}
+
+fn deny_mask_reg(inst: &Instruction) -> Result<(), DecodeError> {
+ if inst.prefixes.evex_unchecked().mask_reg() != 0 {
+ Err(DecodeError::InvalidOperand)
+ } else {
+ Ok(())
+ }
+}
+
+fn check_mask_reg(inst: &Instruction) -> Result<(), DecodeError> {
+ // if an operand is to be zeroed on mask bits but mask register 0 is
+ // selected, this instruction is nonsense and will #UD
+ if inst.prefixes.evex_unchecked().merge() && inst.prefixes.evex_unchecked().mask_reg() == 0 {
+ Err(DecodeError::InvalidOperand)
+ } else {
+ Ok(())
+ }
+}
+
+fn apply_broadcast(inst: &mut Instruction, item_size: u8, reg_size: u8) {
+ if inst.prefixes.evex_unchecked().broadcast() {
+ inst.mem_size = item_size;
+ } else {
+ inst.mem_size = reg_size;
+ }
+}
+
+fn set_rrr(inst: &mut Instruction, modrm: u8) {
+ inst.modrm_rrr.num = (modrm >> 3) & 7;
+ if inst.prefixes.evex_unchecked().vex().r() {
+ inst.modrm_rrr.num |= 8;
+ }
+ if inst.prefixes.evex_unchecked().rp() {
+ inst.modrm_rrr.num |= 16;
+ }
+}
+
+fn set_reg_sizes(inst: &mut Instruction, size: RegisterBank) {
+ inst.modrm_rrr.bank = size;
+ inst.vex_reg.bank = size;
+ for i in 0..inst.operand_count {
+ if [OperandSpec::RegMMM, OperandSpec::RegMMM_maskmerge, OperandSpec::RegMMM_maskmerge_sae_noround].contains(&inst.operands[i as usize]) {
+ inst.modrm_mmm.bank = size;
+ }
+ }
+}
+
+fn regs_size(inst: &Instruction) -> u8 {
+ if inst.prefixes.evex_unchecked().lp() {
+ 64
+ } else if inst.prefixes.evex_unchecked().vex().l() {
+ 32
+ } else {
+ 16
+ }
+}
+
+fn set_reg_sizes_from_ll(inst: &mut Instruction) -> Result<(), DecodeError> {
+ if inst.prefixes.evex_unchecked().lp() {
+ if inst.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ set_reg_sizes(inst, RegisterBank::Z);
+ } else if inst.prefixes.evex_unchecked().vex().l() {
+ set_reg_sizes(inst, RegisterBank::Y);
+ } else {
+ set_reg_sizes(inst, RegisterBank::X);
+ }
+ Ok(())
+}
+
+pub(crate) fn read_evex_operands<T: Iterator<Item=u8>>(bytes: &mut T, instruction: &mut Instruction, operand_code: generated::EVEXOperandCode, length: &mut u8) -> Result<(), DecodeError> {
+ match operand_code {
+ generated::EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VRANGEPS {
+ instruction.opcode = Opcode::VRANGEPD;
+ } else if instruction.opcode == Opcode::VFIXUPIMMPS {
+ instruction.opcode = Opcode::VFIXUPIMMPD;
+ }
+ }
+
+ if let OperandSpec::RegMMM = mem_oper {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if [Opcode::VRANGEPS, Opcode::VRANGEPD, Opcode::VFIXUPIMMPS, Opcode::VFIXUPIMMPD].contains(&instruction.opcode) {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_xmm => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+
+ instruction.operand_count = 3;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VRSQRT14SS {
+ instruction.opcode = Opcode::VRSQRT14SD;
+ }
+ }
+
+ if let OperandSpec::RegMMM = mem_oper {
+ instruction.mem_size = 0;
+ } else {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Gm_V_Eq_xmm_sae_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+
+ instruction.operand_count = 3;
+
+ if let OperandSpec::RegMMM = mem_oper {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ instruction.mem_size = 0;
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ instruction.mem_size = 8;
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+
+ instruction.operand_count = 3;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VGETEXPSS {
+ instruction.opcode = Opcode::VGETEXPSD;
+ }
+ }
+
+ if let OperandSpec::RegMMM = mem_oper {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_LL_sae => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+
+ instruction.operand_count = 3;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VFMADD132SS {
+ instruction.opcode = Opcode::VFMADD132SD;
+ } else if instruction.opcode == Opcode::VFMSUB132SS {
+ instruction.opcode = Opcode::VFMSUB132SD;
+ } else if instruction.opcode == Opcode::VFNMADD132SS {
+ instruction.opcode = Opcode::VFNMADD132SD;
+ } else if instruction.opcode == Opcode::VFNMSUB132SS {
+ instruction.opcode = Opcode::VFNMSUB132SD;
+ } else if instruction.opcode == Opcode::VFMADD213SS {
+ instruction.opcode = Opcode::VFMADD213SD;
+ } else if instruction.opcode == Opcode::VFMSUB213SS {
+ instruction.opcode = Opcode::VFMSUB213SD;
+ } else if instruction.opcode == Opcode::VFNMADD213SS {
+ instruction.opcode = Opcode::VFNMADD213SD;
+ } else if instruction.opcode == Opcode::VFNMSUB213SS {
+ instruction.opcode = Opcode::VFNMSUB213SD;
+ } else if instruction.opcode == Opcode::VFMADD231SS {
+ instruction.opcode = Opcode::VFMADD231SD;
+ } else if instruction.opcode == Opcode::VFMSUB231SS {
+ instruction.opcode = Opcode::VFMSUB231SD;
+ } else if instruction.opcode == Opcode::VFNMADD231SS {
+ instruction.opcode = Opcode::VFNMADD231SD;
+ } else if instruction.opcode == Opcode::VFNMSUB231SS {
+ instruction.opcode = Opcode::VFNMSUB231SD;
+ }
+ }
+
+ set_reg_sizes(instruction, RegisterBank::X);
+
+ if let OperandSpec::RegMMM = mem_oper {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_sae_bcast => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+
+ instruction.operand_count = 3;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VSCALEFPS {
+ instruction.opcode = Opcode::VSCALEFPD;
+ } else if instruction.opcode == Opcode::VFNMADD132PS {
+ instruction.opcode = Opcode::VFNMADD132PD;
+ } else if instruction.opcode == Opcode::VFNMSUB132PS {
+ instruction.opcode = Opcode::VFNMSUB132PD;
+ } else if instruction.opcode == Opcode::VFMADDSUB132PS {
+ instruction.opcode = Opcode::VFMADDSUB132PD;
+ } else if instruction.opcode == Opcode::VFMSUBADD132PS {
+ instruction.opcode = Opcode::VFMSUBADD132PD;
+ } else if instruction.opcode == Opcode::VFMADD132PS {
+ instruction.opcode = Opcode::VFMADD132PD;
+ } else if instruction.opcode == Opcode::VFMSUB132PS {
+ instruction.opcode = Opcode::VFMSUB132PD;
+ } else if instruction.opcode == Opcode::VFMADDSUB213PS {
+ instruction.opcode = Opcode::VFMADDSUB213PD;
+ } else if instruction.opcode == Opcode::VFMSUBADD213PS {
+ instruction.opcode = Opcode::VFMSUBADD213PD;
+ } else if instruction.opcode == Opcode::VFMADD213PS {
+ instruction.opcode = Opcode::VFMADD213PD;
+ } else if instruction.opcode == Opcode::VFMSUB213PS {
+ instruction.opcode = Opcode::VFMSUB213PD;
+ } else if instruction.opcode == Opcode::VFNMADD213PS {
+ instruction.opcode = Opcode::VFNMADD213PD;
+ } else if instruction.opcode == Opcode::VFNMSUB213PS {
+ instruction.opcode = Opcode::VFNMSUB213PD;
+ } else if instruction.opcode == Opcode::VFMADDSUB231PS {
+ instruction.opcode = Opcode::VFMADDSUB231PD;
+ } else if instruction.opcode == Opcode::VFMSUBADD231PS {
+ instruction.opcode = Opcode::VFMSUBADD231PD;
+ } else if instruction.opcode == Opcode::VFMADD231PS {
+ instruction.opcode = Opcode::VFMADD231PD;
+ } else if instruction.opcode == Opcode::VFMSUB231PS {
+ instruction.opcode = Opcode::VFMSUB231PD;
+ } else if instruction.opcode == Opcode::VFNMADD231PS {
+ instruction.opcode = Opcode::VFNMADD231PD;
+ } else if instruction.opcode == Opcode::VFNMSUB231PS {
+ instruction.opcode = Opcode::VFNMSUB231PD;
+ }
+ }
+
+ if let OperandSpec::RegMMM = mem_oper {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_LL_imm8_sae => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = Opcode::VREDUCEPD;
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ if let OperandSpec::RegMMM = mem_oper {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.mem_size = 0;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_LL_imm8_sae_W0 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ if let OperandSpec::RegMMM = mem_oper {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ // this mode is only used for `vcvtps2ph` and `vrndscaleps`, neither use sae rounding
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ let sz = regs_size(instruction);
+
+ apply_broadcast(instruction, 4, sz);
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_LL_imm8_sae_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ if let OperandSpec::RegMMM = mem_oper {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ // this mode is only used for `vrndscalepd`, does not use sae rounding
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ let sz = regs_size(instruction);
+
+ apply_broadcast(instruction, 8, sz);
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Mq_G_xmm_W1 => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ instruction.mem_size = 8;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::G_V_Ed_xmm_imm8_W0 => {
+ deny_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.vex_reg.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+ }
+ generated::EVEXOperandCode::G_V_xmm_Edq_sae => {
+ deny_mask_reg(instruction)?;
+ deny_z(instruction)?;
+
+ let (sz, bank) = if instruction.prefixes.evex_unchecked().vex().w() {
+ (8, RegisterBank::Q)
+ } else {
+ (4, RegisterBank::D)
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.vex_reg.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = bank;
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = sz;
+ }
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::G_V_xmm_Edq_imm8 => {
+ deny_mask_reg(instruction)?;
+
+ let (sz, bank) = if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = Opcode::VPINSRQ;
+ (8, RegisterBank::Q)
+ } else {
+ (4, RegisterBank::D)
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.vex_reg.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = bank;
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = sz;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+ }
+ generated::EVEXOperandCode::G_V_xmm_Ebd_imm8 => {
+ deny_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.vex_reg.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 1;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+ }
+ generated::EVEXOperandCode::G_V_Mq_xmm_W1 => {
+ deny_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ instruction.mem_size = 8;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_bcast_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ // specifically for vunpcklpd!!! probably need to reconsider.
+ apply_broadcast(instruction, 8, sz);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::M_G_LL_W0 => {
+ deny_vex_reg(instruction)?;
+ deny_mask_reg(instruction)?;
+
+ instruction.mem_size = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::M_G_LL_W1 => {
+ deny_vex_reg(instruction)?;
+ deny_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ instruction.mem_size = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Em_G_LL_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ instruction.mem_size = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::G_Ed_xmm_sae_W0 => {
+ deny_vex_reg(instruction)?;
+ deny_mask_reg(instruction)?;
+ // vucomiss and vcomiss both are W=0
+ ensure_W(instruction, 0)?;
+
+ instruction.mem_size = 4;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+
+ // in specific support of vcomisd/vucomisd
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR;
+ }
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_Eq_xmm_sae_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ // vucomisd and vcomisd both are W=1
+ ensure_W(instruction, 1)?;
+
+ instruction.mem_size = 8;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+
+ // in specific support of vcomisd/vucomisd
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR;
+ }
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_E_LL_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ instruction.mem_size = regs_size(instruction);
+
+ if instruction.opcode == Opcode::VMOVDDUP && instruction.mem_size == 16 {
+ instruction.mem_size = 8;
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::VCVTUDQ2PD => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VCVTUDQ2PD {
+ instruction.opcode = Opcode::VCVTUQQ2PD;
+ } else if instruction.opcode == Opcode::VCVTDQ2PD {
+ instruction.opcode = Opcode::VCVTQQ2PD;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ if !instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.modrm_rrr.bank == RegisterBank::Z {
+ instruction.modrm_mmm.bank = RegisterBank::Y;
+ } else if instruction.modrm_rrr.bank == RegisterBank::Y {
+ instruction.modrm_mmm.bank = RegisterBank::X;
+ }
+ }
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz / 2);
+ }
+ }
+ }
+ generated::EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ apply_broadcast(instruction, 8, sz);
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ if instruction.modrm_rrr.num > 7 {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_LL_sae_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ apply_broadcast(instruction, 8, sz);
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_LL_sae_bcast_W1 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ apply_broadcast(instruction, 8, sz);
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_LL_bcast => {
+ check_mask_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VPERMPS {
+ instruction.opcode = Opcode::VPERMPD;
+ } else if instruction.opcode == Opcode::VBLENDMPS {
+ instruction.opcode = Opcode::VBLENDMPD;
+ } else if instruction.opcode == Opcode::VPERMI2PS {
+ instruction.opcode = Opcode::VPERMI2PD;
+ } else if instruction.opcode == Opcode::VPERMT2PS {
+ instruction.opcode = Opcode::VPERMT2PD
+ }
+ }
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ } else {
+ instruction.mem_size = 0;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+ }
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_LL_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ } else {
+ instruction.mem_size = 0;
+ }
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = sz;
+ }
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = sz;
+ }
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_sae_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.mem_size = sz;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if instruction.opcode == Opcode::VMINPS || instruction.opcode == Opcode::VMAXPS {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ apply_broadcast(instruction, 4, sz);
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if instruction.opcode == Opcode::VMINPD || instruction.opcode == Opcode::VMAXPD {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ apply_broadcast(instruction, 8, sz);
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::G_V_E_LL => {
+ deny_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_bcast => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ instruction.opcode = if instruction.opcode == Opcode::VPANDD {
+ Opcode::VPANDQ
+ } else if instruction.opcode == Opcode::VPANDND {
+ Opcode::VPANDNQ
+ } else if instruction.opcode == Opcode::VPORD {
+ Opcode::VPORQ
+ } else if instruction.opcode == Opcode::VPXORD {
+ Opcode::VPXORQ
+ } else if instruction.opcode == Opcode::VPRORVD {
+ Opcode::VPRORVQ
+ } else if instruction.opcode == Opcode::VPROLVD {
+ Opcode::VPROLVQ
+ } else if instruction.opcode == Opcode::VPERMD {
+ Opcode::VPERMQ
+ } else if instruction.opcode == Opcode::VPMINSD {
+ Opcode::VPMINSQ
+ } else if instruction.opcode == Opcode::VPMINUD {
+ Opcode::VPMINUQ
+ } else if instruction.opcode == Opcode::VPMAXSD {
+ Opcode::VPMAXSQ
+ } else if instruction.opcode == Opcode::VPMAXUD {
+ Opcode::VPMAXUQ
+ } else if instruction.opcode == Opcode::VPSRLVD {
+ Opcode::VPSRLVQ
+ } else if instruction.opcode == Opcode::VPSRAVD {
+ Opcode::VPSRAVQ
+ } else if instruction.opcode == Opcode::VPSLLVD {
+ Opcode::VPSLLVQ
+ } else if instruction.opcode == Opcode::VPMULLD {
+ Opcode::VPMULLQ
+ } else if instruction.opcode == Opcode::VPBLENDMD {
+ Opcode::VPBLENDMQ
+ } else if instruction.opcode == Opcode::VPSHLDVD {
+ Opcode::VPSHLDVQ
+ } else if instruction.opcode == Opcode::VPSHRDVD {
+ Opcode::VPSHRDVQ
+ } else if instruction.opcode == Opcode::VPERMI2D {
+ Opcode::VPERMI2Q
+ } else if instruction.opcode == Opcode::VPERMT2D {
+ Opcode::VPERMT2Q
+ } else {
+ instruction.opcode
+ };
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_E_LL_imm8_bcast_W0 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ apply_broadcast(instruction, 4, sz);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_E_LL_imm8_bcast_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ apply_broadcast(instruction, 8, sz);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VGETMANTPS {
+ instruction.opcode = Opcode::VGETMANTPD;
+ }
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ apply_broadcast(instruction, 4, sz);
+
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_xmm_sae => {
+ check_mask_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VSCALEFSS {
+ instruction.opcode = Opcode::VSCALEFSD;
+ } else if instruction.opcode == Opcode::VRCP14SS {
+ instruction.opcode = Opcode::VRCP14SD;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_xmm_sae_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if instruction.opcode == Opcode::VMINSS || instruction.opcode == Opcode::VMAXSS {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Eqm_G_xmm_imm8_sae_W0 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ // sae sets this to `vcvtps2ph ymm, zmm, imm8`
+ instruction.modrm_mmm.bank = RegisterBank::Y;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ instruction.operands[0] = OperandSpec::RegMMM_maskmerge_sae_noround;
+ } else {
+ instruction.modrm_mmm.bank = RegisterBank::X;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.operands[0] = OperandSpec::RegMMM_maskmerge;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.mem_size = 8;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.operands[0] = mem_oper.masked();
+ }
+ }
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::Em_xmm_G_ymm_imm8_sae_W0 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ // sae sets this to `vcvtps2ph ymm, zmm, imm8`
+ instruction.modrm_mmm.bank = RegisterBank::Y;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ instruction.operands[0] = OperandSpec::RegMMM_maskmerge_sae_noround;
+ } else {
+ instruction.modrm_mmm.bank = RegisterBank::X;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.operands[0] = OperandSpec::RegMMM_maskmerge;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.operands[0] = mem_oper.masked();
+ }
+ }
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.mem_size = 16;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::Em_ymm_G_zmm_imm8_sae_W0 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegMMM_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegMMM_maskmerge;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.operands[0] = mem_oper.masked();
+ }
+ }
+ instruction.mem_size = 32;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::Gm_V_zmm_E_xmm_imm8 => {
+ check_mask_reg(instruction)?;
+
+ instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() {
+ Opcode::VINSERTI64X2
+ } else {
+ Opcode::VINSERTI32X4
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ instruction.vex_reg.bank = RegisterBank::Z;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 16;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR.masked();
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+ }
+ generated::EVEXOperandCode::Gm_V_ymm_E_xmm_imm8 => {
+ check_mask_reg(instruction)?;
+
+ instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() {
+ Opcode::VINSERTI64X2
+ } else {
+ Opcode::VINSERTI32X4
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.vex_reg.bank = RegisterBank::Y;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 16;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR.masked();
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+ }
+ generated::EVEXOperandCode::Gm_V_zmm_E_ymm_imm8 => {
+ check_mask_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VINSERTF32X8 {
+ instruction.opcode = Opcode::VINSERTF64X4;
+ } else if instruction.opcode == Opcode::VINSERTI32X8 {
+ instruction.opcode = Opcode::VINSERTI64X4;
+ }
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ instruction.vex_reg.bank = RegisterBank::Z;
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.mem_size = 32;
+ instruction.operands[0] = OperandSpec::RegRRR.masked();
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+ }
+ generated::EVEXOperandCode::Em_ymm_G_zmm_imm8 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VEXTRACTF32X8 {
+ instruction.opcode = Opcode::VEXTRACTF64X4;
+ } else if instruction.opcode == Opcode::VEXTRACTI32X8 {
+ instruction.opcode = Opcode::VEXTRACTI64X4;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.mem_size = 32;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::Gm_zmm_Eq_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_ymm_Ed_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_xmm_Ew_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 2;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_zmm_E_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 16;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_ymm_Eq_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_xmm_Ed_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_zmm_E_ymm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 32;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_zmm_E_ymm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 32;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_ymm_E_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 16;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_ymm_E_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 16;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_xmm_Eq_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_xmm_Eq_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Em_ymm_G_zmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ instruction.mem_size = 32;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Em_xmm_G_zmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ instruction.mem_size = 16;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Em_xmm_G_ymm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.mem_size = 16;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Eqm_xmm_G_zmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ instruction.mem_size = 8;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Eqm_xmm_G_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.mem_size = 8;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Edm_xmm_G_ymm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.mem_size = 4;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Edm_xmm_G_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.mem_size = 4;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Ewm_xmm_G_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.mem_size = 2;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Eqm_xmm_G_ymm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.mem_size = 8;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_xmm_Ed_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_ymm_Ed_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_zmm_M_ymm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VBROADCASTF32X8 {
+ instruction.opcode = Opcode::VBROADCASTF64X4;
+ } else if instruction.opcode == Opcode::VBROADCASTI32X8 {
+ instruction.opcode = Opcode::VBROADCASTI64X4;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.mem_size = 32;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_zmm_M_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VBROADCASTF32X4 {
+ instruction.opcode = Opcode::VBROADCASTF64X2;
+ } else if instruction.opcode == Opcode::VBROADCASTI32X4 {
+ instruction.opcode = Opcode::VBROADCASTI64X2;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.mem_size = 16;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_ymm_M_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VBROADCASTF32X4 {
+ instruction.opcode = Opcode::VBROADCASTF64X2;
+ } else if instruction.opcode == Opcode::VBROADCASTI32X4 {
+ instruction.opcode = Opcode::VBROADCASTI64X2;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.mem_size = 16;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_zmm_Ed_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = Opcode::VBROADCASTSD;
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::VBROADCASTF32X2_Gm_ymm_Ed_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = Opcode::VBROADCASTSD;
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_zmm_Ed_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Em_xmm_G_LL_imm8 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = if instruction.opcode == Opcode::VEXTRACTF32X4 {
+ Opcode::VEXTRACTF64X2
+ } else if instruction.opcode == Opcode::VEXTRACTI32X4 {
+ Opcode::VEXTRACTI64X2
+ } else {
+ instruction.opcode
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ if instruction.prefixes.evex_unchecked().lp() {
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ }
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.mem_size = 16;
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::Gm_V_LL_E_xmm_imm8 => {
+ check_mask_reg(instruction)?;
+
+ instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() {
+ Opcode::VINSERTF64X2
+ } else {
+ Opcode::VINSERTF32X4
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ set_reg_sizes_from_ll(instruction)?;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.mem_size = 16;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+ }
+ generated::EVEXOperandCode::Gm_V_LL_E_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ set_reg_sizes_from_ll(instruction)?;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.mem_size = 16;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::Gm_V_LL_E_xmm_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ set_reg_sizes_from_ll(instruction)?;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.mem_size = 16;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::Gm_V_LL_E_xmm => {
+ check_mask_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = if instruction.opcode == Opcode::VPSRAD {
+ Opcode::VPSRAQ
+ } else {
+ instruction.opcode
+ };
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ set_reg_sizes_from_ll(instruction)?;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.mem_size = 16;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::VPEXTRW => {
+ deny_mask_reg(instruction)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::D;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = RegisterBank::X;
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::VPINSRW => {
+ deny_mask_reg(instruction)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ } else {
+ instruction.mem_size = 2;
+ }
+
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+ }
+ generated::EVEXOperandCode::VMOVQ_G_Ed_xmm => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ }
+
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::VMOVQ_Ed_G_xmm => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ }
+
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::VMOVQ_7e => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ if mem_oper != OperandSpec::RegMMM {
+ instruction.mem_size = 8;
+ }
+
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::VMOVD_7e => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = Opcode::VMOVQ;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = RegisterBank::Q;
+ } else {
+ instruction.mem_size = 8;
+ }
+ } else {
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR_maskmerge;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::VMOVD_6e => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = Opcode::VMOVQ;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = RegisterBank::Q;
+ } else {
+ instruction.mem_size = 8;
+ }
+ } else {
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Mask_V_E_LL_bcast => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VP2INTERSECTD {
+ instruction.opcode = Opcode::VP2INTERSECTQ;
+ } else if instruction.opcode == Opcode::VPTESTNMD {
+ instruction.opcode = Opcode::VPTESTNMQ;
+ } else if instruction.opcode == Opcode::VPTESTMD {
+ instruction.opcode = Opcode::VPTESTMQ;
+ }
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Mask_V_E_LL_bcast_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ apply_broadcast(instruction, 8, sz);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Mask_V_E_LL_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ apply_broadcast(instruction, 4, sz);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Em_G_LL => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VMOVDQA32 {
+ instruction.opcode = Opcode::VMOVDQA64;
+ } else if instruction.opcode == Opcode::VMOVDQU32 {
+ instruction.opcode = Opcode::VMOVDQU64;
+ } else if instruction.opcode == Opcode::VMOVDQU8 {
+ instruction.opcode = Opcode::VMOVDQU16;
+ } else if instruction.opcode == Opcode::VPCOMPRESSB {
+ instruction.opcode = Opcode::VPCOMPRESSW;
+ } else if instruction.opcode == Opcode::VPCOMPRESSD {
+ instruction.opcode = Opcode::VPCOMPRESSQ;
+ } else if instruction.opcode == Opcode::VCOMPRESSPS {
+ instruction.opcode = Opcode::VCOMPRESSPD;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Mask_U_LL => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VPMOVB2M {
+ instruction.opcode = Opcode::VPMOVW2M;
+ } else {
+ instruction.opcode = Opcode::VPMOVQ2M;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ generated::EVEXOperandCode::G_LL_Mask => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VPMOVM2B {
+ instruction.opcode = Opcode::VPMOVM2W;
+ } else {
+ instruction.opcode = Opcode::VPMOVM2Q;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = RegisterBank::K;
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ generated::EVEXOperandCode::G_LL_Mask_W1 => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = RegisterBank::K;
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ generated::EVEXOperandCode::G_LL_Mask_W0 => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = RegisterBank::K;
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ generated::EVEXOperandCode::G_E_LL_W0 => {
+ deny_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::E_G_LL_W0 => {
+ deny_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Em_G_LL_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = mem_oper.masked();
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Operands_72_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ let (r_sz, m_sz, m_data_sz) = match (
+ instruction.prefixes.evex_unchecked().lp(),
+ instruction.prefixes.evex_unchecked().vex().l(),
+ ) {
+ (true, true) => { return Err(DecodeError::InvalidOpcode); },
+ (true, false) => (RegisterBank::Y, RegisterBank::Z, 64),
+ (false, true) => (RegisterBank::X, RegisterBank::Y, 32),
+ (false, false) => (RegisterBank::X, RegisterBank::X, 16),
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = m_sz;
+ } else {
+ apply_broadcast(instruction, 4, m_data_sz);
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_LL_bcast => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VPLZCNTD {
+ instruction.opcode = Opcode::VPLZCNTQ;
+ } else if instruction.opcode == Opcode::VRCP14PS {
+ instruction.opcode = Opcode::VRCP14PD;
+ } else if instruction.opcode == Opcode::VPOPCNTD {
+ instruction.opcode = Opcode::VPOPCNTQ;
+ } else if instruction.opcode == Opcode::VPCONFLICTD {
+ instruction.opcode = Opcode::VPCONFLICTQ;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ instruction.mem_size = 0;
+ } else {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_E_LL_bcast_W1 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ instruction.mem_size = 0;
+ } else {
+ apply_broadcast(instruction, 8, sz);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_E_LL_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ instruction.mem_size = 0;
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_LL_Ud => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VPBROADCASTD {
+ instruction.opcode = Opcode::VPBROADCASTQ;
+ }
+ }
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_mmm.bank = RegisterBank::Q;
+ } else {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ }
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ generated::EVEXOperandCode::Gm_LL_Ud_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ generated::EVEXOperandCode::Gm_LL_Eq_xmm => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = Opcode::VPBROADCASTQ;
+ } else {
+ instruction.opcode = Opcode::VBROADCASTI32X2;
+ }
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = RegisterBank::X;
+ } else {
+ instruction.mem_size = 8;
+ }
+ }
+ generated::EVEXOperandCode::Gm_LL_Ed_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = RegisterBank::X;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ generated::EVEXOperandCode::Gm_LL_Ew_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = RegisterBank::X;
+ } else {
+ instruction.mem_size = 2;
+ }
+ }
+ generated::EVEXOperandCode::Gm_LL_Eb_xmm_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ instruction.modrm_mmm.bank = RegisterBank::X;
+ } else {
+ instruction.mem_size = 1;
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_LL_W0 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_E_LL_imm8 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VMOVDQA32 {
+ instruction.opcode = Opcode::VMOVDQA64;
+ } else if instruction.opcode == Opcode::VMOVDQU32 {
+ instruction.opcode = Opcode::VMOVDQU64;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gd_Ed_xmm_sae => {
+ deny_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_rrr.bank = RegisterBank::Q;
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::D;
+ }
+
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.opcode == Opcode::VCVTSS2USI || instruction.opcode == Opcode::VCVTSD2SI || instruction.opcode == Opcode::VCVTSD2USI {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ }
+ } else {
+ return Err(DecodeError::InvalidOperand);
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ if instruction.opcode == Opcode::VCVTTSD2SI || instruction.opcode == Opcode::VCVTSD2SI || instruction.opcode == Opcode::VCVTTSD2USI || instruction.opcode == Opcode::VCVTSD2USI {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ instruction.operands[1] = mem_oper;
+
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_E_LL_sae_bcast => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VGETEXPPS {
+ instruction.opcode = Opcode::VGETEXPPD;
+ } else if instruction.opcode == Opcode::VRSQRT14PS {
+ instruction.opcode = Opcode::VRSQRT14PD;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if mem_oper != OperandSpec::RegMMM {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ apply_broadcast(instruction, if instruction.prefixes.evex_unchecked().vex().w() {
+ 8
+ } else {
+ 4
+ }, sz);
+ } else {
+ if instruction.opcode == Opcode::VSQRTPS || instruction.opcode == Opcode::VCVTPS2DQ {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ }
+ set_reg_sizes(instruction, RegisterBank::Z);
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_LL => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VMOVDQA32 {
+ instruction.opcode = Opcode::VMOVDQA64;
+ } else if instruction.opcode == Opcode::VMOVDQU32 {
+ instruction.opcode = Opcode::VMOVDQU64;
+ } else if instruction.opcode == Opcode::VMOVDQU8 {
+ instruction.opcode = Opcode::VMOVDQU16;
+ } else if instruction.opcode == Opcode::VPOPCNTB {
+ instruction.opcode = Opcode::VPOPCNTW;
+ } else if instruction.opcode == Opcode::VPEXPANDB {
+ instruction.opcode = Opcode::VPEXPANDW;
+ } else if instruction.opcode == Opcode::VEXPANDPS {
+ instruction.opcode = Opcode::VEXPANDPD;
+ } else if instruction.opcode == Opcode::VPEXPANDD {
+ instruction.opcode = Opcode::VPEXPANDQ;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_LL_imm8_bcast => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VSHUFF32X4 {
+ instruction.opcode = Opcode::VSHUFF64X2;
+ }
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ apply_broadcast(instruction, 4, sz);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VPBLENDMB {
+ instruction.opcode = Opcode::VPBLENDMW;
+ } else if instruction.opcode == Opcode::VPERMI2B {
+ instruction.opcode = Opcode::VPERMI2W;
+ } else if instruction.opcode == Opcode::VPERMT2B {
+ instruction.opcode = Opcode::VPERMT2W;
+ } else if instruction.opcode == Opcode::VPERMB {
+ instruction.opcode = Opcode::VPERMW;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Mask_V_E_LL_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Mask_V_E_LL => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VPTESTNMB {
+ instruction.opcode = Opcode::VPTESTNMW;
+ } else if instruction.opcode == Opcode::VPTESTMB {
+ instruction.opcode = Opcode::VPTESTMW;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 8;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOperand);
+ }
+ }
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Mask_V_E_LL_imm8 => {
+ check_mask_reg(instruction)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOperand);
+ }
+
+ let sz = regs_size(instruction);
+ instruction.mem_size = sz;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VPCMPUB {
+ instruction.opcode = Opcode::VPCMPUW;
+ } else if instruction.opcode == Opcode::VPCMPB {
+ instruction.opcode = Opcode::VPCMPW;
+ }
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Mask_Ed_xmm_imm8 => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+ deny_z(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = if instruction.opcode == Opcode::VFPCLASSSS {
+ Opcode::VFPCLASSSD
+ } else {
+ instruction.opcode
+ };
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Mask_E_LL_imm8_bcast => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ instruction.mem_size = sz;
+ }
+ instruction.opcode = if instruction.opcode == Opcode::VFPCLASSPS {
+ Opcode::VFPCLASSPD
+ } else {
+ instruction.opcode
+ };
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ apply_broadcast(instruction, 4, sz);
+ } else {
+ instruction.mem_size = sz;
+ }
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ instruction.mem_size = sz;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ apply_broadcast(instruction, 4, sz);
+ } else {
+ instruction.mem_size = sz;
+ }
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ instruction.mem_size = 0;
+ } else {
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Mask_V_E_LL_imm8_bcast => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ instruction.mem_size = sz;
+ }
+ // this operand code is used in a few places, apply `w` as appropriate
+ instruction.opcode = if instruction.opcode == Opcode::VPCMPUD {
+ Opcode::VPCMPUQ
+ } else {
+ Opcode::VPCMPQ
+ };
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ apply_broadcast(instruction, 4, sz);
+ } else {
+ instruction.mem_size = sz;
+ }
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ if instruction.modrm_rrr.num >= 8 {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::K;
+ }
+ }
+ generated::EVEXOperandCode::Opcode_72_Gm_E_LL_imm8_bcast => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ let rrr = (modrm >> 3) & 7;
+
+ let item_size = if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = [
+ Ok(Opcode::VPRORQ),
+ Ok(Opcode::VPROLQ),
+ Err(DecodeError::InvalidOpcode),
+ Err(DecodeError::InvalidOpcode),
+ Ok(Opcode::VPSRAQ),
+ Err(DecodeError::InvalidOpcode),
+ Err(DecodeError::InvalidOpcode),
+ Err(DecodeError::InvalidOpcode),
+ ][rrr as usize]?;
+ 8
+ } else {
+ instruction.opcode = [
+ Ok(Opcode::VPRORD),
+ Ok(Opcode::VPROLD),
+ Ok(Opcode::VPSRLD),
+ Err(DecodeError::InvalidOpcode),
+ Ok(Opcode::VPSRAD),
+ Ok(Opcode::VPSLLD),
+ Err(DecodeError::InvalidOpcode),
+ Err(DecodeError::InvalidOpcode),
+ ][rrr as usize]?;
+ 4
+ };
+
+ apply_broadcast(instruction, item_size, sz);
+
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegVex_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_imm8_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+ instruction.mem_size = sz;
+/*
+ instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ if instruction.opcode == Opcode::VALIGND {
+ Opcode::VALIGNQ
+ } else if instruction.opcode == Opcode::VPTERNLOGD {
+ Opcode::VPTERNLOGQ
+ } else if instruction.opcode == Opcode::VSHUFI32X4 {
+ Opcode::VSHUFI64X2
+ } else {
+ instruction.opcode
+ }
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ instruction.opcode
+ };
+*/
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_imm8_bcast => {
+ check_mask_reg(instruction)?;
+
+ let sz = regs_size(instruction);
+
+ instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ if instruction.opcode == Opcode::VALIGND {
+ Opcode::VALIGNQ
+ } else if instruction.opcode == Opcode::VPTERNLOGD {
+ Opcode::VPTERNLOGQ
+ } else if instruction.opcode == Opcode::VSHUFI32X4 {
+ Opcode::VSHUFI64X2
+ } else if instruction.opcode == Opcode::VPSHLDD {
+ Opcode::VPSHLDQ
+ } else if instruction.opcode == Opcode::VPSHRDD {
+ Opcode::VPSHRDQ
+ } else {
+ instruction.opcode
+ }
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ instruction.opcode
+ };
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_imm8_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.mem_size = sz;
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W0 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let sz = regs_size(instruction);
+
+ if instruction.opcode == Opcode::VSHUFPS {
+ apply_broadcast(instruction, 4, sz);
+ } else {
+ apply_broadcast(instruction, 8, sz);
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::G_V_E_LL_imm8 => {
+ check_mask_reg(instruction)?;
+
+ instruction.mem_size = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_imm8 => {
+ check_mask_reg(instruction)?;
+
+ instruction.mem_size = regs_size(instruction);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let sz = regs_size(instruction);
+
+ apply_broadcast(instruction, 8, sz);
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ generated::EVEXOperandCode::Gm_ymm_E_zmm_sae_bcast_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_zmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.operands[1] = mem_oper;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if mem_oper != OperandSpec::RegMMM {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ apply_broadcast(instruction, 8, 64);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.mem_size = 64;
+ }
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_xmm_E_ymm_sae_bcast_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.operands[1] = mem_oper;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if mem_oper != OperandSpec::RegMMM {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ apply_broadcast(instruction, 8, 32);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.modrm_mmm.bank = RegisterBank::Z;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.mem_size = 32;
+ }
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_xmm_E_xmm_sae_bcast_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.operands[1] = mem_oper;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if mem_oper != OperandSpec::RegMMM {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ apply_broadcast(instruction, 8, 16);
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ instruction.modrm_mmm.bank = RegisterBank::Z;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.mem_size = 16;
+ }
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::VCVTTPS2UQQ => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VCVTTPS2UQQ {
+ instruction.opcode = Opcode::VCVTTPD2UQQ;
+ } else if instruction.opcode == Opcode::VCVTPS2UQQ {
+ instruction.opcode = Opcode::VCVTPD2UQQ;
+ } else if instruction.opcode == Opcode::VCVTTPS2QQ {
+ instruction.opcode = Opcode::VCVTTPD2QQ;
+ } else if instruction.opcode == Opcode::VCVTPS2QQ {
+ instruction.opcode = Opcode::VCVTPD2QQ;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ instruction.mem_size = 0;
+
+ let mut lp = 0;
+ if instruction.prefixes.evex_unchecked().lp() { lp |= 2; }
+ if instruction.prefixes.evex_unchecked().vex().l() { lp |= 1; }
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if instruction.opcode == Opcode::VCVTPD2UQQ || instruction.opcode == Opcode::VCVTPS2UQQ || instruction.opcode == Opcode::VCVTPD2QQ || instruction.opcode == Opcode::VCVTPS2QQ {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ }
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_mmm.bank = RegisterBank::Z;
+ } else {
+ instruction.modrm_mmm.bank = RegisterBank::Y;
+ }
+ } else {
+ let (r_sz, m_sz) = if instruction.prefixes.evex_unchecked().vex().w() {
+ [
+ Ok((RegisterBank::X, RegisterBank::X)),
+ Ok((RegisterBank::Y, RegisterBank::Y)),
+ Ok((RegisterBank::Z, RegisterBank::Z)),
+ Err(DecodeError::InvalidOperand),
+ ][lp]?
+ } else {
+ [
+ Ok((RegisterBank::X, RegisterBank::X)),
+ Ok((RegisterBank::Y, RegisterBank::X)),
+ Ok((RegisterBank::Z, RegisterBank::Y)),
+ Err(DecodeError::InvalidOperand),
+ ][lp]?
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ instruction.modrm_mmm.bank = m_sz;
+ }
+ } else {
+ let (r_sz, m_sz) = if instruction.prefixes.evex_unchecked().vex().w() {
+ [
+ Ok((RegisterBank::X, 16)),
+ Ok((RegisterBank::Y, 32)),
+ Ok((RegisterBank::Z, 64)),
+ Err(DecodeError::InvalidOperand),
+ ][lp]?
+ } else {
+ [
+ Ok((RegisterBank::X, 8)),
+ Ok((RegisterBank::Y, 16)),
+ Ok((RegisterBank::Z, 32)),
+ Err(DecodeError::InvalidOperand),
+ ][lp]?
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, m_sz);
+ } else {
+ apply_broadcast(instruction, 4, m_sz);
+ }
+ }
+ }
+ generated::EVEXOperandCode::VCVTPH2PS => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.opcode == Opcode::VCVTPS2PD {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ } else if instruction.opcode == Opcode::VCVTTPS2UQQ {
+ instruction.opcode = Opcode::VCVTTPD2UQQ;
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ instruction.mem_size = 0;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ if instruction.opcode == Opcode::VCVTTPD2UQQ {
+ instruction.modrm_mmm.bank = RegisterBank::Z;
+ } else {
+ instruction.modrm_mmm.bank = RegisterBank::Y;
+ }
+ } else {
+ let (r_sz, m_sz) = match (
+ instruction.prefixes.evex_unchecked().vex().l(),
+ instruction.prefixes.evex_unchecked().lp()
+ ) {
+ (true, true) => { return Err(DecodeError::InvalidOperand); }
+ (false, true) => (RegisterBank::Z, RegisterBank::Y),
+ (true, false) => (RegisterBank::Y, RegisterBank::X),
+ (false, false) => (RegisterBank::X, RegisterBank::X),
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ instruction.modrm_mmm.bank = m_sz;
+ }
+ } else {
+ let (r_sz, m_sz) = match (
+ instruction.prefixes.evex_unchecked().vex().l(),
+ instruction.prefixes.evex_unchecked().lp()
+ ) {
+ (true, true) => { return Err(DecodeError::InvalidOperand); }
+ (true, false) => (RegisterBank::Y, 16),
+ (false, true) => (RegisterBank::Z, 32),
+ (false, false) => (RegisterBank::X, 8),
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ if instruction.opcode == Opcode::VCVTPS2PD {
+ apply_broadcast(instruction, 4, m_sz);
+ } else {
+ apply_broadcast(instruction, 8, m_sz);
+ }
+ }
+ }
+ generated::EVEXOperandCode::VCVTDQ2PS => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VCVTDQ2PS {
+ instruction.opcode = Opcode::VCVTQQ2PS;
+ } else if instruction.opcode == Opcode::VCVTUDQ2PS {
+ instruction.opcode = Opcode::VCVTUQQ2PS;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ instruction.mem_size = 0;
+
+ let mut lp = 0;
+ if instruction.prefixes.evex_unchecked().lp() { lp |= 2; }
+ if instruction.prefixes.evex_unchecked().vex().l() { lp |= 1; }
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ }
+ instruction.modrm_mmm.bank = RegisterBank::Z;
+ } else {
+ let (r_sz, m_sz) = if instruction.prefixes.evex_unchecked().vex().w() {
+ [
+ Ok((RegisterBank::X, RegisterBank::X)),
+ Ok((RegisterBank::X, RegisterBank::Y)),
+ Ok((RegisterBank::Y, RegisterBank::Z)),
+ Err(DecodeError::InvalidOperand),
+ ][lp]?
+ } else {
+ [
+ Ok((RegisterBank::X, RegisterBank::X)),
+ Ok((RegisterBank::Y, RegisterBank::Y)),
+ Ok((RegisterBank::Z, RegisterBank::Z)),
+ Err(DecodeError::InvalidOperand),
+ ][lp]?
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ instruction.modrm_mmm.bank = m_sz;
+ }
+ } else {
+ let (r_sz, m_sz, item_sz) = if instruction.prefixes.evex_unchecked().vex().w() {
+ [
+ Ok((RegisterBank::X, 16, 8)),
+ Ok((RegisterBank::X, 32, 8)),
+ Ok((RegisterBank::Y, 64, 8)),
+ Err(DecodeError::InvalidOperand),
+ ][lp]?
+ } else {
+ [
+ Ok((RegisterBank::X, 16, 4)),
+ Ok((RegisterBank::Y, 32, 4)),
+ Ok((RegisterBank::Z, 64, 4)),
+ Err(DecodeError::InvalidOperand),
+ ][lp]?
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ apply_broadcast(instruction, item_sz, m_sz);
+ }
+ }
+ generated::EVEXOperandCode::VCVTTPS2UDQ => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ instruction.mem_size = 0;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VCVTTPS2UDQ {
+ instruction.opcode = Opcode::VCVTTPD2UDQ;
+ } else if instruction.opcode == Opcode::VCVTPS2UDQ {
+ instruction.opcode = Opcode::VCVTPD2UDQ;
+ }
+ }
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if instruction.opcode == Opcode::VCVTTPD2UDQ || instruction.opcode == Opcode::VCVTTPS2UDQ {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ }
+ instruction.modrm_mmm.bank = RegisterBank::Z;
+ } else {
+ let (r_sz, m_sz) = match (
+ instruction.prefixes.evex_unchecked().vex().l(),
+ instruction.prefixes.evex_unchecked().lp()
+ ) {
+ (true, true) => { return Err(DecodeError::InvalidOperand); }
+ (false, true) => (if instruction.prefixes.evex_unchecked().vex().w() { RegisterBank::Y } else { RegisterBank::Z }, RegisterBank::Z),
+ (true, false) => (if instruction.prefixes.evex_unchecked().vex().w() { RegisterBank::X } else { RegisterBank::Y }, RegisterBank::Y),
+ (false, false) => (RegisterBank::X, RegisterBank::X),
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ instruction.modrm_mmm.bank = m_sz;
+ }
+ } else {
+ let (r_sz, m_sz) = match (
+ instruction.prefixes.evex_unchecked().vex().l(),
+ instruction.prefixes.evex_unchecked().lp()
+ ) {
+ (true, true) => { return Err(DecodeError::InvalidOperand); }
+// (true, false) => (RegisterBank::Y, 32),
+ (true, false) => (if instruction.prefixes.evex_unchecked().vex().w() { RegisterBank::X } else { RegisterBank::Y }, 32),
+ (false, true) => (if instruction.prefixes.evex_unchecked().vex().w() { RegisterBank::Y } else { RegisterBank::Z }, 64),
+ (false, false) => (RegisterBank::X, 16),
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, m_sz);
+ } else {
+ apply_broadcast(instruction, 4, m_sz);
+ }
+ }
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VCVTDQ2PS {
+ instruction.opcode = Opcode::VCVTQQ2PS;
+ }
+ }
+ }
+ generated::EVEXOperandCode::VCVTTPD2DQ => {
+ check_mask_reg(instruction)?;
+ deny_vex_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ instruction.mem_size = 0;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VCVTTPS2UDQ {
+ instruction.opcode = Opcode::VCVTTPD2UDQ;
+ }
+ }
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if instruction.opcode == Opcode::VCVTDQ2PS || instruction.opcode == Opcode::VCVTPD2DQ {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ }
+ if instruction.opcode == Opcode::VCVTDQ2PS && !instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ }
+ instruction.modrm_mmm.bank = RegisterBank::Z;
+ } else {
+ let (r_sz, m_sz) = match (
+ instruction.prefixes.evex_unchecked().vex().l(),
+ instruction.prefixes.evex_unchecked().lp()
+ ) {
+ (true, true) => { return Err(DecodeError::InvalidOperand); }
+ (false, true) => (RegisterBank::Y, RegisterBank::Z),
+ (true, false) => (RegisterBank::X, RegisterBank::Y),
+ (false, false) => (RegisterBank::X, RegisterBank::X),
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ instruction.modrm_mmm.bank = m_sz;
+ }
+ } else {
+ let (r_sz, m_sz) = match (
+ instruction.prefixes.evex_unchecked().vex().l(),
+ instruction.prefixes.evex_unchecked().lp()
+ ) {
+ (true, true) => { return Err(DecodeError::InvalidOperand); }
+ (true, false) => (RegisterBank::X, 32),
+ (false, true) => (RegisterBank::Y, 64),
+ (false, false) => (RegisterBank::X, 16),
+ };
+ instruction.modrm_rrr.bank = r_sz;
+ apply_broadcast(instruction, 8, m_sz);
+ }
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VCVTDQ2PS {
+ instruction.opcode = Opcode::VCVTQQ2PS;
+ }
+ }
+ }
+ generated::EVEXOperandCode::Gm_ymm_U_zmm_sae_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_zmm(bytes, instruction, modrm, length)?;
+ instruction.modrm_rrr.bank = RegisterBank::Y;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = mem_oper;
+ if mem_oper != OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Gm_V_E_xmm_sae_W1 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+ set_reg_sizes(instruction, RegisterBank::X);
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ if instruction.opcode == Opcode::VMINSD || instruction.opcode == Opcode::VMAXSD {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ }
+ } else {
+ instruction.mem_size = 8;
+ }
+ }
+ generated::EVEXOperandCode::Gm_V_E_xmm_sae => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VEXP2SS {
+ instruction.opcode = Opcode::VEXP2SD;
+ } else if instruction.opcode == Opcode::VRCP28SS {
+ instruction.opcode = Opcode::VRCP28SD;
+ } else if instruction.opcode == Opcode::VRSQRT28SS {
+ instruction.opcode = Opcode::VRSQRT28SD;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+ set_reg_sizes(instruction, RegisterBank::X);
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ }
+ generated::EVEXOperandCode::Gm_E_zmm_sae_bcast => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VEXP2PS {
+ instruction.opcode = Opcode::VEXP2PD;
+ } else if instruction.opcode == Opcode::VRCP28PS {
+ instruction.opcode = Opcode::VRCP28PD;
+ } else if instruction.opcode == Opcode::VRSQRT28PS {
+ instruction.opcode = Opcode::VRSQRT28PD;
+ }
+ }
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_zmm(bytes, instruction, modrm, length)?;
+
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ set_reg_sizes(instruction, RegisterBank::Z);
+ } else {
+ let sz = regs_size(instruction);
+ if sz < 64 {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ let sz = regs_size(instruction);
+ if sz < 64 {
+ return Err(DecodeError::InvalidOperand);
+ }
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ apply_broadcast(instruction, 8, sz);
+ } else {
+ apply_broadcast(instruction, 4, sz);
+ }
+ set_reg_sizes_from_ll(instruction)?;
+ }
+ }
+ generated::EVEXOperandCode::Gm_U_zmm_sae_W0 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ set_reg_sizes(instruction, RegisterBank::Z);
+ }
+ generated::EVEXOperandCode::Gm_U_zmm_imm8_sae_W0 => {
+ deny_vex_reg(instruction)?;
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ if mem_oper != OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[1] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ set_reg_sizes(instruction, RegisterBank::Z);
+ }
+ generated::EVEXOperandCode::Edd_G_xmm_imm8 => {
+ deny_vex_reg(instruction)?;
+ deny_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.opcode = Opcode::VPEXTRQ;
+ if let OperandSpec::RegMMM = mem_oper {
+ instruction.modrm_mmm.bank = RegisterBank::Q;
+ } else {
+ instruction.mem_size = 8;
+ }
+ } else {
+ instruction.opcode = Opcode::VPEXTRD;
+ if let OperandSpec::RegMMM = mem_oper {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ }
+ generated::EVEXOperandCode::VCVTUSI2SD => {
+ deny_mask_reg(instruction)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ instruction.vex_reg.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ if mem_oper == OperandSpec::RegMMM {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_mmm.bank = RegisterBank::Q;
+ } else {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ }
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ if instruction.prefixes.evex_unchecked().lp() || !instruction.prefixes.evex_unchecked().vex().l() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ }
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ return Err(DecodeError::InvalidOpcode);
+ }
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::VEXTRACTPS => {
+ deny_vex_reg(instruction)?;
+ deny_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ if let OperandSpec::RegMMM = mem_oper {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ generated::EVEXOperandCode::Ewd_G_xmm_imm8 => {
+ deny_vex_reg(instruction)?;
+ deny_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ if let OperandSpec::RegMMM = mem_oper {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ } else {
+ instruction.mem_size = 2;
+ }
+ }
+ generated::EVEXOperandCode::Ebd_G_xmm_imm8 => {
+ deny_vex_reg(instruction)?;
+ deny_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::X;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[2] = OperandSpec::ImmU8;
+ instruction.operand_count = 3;
+
+ if let OperandSpec::RegMMM = mem_oper {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ } else {
+ instruction.mem_size = 1;
+ }
+ }
+ generated::EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae => {
+ check_mask_reg(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+
+ let item_size = if instruction.prefixes.evex_unchecked().vex().w() {
+ if instruction.opcode == Opcode::VRANGESS {
+ instruction.opcode = Opcode::VRANGESD;
+ 8
+ } else if instruction.opcode == Opcode::VFPCLASSSS {
+ instruction.opcode = Opcode::VFPCLASSSD;
+ 8
+ } else if instruction.opcode == Opcode::VREDUCESS {
+ instruction.opcode = Opcode::VREDUCESD;
+ 8
+ } else if instruction.opcode == Opcode::VFIXUPIMMSS {
+ instruction.opcode = Opcode::VFIXUPIMMSD;
+ 8
+ } else if instruction.opcode == Opcode::VGETMANTSS {
+ instruction.opcode = Opcode::VGETMANTSD;
+ 8
+ } else {
+ 4
+ }
+ } else {
+ 4
+ };
+
+ if let OperandSpec::RegMMM = mem_oper {
+ instruction.mem_size = 0;
+ } else{
+ instruction.mem_size = item_size;
+ }
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Gm_V_E_xmm_imm8_sae => {
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if let OperandSpec::RegMMM = mem_oper {
+ /* no mem size */
+ } else{
+ instruction.mem_size = 8;
+ }
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.imm = read_imm_unsigned(bytes, 1, length)?;
+ instruction.operands[3] = OperandSpec::ImmU8;
+ instruction.operand_count = 4;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::Gm_V_zmm_M_xmm_W0 => {
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ instruction.modrm_rrr.bank = RegisterBank::Z;
+ instruction.vex_reg.bank = RegisterBank::Z;
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if let OperandSpec::RegMMM = mem_oper {
+ return Err(DecodeError::InvalidOperand);
+ } else{
+ instruction.mem_size = 16;
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+ }
+ generated::EVEXOperandCode::Gm_V_M_xmm => {
+ check_mask_reg(instruction)?;
+
+ instruction.mem_size = 16;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ }
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::VMOVSD_10 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ instruction.mem_size = 0;
+ } else {
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ instruction.mem_size = 8;
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::VMOVSD_11 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 1)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = mem_oper.masked();
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = OperandSpec::RegRRR;
+ instruction.operand_count = 3;
+
+ instruction.mem_size = 0;
+ } else {
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ instruction.mem_size = 8;
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::VMOVSS_10 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge;
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ instruction.mem_size = 0;
+ } else {
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+
+ instruction.mem_size = 4;
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::VMOVSS_11 => {
+ check_mask_reg(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = mem_oper.masked();
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = OperandSpec::RegRRR;
+ instruction.operand_count = 3;
+
+ instruction.mem_size = 0;
+ } else {
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ instruction.mem_size = 4;
+ }
+ set_reg_sizes(instruction, RegisterBank::X);
+ }
+ generated::EVEXOperandCode::VCVTSI2SS => {
+ check_mask_reg(instruction)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if instruction.prefixes.evex_unchecked().broadcast() && mem_oper == OperandSpec::RegMMM {
+ if !instruction.prefixes.evex_unchecked().vex().w() && instruction.opcode == Opcode::VCVTSI2SD {
+ instruction.operands[0] = OperandSpec::RegRRR;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ }
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR;
+ }
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_mmm.bank = RegisterBank::Q;
+ } else {
+ instruction.modrm_mmm.bank = RegisterBank::D;
+ }
+ } else {
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.mem_size = 8;
+ } else {
+ instruction.mem_size = 4;
+ }
+ }
+ }
+ generated::EVEXOperandCode::VCVTTSS2SI => {
+ check_mask_reg(instruction)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR;
+ }
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_rrr.bank = RegisterBank::Q;
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::D;
+ }
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::VCVTSS2SI => {
+ check_mask_reg(instruction)?;
+ deny_z(instruction)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ if instruction.prefixes.evex_unchecked().broadcast() {
+ instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae;
+ } else {
+ instruction.operands[0] = OperandSpec::RegRRR;
+ }
+ if instruction.prefixes.evex_unchecked().vex().w() {
+ instruction.modrm_rrr.bank = RegisterBank::Q;
+ } else {
+ instruction.modrm_rrr.bank = RegisterBank::D;
+ }
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.mem_size = 0;
+ } else {
+ instruction.mem_size = 4;
+ }
+
+ instruction.operands[1] = mem_oper;
+ instruction.operand_count = 2;
+ }
+ generated::EVEXOperandCode::Operands_12_W0 => {
+ deny_mask_reg(instruction)?;
+ deny_z(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.opcode = Opcode::VMOVHLPS;
+
+ instruction.mem_size = 0;
+ } else {
+ instruction.opcode = Opcode::VMOVLPS;
+
+ instruction.mem_size = 8;
+ }
+ }
+ generated::EVEXOperandCode::Operands_16_W0 => {
+ deny_mask_reg(instruction)?;
+ deny_z(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = OperandSpec::RegRRR;
+ instruction.operands[1] = OperandSpec::RegVex;
+ instruction.operands[2] = mem_oper;
+ instruction.operand_count = 3;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+
+ if mem_oper == OperandSpec::RegMMM {
+ instruction.opcode = Opcode::VMOVLHPS;
+
+ instruction.mem_size = 0;
+ } else {
+ instruction.opcode = Opcode::VMOVHPS;
+
+ instruction.mem_size = 8;
+ }
+ }
+ generated::EVEXOperandCode::Mq_G_W0 => {
+ deny_mask_reg(instruction)?;
+ deny_z(instruction)?;
+ ensure_W(instruction, 0)?;
+
+ let modrm = read_modrm(bytes, length)?;
+ set_rrr(instruction, modrm);
+ let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?;
+ instruction.operands[0] = mem_oper;
+ instruction.operands[1] = OperandSpec::RegRRR;
+ instruction.operand_count = 2;
+
+ set_reg_sizes(instruction, RegisterBank::X);
+
+ if mem_oper == OperandSpec::RegMMM {
+ return Err(DecodeError::InvalidOperand);
+ } else {
+ instruction.mem_size = 8;
+ }
+ }
+ generated::EVEXOperandCode::Nothing => {}
+ o => {
+ panic!("unhandled operand code {:?}. opcode={}", o, instruction.opcode);
+ }
+ }
+ Ok(())
+}
diff --git a/src/shared/generated_evex.in b/src/shared/generated_evex.in
new file mode 100644
index 0000000..d98346b
--- /dev/null
+++ b/src/shared/generated_evex.in
@@ -0,0 +1,1499 @@
+#[allow(warnings)]
+mod generated {
+ use super::Opcode::*;
+const EVEX_OPCODES: [super::Opcode; 496] = [
+ V4FMADDPS,
+ V4FMADDSS,
+ V4FNMADDPS,
+ V4FNMADDSS,
+ VADDPD,
+ VADDSD,
+ VADDSS,
+ VAESDEC,
+ VAESDECLAST,
+ VAESENC,
+ VAESENCLAST,
+ VALIGND,
+ VALIGNQ,
+ VANDNPD,
+ VANDPD,
+ VBLENDMPD,
+ VBLENDMPS,
+ VBROADCASTF32X2,
+ VBROADCASTF32X4,
+ VBROADCASTF32X8,
+ VBROADCASTF64X2,
+ VBROADCASTF64X4,
+ VBROADCASTI32X2,
+ VBROADCASTI32X4,
+ VBROADCASTI32X8,
+ VBROADCASTI64X2,
+ VBROADCASTI64X4,
+ VBROADCASTSD,
+ VBROADCASTSS,
+ VCMPPD,
+ VCMPSD,
+ VCMPSS,
+ VCOMISD,
+ VCOMPRESSPD,
+ VCOMPRESSPS,
+ VCVTDQ2PD,
+ VCVTNE2PS2BF16,
+ VCVTNEPS2BF16,
+ VCVTPD2DQ,
+ VCVTPD2PS,
+ VCVTPD2QQ,
+ VCVTPD2UQQ,
+ VCVTPH2PS,
+ VCVTPS2DQ,
+ VCVTPS2PH,
+ VCVTPS2QQ,
+ VCVTPS2UQQ,
+ VCVTQQ2PD,
+ VCVTSD2SI,
+ VCVTSD2SS,
+ VCVTSD2USI,
+ VCVTSI2SD,
+ VCVTSI2SS,
+ VCVTSS2SD,
+ VCVTSS2SI,
+ VCVTSS2USI,
+ VCVTTPD2DQ,
+ VCVTTPD2QQ,
+ VCVTTPD2UQQ,
+ VCVTTPS2DQ,
+ VCVTTPS2QQ,
+ VCVTTPS2UQQ,
+ VCVTTSD2SI,
+ VCVTTSD2USI,
+ VCVTTSS2SI,
+ VCVTTSS2USI,
+ VCVTUDQ2PD,
+ VCVTUDQ2PS,
+ VCVTUQQ2PD,
+ VCVTUQQ2PS,
+ VCVTUSI2SD,
+ VCVTUSI2SS,
+ VDBPSADBW,
+ VDIVPD,
+ VDIVSD,
+ VDIVSS,
+ VDPBF16PS,
+ VEXP2PD,
+ VEXP2PS,
+ VEXPANDPD,
+ VEXPANDPS,
+ VEXTRACTF32X4,
+ VEXTRACTF32X8,
+ VEXTRACTF64X2,
+ VEXTRACTF64X4,
+ VEXTRACTI32X4,
+ VEXTRACTI32X8,
+ VEXTRACTI64X2,
+ VEXTRACTI64X4,
+ VEXTRACTPS,
+ VFIXUPIMMPD,
+ VFIXUPIMMPS,
+ VFIXUPIMMSD,
+ VFIXUPIMMSS,
+ VFMADD132PD,
+ VFMADD132PS,
+ VFMADD132SD,
+ VFMADD132SS,
+ VFMADD213PD,
+ VFMADD213PS,
+ VFMADD213SD,
+ VFMADD213SS,
+ VFMADD231PD,
+ VFMADD231PS,
+ VFMADD231SD,
+ VFMADD231SS,
+ VFMADDSUB132PD,
+ VFMADDSUB132PS,
+ VFMADDSUB213PD,
+ VFMADDSUB213PS,
+ VFMADDSUB231PD,
+ VFMADDSUB231PS,
+ VFMSUB132PD,
+ VFMSUB132PS,
+ VFMSUB132SD,
+ VFMSUB132SS,
+ VFMSUB213PD,
+ VFMSUB213PS,
+ VFMSUB213SD,
+ VFMSUB213SS,
+ VFMSUB231PD,
+ VFMSUB231PS,
+ VFMSUB231SD,
+ VFMSUB231SS,
+ VFMSUBADD132PD,
+ VFMSUBADD132PS,
+ VFMSUBADD213PD,
+ VFMSUBADD213PS,
+ VFMSUBADD231PD,
+ VFMSUBADD231PS,
+ VFNMADD132PD,
+ VFNMADD132PS,
+ VFNMADD132SD,
+ VFNMADD132SS,
+ VFNMADD213PD,
+ VFNMADD213PS,
+ VFNMADD213SD,
+ VFNMADD213SS,
+ VFNMADD231PD,
+ VFNMADD231PS,
+ VFNMADD231SD,
+ VFNMADD231SS,
+ VFNMSUB132PD,
+ VFNMSUB132PS,
+ VFNMSUB132SD,
+ VFNMSUB132SS,
+ VFNMSUB213PD,
+ VFNMSUB213PS,
+ VFNMSUB213SD,
+ VFNMSUB213SS,
+ VFNMSUB231PD,
+ VFNMSUB231PS,
+ VFNMSUB231SD,
+ VFNMSUB231SS,
+ VFPCLASSPD,
+ VFPCLASSPS,
+ VFPCLASSSD,
+ VFPCLASSSS,
+ VGETEXPPD,
+ VGETEXPPS,
+ VGETEXPSD,
+ VGETEXPSS,
+ VGETMANTPD,
+ VGETMANTPS,
+ VGETMANTSD,
+ VGETMANTSS,
+ VGF2P8AFFINEINVQB,
+ VGF2P8AFFINEQB,
+ VGF2P8MULB,
+ VINSERTF32X4,
+ VINSERTF32X8,
+ VINSERTF64X2,
+ VINSERTF64X4,
+ VINSERTI32X4,
+ VINSERTI32X8,
+ VINSERTI64X2,
+ VINSERTI64X4,
+ VINSERTPS,
+ VMAXPD,
+ VMAXSD,
+ VMAXSS,
+ VMINPD,
+ VMINSD,
+ VMINSS,
+ VMOVAPD,
+ VMOVD,
+ VMOVDDUP,
+ VMOVDQA32,
+ VMOVDQA64,
+ VMOVDQU16,
+ VMOVDQU32,
+ VMOVDQU64,
+ VMOVDQU8,
+ VMOVHPD,
+ VMOVLPD,
+ VMOVNTDQ,
+ VMOVNTDQA,
+ VMOVNTPD,
+ VMOVQ,
+ VMOVSD,
+ VMOVSHDUP,
+ VMOVSLDUP,
+ VMOVSS,
+ VMOVUPD,
+ VMULPD,
+ VMULSD,
+ VMULSS,
+ VORPD,
+ VP2INTERSECTD,
+ VP2INTERSECTQ,
+ VP4DPWSSD,
+ VP4DPWSSDS,
+ VPABSB,
+ VPABSD,
+ VPABSQ,
+ VPABSW,
+ VPACKSSDW,
+ VPACKSSWB,
+ VPACKUSDW,
+ VPACKUSWB,
+ VPADDB,
+ VPADDD,
+ VPADDQ,
+ VPADDSB,
+ VPADDSW,
+ VPADDUSB,
+ VPADDUSW,
+ VPADDW,
+ VPALIGNR,
+ VPANDD,
+ VPANDND,
+ VPANDNQ,
+ VPANDQ,
+ VPAVGB,
+ VPAVGW,
+ VPBLENDMB,
+ VPBLENDMD,
+ VPBLENDMQ,
+ VPBLENDMW,
+ VPBROADCASTB,
+ VPBROADCASTD,
+ VPBROADCASTMB2Q,
+ VPBROADCASTMW2D,
+ VPBROADCASTQ,
+ VPBROADCASTW,
+ VPCLMULQDQ,
+ VPCMPB,
+ VPCMPD,
+ VPCMPEQB,
+ VPCMPEQD,
+ VPCMPEQQ,
+ VPCMPEQW,
+ VPCMPGTB,
+ VPCMPGTD,
+ VPCMPGTQ,
+ VPCMPGTW,
+ VPCMPQ,
+ VPCMPUB,
+ VPCMPUD,
+ VPCMPUQ,
+ VPCMPUW,
+ VPCMPW,
+ VPCOMPRESSB,
+ VPCOMPRESSD,
+ VPCOMPRESSQ,
+ VPCOMPRESSW,
+ VPCONFLICTD,
+ VPCONFLICTQ,
+ VPDPBUSD,
+ VPDPBUSDS,
+ VPDPWSSD,
+ VPDPWSSDS,
+ VPERMB,
+ VPERMD,
+ VPERMI2B,
+ VPERMI2D,
+ VPERMI2PD,
+ VPERMI2PS,
+ VPERMI2Q,
+ VPERMI2W,
+ VPERMILPD,
+ VPERMILPS,
+ VPERMPD,
+ VPERMPS,
+ VPERMQ,
+ VPERMT2B,
+ VPERMT2D,
+ VPERMT2PD,
+ VPERMT2PS,
+ VPERMT2Q,
+ VPERMT2W,
+ VPERMW,
+ VPEXPANDB,
+ VPEXPANDD,
+ VPEXPANDQ,
+ VPEXPANDW,
+ VPEXTRB,
+ VPEXTRD,
+ VPEXTRQ,
+ VPEXTRW,
+ VPINSRB,
+ VPINSRD,
+ VPINSRQ,
+ VPINSRW,
+ VPLZCNTD,
+ VPLZCNTQ,
+ VPMADD52HUQ,
+ VPMADD52LUQ,
+ VPMADDUBSW,
+ VPMADDWD,
+ VPMAXSB,
+ VPMAXSD,
+ VPMAXSQ,
+ VPMAXSW,
+ VPMAXUB,
+ VPMAXUD,
+ VPMAXUQ,
+ VPMAXUW,
+ VPMINSB,
+ VPMINSD,
+ VPMINSQ,
+ VPMINSW,
+ VPMINUB,
+ VPMINUD,
+ VPMINUQ,
+ VPMINUW,
+ VPMOVB2M,
+ VPMOVD2M,
+ VPMOVDB,
+ VPMOVDW,
+ VPMOVM2B,
+ VPMOVM2D,
+ VPMOVM2Q,
+ VPMOVM2W,
+ VPMOVQ2M,
+ VPMOVQB,
+ VPMOVQD,
+ VPMOVQW,
+ VPMOVSDB,
+ VPMOVSDW,
+ VPMOVSQB,
+ VPMOVSQD,
+ VPMOVSQW,
+ VPMOVSWB,
+ VPMOVSXBD,
+ VPMOVSXBQ,
+ VPMOVSXBW,
+ VPMOVSXDQ,
+ VPMOVSXWD,
+ VPMOVSXWQ,
+ VPMOVUSDB,
+ VPMOVUSDW,
+ VPMOVUSQB,
+ VPMOVUSQD,
+ VPMOVUSQW,
+ VPMOVUSWB,
+ VPMOVW2M,
+ VPMOVWB,
+ VPMOVZXBD,
+ VPMOVZXBQ,
+ VPMOVZXBW,
+ VPMOVZXDQ,
+ VPMOVZXWD,
+ VPMOVZXWQ,
+ VPMULDQ,
+ VPMULHRSW,
+ VPMULHUW,
+ VPMULHW,
+ VPMULLD,
+ VPMULLQ,
+ VPMULLW,
+ VPMULTISHIFTQB,
+ VPMULUDQ,
+ VPOPCNTB,
+ VPOPCNTD,
+ VPOPCNTQ,
+ VPOPCNTW,
+ VPORD,
+ VPORQ,
+ VPROLD,
+ VPROLQ,
+ VPROLVD,
+ VPROLVQ,
+ VPRORVD,
+ VPRORVQ,
+ VPSADBW,
+ VPSHLDD,
+ VPSHLDQ,
+ VPSHLDVD,
+ VPSHLDVQ,
+ VPSHLDVW,
+ VPSHLDW,
+ VPSHRDD,
+ VPSHRDQ,
+ VPSHRDVD,
+ VPSHRDVQ,
+ VPSHRDVW,
+ VPSHRDW,
+ VPSHUFB,
+ VPSHUFBITQMB,
+ VPSHUFD,
+ VPSHUFHW,
+ VPSHUFLW,
+ VPSLLD,
+ VPSLLQ,
+ VPSLLVD,
+ VPSLLVQ,
+ VPSLLVW,
+ VPSLLW,
+ VPSRAD,
+ VPSRAQ,
+ VPSRAVD,
+ VPSRAVQ,
+ VPSRAVW,
+ VPSRAW,
+ VPSRLD,
+ VPSRLQ,
+ VPSRLVD,
+ VPSRLVQ,
+ VPSRLVW,
+ VPSRLW,
+ VPSUBB,
+ VPSUBD,
+ VPSUBQ,
+ VPSUBSB,
+ VPSUBSW,
+ VPSUBUSB,
+ VPSUBUSW,
+ VPSUBW,
+ VPTERNLOGD,
+ VPTERNLOGQ,
+ VPTESTMB,
+ VPTESTMD,
+ VPTESTMQ,
+ VPTESTMW,
+ VPTESTNMB,
+ VPTESTNMD,
+ VPTESTNMQ,
+ VPTESTNMW,
+ VPUNPCKHBW,
+ VPUNPCKHDQ,
+ VPUNPCKHQDQ,
+ VPUNPCKHWD,
+ VPUNPCKLBW,
+ VPUNPCKLDQ,
+ VPUNPCKLQDQ,
+ VPUNPCKLWD,
+ VPXORD,
+ VPXORQ,
+ VRANGEPD,
+ VRANGEPS,
+ VRANGESD,
+ VRANGESS,
+ VRCP14PD,
+ VRCP14PS,
+ VRCP14SD,
+ VRCP14SS,
+ VRCP28PD,
+ VRCP28PS,
+ VRCP28SD,
+ VRCP28SS,
+ VREDUCEPD,
+ VREDUCEPS,
+ VREDUCESD,
+ VREDUCESS,
+ VRNDSCALEPD,
+ VRNDSCALEPS,
+ VRNDSCALESD,
+ VRNDSCALESS,
+ VRSQRT14PD,
+ VRSQRT14PS,
+ VRSQRT14SD,
+ VRSQRT14SS,
+ VRSQRT28PD,
+ VRSQRT28PS,
+ VRSQRT28SD,
+ VRSQRT28SS,
+ VSCALEFPD,
+ VSCALEFPS,
+ VSCALEFSD,
+ VSCALEFSS,
+ VSHUFF32X4,
+ VSHUFF64X2,
+ VSHUFI32X4,
+ VSHUFI64X2,
+ VSHUFPD,
+ VSQRTPD,
+ VSQRTSD,
+ VSQRTSS,
+ VSUBPD,
+ VSUBSD,
+ VSUBSS,
+ VUCOMISD,
+ VUNPCKHPD,
+ VUNPCKLPD,
+ VXORPD,
+];
+
+#[derive(Debug, PartialEq, Eq, Copy, Clone)]
+pub(crate) enum EVEXOperandCode {
+ VCVTTPS2UQQ,
+ VCVTUSI2SD,
+ VCVTTPS2UDQ,
+ Gm_E_LL_sae_bcast_W0,
+ G_Ed_xmm_sae_W0,
+ Maskm_V_Eq_xmm_imm8_sae_W1,
+ VCVTPS2PD_W0,
+ VCVTPH2PS,
+ VCVTDQ2PS,
+ Mask_E_LL_imm8_bcast,
+ Gm_E_LL_imm8_sae,
+ Gm_V_LL_E_xmm,
+ Gm_V_LL_E_xmm_W0,
+ Gm_V_LL_E_xmm_W1,
+ VPINSRW,
+ VPEXTRW,
+ Maskm_V_E_LL_imm8_sae_bcast_W1,
+ VCVTSI2SS,
+ VCVTTSS2SI,
+ VCVTSS2SI,
+ VMOVSS_10,
+ VMOVSS_11,
+ VMOVQ_Ed_G_xmm,
+ VMOVQ_G_Ed_xmm,
+ VMOVD_6e,
+ VMOVD_7e,
+ VMOVQ_7e,
+ Gm_ymm_E_zmm_sae_bcast_W1,
+ Gm_xmm_E_xmm_sae_bcast_W1,
+ Gm_xmm_E_ymm_sae_bcast_W1,
+ Gm_E_zmm_sae_bcast,
+ Gm_E_zmm_sae_bcast_W0,
+ G_V_xmm_Ebd_imm8,
+ G_V_xmm_Edq_imm8,
+ G_V_xmm_Edq_sae,
+ E_G_xmm,
+ E_G_xmm_W0,
+ E_G_ymm,
+ E_G_ymm_W0,
+ E_G_zmm,
+ E_G_zmm_W0,
+ E_xmm_G_ymm,
+ E_xmm_G_ymm_W0,
+ E_xmm_G_zmm,
+ E_xmm_G_zmm_W0,
+ E_ymm_G_xmm,
+ E_ymm_G_xmm_W0,
+ E_ymm_G_zmm,
+ E_ymm_G_zmm_W0,
+ Ebd_G_xmm_imm8,
+ Ed_xmm_G_xmm,
+ Ed_xmm_G_xmm_W0,
+ Ed_xmm_G_ymm,
+ Ed_xmm_G_ymm_W0,
+ Edd_G_xmm_imm8,
+ Edm_xmm_G_xmm,
+ Edm_xmm_G_xmm_W0,
+ Edm_xmm_G_ymm,
+ Edm_xmm_G_ymm_W0,
+ Em_G_LL,
+ M_G_LL_W0,
+ E_G_LL_W0,
+ Em_G_LL_W0,
+ Em_G_LL_W1,
+ Em_G_xmm,
+ Em_G_xmm_W0,
+ Em_G_xmm_W1,
+ Em_G_ymm,
+ Em_G_ymm_W0,
+ Em_G_ymm_W1,
+ Em_G_zmm,
+ Em_G_zmm_W0,
+ Em_G_zmm_W1,
+ Em_xmm_G_LL_imm8,
+ Em_xmm_G_ymm,
+ Em_xmm_G_ymm_W0,
+ Em_xmm_G_ymm_imm8_sae_W0,
+ Em_xmm_G_zmm,
+ Em_xmm_G_zmm_W0,
+ Em_ymm_G_zmm,
+ Em_ymm_G_zmm_W0,
+ Em_ymm_G_zmm_imm8,
+ Em_ymm_G_zmm_imm8_sae,
+ Em_ymm_G_zmm_imm8_sae_W0,
+ Eq_G_xmm_imm8,
+ Eq_xmm_G_xmm,
+ Eq_xmm_G_xmm_W0,
+ Eq_xmm_G_ymm,
+ Eq_xmm_G_ymm_W0,
+ Eq_xmm_G_zmm,
+ Eq_xmm_G_zmm_W0,
+ Eqm_G_xmm_imm8_sae_W0,
+ Eqm_xmm_G_xmm,
+ Eqm_xmm_G_xmm_W0,
+ Eqm_xmm_G_ymm,
+ Eqm_xmm_G_ymm_W0,
+ Eqm_xmm_G_zmm,
+ Eqm_xmm_G_zmm_W0,
+ Ew_xmm_G_xmm,
+ Ew_xmm_G_xmm_W0,
+ Ewd_G_xmm_imm8,
+ Ewm_xmm_G_xmm,
+ Ewm_xmm_G_xmm_W0,
+ G_E_LL_W0,
+ G_E_xmm,
+ G_E_xmm_W0,
+ G_E_ymm,
+ G_E_ymm_W0,
+ G_E_zmm,
+ G_E_zmm_W0,
+ G_Ed_xmm_sae,
+ G_LL_Mask,
+ G_LL_Mask_W0,
+ G_LL_Mask_W1,
+ G_V_E_LL,
+ G_V_E_LL_W0,
+ G_V_E_LL_bcast,
+ G_V_E_LL_bcast_W1,
+ G_V_E_LL_imm8,
+ G_V_E_LL_imm8_W0,
+ G_V_E_xmm,
+ G_V_E_xmm_imm8,
+ G_V_E_ymm,
+ G_V_E_ymm_imm8,
+ G_V_E_zmm,
+ G_V_E_zmm_imm8,
+ G_V_Ed_xmm_imm8,
+ G_V_Ed_xmm_imm8_W0,
+ G_V_Mq_xmm_W1,
+ G_V_U_xmm,
+ G_xmm_Mask,
+ G_xmm_Mask_W0,
+ G_xmm_Mask_W1,
+ G_ymm_Ed_xmm,
+ Gm_ymm_Ed_xmm_W0,
+ G_ymm_M_xmm,
+ G_ymm_Mask,
+ G_ymm_Mask_W0,
+ G_ymm_Mask_W1,
+ G_zmm_Ed_LL_bcast,
+ Gm_zmm_Ed_xmm,
+ G_zmm_Ed_xmm_W0,
+ Gm_xmm_Ed_xmm_W0,
+ Gm_zmm_Ed_xmm_W0,
+ G_zmm_Ed_xmm_bcast,
+ Gm_zmm_M_ymm,
+ G_zmm_Mask,
+ G_zmm_Mask_W0,
+ G_zmm_Mask_W1,
+ Gb_Eb_zmm,
+ Gb_Eb_zmm_W0,
+ Gb_Ew_LL_W0,
+ Gb_Ew_xmm,
+ Gb_Ew_xmm_W0,
+ Gb_Ew_ymm,
+ Gb_Ew_ymm_W0,
+ Gb_Ew_zmm,
+ Gb_Ew_zmm_W0,
+ Gd_Ed_xmm,
+ Gd_Ed_xmm_sae,
+ Gm_E_LL,
+ Gm_E_LL_W0,
+ Gm_E_LL_W1,
+ Gm_E_LL_sae,
+ Gm_E_LL_bcast,
+ Gm_E_LL_bcast_W0,
+ Gm_E_LL_bcast_W1,
+ Gm_E_LL_imm8,
+ Gm_E_LL_imm8_bcast,
+ Opcode_72_Gm_E_LL_imm8_bcast,
+ Gm_E_LL_imm8_bcast_W0,
+ Gm_E_LL_imm8_bcast_W1,
+ Gm_E_LL_imm8_sae_W0,
+ Gm_E_LL_imm8_sae_W1,
+ Gm_E_LL_sae_bcast_W1,
+ VCVTUDQ2PD,
+ Gm_E_xmm,
+ Gm_E_xmm_W0,
+ Gm_E_xmm_W1,
+ Gm_E_xmm_bcast,
+ Gm_E_xmm_bcast_W0,
+ Gm_E_xmm_bcast_W1,
+ Gm_E_xmm_imm8,
+ Gm_E_xmm_imm8_bcast,
+ Gm_E_xmm_imm8_bcast_W0,
+ Gm_E_xmm_imm8_bcast_W1,
+ Gm_E_ymm,
+ Gm_E_ymm_W0,
+ Gm_E_ymm_W1,
+ Gm_E_ymm_bcast,
+ Gm_E_ymm_bcast_W0,
+ Gm_E_ymm_bcast_W1,
+ Gm_E_ymm_imm8,
+ Gm_E_ymm_imm8_bcast,
+ Gm_E_ymm_imm8_bcast_W0,
+ Gm_E_ymm_imm8_bcast_W1,
+ Gm_E_zmm,
+ Gm_E_zmm_W0,
+ Gm_E_zmm_W1,
+ Gm_E_zmm_bcast,
+ Gm_E_zmm_bcast_W0,
+ Gm_E_zmm_bcast_W1,
+ Gm_E_zmm_imm8,
+ Gm_E_zmm_imm8_bcast,
+ Gm_E_zmm_imm8_bcast_W0,
+ Gm_E_zmm_imm8_bcast_W1,
+ Gm_E_zmm_imm8_sae,
+ Gm_E_zmm_imm8_sae_W0,
+ Gm_E_zmm_imm8_sae_W1,
+ Gm_E_zmm_sae,
+ Gm_E_zmm_sae_W0,
+ Gm_E_zmm_sae_W1,
+ Gm_Eb_LL_W0,
+ Gm_LL_Eb_xmm_W0,
+ Gm_LL_Ew_xmm_W0,
+ Gm_LL_Ed_xmm_W0,
+ Gm_LL_Eq_xmm,
+ Gm_Eb_xmm,
+ Gm_Eb_xmm_W0,
+ Gm_Eq_xmm,
+ Gm_Eq_xmm_W1,
+ Gm_Eq_xmm_bcast,
+ Gm_Eq_xmm_sae_W1,
+ Gm_LL_Ud,
+ Gm_LL_Ud_W0,
+ Gm_U_zmm_imm8_sae,
+ Gm_U_zmm_imm8_sae_W0,
+ Gm_U_zmm_imm8_sae_W1,
+ Gm_U_zmm_sae,
+ Gm_U_zmm_sae_W0,
+ Gm_U_zmm_sae_W1,
+ Gm_V_E_LL,
+ Gm_V_E_LL_W0,
+ Gm_V_E_LL_W1,
+ Gm_V_E_LL_bcast,
+ Gm_V_E_LL_bcast_W0,
+ Gm_V_E_LL_bcast_W1,
+ Gm_V_E_LL_imm8,
+ Gm_V_E_LL_imm8_W0,
+ Gm_V_E_LL_imm8_W1,
+ Gm_V_E_LL_imm8_bcast,
+ Gm_V_Ed_LL_imm8_bcast_W0,
+ Gm_V_E_LL_imm8_bcast_W0,
+ Gm_V_E_LL_imm8_bcast_W1,
+ Gm_V_E_LL_imm8_sae_bcast,
+ Gm_E_LL_sae_bcast,
+ Gm_V_E_LL_sae_W1,
+ Gm_V_Ed_xmm_sae_bcast,
+ Gm_V_E_LL_sae_bcast,
+ Gm_V_E_LL_sae_bcast_W0,
+ Gm_V_E_LL_sae_bcast_W1,
+ Gm_V_E_xmm,
+ Gm_V_E_xmm_W0,
+ Gm_V_E_xmm_W1,
+ Gm_V_E_xmm_bcast,
+ Gm_V_E_xmm_bcast_W0,
+ Gm_V_E_xmm_bcast_W1,
+ Gm_V_E_xmm_imm8,
+ Gm_V_E_xmm_imm8_W0,
+ Gm_V_E_xmm_imm8_W1,
+ Gm_V_E_xmm_imm8_bcast,
+ Gm_V_E_xmm_imm8_bcast_W0,
+ Gm_V_E_xmm_imm8_bcast_W1,
+ Gm_V_E_xmm_imm8_sae,
+ Gm_V_E_xmm_sae,
+ Gm_V_E_xmm_sae_W1,
+ Gm_V_E_ymm,
+ Gm_V_E_ymm_W0,
+ Gm_V_E_ymm_W1,
+ Gm_V_E_ymm_bcast,
+ Gm_V_E_ymm_bcast_W0,
+ Gm_V_E_ymm_bcast_W1,
+ Gm_V_E_ymm_imm8,
+ Gm_V_E_ymm_imm8_W0,
+ Gm_V_E_ymm_imm8_W1,
+ Gm_V_E_ymm_imm8_bcast,
+ Gm_V_E_ymm_imm8_bcast_W0,
+ Gm_V_E_ymm_imm8_bcast_W1,
+ Gm_V_E_zmm,
+ Gm_V_E_zmm_W0,
+ Gm_V_E_zmm_W1,
+ Gm_V_E_zmm_bcast,
+ Gm_V_E_zmm_bcast_W0,
+ Gm_V_E_zmm_bcast_W1,
+ Gm_V_E_zmm_imm8,
+ Gm_V_E_zmm_imm8_W0,
+ Gm_V_E_zmm_imm8_W1,
+ Gm_V_E_zmm_imm8_bcast,
+ Gm_V_E_zmm_imm8_bcast_W0,
+ Gm_V_E_zmm_imm8_bcast_W1,
+ Gm_V_E_zmm_imm8_sae,
+ Gm_V_E_zmm_sae,
+ Gm_V_E_zmm_sae_W1,
+ Gm_V_Ed_LL_sae,
+ Gm_V_Ed_LL_bcast,
+ Gm_V_Ed_LL_bcast_W0,
+ Gm_V_Ed_LL_imm8_bcast,
+ Gm_V_Ed_xmm,
+ Gm_V_Ed_xmm_W0,
+ Gm_V_Ed_xmm_bcast,
+ Gm_V_Ed_xmm_bcast_W0,
+ Gm_V_Ed_xmm_imm8_bcast,
+ Gm_V_Ed_xmm_imm8_bcast_W0,
+ Gm_V_Ed_xmm_imm8_sae,
+ Gm_V_Ed_xmm_sae,
+ Gm_V_Ed_xmm_sae_W0,
+ Gm_Ed_LL_imm8_sae_noround_bcast,
+ Gm_Ed_LL_sae_noround_bcast_W0,
+ Gm_V_Ed_xmm_sae_noround_W0,
+ Gm_V_Ed_ymm_bcast,
+ Gm_V_Ed_ymm_bcast_W0,
+ Gm_V_Ed_ymm_imm8_bcast,
+ Gm_V_Ed_ymm_imm8_bcast_W0,
+ Gm_V_Ed_zmm_bcast,
+ Gm_V_Ed_zmm_bcast_W0,
+ Gm_V_Ed_zmm_imm8_bcast,
+ Gm_V_Ed_zmm_imm8_bcast_W0,
+ Gm_V_Ed_zmm_imm8_sae,
+ Gm_V_Ed_zmm_sae,
+ Gm_V_Ed_zmm_sae_W0,
+ Gm_V_Eq_LL_imm8_bcast_W1,
+ Gm_V_Eq_xmm,
+ Gm_V_Eq_xmm_W1,
+ Gm_V_Eq_xmm_imm8_bcast,
+ Gm_V_Eq_xmm_imm8_bcast_W1,
+ Gm_V_Eq_xmm_sae,
+ Gm_V_Eq_xmm_sae_W1,
+ Gm_V_Eq_ymm_imm8_bcast,
+ Gm_V_Eq_ymm_imm8_bcast_W1,
+ Gm_V_Eq_zmm_imm8_bcast,
+ Gm_V_Eq_zmm_imm8_bcast_W1,
+ Gm_V_LL_E_xmm_imm8,
+ Gm_V_M_xmm,
+ Gm_V_U_zmm_sae,
+ Gm_V_U_zmm_sae_W0,
+ Gm_V_U_zmm_sae_W1,
+ Gm_V_ymm_E_xmm,
+ Gm_V_ymm_E_xmm_W0,
+ Gm_V_ymm_E_xmm_W1,
+ Gm_V_ymm_E_xmm_imm8,
+ Gm_V_zmm_E_xmm,
+ Gm_V_zmm_E_xmm_W0,
+ Gm_V_zmm_E_xmm_W1,
+ Gm_V_zmm_E_xmm_imm8,
+ Gm_V_zmm_E_ymm_imm8,
+ Gm_V_zmm_M_xmm,
+ Gm_V_zmm_M_xmm_W0,
+ Gm_xmm_Ed_xmm,
+ Gm_xmm_Eq_xmm,
+ Gm_xmm_Eq_xmm_W0,
+ Gm_xmm_Ew_xmm,
+ Gm_xmm_Ud,
+ Gm_xmm_Ud_W0,
+ Gm_ymm_E_xmm,
+ Gm_ymm_E_xmm_W0,
+ Gm_ymm_E_xmm_bcast,
+ Gm_ymm_E_zmm_sae,
+ Gm_ymm_E_zmm_sae_W1,
+ Gm_ymm_Ed_xmm,
+ VBROADCASTF32X2_Gm_ymm_Ed_xmm,
+ Gm_ymm_Eq_xmm,
+ Gm_ymm_Eq_xmm_W0,
+ Gm_ymm_M_xmm,
+ Gm_ymm_U_zmm_imm8_sae,
+ Gm_ymm_U_zmm_imm8_sae_W0,
+ Gm_ymm_U_zmm_sae,
+ Gm_ymm_U_zmm_sae_W1,
+ Gm_ymm_Ud,
+ Gm_ymm_Ud_W0,
+ Gm_zmm_E_xmm,
+ Gm_zmm_E_ymm,
+ Gm_zmm_E_ymm_W0,
+ Gm_zmm_E_ymm_bcast,
+ Gm_zmm_E_ymm_sae,
+ Gm_zmm_E_ymm_sae_W0,
+ Gm_zmm_Eq_xmm,
+ Gm_zmm_Eq_xmm_W0,
+ Gm_zmm_M_xmm,
+ Gm_zmm_U_ymm_sae,
+ Gm_zmm_Ud,
+ Gm_zmm_Ud_W0,
+ Gmd_Ed_xmm,
+ Gmd_Ed_xmm_sae,
+ Mq_G_W0,
+ MEMf32_XMMf32_AVX512_W0,
+ MEMf32_YMMf32_AVX512_W0,
+ MEMf32_ZMMf32_AVX512_W0,
+ M_G_LL_W1,
+ M_G_ymm,
+ M_G_ymm_W1,
+ M_G_zmm,
+ M_G_zmm_W1,
+ Mask_E_xmm_imm8,
+ Mask_Ed_xmm_imm8,
+ Mask_U_LL,
+ Mask_U_xmm,
+ Mask_U_ymm,
+ Mask_U_zmm,
+ Mask_V_E_LL,
+ Mask_V_E_LL_W0,
+ Mask_V_E_LL_bcast,
+ Mask_V_E_LL_bcast_W0,
+ Mask_V_E_LL_imm8_sae_bcast_W0,
+ Mask_V_E_LL_bcast_W1,
+ Mask_V_E_LL_imm8,
+ Mask_V_E_LL_imm8_bcast,
+ Mask_V_E_xmm,
+ Mask_V_E_xmm_W0,
+ Mask_V_E_xmm_bcast_W0,
+ Mask_V_E_xmm_bcast_W1,
+ Mask_V_E_xmm_imm8,
+ Mask_V_E_xmm_imm8_bcast,
+ Mask_V_E_ymm,
+ Mask_V_E_ymm_W0,
+ Mask_V_E_ymm_bcast_W0,
+ Mask_V_E_ymm_bcast_W1,
+ Mask_V_E_ymm_imm8,
+ Mask_V_E_ymm_imm8_bcast,
+ Mask_V_E_zmm,
+ Mask_V_E_zmm_W0,
+ Mask_V_E_zmm_bcast_W0,
+ Mask_V_E_zmm_bcast_W1,
+ Mask_V_E_zmm_imm8,
+ Mask_V_E_zmm_imm8_bcast,
+ Mask_V_E_zmm_imm8_sae,
+ Mask_V_E_zmm_imm8_sae_W1,
+ Maskm_V_Ed_xmm_imm8_sae_W0,
+ Maskm_V_Eq_xmm_imm8_sae,
+ Mq_G_xmm_W1,
+ Nothing,
+ Operands_08,
+ Operands_08_W0,
+ Operands_09,
+ Operands_09_W1,
+ Operands_10,
+ Operands_11,
+ Operands_12,
+ Operands_12_W0,
+ Operands_13,
+ Operands_13_W0,
+ Operands_14,
+ Operands_15,
+ Operands_16,
+ Operands_16_W0,
+ Operands_17,
+ Operands_1d,
+ Operands_1d_W0,
+ Operands_20,
+ Operands_22,
+ Operands_26,
+ Operands_2a,
+ Operands_2c,
+ Operands_42,
+ Operands_50,
+ Operands_51,
+ Operands_51_W0,
+ Operands_51_W1,
+ Operands_54,
+ Operands_56,
+ Operands_58,
+ Operands_58_W0,
+ Operands_58_W1,
+ Operands_59,
+ Operands_59_W0,
+ Operands_59_W1,
+ Operands_5a,
+ Operands_5a_W0,
+ Operands_5a_W1,
+ Operands_5b,
+ Operands_5b_W0,
+ Operands_5c,
+ Operands_5c_W0,
+ Operands_5c_W1,
+ Operands_5d,
+ Operands_5d_W0,
+ Operands_5d_W1,
+ Operands_5e,
+ Operands_5e_W0,
+ Operands_5e_W1,
+ Operands_5f,
+ Operands_5f_W0,
+ Operands_5f_W1,
+ Operands_66,
+ Operands_6e,
+ Operands_72,
+ Operands_72_W0,
+ Operands_78,
+ Operands_79,
+ Operands_7a,
+ Operands_7b,
+ Operands_7e,
+ Operands_96,
+ Operands_97,
+ Operands_98,
+ Operands_9a,
+ Operands_9c,
+ Operands_9e,
+ Operands_a6,
+ Operands_a7,
+ Operands_a8,
+ Operands_aa,
+ Operands_ac,
+ Operands_ae,
+ Operands_b6,
+ Operands_b7,
+ Operands_b8,
+ Operands_ba,
+ Operands_bc,
+ Operands_be,
+ Operands_c2,
+ Operands_c2_W0,
+ Operands_c2_W1,
+ Operands_c4,
+ Operands_e6,
+ VCVTTPD2DQ,
+ Ud_Eq_xmm,
+ Ud_Eq_xmm_sae,
+ VEXTRACTPS,
+ VMOVSD_10,
+ VMOVSD_11,
+ XMMu64_XMMu64_AVX512_W1,
+}
+
+pub(crate) const TABLES: [&'static [(u8, [(super::Opcode, EVEXOperandCode); 4])]; 12] = [
+ &EVEX_None_0f,
+ &EVEX_66_0f,
+ &EVEX_f2_0f,
+ &EVEX_f3_0f,
+ &DUMMY,
+ &EVEX_66_0f38,
+ &EVEX_f2_0f38,
+ &EVEX_f3_0f38,
+ &DUMMY,
+ &EVEX_66_0f3a,
+ &DUMMY,
+ &DUMMY,
+];
+pub(crate) const DUMMY: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 0] = [
+];
+
+const EVEX_None_0f: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 30] = [
+ (0x10, [(super::Opcode::VMOVUPS, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVUPS, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVUPS, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x11, [(super::Opcode::VMOVUPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::VMOVUPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::VMOVUPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x12, [(super::Opcode::Invalid, EVEXOperandCode::Operands_12_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x13, [(super::Opcode::VMOVLPS, EVEXOperandCode::Mq_G_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x14, [(super::Opcode::VUNPCKLPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VUNPCKLPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VUNPCKLPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x15, [(super::Opcode::VUNPCKHPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VUNPCKHPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VUNPCKHPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x16, [(super::Opcode::Invalid, EVEXOperandCode::Operands_16_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x17, [(super::Opcode::VMOVHPS, EVEXOperandCode::Mq_G_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x28, [(super::Opcode::VMOVAPS, EVEXOperandCode::Gm_E_LL_sae_bcast_W0), (super::Opcode::VMOVAPS, EVEXOperandCode::Gm_E_LL_sae_bcast_W0), (super::Opcode::VMOVAPS, EVEXOperandCode::Gm_E_LL_sae_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x29, [(super::Opcode::VMOVAPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::VMOVAPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::VMOVAPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2b, [(super::Opcode::VMOVNTPS, EVEXOperandCode::M_G_LL_W0), (super::Opcode::VMOVNTPS, EVEXOperandCode::M_G_LL_W0), (super::Opcode::VMOVNTPS, EVEXOperandCode::M_G_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2e, [(super::Opcode::VUCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VUCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VUCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VUCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0)]),
+ (0x2f, [(super::Opcode::VCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0)]),
+ (0x51, [(super::Opcode::VSQRTPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VSQRTPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VSQRTPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VSQRTPS, EVEXOperandCode::Gm_E_LL_sae_bcast)]),
+ (0x54, [(super::Opcode::VANDPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VANDPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VANDPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x55, [(super::Opcode::VANDNPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VANDNPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VANDNPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x56, [(super::Opcode::VORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x57, [(super::Opcode::VXORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VXORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VXORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x58, [(super::Opcode::VADDPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VADDPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VADDPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VADDPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]),
+ (0x59, [(super::Opcode::VMULPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMULPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMULPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMULPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]),
+ (0x5a, [(super::Opcode::VCVTPS2PD, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPS2PD, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPS2PD, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPS2PD, EVEXOperandCode::VCVTPH2PS)]),
+ (0x5b, [(super::Opcode::VCVTDQ2PS, EVEXOperandCode::VCVTDQ2PS)
+, (super::Opcode::VCVTDQ2PS, EVEXOperandCode::VCVTDQ2PS)
+, (super::Opcode::VCVTDQ2PS, EVEXOperandCode::VCVTDQ2PS), (super::Opcode::VCVTDQ2PS, EVEXOperandCode::VCVTDQ2PS)]),
+ (0x5c, [(super::Opcode::VSUBPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VSUBPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VSUBPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VSUBPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]),
+ (0x5d, [(super::Opcode::VMINPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMINPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMINPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMINPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]),
+ (0x5e, [(super::Opcode::VDIVPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VDIVPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VDIVPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VDIVPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]),
+ (0x5f, [(super::Opcode::VMAXPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMAXPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMAXPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMAXPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]),
+ (0x78, [(super::Opcode::VCVTTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ), (super::Opcode::VCVTTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ), (super::Opcode::VCVTTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ), (super::Opcode::VCVTTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ)]),
+ (0x79, [(super::Opcode::VCVTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ) // operands=['VCVTPS2UDQ_ZMMu32_MASKmskw_ZMMf32_AVX512_sae', 'VCVTPS2UDQ_XMMu32_MASKmskw_MEMf32_AVX512_sae', 'VCVTPS2UDQ_XMMu32_MASKmskw_XMMf32_AVX512_sae']
+, (super::Opcode::VCVTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ) // operands=['VCVTPS2UDQ_ZMMu32_MASKmskw_ZMMf32_AVX512_sae', 'VCVTPS2UDQ_YMMu32_MASKmskw_MEMf32_AVX512_sae', 'VCVTPS2UDQ_YMMu32_MASKmskw_YMMf32_AVX512_sae']
+, (super::Opcode::VCVTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ), (super::Opcode::VCVTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ)]),
+ (0xc2, [(super::Opcode::VCMPPS, EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0), (super::Opcode::VCMPPS, EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0), (super::Opcode::VCMPPS, EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0), (super::Opcode::VCMPPS, EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0)]),
+ (0xc6, [(super::Opcode::VSHUFPS, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W0), (super::Opcode::VSHUFPS, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W0), (super::Opcode::VSHUFPS, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+];
+
+const EVEX_66_0f: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 100] = [
+ (0x10, [(super::Opcode::VMOVUPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVUPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVUPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x11, [(super::Opcode::VMOVUPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::VMOVUPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::VMOVUPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x12, [(super::Opcode::VMOVLPD, EVEXOperandCode::G_V_Mq_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x13, [(super::Opcode::VMOVLPD, EVEXOperandCode::Mq_G_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x14, [(super::Opcode::VUNPCKLPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VUNPCKLPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VUNPCKLPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x15, [(super::Opcode::VUNPCKHPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VUNPCKHPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VUNPCKHPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x16, [(super::Opcode::VMOVHPD, EVEXOperandCode::G_V_Mq_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x17, [(super::Opcode::VMOVHPD, EVEXOperandCode::Mq_G_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x28, [(super::Opcode::VMOVAPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVAPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVAPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x29, [(super::Opcode::VMOVAPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::VMOVAPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::VMOVAPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2b, [(super::Opcode::VMOVNTPD, EVEXOperandCode::M_G_LL_W1), (super::Opcode::VMOVNTPD, EVEXOperandCode::M_G_LL_W1), (super::Opcode::VMOVNTPD, EVEXOperandCode::M_G_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2e, [(super::Opcode::VUCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VUCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VUCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VUCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1)]),
+ (0x2f, [(super::Opcode::VCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1)]),
+ (0x51, [(super::Opcode::VSQRTPD, EVEXOperandCode::Gm_E_LL_sae_bcast_W1), (super::Opcode::VSQRTPD, EVEXOperandCode::Gm_E_LL_sae_bcast_W1), (super::Opcode::VSQRTPD, EVEXOperandCode::Gm_E_LL_sae_bcast_W1), (super::Opcode::VSQRTPD, EVEXOperandCode::Gm_E_LL_sae_bcast_W1)]),
+ (0x54, [(super::Opcode::VANDPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VANDPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VANDPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x55, [(super::Opcode::VANDNPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VANDNPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VANDNPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x56, [(super::Opcode::VORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x57, [(super::Opcode::VXORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VXORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VXORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x58, [(super::Opcode::VADDPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VADDPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VADDPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VADDPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]),
+ (0x59, [(super::Opcode::VMULPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMULPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMULPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMULPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]),
+ (0x5a, [(super::Opcode::VCVTPD2PS, EVEXOperandCode::Gm_xmm_E_xmm_sae_bcast_W1), (super::Opcode::VCVTPD2PS, EVEXOperandCode::Gm_xmm_E_ymm_sae_bcast_W1), (super::Opcode::VCVTPD2PS, EVEXOperandCode::Gm_ymm_E_zmm_sae_bcast_W1), (super::Opcode::VCVTPD2PS, EVEXOperandCode::Gm_ymm_U_zmm_sae_W1)]),
+ (0x5b, [(super::Opcode::VCVTPS2DQ, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VCVTPS2DQ, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VCVTPS2DQ, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VCVTPS2DQ, EVEXOperandCode::Gm_E_LL_sae_bcast)]),
+ (0x5c, [(super::Opcode::VSUBPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VSUBPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VSUBPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VSUBPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]),
+ (0x5d, [(super::Opcode::VMINPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMINPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMINPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMINPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]),
+ (0x5e, [(super::Opcode::VDIVPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VDIVPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VDIVPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VDIVPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]),
+ (0x5f, [(super::Opcode::VMAXPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMAXPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMAXPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMAXPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]),
+ (0x60, [(super::Opcode::VPUNPCKLBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKLBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKLBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x61, [(super::Opcode::VPUNPCKLWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKLWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKLWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x62, [(super::Opcode::VPUNPCKLDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPUNPCKLDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPUNPCKLDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x63, [(super::Opcode::VPACKSSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPACKSSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPACKSSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x64, [(super::Opcode::VPCMPGTB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPGTB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPGTB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x65, [(super::Opcode::VPCMPGTW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPGTW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPGTW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x66, [(super::Opcode::VPCMPGTD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::VPCMPGTD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::VPCMPGTD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x67, [(super::Opcode::VPACKUSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPACKUSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPACKUSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x68, [(super::Opcode::VPUNPCKHBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKHBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKHBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x69, [(super::Opcode::VPUNPCKHWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKHWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKHWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x6a, [(super::Opcode::VPUNPCKHDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPUNPCKHDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPUNPCKHDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x6b, [(super::Opcode::VPACKSSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPACKSSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPACKSSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x6c, [(super::Opcode::VPUNPCKLQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPUNPCKLQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPUNPCKLQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x6d, [(super::Opcode::VPUNPCKHQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPUNPCKHQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPUNPCKHQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x6e, [(super::Opcode::VMOVD, EVEXOperandCode::VMOVD_6e), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x6f, [(super::Opcode::VMOVDQA32, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQA32, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQA32, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x70, [(super::Opcode::VPSHUFD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::VPSHUFD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::VPSHUFD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x72, [(super::Opcode::VPROLD, EVEXOperandCode::Opcode_72_Gm_E_LL_imm8_bcast), (super::Opcode::VPROLD, EVEXOperandCode::Opcode_72_Gm_E_LL_imm8_bcast), (super::Opcode::VPROLD, EVEXOperandCode::Opcode_72_Gm_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x74, [(super::Opcode::VPCMPEQB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPEQB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPEQB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x75, [(super::Opcode::VPCMPEQW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPEQW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPEQW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x76, [(super::Opcode::VPCMPEQD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::VPCMPEQD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::VPCMPEQD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x78, [(super::Opcode::VCVTTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ)
+, (super::Opcode::VCVTTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ)
+, (super::Opcode::VCVTTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ), (super::Opcode::VCVTTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ)]),
+ (0x79, [(super::Opcode::VCVTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ)
+, (super::Opcode::VCVTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ)
+, (super::Opcode::VCVTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ), (super::Opcode::VCVTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ)]),
+ (0x7a, [(super::Opcode::VCVTTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ)
+, (super::Opcode::VCVTTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ)
+, (super::Opcode::VCVTTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ), (super::Opcode::VCVTTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ)]),
+ (0x7b, [(super::Opcode::VCVTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ)
+, (super::Opcode::VCVTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ)
+, (super::Opcode::VCVTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ), (super::Opcode::VCVTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ)]),
+ (0x7e, [(super::Opcode::VMOVD, EVEXOperandCode::VMOVD_7e), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7f, [(super::Opcode::VMOVDQA32, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQA32, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQA32, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xc2, [(super::Opcode::VCMPPD, EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1), (super::Opcode::VCMPPD, EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1), (super::Opcode::VCMPPD, EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1), (super::Opcode::VCMPPD, EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1)]),
+ (0xc4, [(super::Opcode::VPINSRW, EVEXOperandCode::VPINSRW), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xc5, [(super::Opcode::VPEXTRW, EVEXOperandCode::VPEXTRW), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xc6, [(super::Opcode::VSHUFPD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VSHUFPD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VSHUFPD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xd1, [(super::Opcode::VPSRLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xd2, [(super::Opcode::VPSRLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::VPSRLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::VPSRLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xd3, [(super::Opcode::VPSRLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::VPSRLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::VPSRLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xd4, [(super::Opcode::VPADDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPADDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPADDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xd5, [(super::Opcode::VPMULLW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULLW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULLW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xd6, [(super::Opcode::VMOVQ, EVEXOperandCode::VMOVQ_Ed_G_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xd8, [(super::Opcode::VPSUBUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xd9, [(super::Opcode::VPSUBUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xda, [(super::Opcode::VPMINUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xdb, [(super::Opcode::VPANDD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPANDD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPANDD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xdc, [(super::Opcode::VPADDUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xdd, [(super::Opcode::VPADDUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xde, [(super::Opcode::VPMAXUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xdf, [(super::Opcode::VPANDND, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPANDND, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPANDND, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe0, [(super::Opcode::VPAVGB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPAVGB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPAVGB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe1, [(super::Opcode::VPSRAW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRAW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRAW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe2, [(super::Opcode::VPSRAD, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRAD, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRAD, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe3, [(super::Opcode::VPAVGW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPAVGW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPAVGW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe4, [(super::Opcode::VPMULHUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe5, [(super::Opcode::VPMULHW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe6, [(super::Opcode::VCVTTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTTPD2DQ, EVEXOperandCode::VCVTTPD2DQ)]),
+ (0xe7, [(super::Opcode::VMOVNTDQ, EVEXOperandCode::E_G_LL_W0), (super::Opcode::VMOVNTDQ, EVEXOperandCode::E_G_LL_W0), (super::Opcode::VMOVNTDQ, EVEXOperandCode::E_G_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe8, [(super::Opcode::VPSUBSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xe9, [(super::Opcode::VPSUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xea, [(super::Opcode::VPMINSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xeb, [(super::Opcode::VPORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xec, [(super::Opcode::VPADDSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xed, [(super::Opcode::VPADDSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xee, [(super::Opcode::VPMAXSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xef, [(super::Opcode::VPXORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPXORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPXORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xf1, [(super::Opcode::VPSLLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSLLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSLLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xf2, [(super::Opcode::VPSLLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::VPSLLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::VPSLLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xf3, [(super::Opcode::VPSLLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::VPSLLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::VPSLLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xf4, [(super::Opcode::VPMULUDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULUDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULUDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xf5, [(super::Opcode::VPMADDWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMADDWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMADDWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xf6, [(super::Opcode::VPSADBW, EVEXOperandCode::G_V_E_LL), (super::Opcode::VPSADBW, EVEXOperandCode::G_V_E_LL), (super::Opcode::VPSADBW, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xf8, [(super::Opcode::VPSUBB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xf9, [(super::Opcode::VPSUBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xfa, [(super::Opcode::VPSUBD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPSUBD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPSUBD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xfb, [(super::Opcode::VPSUBQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPSUBQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPSUBQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xfc, [(super::Opcode::VPADDB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xfd, [(super::Opcode::VPADDW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xfe, [(super::Opcode::VPADDD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPADDD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPADDD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+];
+
+const EVEX_66_0f38: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 141] = [
+ (0x00, [(super::Opcode::VPSHUFB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSHUFB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSHUFB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x04, [(super::Opcode::VPMADDUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMADDUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMADDUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x0b, [(super::Opcode::VPMULHRSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHRSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHRSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x0c, [(super::Opcode::VPERMILPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VPERMILPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VPERMILPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x0d, [(super::Opcode::VPERMILPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPERMILPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPERMILPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x10, [(super::Opcode::VPSRLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSRLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSRLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x11, [(super::Opcode::VPSRAVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSRAVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSRAVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x12, [(super::Opcode::VPSLLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSLLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSLLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x13, [(super::Opcode::VCVTPH2PS, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPH2PS, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPH2PS, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPH2PS, EVEXOperandCode::VCVTPH2PS)]),
+ (0x14, [(super::Opcode::VPRORVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPRORVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPRORVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x15, [(super::Opcode::VPROLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPROLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPROLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x16, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VPERMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x18, [(super::Opcode::VBROADCASTSS, EVEXOperandCode::Gm_xmm_Ed_xmm_W0), (super::Opcode::VBROADCASTSS, EVEXOperandCode::Gm_ymm_Ed_xmm_W0), (super::Opcode::VBROADCASTSS, EVEXOperandCode::Gm_zmm_Ed_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x19, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTF32X2, EVEXOperandCode::VBROADCASTF32X2_Gm_ymm_Ed_xmm), (super::Opcode::VBROADCASTF32X2, EVEXOperandCode::Gm_zmm_Ed_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTF32X4, EVEXOperandCode::Gm_ymm_M_xmm), (super::Opcode::VBROADCASTF32X4, EVEXOperandCode::Gm_zmm_M_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1b, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTF32X8, EVEXOperandCode::Gm_zmm_M_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1c, [(super::Opcode::VPABSB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPABSB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPABSB, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1d, [(super::Opcode::VPABSW, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPABSW, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPABSW, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1e, [(super::Opcode::VPABSD, EVEXOperandCode::Gm_E_LL_bcast_W0), (super::Opcode::VPABSD, EVEXOperandCode::Gm_E_LL_bcast_W0), (super::Opcode::VPABSD, EVEXOperandCode::Gm_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1f, [(super::Opcode::VPABSQ, EVEXOperandCode::Gm_E_LL_bcast_W1), (super::Opcode::VPABSQ, EVEXOperandCode::Gm_E_LL_bcast_W1), (super::Opcode::VPABSQ, EVEXOperandCode::Gm_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x20, [(super::Opcode::VPMOVSXBW, EVEXOperandCode::Gm_xmm_Eq_xmm), (super::Opcode::VPMOVSXBW, EVEXOperandCode::Gm_ymm_E_xmm), (super::Opcode::VPMOVSXBW, EVEXOperandCode::Gm_zmm_E_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x21, [(super::Opcode::VPMOVSXBD, EVEXOperandCode::Gm_xmm_Ed_xmm), (super::Opcode::VPMOVSXBD, EVEXOperandCode::Gm_ymm_Eq_xmm), (super::Opcode::VPMOVSXBD, EVEXOperandCode::Gm_zmm_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x22, [(super::Opcode::VPMOVSXBQ, EVEXOperandCode::Gm_xmm_Ew_xmm), (super::Opcode::VPMOVSXBQ, EVEXOperandCode::Gm_ymm_Ed_xmm), (super::Opcode::VPMOVSXBQ, EVEXOperandCode::Gm_zmm_Eq_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x23, [(super::Opcode::VPMOVSXWD, EVEXOperandCode::Gm_xmm_Eq_xmm), (super::Opcode::VPMOVSXWD, EVEXOperandCode::Gm_ymm_E_xmm), (super::Opcode::VPMOVSXWD, EVEXOperandCode::Gm_zmm_E_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x24, [(super::Opcode::VPMOVSXWQ, EVEXOperandCode::Gm_xmm_Ed_xmm), (super::Opcode::VPMOVSXWQ, EVEXOperandCode::Gm_ymm_Eq_xmm), (super::Opcode::VPMOVSXWQ, EVEXOperandCode::Gm_zmm_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x25, [(super::Opcode::VPMOVSXDQ, EVEXOperandCode::Gm_xmm_Eq_xmm_W0), (super::Opcode::VPMOVSXDQ, EVEXOperandCode::Gm_ymm_E_xmm_W0), (super::Opcode::VPMOVSXDQ, EVEXOperandCode::Gm_zmm_E_ymm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x26, [(super::Opcode::VPTESTMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPTESTMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPTESTMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x27, [(super::Opcode::VPTESTMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VPTESTMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VPTESTMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x28, [(super::Opcode::VPMULDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x29, [(super::Opcode::VPCMPEQQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::VPCMPEQQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::VPCMPEQQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2a, [(super::Opcode::VMOVNTDQA, EVEXOperandCode::G_E_LL_W0), (super::Opcode::VMOVNTDQA, EVEXOperandCode::G_E_LL_W0), (super::Opcode::VMOVNTDQA, EVEXOperandCode::G_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2b, [(super::Opcode::VPACKUSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPACKUSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPACKUSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2c, [(super::Opcode::VSCALEFPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VSCALEFPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VSCALEFPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VSCALEFPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0x2d, [(super::Opcode::VSCALEFSS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VSCALEFSS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VSCALEFSS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VSCALEFSS, EVEXOperandCode::Gm_V_Ed_xmm_sae)]),
+ (0x30, [(super::Opcode::VPMOVZXBW, EVEXOperandCode::Gm_xmm_Eq_xmm), (super::Opcode::VPMOVZXBW, EVEXOperandCode::Gm_ymm_E_xmm), (super::Opcode::VPMOVZXBW, EVEXOperandCode::Gm_zmm_E_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x31, [(super::Opcode::VPMOVZXBD, EVEXOperandCode::Gm_xmm_Ed_xmm), (super::Opcode::VPMOVZXBD, EVEXOperandCode::Gm_ymm_Eq_xmm), (super::Opcode::VPMOVZXBD, EVEXOperandCode::Gm_zmm_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x32, [(super::Opcode::VPMOVZXBQ, EVEXOperandCode::Gm_xmm_Ew_xmm), (super::Opcode::VPMOVZXBQ, EVEXOperandCode::Gm_ymm_Ed_xmm), (super::Opcode::VPMOVZXBQ, EVEXOperandCode::Gm_zmm_Eq_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x33, [(super::Opcode::VPMOVZXWD, EVEXOperandCode::Gm_xmm_Eq_xmm), (super::Opcode::VPMOVZXWD, EVEXOperandCode::Gm_ymm_E_xmm), (super::Opcode::VPMOVZXWD, EVEXOperandCode::Gm_zmm_E_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x34, [(super::Opcode::VPMOVZXWQ, EVEXOperandCode::Gm_xmm_Ed_xmm), (super::Opcode::VPMOVZXWQ, EVEXOperandCode::Gm_ymm_Eq_xmm), (super::Opcode::VPMOVZXWQ, EVEXOperandCode::Gm_zmm_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x35, [(super::Opcode::VPMOVZXDQ, EVEXOperandCode::Gm_xmm_Eq_xmm_W0), (super::Opcode::VPMOVZXDQ, EVEXOperandCode::Gm_ymm_E_xmm_W0), (super::Opcode::VPMOVZXDQ, EVEXOperandCode::Gm_zmm_E_ymm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x36, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VPERMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x37, [(super::Opcode::VPCMPGTQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::VPCMPGTQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::VPCMPGTQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x38, [(super::Opcode::VPMINSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x39, [(super::Opcode::VPMINSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMINSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMINSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3a, [(super::Opcode::VPMINUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3b, [(super::Opcode::VPMINUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMINUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMINUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3c, [(super::Opcode::VPMAXSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3d, [(super::Opcode::VPMAXSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMAXSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMAXSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3e, [(super::Opcode::VPMAXUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3f, [(super::Opcode::VPMAXUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMAXUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMAXUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x40, [(super::Opcode::VPMULLD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMULLD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMULLD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x42, [(super::Opcode::VGETEXPPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VGETEXPPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VGETEXPPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VGETEXPPS, EVEXOperandCode::Gm_E_LL_sae_bcast)]),
+ (0x43, [(super::Opcode::VGETEXPSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast), (super::Opcode::VGETEXPSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast), (super::Opcode::VGETEXPSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast), (super::Opcode::VGETEXPSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast)]),
+ (0x44, [(super::Opcode::VPLZCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPLZCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPLZCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x45, [(super::Opcode::VPSRLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSRLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSRLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x46, [(super::Opcode::VPSRAVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSRAVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSRAVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x47, [(super::Opcode::VPSLLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSLLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSLLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x4c, [(super::Opcode::VRCP14PS, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VRCP14PS, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VRCP14PS, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x4d, [(super::Opcode::VRCP14SS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VRCP14SS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VRCP14SS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VRCP14SS, EVEXOperandCode::Gm_V_Ed_xmm_sae)]),
+ (0x4e, [(super::Opcode::VRSQRT14PS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VRSQRT14PS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VRSQRT14PS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x4f, [(super::Opcode::VRSQRT14SS, EVEXOperandCode::Gm_V_Ed_xmm), (super::Opcode::VRSQRT14SS, EVEXOperandCode::Gm_V_Ed_xmm), (super::Opcode::VRSQRT14SS, EVEXOperandCode::Gm_V_Ed_xmm), (super::Opcode::VRSQRT14SS, EVEXOperandCode::Gm_V_Ed_xmm)]),
+ (0x50, [(super::Opcode::VPDPBUSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPBUSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPBUSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x51, [(super::Opcode::VPDPBUSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPBUSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPBUSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x52, [(super::Opcode::VPDPWSSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPWSSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPWSSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x53, [(super::Opcode::VPDPWSSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPWSSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPWSSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x54, [(super::Opcode::VPOPCNTB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPOPCNTB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPOPCNTB, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x55, [(super::Opcode::VPOPCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPOPCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPOPCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x58, [(super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ed_xmm_W0), (super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ed_xmm_W0), (super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ed_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x59, [(super::Opcode::VBROADCASTI32X2, EVEXOperandCode::Gm_LL_Eq_xmm), (super::Opcode::VBROADCASTI32X2, EVEXOperandCode::Gm_LL_Eq_xmm), (super::Opcode::VBROADCASTI32X2, EVEXOperandCode::Gm_LL_Eq_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x5a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTI32X4, EVEXOperandCode::Gm_ymm_M_xmm), (super::Opcode::VBROADCASTI32X4, EVEXOperandCode::Gm_zmm_M_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x5b, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTI32X8, EVEXOperandCode::Gm_zmm_M_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x62, [(super::Opcode::VPEXPANDB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPEXPANDB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPEXPANDB, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x63, [(super::Opcode::VPCOMPRESSB, EVEXOperandCode::Em_G_LL), (super::Opcode::VPCOMPRESSB, EVEXOperandCode::Em_G_LL), (super::Opcode::VPCOMPRESSB, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x64, [(super::Opcode::VPBLENDMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPBLENDMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPBLENDMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x65, [(super::Opcode::VBLENDMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VBLENDMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VBLENDMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x66, [(super::Opcode::VPBLENDMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPBLENDMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPBLENDMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x70, [(super::Opcode::VPSHLDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSHLDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSHLDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x71, [(super::Opcode::VPSHLDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSHLDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSHLDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x72, [(super::Opcode::VPSHRDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSHRDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSHRDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x73, [(super::Opcode::VPSHRDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSHRDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSHRDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x75, [(super::Opcode::VPERMI2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMI2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMI2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x76, [(super::Opcode::VPERMI2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMI2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMI2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x77, [(super::Opcode::VPERMI2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMI2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMI2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x78, [(super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Eb_xmm_W0), (super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Eb_xmm_W0), (super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Eb_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x79, [(super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ew_xmm_W0), (super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ew_xmm_W0), (super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ew_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7a, [(super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7b, [(super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7c, [(super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ud), (super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ud), (super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ud), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7d, [(super::Opcode::VPERMT2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMT2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMT2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7e, [(super::Opcode::VPERMT2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMT2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMT2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7f, [(super::Opcode::VPERMT2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMT2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMT2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x83, [(super::Opcode::VPMULTISHIFTQB, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULTISHIFTQB, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULTISHIFTQB, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x88, [(super::Opcode::VEXPANDPS, EVEXOperandCode::Gm_E_LL), (super::Opcode::VEXPANDPS, EVEXOperandCode::Gm_E_LL), (super::Opcode::VEXPANDPS, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x89, [(super::Opcode::VPEXPANDD, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPEXPANDD, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPEXPANDD, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x8a, [(super::Opcode::VCOMPRESSPS, EVEXOperandCode::Em_G_LL), (super::Opcode::VCOMPRESSPS, EVEXOperandCode::Em_G_LL), (super::Opcode::VCOMPRESSPS, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x8b, [(super::Opcode::VPCOMPRESSD, EVEXOperandCode::Em_G_LL), (super::Opcode::VPCOMPRESSD, EVEXOperandCode::Em_G_LL), (super::Opcode::VPCOMPRESSD, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x8d, [(super::Opcode::VPERMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x8f, [(super::Opcode::VPSHUFBITQMB, EVEXOperandCode::Mask_V_E_LL_W0), (super::Opcode::VPSHUFBITQMB, EVEXOperandCode::Mask_V_E_LL_W0), (super::Opcode::VPSHUFBITQMB, EVEXOperandCode::Mask_V_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x96, [(super::Opcode::VFMADDSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0x97, [(super::Opcode::VFMSUBADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0x98, [(super::Opcode::VFMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0x99, [(super::Opcode::VFMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0x9a, [(super::Opcode::VFMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0x9b, [(super::Opcode::VFMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0x9c, [(super::Opcode::VFNMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0x9d, [(super::Opcode::VFNMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0x9e, [(super::Opcode::VFNMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0x9f, [(super::Opcode::VFNMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xa6, [(super::Opcode::VFMADDSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xa7, [(super::Opcode::VFMSUBADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xa8, [(super::Opcode::VFMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xa9, [(super::Opcode::VFMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xaa, [(super::Opcode::VFMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xab, [(super::Opcode::VFMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xac, [(super::Opcode::VFNMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xad, [(super::Opcode::VFNMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xae, [(super::Opcode::VFNMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xaf, [(super::Opcode::VFNMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xb4, [(super::Opcode::VPMADD52LUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMADD52LUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMADD52LUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xb5, [(super::Opcode::VPMADD52HUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMADD52HUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMADD52HUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xb6, [(super::Opcode::VFMADDSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xb7, [(super::Opcode::VFMSUBADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xb8, [(super::Opcode::VFMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xb9, [(super::Opcode::VFMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xba, [(super::Opcode::VFMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xbb, [(super::Opcode::VFMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xbc, [(super::Opcode::VFNMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xbd, [(super::Opcode::VFNMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xbe, [(super::Opcode::VFNMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]),
+ (0xbf, [(super::Opcode::VFNMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]),
+ (0xc4, [(super::Opcode::VPCONFLICTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPCONFLICTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPCONFLICTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xc8, [(super::Opcode::VEXP2PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VEXP2PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VEXP2PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VEXP2PS, EVEXOperandCode::Gm_E_zmm_sae_bcast)]),
+ (0xca, [(super::Opcode::VRCP28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRCP28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRCP28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRCP28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast)]),
+ (0xcb, [(super::Opcode::VRCP28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRCP28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRCP28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRCP28SS, EVEXOperandCode::Gm_V_E_xmm_sae)]),
+ (0xcc, [(super::Opcode::VRSQRT28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRSQRT28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRSQRT28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRSQRT28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast)]),
+ (0xcd, [(super::Opcode::VRSQRT28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRSQRT28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRSQRT28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRSQRT28SS, EVEXOperandCode::Gm_V_E_xmm_sae)]),
+ (0xcf, [(super::Opcode::VGF2P8MULB, EVEXOperandCode::Gm_V_E_LL_W0), (super::Opcode::VGF2P8MULB, EVEXOperandCode::Gm_V_E_LL_W0), (super::Opcode::VGF2P8MULB, EVEXOperandCode::Gm_V_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xdc, [(super::Opcode::VAESENC, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESENC, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESENC, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xdd, [(super::Opcode::VAESENCLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESENCLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESENCLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xde, [(super::Opcode::VAESDEC, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESDEC, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESDEC, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xdf, [(super::Opcode::VAESDECLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESDECLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESDECLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+];
+
+const EVEX_66_0f3a: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 51] = [
+ (0x00, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VPERMQ, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::VPERMQ, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x01, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VPERMPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::VPERMPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x03, [(super::Opcode::VALIGND, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VALIGND, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VALIGND, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x04, [(super::Opcode::VPERMILPS, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::VPERMILPS, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::VPERMILPS, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x05, [(super::Opcode::VPERMILPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::VPERMILPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::VPERMILPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x08, [(super::Opcode::VRNDSCALEPS, EVEXOperandCode::Gm_E_LL_imm8_sae_W0), (super::Opcode::VRNDSCALEPS, EVEXOperandCode::Gm_E_LL_imm8_sae_W0), (super::Opcode::VRNDSCALEPS, EVEXOperandCode::Gm_E_LL_imm8_sae_W0), (super::Opcode::VRNDSCALEPS, EVEXOperandCode::Gm_E_LL_imm8_sae_W0)]),
+ (0x09, [(super::Opcode::VRNDSCALEPD, EVEXOperandCode::Gm_E_LL_imm8_sae_W1), (super::Opcode::VRNDSCALEPD, EVEXOperandCode::Gm_E_LL_imm8_sae_W1), (super::Opcode::VRNDSCALEPD, EVEXOperandCode::Gm_E_LL_imm8_sae_W1), (super::Opcode::VRNDSCALEPD, EVEXOperandCode::Gm_E_LL_imm8_sae_W1)]),
+ (0x0a, [(super::Opcode::VRNDSCALESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRNDSCALESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRNDSCALESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRNDSCALESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]),// W0
+ (0x0b, [(super::Opcode::VRNDSCALESD, EVEXOperandCode::Gm_V_E_xmm_imm8_sae), (super::Opcode::VRNDSCALESD, EVEXOperandCode::Gm_V_E_xmm_imm8_sae), (super::Opcode::VRNDSCALESD, EVEXOperandCode::Gm_V_E_xmm_imm8_sae), (super::Opcode::VRNDSCALESD, EVEXOperandCode::Gm_V_E_xmm_imm8_sae)]),// W1
+ (0x0f, [(super::Opcode::VPALIGNR, EVEXOperandCode::Gm_V_E_LL_imm8), (super::Opcode::VPALIGNR, EVEXOperandCode::Gm_V_E_LL_imm8), (super::Opcode::VPALIGNR, EVEXOperandCode::Gm_V_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x14, [(super::Opcode::VPEXTRB, EVEXOperandCode::Ebd_G_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x15, [(super::Opcode::VPEXTRW, EVEXOperandCode::Ewd_G_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x16, [(super::Opcode::Invalid, EVEXOperandCode::Edd_G_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x17, [(super::Opcode::VEXTRACTPS, EVEXOperandCode::VEXTRACTPS), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x18, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VINSERTF32X4, EVEXOperandCode::Gm_V_LL_E_xmm_imm8), (super::Opcode::VINSERTF32X4, EVEXOperandCode::Gm_V_LL_E_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x19, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VEXTRACTF32X4, EVEXOperandCode::Em_xmm_G_LL_imm8), (super::Opcode::VEXTRACTF32X4, EVEXOperandCode::Em_xmm_G_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VINSERTF32X8, EVEXOperandCode::Gm_V_zmm_E_ymm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1b, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VEXTRACTF32X8, EVEXOperandCode::Em_ymm_G_zmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1d, [(super::Opcode::VCVTPS2PH, EVEXOperandCode::Eqm_G_xmm_imm8_sae_W0), (super::Opcode::VCVTPS2PH, EVEXOperandCode::Em_xmm_G_ymm_imm8_sae_W0), (super::Opcode::VCVTPS2PH, EVEXOperandCode::Em_ymm_G_zmm_imm8_sae_W0), (super::Opcode::VCVTPS2PH, EVEXOperandCode::Em_ymm_G_zmm_imm8_sae_W0)]),
+ (0x1e, [(super::Opcode::VPCMPUD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::VPCMPUD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::VPCMPUD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x1f, [(super::Opcode::VPCMPD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::VPCMPD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::VPCMPD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x20, [(super::Opcode::VPINSRB, EVEXOperandCode::G_V_xmm_Ebd_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x21, [(super::Opcode::VINSERTPS, EVEXOperandCode::G_V_Ed_xmm_imm8_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x22, [(super::Opcode::VPINSRD, EVEXOperandCode::G_V_xmm_Edq_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x23, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VSHUFF32X4, EVEXOperandCode::Gm_V_Ed_LL_imm8_bcast), (super::Opcode::VSHUFF32X4, EVEXOperandCode::Gm_V_Ed_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x25, [(super::Opcode::VPTERNLOGD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPTERNLOGD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPTERNLOGD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x26, [(super::Opcode::VGETMANTPS, EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast), (super::Opcode::VGETMANTPS, EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast), (super::Opcode::VGETMANTPS, EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast), (super::Opcode::VGETMANTPS, EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast)]),
+ (0x27, [(super::Opcode::VGETMANTSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VGETMANTSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VGETMANTSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VGETMANTSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]),
+ (0x38, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VINSERTI32X4, EVEXOperandCode::Gm_V_ymm_E_xmm_imm8), (super::Opcode::VINSERTI32X4, EVEXOperandCode::Gm_V_zmm_E_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x39, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VEXTRACTI32X4, EVEXOperandCode::Em_xmm_G_LL_imm8), (super::Opcode::VEXTRACTI32X4, EVEXOperandCode::Em_xmm_G_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VINSERTI32X8, EVEXOperandCode::Gm_V_zmm_E_ymm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3b, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VEXTRACTI32X8, EVEXOperandCode::Em_ymm_G_zmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3e, [(super::Opcode::VPCMPUB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::VPCMPUB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::VPCMPUB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3f, [(super::Opcode::VPCMPB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::VPCMPB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::VPCMPB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x42, [(super::Opcode::VDBPSADBW, EVEXOperandCode::Gm_V_E_LL_imm8_W0), (super::Opcode::VDBPSADBW, EVEXOperandCode::Gm_V_E_LL_imm8_W0), (super::Opcode::VDBPSADBW, EVEXOperandCode::Gm_V_E_LL_imm8_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x43, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VSHUFI32X4, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VSHUFI32X4, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x44, [(super::Opcode::VPCLMULQDQ, EVEXOperandCode::G_V_E_LL_imm8), (super::Opcode::VPCLMULQDQ, EVEXOperandCode::G_V_E_LL_imm8), (super::Opcode::VPCLMULQDQ, EVEXOperandCode::G_V_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x50, [(super::Opcode::VRANGEPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast),
+ (super::Opcode::VRANGEPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast),
+ (super::Opcode::VRANGEPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast), (super::Opcode::VRANGEPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast)]),
+ (0x51, [(super::Opcode::VRANGESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRANGESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRANGESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRANGESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]),
+ (0x54, [(super::Opcode::VFIXUPIMMPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast)
+, (super::Opcode::VFIXUPIMMPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast)
+, (super::Opcode::VFIXUPIMMPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast), (super::Opcode::VFIXUPIMMPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast)]),
+ (0x55, [(super::Opcode::VFIXUPIMMSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VFIXUPIMMSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VFIXUPIMMSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VFIXUPIMMSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]),
+ (0x56, [(super::Opcode::VREDUCEPS, EVEXOperandCode::Gm_E_LL_imm8_sae)
+, (super::Opcode::VREDUCEPS, EVEXOperandCode::Gm_E_LL_imm8_sae)
+, (super::Opcode::VREDUCEPS, EVEXOperandCode::Gm_E_LL_imm8_sae), (super::Opcode::VREDUCEPS, EVEXOperandCode::Gm_E_LL_imm8_sae)]),
+ (0x57, [(super::Opcode::VREDUCESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VREDUCESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VREDUCESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VREDUCESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]),
+ (0x66, [(super::Opcode::VFPCLASSPS, EVEXOperandCode::Mask_E_LL_imm8_bcast)
+, (super::Opcode::VFPCLASSPS, EVEXOperandCode::Mask_E_LL_imm8_bcast)
+, (super::Opcode::VFPCLASSPS, EVEXOperandCode::Mask_E_LL_imm8_bcast)
+, (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x67, [(super::Opcode::VFPCLASSSS, EVEXOperandCode::Mask_Ed_xmm_imm8), (super::Opcode::VFPCLASSSS, EVEXOperandCode::Mask_Ed_xmm_imm8), (super::Opcode::VFPCLASSSS, EVEXOperandCode::Mask_Ed_xmm_imm8), (super::Opcode::VFPCLASSSS, EVEXOperandCode::Mask_Ed_xmm_imm8)]),
+ (0x70, [(super::Opcode::VPSHLDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::VPSHLDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::VPSHLDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x71, [(super::Opcode::VPSHLDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPSHLDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPSHLDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x72, [(super::Opcode::VPSHRDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::VPSHRDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::VPSHRDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x73, [(super::Opcode::VPSHRDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPSHRDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPSHRDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xce, [(super::Opcode::VGF2P8AFFINEQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VGF2P8AFFINEQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VGF2P8AFFINEQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xcf, [(super::Opcode::VGF2P8AFFINEINVQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VGF2P8AFFINEINVQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VGF2P8AFFINEINVQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+];
+
+const EVEX_f2_0f: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 26] = [
+ (0x10, [(super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_10), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_10), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_10), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_10)
+]),// W0
+ (0x11, [(super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_11), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_11), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_11), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_11)
+]),// W0
+ (0x12, [(super::Opcode::VMOVSLDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVSLDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVSLDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x16, [(super::Opcode::VMOVSHDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVSHDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVSHDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2a, [(super::Opcode::VCVTSI2SS, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SS, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SS, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SS, EVEXOperandCode::VCVTSI2SS)]),
+ (0x2c, [(super::Opcode::VCVTTSS2SI, EVEXOperandCode::VCVTTSS2SI), (super::Opcode::VCVTTSS2SI, EVEXOperandCode::VCVTTSS2SI), (super::Opcode::VCVTTSS2SI, EVEXOperandCode::VCVTTSS2SI), (super::Opcode::VCVTTSS2SI, EVEXOperandCode::VCVTTSS2SI)]),
+ (0x2d, [(super::Opcode::VCVTSS2SI, EVEXOperandCode::VCVTSS2SI), (super::Opcode::VCVTSS2SI, EVEXOperandCode::VCVTSS2SI), (super::Opcode::VCVTSS2SI, EVEXOperandCode::VCVTSS2SI), (super::Opcode::VCVTSS2SI, EVEXOperandCode::VCVTSS2SI)]),
+ (0x51, [(super::Opcode::VSQRTSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSQRTSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSQRTSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSQRTSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),
+ (0x58, [(super::Opcode::VADDSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VADDSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VADDSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VADDSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),
+ (0x59, [(super::Opcode::VMULSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMULSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMULSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMULSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),
+ (0x5a, [(super::Opcode::VCVTSS2SD, EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0), (super::Opcode::VCVTSS2SD, EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0), (super::Opcode::VCVTSS2SD, EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0), (super::Opcode::VCVTSS2SD, EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0)]),// W0
+ (0x5b, [(super::Opcode::VCVTTPS2DQ, EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0), (super::Opcode::VCVTTPS2DQ, EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0), (super::Opcode::VCVTTPS2DQ, EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0), (super::Opcode::VCVTTPS2DQ, EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0)]),
+ (0x5c, [(super::Opcode::VSUBSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSUBSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSUBSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSUBSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),
+ (0x5d, [(super::Opcode::VMINSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMINSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMINSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMINSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),// W0
+ (0x5e, [(super::Opcode::VDIVSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VDIVSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VDIVSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VDIVSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),
+ (0x5f, [(super::Opcode::VMAXSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMAXSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMAXSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMAXSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),// W0
+ (0x6f, [(super::Opcode::VMOVDQU32, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQU32, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQU32, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x70, [(super::Opcode::VPSHUFHW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::VPSHUFHW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::VPSHUFHW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x78, [(super::Opcode::VCVTTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae)]),
+ (0x79, [(super::Opcode::VCVTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae)]),
+ (0x7a, [(super::Opcode::VCVTUDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTUDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTUDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTUDQ2PD, EVEXOperandCode::VCVTUDQ2PD)]),
+ (0x7b, [(super::Opcode::VCVTUSI2SS, EVEXOperandCode::G_V_xmm_Edq_sae), (super::Opcode::VCVTUSI2SS, EVEXOperandCode::G_V_xmm_Edq_sae), (super::Opcode::VCVTUSI2SS, EVEXOperandCode::G_V_xmm_Edq_sae), (super::Opcode::VCVTUSI2SS, EVEXOperandCode::G_V_xmm_Edq_sae)]),
+ (0x7e, [(super::Opcode::VMOVQ, EVEXOperandCode::VMOVQ_7e), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7f, [(super::Opcode::VMOVDQU32, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQU32, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQU32, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xc2, [(super::Opcode::VCMPSS, EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0), (super::Opcode::VCMPSS, EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0), (super::Opcode::VCMPSS, EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0), (super::Opcode::VCMPSS, EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0)]),
+ (0xe6, [(super::Opcode::VCVTDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTDQ2PD, EVEXOperandCode::VCVTUDQ2PD)]),
+];
+
+const EVEX_f2_0f38: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 28] = [
+ (0x10, [(super::Opcode::VPMOVUSWB, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSWB, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVUSWB, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x11, [(super::Opcode::VPMOVUSDB, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSDB, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVUSDB, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x12, [(super::Opcode::VPMOVUSQB, EVEXOperandCode::Ewm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSQB, EVEXOperandCode::Edm_xmm_G_ymm_W0), (super::Opcode::VPMOVUSQB, EVEXOperandCode::Eqm_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x13, [(super::Opcode::VPMOVUSDW, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSDW, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVUSDW, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x14, [(super::Opcode::VPMOVUSQW, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSQW, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVUSQW, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x15, [(super::Opcode::VPMOVUSQD, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSQD, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVUSQD, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x20, [(super::Opcode::VPMOVSWB, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVSWB, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVSWB, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x21, [(super::Opcode::VPMOVSDB, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVSDB, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVSDB, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x22, [(super::Opcode::VPMOVSQB, EVEXOperandCode::Ewm_xmm_G_xmm_W0), (super::Opcode::VPMOVSQB, EVEXOperandCode::Edm_xmm_G_ymm_W0), (super::Opcode::VPMOVSQB, EVEXOperandCode::Eqm_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x23, [(super::Opcode::VPMOVSDW, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVSDW, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVSDW, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x24, [(super::Opcode::VPMOVSQW, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVSQW, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVSQW, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x25, [(super::Opcode::VPMOVSQD, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVSQD, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVSQD, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x26, [(super::Opcode::VPTESTNMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPTESTNMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPTESTNMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x27, [(super::Opcode::VPTESTNMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VPTESTNMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VPTESTNMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x28, [(super::Opcode::VPMOVM2B, EVEXOperandCode::G_LL_Mask), (super::Opcode::VPMOVM2B, EVEXOperandCode::G_LL_Mask), (super::Opcode::VPMOVM2B, EVEXOperandCode::G_LL_Mask), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x29, [(super::Opcode::VPMOVB2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::VPMOVB2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::VPMOVB2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2a, [(super::Opcode::VPBROADCASTMB2Q, EVEXOperandCode::G_LL_Mask_W1), (super::Opcode::VPBROADCASTMB2Q, EVEXOperandCode::G_LL_Mask_W1), (super::Opcode::VPBROADCASTMB2Q, EVEXOperandCode::G_LL_Mask_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x30, [(super::Opcode::VPMOVWB, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVWB, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVWB, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x31, [(super::Opcode::VPMOVDB, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVDB, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVDB, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x32, [(super::Opcode::VPMOVQB, EVEXOperandCode::Ewm_xmm_G_xmm_W0), (super::Opcode::VPMOVQB, EVEXOperandCode::Edm_xmm_G_ymm_W0), (super::Opcode::VPMOVQB, EVEXOperandCode::Eqm_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x33, [(super::Opcode::VPMOVDW, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVDW, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVDW, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x34, [(super::Opcode::VPMOVQW, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVQW, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVQW, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x35, [(super::Opcode::VPMOVQD, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVQD, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVQD, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x38, [(super::Opcode::VPMOVM2D, EVEXOperandCode::G_LL_Mask), (super::Opcode::VPMOVM2D, EVEXOperandCode::G_LL_Mask), (super::Opcode::VPMOVM2D, EVEXOperandCode::G_LL_Mask), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x39, [(super::Opcode::VPMOVD2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::VPMOVD2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::VPMOVD2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x3a, [(super::Opcode::VPBROADCASTMW2D, EVEXOperandCode::G_LL_Mask_W0), (super::Opcode::VPBROADCASTMW2D, EVEXOperandCode::G_LL_Mask_W0), (super::Opcode::VPBROADCASTMW2D, EVEXOperandCode::G_LL_Mask_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x52, [(super::Opcode::VDPBF16PS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VDPBF16PS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VDPBF16PS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x72, [(super::Opcode::VCVTNEPS2BF16, EVEXOperandCode::Operands_72_W0), (super::Opcode::VCVTNEPS2BF16, EVEXOperandCode::Operands_72_W0), (super::Opcode::VCVTNEPS2BF16, EVEXOperandCode::Operands_72_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+];
+
+const EVEX_f3_0f: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 24] = [
+ (0x10, [(super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_10), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_10), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_10), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_10)]),// W1
+ (0x11, [(super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_11), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_11), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_11), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_11)]),// W1
+ (0x12, [(super::Opcode::VMOVDDUP, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVDDUP, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVDDUP, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x2a, [(super::Opcode::VCVTSI2SD, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SD, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SD, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SD, EVEXOperandCode::VCVTSI2SS)]),
+ (0x2c, [(super::Opcode::VCVTTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae)]),
+ (0x2d, [(super::Opcode::VCVTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae)]),
+ (0x51, [(super::Opcode::VSQRTSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSQRTSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSQRTSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSQRTSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]),
+ (0x58, [(super::Opcode::VADDSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VADDSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VADDSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VADDSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]),
+ (0x59, [(super::Opcode::VMULSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMULSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMULSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMULSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]),
+ (0x5a, [(super::Opcode::VCVTSD2SS, EVEXOperandCode::Gm_V_Eq_xmm_sae_W1), (super::Opcode::VCVTSD2SS, EVEXOperandCode::Gm_V_Eq_xmm_sae_W1), (super::Opcode::VCVTSD2SS, EVEXOperandCode::Gm_V_Eq_xmm_sae_W1), (super::Opcode::VCVTSD2SS, EVEXOperandCode::Gm_V_Eq_xmm_sae_W1)]),
+ (0x5c, [(super::Opcode::VSUBSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSUBSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSUBSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSUBSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]),
+ (0x5d, [(super::Opcode::VMINSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMINSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMINSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMINSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]),// W1
+ (0x5e, [(super::Opcode::VDIVSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VDIVSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VDIVSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VDIVSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]),
+ (0x5f, [(super::Opcode::VMAXSD, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VMAXSD, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VMAXSD, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VMAXSD, EVEXOperandCode::Gm_V_E_xmm_sae)]),// W1
+ (0x6f, [(super::Opcode::VMOVDQU8, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQU8, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQU8, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x70, [(super::Opcode::VPSHUFLW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::VPSHUFLW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::VPSHUFLW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x78, [(super::Opcode::VCVTTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae)]),
+ (0x79, [(super::Opcode::VCVTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae)]),
+ (0x7a, [(super::Opcode::VCVTUDQ2PS, EVEXOperandCode::VCVTDQ2PS), (super::Opcode::VCVTUDQ2PS, EVEXOperandCode::VCVTDQ2PS), (super::Opcode::VCVTUDQ2PS, EVEXOperandCode::VCVTDQ2PS), (super::Opcode::VCVTUDQ2PS, EVEXOperandCode::VCVTDQ2PS)]),
+ (0x7b, [(super::Opcode::VCVTUSI2SD, EVEXOperandCode::VCVTUSI2SD), (super::Opcode::VCVTUSI2SD, EVEXOperandCode::VCVTUSI2SD), (super::Opcode::VCVTUSI2SD, EVEXOperandCode::VCVTUSI2SD), (super::Opcode::VCVTUSI2SD, EVEXOperandCode::VCVTUSI2SD)]),
+ (0x7e, [(super::Opcode::VMOVQ, EVEXOperandCode::VMOVQ_G_Ed_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x7f, [(super::Opcode::VMOVDQU8, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQU8, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQU8, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xc2, [(super::Opcode::VCMPSD, EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1), (super::Opcode::VCMPSD, EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1), (super::Opcode::VCMPSD, EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1), (super::Opcode::VCMPSD, EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1)]),
+ (0xe6, [(super::Opcode::VCVTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTPD2DQ, EVEXOperandCode::VCVTTPD2DQ)]),
+];
+
+const EVEX_f3_0f38: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 8] = [
+ (0x52, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VP4DPWSSD, EVEXOperandCode::Gm_V_zmm_M_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x53, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VP4DPWSSDS, EVEXOperandCode::Gm_V_zmm_M_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x68, [(super::Opcode::VP2INTERSECTD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VP2INTERSECTD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VP2INTERSECTD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x72, [(super::Opcode::VCVTNE2PS2BF16, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VCVTNE2PS2BF16, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VCVTNE2PS2BF16, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x9a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::V4FMADDPS, EVEXOperandCode::Gm_V_zmm_M_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0x9b, [(super::Opcode::V4FMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FMADDSS, EVEXOperandCode::Gm_V_M_xmm)]),// W0
+ (0xaa, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::V4FNMADDPS, EVEXOperandCode::Gm_V_zmm_M_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]),
+ (0xab, [(super::Opcode::V4FNMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FNMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FNMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FNMADDSS, EVEXOperandCode::Gm_V_M_xmm)]),// W0
+];
+}