From d951f4bbce1102ddab30e3a5f65ddac8ab221ac9 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sat, 26 Jun 2021 01:32:08 -0700 Subject: add long-mode avx512 support, except for compressed displacements --- src/long_mode/display.rs | 366 ++- src/long_mode/evex.rs | 6 + src/long_mode/evex/generated.rs | 276 +++ src/long_mode/mod.rs | 506 +++- src/shared/evex.in | 4874 +++++++++++++++++++++++++++++++++++++++ src/shared/generated_evex.in | 1499 ++++++++++++ 6 files changed, 7504 insertions(+), 23 deletions(-) create mode 100644 src/long_mode/evex.rs create mode 100644 src/long_mode/evex/generated.rs create mode 100644 src/shared/evex.in create mode 100644 src/shared/generated_evex.in (limited to 'src') 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 Colorize 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 Colorize 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 Colorize 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 Colorize for Opcode { Opcode::VMULPS | Opcode::VMULSD | Opcode::VMULSS | - Opcode::VPMULLLQ | Opcode::VPABSB | Opcode::VPABSD | Opcode::VPABSW | @@ -1731,6 +2012,7 @@ impl Colorize for Opcode { Opcode::VPMULHRSW | Opcode::VPMULHUW | Opcode::VPMULHW | + Opcode::VPMULLQ | Opcode::VPMULLD | Opcode::VPMULLW | Opcode::VPMULUDQ | @@ -1762,7 +2044,7 @@ impl Colorize for Opcode { Opcode::VRCP14SS | Opcode::VRNDSCALEPD | Opcode::VRNDSCALEPS | - Opcode::VRNDCSALESD | + Opcode::VRNDSCALESD | Opcode::VRNDSCALESS | Opcode::VRSQRT14PD | Opcode::VRSQRT14PS | @@ -2250,6 +2532,7 @@ impl Colorize for Opcode { Opcode::VINSERTF64X2 | Opcode::VINSERTF64X4 | Opcode::VINSERTI64X2 | + Opcode::VINSERTI64X4 | Opcode::VSHUFF32X4 | Opcode::VSHUFF64X2 | Opcode::VSHUFI32X4 | @@ -2637,8 +2920,8 @@ impl Colorize 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(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(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(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(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 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 { + 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>(bytes_iter: &mut T, instr: &mut In read_M(bytes_iter, instr, modrm, length) } } +#[allow(non_snake_case)] +pub(self) fn read_E_zmm>(bytes_iter: &mut T, instr: &mut Instruction, modrm: u8, length: &mut u8) -> Result { + 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 { @@ -6558,6 +7027,19 @@ fn read_instr>(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>(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>(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 +]; +} -- cgit v1.1