diff options
| author | iximeow <me@iximeow.net> | 2021-06-26 01:32:08 -0700 | 
|---|---|---|
| committer | iximeow <me@iximeow.net> | 2021-06-26 01:39:04 -0700 | 
| commit | d951f4bbce1102ddab30e3a5f65ddac8ab221ac9 (patch) | |
| tree | 0de4ae9d1c3368e8d355ed3de3974ac22fbc18d1 /src/shared | |
| parent | a801fefb208c83a8d32f2be4d88b1f384e3017dc (diff) | |
add long-mode avx512 support, except for compressed displacements
Diffstat (limited to 'src/shared')
| -rw-r--r-- | src/shared/evex.in | 4874 | ||||
| -rw-r--r-- | src/shared/generated_evex.in | 1499 | 
2 files changed, 6373 insertions, 0 deletions
diff --git a/src/shared/evex.in b/src/shared/evex.in new file mode 100644 index 0000000..e997cf0 --- /dev/null +++ b/src/shared/evex.in @@ -0,0 +1,4874 @@ +use super::OperandSpec; + +#[inline(never)] +pub(crate) fn read_evex<T: Iterator<Item=u8>>(bytes: &mut T, instruction: &mut Instruction, mut length: u8) -> Result<(), DecodeError> { +    let evex_byte_one = bytes.next().ok_or(DecodeError::ExhaustedInput)?; +    let evex_byte_two = bytes.next().ok_or(DecodeError::ExhaustedInput)?; +    let evex_byte_three = bytes.next().ok_or(DecodeError::ExhaustedInput)?; +    length += 3; +    let p = evex_byte_two & 0x03; +    let m = evex_byte_one & 0x03; +    if m == 0 { +        return Err(DecodeError::InvalidOpcode); +    } +    let m = m - 1; +    // instead of enums for the lookup bits, these are used to select a TABLES entry in the first +    // place +    /* +    let p = [ +        EVEXOpcodePrefix::None, +        EVEXOpcodePrefix::Prefix66, +        EVEXOpcodePrefix::PrefixF3, +        EVEXOpcodePrefix::PrefixF2, +    ][p]; +    let m = [ +        Ok(EVEXOpcodeMap::Map0F), +        Ok(EVEXOpcodeMap::Map0F38), +        Ok(EVEXOpcodeMap::Map0F3A), +        Err(DecodeError::InvalidOpcode), +    ][m - 1]?; +    */ + +    let vp = ((evex_byte_three >> 3) & 1) << 4; +    let vvvvv = ((evex_byte_two >> 3) & 0b1111) | vp; + +    instruction.vex_reg = RegSpec { +        bank: RegisterBank::X, +        num: vvvvv ^ 0b11111 // `vvvvv` is provided in inverted form +    }; + +    instruction.prefixes.evex_from(evex_byte_one, evex_byte_two, evex_byte_three); + +    let opc = bytes.next().ok_or(DecodeError::ExhaustedInput)?; +    length += 1; +    let table_idx = ((m << 2) | p) as usize; +    let table = generated::TABLES[table_idx]; +    if table as *const [_]  == &generated::DUMMY[..] as *const [_] { +        panic!("no table for m={}, p={}", m, p); +    } +    let mut index_lower = 0; +    if instruction.prefixes.evex_unchecked().vex().l() { +        index_lower |= 1; +    } +    if instruction.prefixes.evex_unchecked().lp() { +        index_lower |= 2; +    } +    if let Ok(entry) = table.binary_search_by_key(&opc, |x| x.0) { +      let (opcode, operand_code) = table[entry].1[index_lower]; +      instruction.opcode = opcode; +      read_evex_operands(bytes, instruction, operand_code, &mut length)?; +      // TODO: apply rp and bp? +    } else { +      return Err(DecodeError::InvalidOpcode); +    } +    instruction.length = length; +    Ok(()) +} + +fn deny_z(inst: &Instruction) -> Result<(), DecodeError> { +  if inst.prefixes.evex_unchecked().merge() { +    Err(DecodeError::InvalidOperand) +  } else { +    Ok(()) +  } +} + +fn deny_vex_reg(inst: &Instruction) -> Result<(), DecodeError> { +  if inst.vex_reg.num != 0 { +    Err(DecodeError::InvalidOperand) +  } else { +    Ok(()) +  } +} + +#[allow(non_snake_case)] +fn ensure_W(inst: &Instruction, w: u8) -> Result<(), DecodeError> { +  if inst.prefixes.evex_unchecked().vex().w() ^ (w != 0) { +    Err(DecodeError::InvalidOpcode) +  } else { +    Ok(()) +  } +} + +fn deny_mask_reg(inst: &Instruction) -> Result<(), DecodeError> { +  if inst.prefixes.evex_unchecked().mask_reg() != 0 { +    Err(DecodeError::InvalidOperand) +  } else { +    Ok(()) +  } +} + +fn check_mask_reg(inst: &Instruction) -> Result<(), DecodeError> { +  // if an operand is to be zeroed on mask bits but mask register 0 is +  // selected, this instruction is nonsense and will #UD +  if inst.prefixes.evex_unchecked().merge() && inst.prefixes.evex_unchecked().mask_reg() == 0 { +    Err(DecodeError::InvalidOperand) +  } else { +    Ok(()) +  } +} + +fn apply_broadcast(inst: &mut Instruction, item_size: u8, reg_size: u8) { +  if inst.prefixes.evex_unchecked().broadcast() { +    inst.mem_size = item_size; +  } else { +    inst.mem_size = reg_size; +  } +} + +fn set_rrr(inst: &mut Instruction, modrm: u8) { +  inst.modrm_rrr.num = (modrm >> 3) & 7; +  if inst.prefixes.evex_unchecked().vex().r() { +    inst.modrm_rrr.num |= 8; +  } +  if inst.prefixes.evex_unchecked().rp() { +    inst.modrm_rrr.num |= 16; +  } +} + +fn set_reg_sizes(inst: &mut Instruction, size: RegisterBank) { +  inst.modrm_rrr.bank = size; +  inst.vex_reg.bank = size; +  for i in 0..inst.operand_count { +    if [OperandSpec::RegMMM, OperandSpec::RegMMM_maskmerge, OperandSpec::RegMMM_maskmerge_sae_noround].contains(&inst.operands[i as usize]) { +      inst.modrm_mmm.bank = size; +    } +  } +} + +fn regs_size(inst: &Instruction) -> u8 { +  if inst.prefixes.evex_unchecked().lp() { +    64 +  } else if inst.prefixes.evex_unchecked().vex().l() { +    32 +  } else { +    16 +  } +} + +fn set_reg_sizes_from_ll(inst: &mut Instruction) -> Result<(), DecodeError> { +  if inst.prefixes.evex_unchecked().lp() { +    if inst.prefixes.evex_unchecked().vex().l() { +      return Err(DecodeError::InvalidOperand); +    } +    set_reg_sizes(inst, RegisterBank::Z); +  } else if inst.prefixes.evex_unchecked().vex().l() { +    set_reg_sizes(inst, RegisterBank::Y); +  } else { +    set_reg_sizes(inst, RegisterBank::X); +  } +  Ok(()) +} + +pub(crate) fn read_evex_operands<T: Iterator<Item=u8>>(bytes: &mut T, instruction: &mut Instruction, operand_code: generated::EVEXOperandCode, length: &mut u8) -> Result<(), DecodeError> { +  match operand_code { +    generated::EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; + +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VRANGEPS { +          instruction.opcode = Opcode::VRANGEPD; +        } else if instruction.opcode == Opcode::VFIXUPIMMPS { +          instruction.opcode = Opcode::VFIXUPIMMPD; +        } +      } + +      if let OperandSpec::RegMMM = mem_oper { +        if instruction.prefixes.evex_unchecked().broadcast() { +          if [Opcode::VRANGEPS, Opcode::VRANGEPD, Opcode::VFIXUPIMMPS, Opcode::VFIXUPIMMPD].contains(&instruction.opcode) { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        let sz = regs_size(instruction); + +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, sz); +        } else { +          apply_broadcast(instruction, 4, sz); +        } + +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_V_Ed_xmm => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        return Err(DecodeError::InvalidOpcode); +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; + +      instruction.operand_count = 3; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VRSQRT14SS { +          instruction.opcode = Opcode::VRSQRT14SD; +        } +      } + +      if let OperandSpec::RegMMM = mem_oper { +        instruction.mem_size = 0; +      } else { +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Gm_V_Eq_xmm_sae_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; + +      instruction.operand_count = 3; + +      if let OperandSpec::RegMMM = mem_oper { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +        } +        instruction.mem_size = 0; +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOpcode); +        } +        instruction.mem_size = 8; +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; + +      instruction.operand_count = 3; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VGETEXPSS { +          instruction.opcode = Opcode::VGETEXPSD; +        } +      } + +      if let OperandSpec::RegMMM = mem_oper { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +        } +      } else { +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Gm_V_Ed_LL_sae => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; + +      instruction.operand_count = 3; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VFMADD132SS { +          instruction.opcode = Opcode::VFMADD132SD; +        } else if instruction.opcode == Opcode::VFMSUB132SS { +          instruction.opcode = Opcode::VFMSUB132SD; +        } else if instruction.opcode == Opcode::VFNMADD132SS { +          instruction.opcode = Opcode::VFNMADD132SD; +        } else if instruction.opcode == Opcode::VFNMSUB132SS { +          instruction.opcode = Opcode::VFNMSUB132SD; +        } else if instruction.opcode == Opcode::VFMADD213SS { +          instruction.opcode = Opcode::VFMADD213SD; +        } else if instruction.opcode == Opcode::VFMSUB213SS { +          instruction.opcode = Opcode::VFMSUB213SD; +        } else if instruction.opcode == Opcode::VFNMADD213SS { +          instruction.opcode = Opcode::VFNMADD213SD; +        } else if instruction.opcode == Opcode::VFNMSUB213SS { +          instruction.opcode = Opcode::VFNMSUB213SD; +        } else if instruction.opcode == Opcode::VFMADD231SS { +          instruction.opcode = Opcode::VFMADD231SD; +        } else if instruction.opcode == Opcode::VFMSUB231SS { +          instruction.opcode = Opcode::VFMSUB231SD; +        } else if instruction.opcode == Opcode::VFNMADD231SS { +          instruction.opcode = Opcode::VFNMADD231SD; +        } else if instruction.opcode == Opcode::VFNMSUB231SS { +          instruction.opcode = Opcode::VFNMSUB231SD; +        } +      } + +      set_reg_sizes(instruction, RegisterBank::X); + +      if let OperandSpec::RegMMM = mem_oper { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +        } +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOpcode); +        } + +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +    } +    generated::EVEXOperandCode::Gm_V_E_LL_sae_bcast => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; + +      instruction.operand_count = 3; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VSCALEFPS { +          instruction.opcode = Opcode::VSCALEFPD; +        } else if instruction.opcode == Opcode::VFNMADD132PS { +          instruction.opcode = Opcode::VFNMADD132PD; +        } else if instruction.opcode == Opcode::VFNMSUB132PS { +          instruction.opcode = Opcode::VFNMSUB132PD; +        } else if instruction.opcode == Opcode::VFMADDSUB132PS { +          instruction.opcode = Opcode::VFMADDSUB132PD; +        } else if instruction.opcode == Opcode::VFMSUBADD132PS { +          instruction.opcode = Opcode::VFMSUBADD132PD; +        } else if instruction.opcode == Opcode::VFMADD132PS { +          instruction.opcode = Opcode::VFMADD132PD; +        } else if instruction.opcode == Opcode::VFMSUB132PS { +          instruction.opcode = Opcode::VFMSUB132PD; +        } else if instruction.opcode == Opcode::VFMADDSUB213PS { +          instruction.opcode = Opcode::VFMADDSUB213PD; +        } else if instruction.opcode == Opcode::VFMSUBADD213PS { +          instruction.opcode = Opcode::VFMSUBADD213PD; +        } else if instruction.opcode == Opcode::VFMADD213PS { +          instruction.opcode = Opcode::VFMADD213PD; +        } else if instruction.opcode == Opcode::VFMSUB213PS { +          instruction.opcode = Opcode::VFMSUB213PD; +        } else if instruction.opcode == Opcode::VFNMADD213PS { +          instruction.opcode = Opcode::VFNMADD213PD; +        } else if instruction.opcode == Opcode::VFNMSUB213PS { +          instruction.opcode = Opcode::VFNMSUB213PD; +        } else if instruction.opcode == Opcode::VFMADDSUB231PS { +          instruction.opcode = Opcode::VFMADDSUB231PD; +        } else if instruction.opcode == Opcode::VFMSUBADD231PS { +          instruction.opcode = Opcode::VFMSUBADD231PD; +        } else if instruction.opcode == Opcode::VFMADD231PS { +          instruction.opcode = Opcode::VFMADD231PD; +        } else if instruction.opcode == Opcode::VFMSUB231PS { +          instruction.opcode = Opcode::VFMSUB231PD; +        } else if instruction.opcode == Opcode::VFNMADD231PS { +          instruction.opcode = Opcode::VFNMADD231PD; +        } else if instruction.opcode == Opcode::VFNMSUB231PS { +          instruction.opcode = Opcode::VFNMSUB231PD; +        } +      } + +      if let OperandSpec::RegMMM = mem_oper { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        let sz = regs_size(instruction); + +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, sz); +        } else { +          apply_broadcast(instruction, 4, sz); +        } + +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_E_LL_imm8_sae => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = Opcode::VREDUCEPD; +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; + +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      if let OperandSpec::RegMMM = mem_oper { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.mem_size = 0; +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; + +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        let sz = regs_size(instruction); + +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, sz); +        } else { +          apply_broadcast(instruction, 4, sz); +        } + +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_E_LL_imm8_sae_W0 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; + +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      if let OperandSpec::RegMMM = mem_oper { +        if instruction.prefixes.evex_unchecked().broadcast() { +          // this mode is only used for `vcvtps2ph` and `vrndscaleps`, neither use sae rounding +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; + +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        let sz = regs_size(instruction); + +        apply_broadcast(instruction, 4, sz); + +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_E_LL_imm8_sae_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; + +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      if let OperandSpec::RegMMM = mem_oper { +        if instruction.prefixes.evex_unchecked().broadcast() { +          // this mode is only used for `vrndscalepd`, does not use sae rounding +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; + +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        let sz = regs_size(instruction); + +        apply_broadcast(instruction, 8, sz); + +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Mq_G_xmm_W1 => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      instruction.mem_size = 8; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; + +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::G_V_Ed_xmm_imm8_W0 => { +      deny_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.vex_reg.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; +    } +    generated::EVEXOperandCode::G_V_xmm_Edq_sae => { +      deny_mask_reg(instruction)?; +      deny_z(instruction)?; + +      let (sz, bank) = if instruction.prefixes.evex_unchecked().vex().w() { +        (8, RegisterBank::Q) +      } else { +        (4, RegisterBank::D) +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.vex_reg.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.modrm_mmm.bank = bank; +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = sz; +      } +      if instruction.prefixes.evex_unchecked().broadcast() { +        if mem_oper == OperandSpec::RegMMM { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +        } else { +          return Err(DecodeError::InvalidOperand); +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::G_V_xmm_Edq_imm8 => { +      deny_mask_reg(instruction)?; + +      let (sz, bank) = if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = Opcode::VPINSRQ; +        (8, RegisterBank::Q) +      } else { +        (4, RegisterBank::D) +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.vex_reg.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.modrm_mmm.bank = bank; +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = sz; +      } +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; +    } +    generated::EVEXOperandCode::G_V_xmm_Ebd_imm8 => { +      deny_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.vex_reg.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.modrm_mmm.bank = RegisterBank::D; +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 1; +      } +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; +    } +    generated::EVEXOperandCode::G_V_Mq_xmm_W1 => { +      deny_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      instruction.mem_size = 8; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Gm_V_E_LL_bcast_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      // specifically for vunpcklpd!!! probably need to reconsider. +      apply_broadcast(instruction, 8, sz); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::M_G_LL_W0 => { +      deny_vex_reg(instruction)?; +      deny_mask_reg(instruction)?; + +      instruction.mem_size = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::M_G_LL_W1 => { +      deny_vex_reg(instruction)?; +      deny_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      instruction.mem_size = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Em_G_LL_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      instruction.mem_size = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::G_Ed_xmm_sae_W0 => { +      deny_vex_reg(instruction)?; +      deny_mask_reg(instruction)?; +      // vucomiss and vcomiss both are W=0 +      ensure_W(instruction, 0)?; + +      instruction.mem_size = 4; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; + +      // in specific support of vcomisd/vucomisd +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR; +      } +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_Eq_xmm_sae_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      // vucomisd and vcomisd both are W=1 +      ensure_W(instruction, 1)?; + +      instruction.mem_size = 8; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; + +      // in specific support of vcomisd/vucomisd +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR; +      } +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_E_LL_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      instruction.mem_size = regs_size(instruction); + +      if instruction.opcode == Opcode::VMOVDDUP && instruction.mem_size == 16 { +        instruction.mem_size = 8; +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::VCVTUDQ2PD => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VCVTUDQ2PD { +          instruction.opcode = Opcode::VCVTUQQ2PD; +        } else if instruction.opcode == Opcode::VCVTDQ2PD { +          instruction.opcode = Opcode::VCVTQQ2PD; +        } +      } else { +        if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() { +          return Err(DecodeError::InvalidOperand); +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +          if !instruction.prefixes.evex_unchecked().vex().w() { +            if instruction.modrm_rrr.bank == RegisterBank::Z { +              instruction.modrm_mmm.bank = RegisterBank::Y; +            } else if instruction.modrm_rrr.bank == RegisterBank::Y { +              instruction.modrm_mmm.bank = RegisterBank::X; +            } +          } +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        set_reg_sizes_from_ll(instruction)?; +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, sz); +        } else { +          apply_broadcast(instruction, 4, sz / 2); +        } +      } +    } +    generated::EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        apply_broadcast(instruction, 8, sz); +        set_reg_sizes_from_ll(instruction)?; +      } +      instruction.modrm_rrr.bank = RegisterBank::K; +      if instruction.modrm_rrr.num > 7 { +        return Err(DecodeError::InvalidOperand); +      } +    } +    generated::EVEXOperandCode::Gm_E_LL_sae_bcast_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        apply_broadcast(instruction, 8, sz); +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_E_LL_sae_bcast_W1 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        apply_broadcast(instruction, 8, sz); +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_V_Ed_LL_bcast => { +      check_mask_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VPERMPS { +          instruction.opcode = Opcode::VPERMPD; +        } else if instruction.opcode == Opcode::VBLENDMPS { +          instruction.opcode = Opcode::VBLENDMPD; +        } else if instruction.opcode == Opcode::VPERMI2PS { +          instruction.opcode = Opcode::VPERMI2PD; +        } else if instruction.opcode == Opcode::VPERMT2PS { +          instruction.opcode = Opcode::VPERMT2PD +        } +      } + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOpcode); +        } else { +          instruction.mem_size = 0; +        } +      } else { +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, sz); +        } else { +          apply_broadcast(instruction, 4, sz); +        } +      } +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_Ed_LL_bcast_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOpcode); +        } else { +          instruction.mem_size = 0; +        } +      } else { +        apply_broadcast(instruction, 4, sz); +      } +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      if instruction.prefixes.evex_unchecked().broadcast() { +        return Err(DecodeError::InvalidOpcode); +      } + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = sz; +      } + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      if instruction.prefixes.evex_unchecked().broadcast() { +        return Err(DecodeError::InvalidOpcode); +      } + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = sz; +      } + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_sae_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        instruction.mem_size = sz; +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          if instruction.opcode == Opcode::VMINPS || instruction.opcode == Opcode::VMAXPS { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        apply_broadcast(instruction, 4, sz); +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          if instruction.opcode == Opcode::VMINPD || instruction.opcode == Opcode::VMAXPD { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        apply_broadcast(instruction, 8, sz); +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::G_V_E_LL => { +      deny_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        apply_broadcast(instruction, 8, sz); +      } else { +        apply_broadcast(instruction, 4, sz); +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_bcast => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        apply_broadcast(instruction, 8, sz); +        instruction.opcode = if instruction.opcode == Opcode::VPANDD { +          Opcode::VPANDQ +        } else if instruction.opcode == Opcode::VPANDND { +          Opcode::VPANDNQ +        } else if instruction.opcode == Opcode::VPORD { +          Opcode::VPORQ +        } else if instruction.opcode == Opcode::VPXORD { +          Opcode::VPXORQ +        } else if instruction.opcode == Opcode::VPRORVD { +          Opcode::VPRORVQ +        } else if instruction.opcode == Opcode::VPROLVD { +          Opcode::VPROLVQ +        } else if instruction.opcode == Opcode::VPERMD { +          Opcode::VPERMQ +        } else if instruction.opcode == Opcode::VPMINSD { +          Opcode::VPMINSQ +        } else if instruction.opcode == Opcode::VPMINUD { +          Opcode::VPMINUQ +        } else if instruction.opcode == Opcode::VPMAXSD { +          Opcode::VPMAXSQ +        } else if instruction.opcode == Opcode::VPMAXUD { +          Opcode::VPMAXUQ +        } else if instruction.opcode == Opcode::VPSRLVD { +          Opcode::VPSRLVQ +        } else if instruction.opcode == Opcode::VPSRAVD { +          Opcode::VPSRAVQ +        } else if instruction.opcode == Opcode::VPSLLVD { +          Opcode::VPSLLVQ +        } else if instruction.opcode == Opcode::VPMULLD { +          Opcode::VPMULLQ +        } else if instruction.opcode == Opcode::VPBLENDMD { +          Opcode::VPBLENDMQ +        } else if instruction.opcode == Opcode::VPSHLDVD { +          Opcode::VPSHLDVQ +        } else if instruction.opcode == Opcode::VPSHRDVD { +          Opcode::VPSHRDVQ +        } else if instruction.opcode == Opcode::VPERMI2D { +          Opcode::VPERMI2Q +        } else if instruction.opcode == Opcode::VPERMT2D { +          Opcode::VPERMT2Q +        } else { +          instruction.opcode +        }; +      } else { +        apply_broadcast(instruction, 4, sz); +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_E_LL_imm8_bcast_W0 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      apply_broadcast(instruction, 4, sz); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_E_LL_imm8_bcast_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      apply_broadcast(instruction, 8, sz); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VGETMANTPS { +          instruction.opcode = Opcode::VGETMANTPD; +        } +        apply_broadcast(instruction, 8, sz); +      } else { +        apply_broadcast(instruction, 4, sz); +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      if instruction.prefixes.evex_unchecked().broadcast() { +        if mem_oper == OperandSpec::RegMMM { +          instruction.mem_size = 0; +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() { +          return Err(DecodeError::InvalidOperand); +        } +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      apply_broadcast(instruction, 4, sz); + +      if instruction.prefixes.evex_unchecked().broadcast() { +        if mem_oper == OperandSpec::RegMMM { +          instruction.mem_size = 0; +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() { +          return Err(DecodeError::InvalidOperand); +        } +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +      } else { +        if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() { +          return Err(DecodeError::InvalidOperand); +        } +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Gm_V_Ed_xmm_sae => { +      check_mask_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VSCALEFSS { +          instruction.opcode = Opcode::VSCALEFSD; +        } else if instruction.opcode == Opcode::VRCP14SS { +          instruction.opcode = Opcode::VRCP14SD; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +      } else { +        if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() { +          return Err(DecodeError::InvalidOperand); +        } +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Gm_V_Ed_xmm_sae_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        if instruction.opcode == Opcode::VMINSS || instruction.opcode == Opcode::VMAXSS { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +        } +      } else { +        if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() { +          return Err(DecodeError::InvalidOperand); +        } +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Eqm_G_xmm_imm8_sae_W0 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          // sae sets this to `vcvtps2ph ymm, zmm, imm8` +          instruction.modrm_mmm.bank = RegisterBank::Y; +          instruction.modrm_rrr.bank = RegisterBank::Z; +          instruction.operands[0] = OperandSpec::RegMMM_maskmerge_sae_noround; +        } else { +          instruction.modrm_mmm.bank = RegisterBank::X; +          instruction.modrm_rrr.bank = RegisterBank::X; +          instruction.operands[0] = OperandSpec::RegMMM_maskmerge; +        } +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOperand); +        } else { +          instruction.mem_size = 8; +          instruction.modrm_rrr.bank = RegisterBank::X; +          instruction.operands[0] = mem_oper.masked(); +        } +      } +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::Em_xmm_G_ymm_imm8_sae_W0 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          // sae sets this to `vcvtps2ph ymm, zmm, imm8` +          instruction.modrm_mmm.bank = RegisterBank::Y; +          instruction.modrm_rrr.bank = RegisterBank::Z; +          instruction.operands[0] = OperandSpec::RegMMM_maskmerge_sae_noround; +        } else { +          instruction.modrm_mmm.bank = RegisterBank::X; +          instruction.modrm_rrr.bank = RegisterBank::Y; +          instruction.operands[0] = OperandSpec::RegMMM_maskmerge; +        } +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOperand); +        } else { +          instruction.modrm_rrr.bank = RegisterBank::Y; +          instruction.operands[0] = mem_oper.masked(); +        } +      } +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.mem_size = 16; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::Em_ymm_G_zmm_imm8_sae_W0 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::Z; +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegMMM_maskmerge_sae_noround; +        } else { +          instruction.operands[0] = OperandSpec::RegMMM_maskmerge; +        } +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOperand); +        } else { +          instruction.operands[0] = mem_oper.masked(); +        } +      } +      instruction.mem_size = 32; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::Gm_V_zmm_E_xmm_imm8 => { +      check_mask_reg(instruction)?; + +      instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() { +        Opcode::VINSERTI64X2 +      } else { +        Opcode::VINSERTI32X4 +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::Z; +      instruction.vex_reg.bank = RegisterBank::Z; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 16; +      } +      instruction.operands[0] = OperandSpec::RegRRR.masked(); +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; +    } +    generated::EVEXOperandCode::Gm_V_ymm_E_xmm_imm8 => { +      check_mask_reg(instruction)?; + +      instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() { +        Opcode::VINSERTI64X2 +      } else { +        Opcode::VINSERTI32X4 +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::Y; +      instruction.vex_reg.bank = RegisterBank::Y; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 16; +      } +      instruction.operands[0] = OperandSpec::RegRRR.masked(); +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; +    } +    generated::EVEXOperandCode::Gm_V_zmm_E_ymm_imm8 => { +      check_mask_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VINSERTF32X8 { +          instruction.opcode = Opcode::VINSERTF64X4; +        } else if instruction.opcode == Opcode::VINSERTI32X8 { +          instruction.opcode = Opcode::VINSERTI64X4; +        } +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::Z; +      instruction.vex_reg.bank = RegisterBank::Z; +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.mem_size = 32; +      instruction.operands[0] = OperandSpec::RegRRR.masked(); +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; +    } +    generated::EVEXOperandCode::Em_ymm_G_zmm_imm8 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VEXTRACTF32X8 { +          instruction.opcode = Opcode::VEXTRACTF64X4; +        } else if instruction.opcode == Opcode::VEXTRACTI32X8 { +          instruction.opcode = Opcode::VEXTRACTI64X4; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::Z; +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.mem_size = 32; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::Gm_zmm_Eq_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_ymm_Ed_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_xmm_Ew_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 2; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_zmm_E_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 16; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_ymm_Eq_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_xmm_Ed_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_zmm_E_ymm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 32; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_zmm_E_ymm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 32; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_ymm_E_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 16; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_ymm_E_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 16; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_xmm_Eq_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_xmm_Eq_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Em_ymm_G_zmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      instruction.mem_size = 32; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Em_xmm_G_zmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      instruction.mem_size = 16; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Em_xmm_G_ymm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      instruction.mem_size = 16; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Eqm_xmm_G_zmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      instruction.mem_size = 8; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Eqm_xmm_G_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.mem_size = 8; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Edm_xmm_G_ymm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      instruction.mem_size = 4; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Edm_xmm_G_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.mem_size = 4; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Ewm_xmm_G_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.mem_size = 2; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Eqm_xmm_G_ymm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      instruction.mem_size = 8; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_xmm_Ed_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_ymm_Ed_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_zmm_M_ymm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VBROADCASTF32X8 { +          instruction.opcode = Opcode::VBROADCASTF64X4; +        } else if instruction.opcode == Opcode::VBROADCASTI32X8 { +          instruction.opcode = Opcode::VBROADCASTI64X4; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.mem_size = 32; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_zmm_M_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VBROADCASTF32X4 { +          instruction.opcode = Opcode::VBROADCASTF64X2; +        } else if instruction.opcode == Opcode::VBROADCASTI32X4 { +          instruction.opcode = Opcode::VBROADCASTI64X2; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.mem_size = 16; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_ymm_M_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VBROADCASTF32X4 { +          instruction.opcode = Opcode::VBROADCASTF64X2; +        } else if instruction.opcode == Opcode::VBROADCASTI32X4 { +          instruction.opcode = Opcode::VBROADCASTI64X2; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.mem_size = 16; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_zmm_Ed_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = Opcode::VBROADCASTSD; +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::VBROADCASTF32X2_Gm_ymm_Ed_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = Opcode::VBROADCASTSD; +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_zmm_Ed_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Z; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Em_xmm_G_LL_imm8 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = if instruction.opcode == Opcode::VEXTRACTF32X4 { +          Opcode::VEXTRACTF64X2 +        } else if instruction.opcode == Opcode::VEXTRACTI32X4 { +          Opcode::VEXTRACTI64X2 +        } else { +          instruction.opcode +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      if instruction.prefixes.evex_unchecked().lp() { +        instruction.modrm_rrr.bank = RegisterBank::Z; +      } else { +        instruction.modrm_rrr.bank = RegisterBank::Y; +      } +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.mem_size = 16; +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::Gm_V_LL_E_xmm_imm8 => { +      check_mask_reg(instruction)?; + +      instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() { +        Opcode::VINSERTF64X2 +      } else { +        Opcode::VINSERTF32X4 +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      set_reg_sizes_from_ll(instruction)?; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.mem_size = 16; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; +    } +    generated::EVEXOperandCode::Gm_V_LL_E_xmm_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      set_reg_sizes_from_ll(instruction)?; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.mem_size = 16; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::Gm_V_LL_E_xmm_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      set_reg_sizes_from_ll(instruction)?; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.mem_size = 16; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::Gm_V_LL_E_xmm => { +      check_mask_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = if instruction.opcode == Opcode::VPSRAD { +          Opcode::VPSRAQ +        } else { +          instruction.opcode +        }; +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      set_reg_sizes_from_ll(instruction)?; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.mem_size = 16; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::VPEXTRW => { +      deny_mask_reg(instruction)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::D; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.modrm_mmm.bank = RegisterBank::X; +      } else { +        return Err(DecodeError::InvalidOperand); +      } + +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::VPINSRW => { +      deny_mask_reg(instruction)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.modrm_mmm.bank = RegisterBank::D; +      } else { +        instruction.mem_size = 2; +      } + +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; +    } +    generated::EVEXOperandCode::VMOVQ_G_Ed_xmm => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +      } + +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::VMOVQ_Ed_G_xmm => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +      } + +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::VMOVQ_7e => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      if mem_oper != OperandSpec::RegMMM { +        instruction.mem_size = 8; +      } + +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::VMOVD_7e => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = Opcode::VMOVQ; +        if mem_oper == OperandSpec::RegMMM { +          instruction.modrm_mmm.bank = RegisterBank::Q; +        } else { +          instruction.mem_size = 8; +        } +      } else { +        if mem_oper == OperandSpec::RegMMM { +          instruction.modrm_mmm.bank = RegisterBank::D; +        } else { +          instruction.mem_size = 4; +        } +      } + +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR_maskmerge; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::VMOVD_6e => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = Opcode::VMOVQ; +        if mem_oper == OperandSpec::RegMMM { +          instruction.modrm_mmm.bank = RegisterBank::Q; +        } else { +          instruction.mem_size = 8; +        } +      } else { +        if mem_oper == OperandSpec::RegMMM { +          instruction.modrm_mmm.bank = RegisterBank::D; +        } else { +          instruction.mem_size = 4; +        } +      } + +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Mask_V_E_LL_bcast => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VP2INTERSECTD { +          instruction.opcode = Opcode::VP2INTERSECTQ; +        } else if instruction.opcode == Opcode::VPTESTNMD { +          instruction.opcode = Opcode::VPTESTNMQ; +        } else if instruction.opcode == Opcode::VPTESTMD { +          instruction.opcode = Opcode::VPTESTMQ; +        } +        apply_broadcast(instruction, 8, sz); +      } else { +        apply_broadcast(instruction, 4, sz); +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Mask_V_E_LL_bcast_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      apply_broadcast(instruction, 8, sz); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Mask_V_E_LL_bcast_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      apply_broadcast(instruction, 4, sz); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Em_G_LL => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VMOVDQA32 { +          instruction.opcode = Opcode::VMOVDQA64; +        } else if instruction.opcode == Opcode::VMOVDQU32 { +          instruction.opcode = Opcode::VMOVDQU64; +        } else if instruction.opcode == Opcode::VMOVDQU8 { +          instruction.opcode = Opcode::VMOVDQU16; +        } else if instruction.opcode == Opcode::VPCOMPRESSB { +          instruction.opcode = Opcode::VPCOMPRESSW; +        } else if instruction.opcode == Opcode::VPCOMPRESSD { +          instruction.opcode = Opcode::VPCOMPRESSQ; +        } else if instruction.opcode == Opcode::VCOMPRESSPS { +          instruction.opcode = Opcode::VCOMPRESSPD; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Mask_U_LL => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VPMOVB2M { +          instruction.opcode = Opcode::VPMOVW2M; +        } else { +          instruction.opcode = Opcode::VPMOVQ2M; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_rrr.bank = RegisterBank::K; +      } else { +        return Err(DecodeError::InvalidOperand); +      } +    } +    generated::EVEXOperandCode::G_LL_Mask => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VPMOVM2B { +          instruction.opcode = Opcode::VPMOVM2W; +        } else { +          instruction.opcode = Opcode::VPMOVM2Q; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = RegisterBank::K; +      } else { +        return Err(DecodeError::InvalidOperand); +      } +    } +    generated::EVEXOperandCode::G_LL_Mask_W1 => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = RegisterBank::K; +      } else { +        return Err(DecodeError::InvalidOperand); +      } +    } +    generated::EVEXOperandCode::G_LL_Mask_W0 => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = RegisterBank::K; +      } else { +        return Err(DecodeError::InvalidOperand); +      } +    } +    generated::EVEXOperandCode::G_E_LL_W0 => { +      deny_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::E_G_LL_W0 => { +      deny_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Em_G_LL_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = mem_oper.masked(); +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Operands_72_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      let (r_sz, m_sz, m_data_sz) = match ( +        instruction.prefixes.evex_unchecked().lp(), +        instruction.prefixes.evex_unchecked().vex().l(), +      ) { +        (true, true) => { return Err(DecodeError::InvalidOpcode); }, +        (true, false) => (RegisterBank::Y, RegisterBank::Z, 64), +        (false, true) => (RegisterBank::X, RegisterBank::Y, 32), +        (false, false) => (RegisterBank::X, RegisterBank::X, 16), +      }; +      instruction.modrm_rrr.bank = r_sz; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = m_sz; +      } else { +        apply_broadcast(instruction, 4, m_data_sz); +      } +    } +    generated::EVEXOperandCode::Gm_E_LL_bcast => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VPLZCNTD { +          instruction.opcode = Opcode::VPLZCNTQ; +        } else if instruction.opcode == Opcode::VRCP14PS { +          instruction.opcode = Opcode::VRCP14PD; +        } else if instruction.opcode == Opcode::VPOPCNTD { +          instruction.opcode = Opcode::VPOPCNTQ; +        } else if instruction.opcode == Opcode::VPCONFLICTD { +          instruction.opcode = Opcode::VPCONFLICTQ; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOpcode); +        } +        instruction.mem_size = 0; +      } else { +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, sz); +        } else { +          apply_broadcast(instruction, 4, sz); +        } +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_E_LL_bcast_W1 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOpcode); +        } +        instruction.mem_size = 0; +      } else { +        apply_broadcast(instruction, 8, sz); +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_E_LL_bcast_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOpcode); +        } +        instruction.mem_size = 0; +      } else { +        apply_broadcast(instruction, 4, sz); +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_LL_Ud => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VPBROADCASTD { +          instruction.opcode = Opcode::VPBROADCASTQ; +        } +      } + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.modrm_mmm.bank = RegisterBank::Q; +        } else { +          instruction.modrm_mmm.bank = RegisterBank::D; +        } +      } else { +        return Err(DecodeError::InvalidOperand); +      } +    } +    generated::EVEXOperandCode::Gm_LL_Ud_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = RegisterBank::D; +      } else { +        return Err(DecodeError::InvalidOperand); +      } +    } +    generated::EVEXOperandCode::Gm_LL_Eq_xmm => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = Opcode::VPBROADCASTQ; +      } else { +        instruction.opcode = Opcode::VBROADCASTI32X2; +      } + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = RegisterBank::X; +      } else { +        instruction.mem_size = 8; +      } +    } +    generated::EVEXOperandCode::Gm_LL_Ed_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = RegisterBank::X; +      } else { +        instruction.mem_size = 4; +      } +    } +    generated::EVEXOperandCode::Gm_LL_Ew_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = RegisterBank::X; +      } else { +        instruction.mem_size = 2; +      } +    } +    generated::EVEXOperandCode::Gm_LL_Eb_xmm_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        instruction.modrm_mmm.bank = RegisterBank::X; +      } else { +        instruction.mem_size = 1; +      } +    } +    generated::EVEXOperandCode::Gm_E_LL_W0 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_E_LL_imm8 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VMOVDQA32 { +          instruction.opcode = Opcode::VMOVDQA64; +        } else if instruction.opcode == Opcode::VMOVDQU32 { +          instruction.opcode = Opcode::VMOVDQU64; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gd_Ed_xmm_sae => { +      deny_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.modrm_rrr.bank = RegisterBank::Q; +      } else { +        instruction.modrm_rrr.bank = RegisterBank::D; +      } + +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; + +      if instruction.prefixes.evex_unchecked().broadcast() { +        if mem_oper == OperandSpec::RegMMM { +          if instruction.opcode == Opcode::VCVTSS2USI || instruction.opcode == Opcode::VCVTSD2SI || instruction.opcode == Opcode::VCVTSD2USI { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } +        } else { +          return Err(DecodeError::InvalidOperand); +        } +      } else { +        if instruction.prefixes.evex_unchecked().lp() && instruction.prefixes.evex_unchecked().vex().l() { +          return Err(DecodeError::InvalidOperand); +        } +      } + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        if instruction.opcode == Opcode::VCVTTSD2SI || instruction.opcode == Opcode::VCVTSD2SI || instruction.opcode == Opcode::VCVTTSD2USI || instruction.opcode == Opcode::VCVTSD2USI { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +      instruction.operands[1] = mem_oper; + +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_E_LL_sae_bcast => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VGETEXPPS { +          instruction.opcode = Opcode::VGETEXPPD; +        } else if instruction.opcode == Opcode::VRSQRT14PS { +          instruction.opcode = Opcode::VRSQRT14PD; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } + +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      if instruction.prefixes.evex_unchecked().broadcast() { +        if mem_oper != OperandSpec::RegMMM { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +          apply_broadcast(instruction, if instruction.prefixes.evex_unchecked().vex().w() { +            8 +          } else { +            4 +          }, sz); +        } else { +          if instruction.opcode == Opcode::VSQRTPS || instruction.opcode == Opcode::VCVTPS2DQ { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } +          set_reg_sizes(instruction, RegisterBank::Z); +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_E_LL => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VMOVDQA32 { +          instruction.opcode = Opcode::VMOVDQA64; +        } else if instruction.opcode == Opcode::VMOVDQU32 { +          instruction.opcode = Opcode::VMOVDQU64; +        } else if instruction.opcode == Opcode::VMOVDQU8 { +          instruction.opcode = Opcode::VMOVDQU16; +        } else if instruction.opcode == Opcode::VPOPCNTB { +          instruction.opcode = Opcode::VPOPCNTW; +        } else if instruction.opcode == Opcode::VPEXPANDB { +          instruction.opcode = Opcode::VPEXPANDW; +        } else if instruction.opcode == Opcode::VEXPANDPS { +          instruction.opcode = Opcode::VEXPANDPD; +        } else if instruction.opcode == Opcode::VPEXPANDD { +          instruction.opcode = Opcode::VPEXPANDQ; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_Ed_LL_imm8_bcast => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VSHUFF32X4 { +          instruction.opcode = Opcode::VSHUFF64X2; +        } +        apply_broadcast(instruction, 8, sz); +      } else { +        apply_broadcast(instruction, 4, sz); +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_bcast_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      apply_broadcast(instruction, 4, sz); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VPBLENDMB { +          instruction.opcode = Opcode::VPBLENDMW; +        } else if instruction.opcode == Opcode::VPERMI2B { +          instruction.opcode = Opcode::VPERMI2W; +        } else if instruction.opcode == Opcode::VPERMT2B { +          instruction.opcode = Opcode::VPERMT2W; +        } else if instruction.opcode == Opcode::VPERMB { +          instruction.opcode = Opcode::VPERMW; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Mask_V_E_LL_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Mask_V_E_LL => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VPTESTNMB { +          instruction.opcode = Opcode::VPTESTNMW; +        } else if instruction.opcode == Opcode::VPTESTMB { +          instruction.opcode = Opcode::VPTESTMW; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 8; +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOperand); +        } +      } +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes(instruction, RegisterBank::X); +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOperand); +        } +      } +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes(instruction, RegisterBank::X); +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Mask_V_E_LL_imm8 => { +      check_mask_reg(instruction)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        return Err(DecodeError::InvalidOperand); +      } + +      let sz = regs_size(instruction); +      instruction.mem_size = sz; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VPCMPUB { +          instruction.opcode = Opcode::VPCMPUW; +        } else if instruction.opcode == Opcode::VPCMPB { +          instruction.opcode = Opcode::VPCMPW; +        } +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Mask_Ed_xmm_imm8 => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; +      deny_z(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = if instruction.opcode == Opcode::VFPCLASSSS { +          Opcode::VFPCLASSSD +        } else { +          instruction.opcode +        }; +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      set_reg_sizes(instruction, RegisterBank::X); +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Mask_E_LL_imm8_bcast => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.prefixes.evex_unchecked().broadcast() { +          apply_broadcast(instruction, 8, sz); +        } else { +          instruction.mem_size = sz; +        } +        instruction.opcode = if instruction.opcode == Opcode::VFPCLASSPS { +          Opcode::VFPCLASSPD +        } else { +          instruction.opcode +        }; +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          apply_broadcast(instruction, 4, sz); +        } else { +          instruction.mem_size = sz; +        } +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.prefixes.evex_unchecked().broadcast() { +          apply_broadcast(instruction, 8, sz); +        } else { +          instruction.mem_size = sz; +        } +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          apply_broadcast(instruction, 4, sz); +        } else { +          instruction.mem_size = sz; +        } +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          set_reg_sizes_from_ll(instruction)?; +        } +        instruction.mem_size = 0; +      } else { +        set_reg_sizes_from_ll(instruction)?; +      } +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Mask_V_E_LL_imm8_bcast => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.prefixes.evex_unchecked().broadcast() { +          apply_broadcast(instruction, 8, sz); +        } else { +          instruction.mem_size = sz; +        } +        // this operand code is used in a few places, apply `w` as appropriate +        instruction.opcode = if instruction.opcode == Opcode::VPCMPUD { +          Opcode::VPCMPUQ +        } else { +          Opcode::VPCMPQ +        }; +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          apply_broadcast(instruction, 4, sz); +        } else { +          instruction.mem_size = sz; +        } +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +      if instruction.modrm_rrr.num >= 8 { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.modrm_rrr.bank = RegisterBank::K; +      } +    } +    generated::EVEXOperandCode::Opcode_72_Gm_E_LL_imm8_bcast => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      let rrr = (modrm >> 3) & 7; + +      let item_size = if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = [ +          Ok(Opcode::VPRORQ), +          Ok(Opcode::VPROLQ), +          Err(DecodeError::InvalidOpcode), +          Err(DecodeError::InvalidOpcode), +          Ok(Opcode::VPSRAQ), +          Err(DecodeError::InvalidOpcode), +          Err(DecodeError::InvalidOpcode), +          Err(DecodeError::InvalidOpcode), +        ][rrr as usize]?; +        8 +      } else { +        instruction.opcode = [ +          Ok(Opcode::VPRORD), +          Ok(Opcode::VPROLD), +          Ok(Opcode::VPSRLD), +          Err(DecodeError::InvalidOpcode), +          Ok(Opcode::VPSRAD), +          Ok(Opcode::VPSLLD), +          Err(DecodeError::InvalidOpcode), +          Err(DecodeError::InvalidOpcode), +        ][rrr as usize]?; +        4 +      }; + +      apply_broadcast(instruction, item_size, sz); + +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegVex_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_imm8_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); +      instruction.mem_size = sz; +/* +      instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() { +        apply_broadcast(instruction, 8, sz); +        if instruction.opcode == Opcode::VALIGND { +          Opcode::VALIGNQ +        } else if instruction.opcode == Opcode::VPTERNLOGD { +          Opcode::VPTERNLOGQ +        } else if instruction.opcode == Opcode::VSHUFI32X4 { +          Opcode::VSHUFI64X2 +        } else { +          instruction.opcode +        } +      } else { +        apply_broadcast(instruction, 4, sz); +        instruction.opcode +      }; +*/ + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_imm8_bcast => { +      check_mask_reg(instruction)?; + +      let sz = regs_size(instruction); + +      instruction.opcode = if instruction.prefixes.evex_unchecked().vex().w() { +        apply_broadcast(instruction, 8, sz); +        if instruction.opcode == Opcode::VALIGND { +          Opcode::VALIGNQ +        } else if instruction.opcode == Opcode::VPTERNLOGD { +          Opcode::VPTERNLOGQ +        } else if instruction.opcode == Opcode::VSHUFI32X4 { +          Opcode::VSHUFI64X2 +        } else if instruction.opcode == Opcode::VPSHLDD { +          Opcode::VPSHLDQ +        } else if instruction.opcode == Opcode::VPSHRDD { +          Opcode::VPSHRDQ +        } else { +          instruction.opcode +        } +      } else { +        apply_broadcast(instruction, 4, sz); +        instruction.opcode +      }; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_imm8_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      if instruction.prefixes.evex_unchecked().broadcast() { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.mem_size = sz; +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W0 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let sz = regs_size(instruction); + +      if instruction.opcode == Opcode::VSHUFPS { +        apply_broadcast(instruction, 4, sz); +      } else { +        apply_broadcast(instruction, 8, sz); +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::G_V_E_LL_imm8 => { +      check_mask_reg(instruction)?; + +      instruction.mem_size = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_imm8 => { +      check_mask_reg(instruction)?; + +      instruction.mem_size = regs_size(instruction); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let sz = regs_size(instruction); + +      apply_broadcast(instruction, 8, sz); + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes_from_ll(instruction)?; +    } +    generated::EVEXOperandCode::Gm_ymm_E_zmm_sae_bcast_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_zmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      instruction.operands[1] = mem_oper; +      if instruction.prefixes.evex_unchecked().broadcast() { +        if mem_oper != OperandSpec::RegMMM { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          apply_broadcast(instruction, 8, 64); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        instruction.mem_size = 64; +      } +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_xmm_E_ymm_sae_bcast_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_ymm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.operands[1] = mem_oper; +      if instruction.prefixes.evex_unchecked().broadcast() { +        if mem_oper != OperandSpec::RegMMM { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          apply_broadcast(instruction, 8, 32); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          instruction.modrm_rrr.bank = RegisterBank::Y; +          instruction.modrm_mmm.bank = RegisterBank::Z; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        instruction.mem_size = 32; +      } +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_xmm_E_xmm_sae_bcast_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.operands[1] = mem_oper; +      if instruction.prefixes.evex_unchecked().broadcast() { +        if mem_oper != OperandSpec::RegMMM { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          apply_broadcast(instruction, 8, 16); +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          instruction.modrm_rrr.bank = RegisterBank::Y; +          instruction.modrm_mmm.bank = RegisterBank::Z; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        instruction.mem_size = 16; +      } +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::VCVTTPS2UQQ => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VCVTTPS2UQQ { +          instruction.opcode = Opcode::VCVTTPD2UQQ; +        } else if instruction.opcode == Opcode::VCVTPS2UQQ { +          instruction.opcode = Opcode::VCVTPD2UQQ; +        } else if instruction.opcode == Opcode::VCVTTPS2QQ { +          instruction.opcode = Opcode::VCVTTPD2QQ; +        } else if instruction.opcode == Opcode::VCVTPS2QQ { +          instruction.opcode = Opcode::VCVTPD2QQ; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +      instruction.mem_size = 0; + +      let mut lp = 0; +      if instruction.prefixes.evex_unchecked().lp() { lp |= 2; } +      if instruction.prefixes.evex_unchecked().vex().l() { lp |= 1; } + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          if instruction.opcode == Opcode::VCVTPD2UQQ || instruction.opcode == Opcode::VCVTPS2UQQ || instruction.opcode == Opcode::VCVTPD2QQ || instruction.opcode == Opcode::VCVTPS2QQ { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } +          instruction.modrm_rrr.bank = RegisterBank::Z; +          if instruction.prefixes.evex_unchecked().vex().w() { +            instruction.modrm_mmm.bank = RegisterBank::Z; +          } else { +            instruction.modrm_mmm.bank = RegisterBank::Y; +          } +        } else { +          let (r_sz, m_sz) = if instruction.prefixes.evex_unchecked().vex().w() { +            [ +              Ok((RegisterBank::X, RegisterBank::X)), +              Ok((RegisterBank::Y, RegisterBank::Y)), +              Ok((RegisterBank::Z, RegisterBank::Z)), +              Err(DecodeError::InvalidOperand), +            ][lp]? +          } else { +            [ +              Ok((RegisterBank::X, RegisterBank::X)), +              Ok((RegisterBank::Y, RegisterBank::X)), +              Ok((RegisterBank::Z, RegisterBank::Y)), +              Err(DecodeError::InvalidOperand), +            ][lp]? +          }; +          instruction.modrm_rrr.bank = r_sz; +          instruction.modrm_mmm.bank = m_sz; +        } +      } else { +        let (r_sz, m_sz) = if instruction.prefixes.evex_unchecked().vex().w() { +          [ +            Ok((RegisterBank::X, 16)), +            Ok((RegisterBank::Y, 32)), +            Ok((RegisterBank::Z, 64)), +            Err(DecodeError::InvalidOperand), +          ][lp]? +        } else { +          [ +            Ok((RegisterBank::X, 8)), +            Ok((RegisterBank::Y, 16)), +            Ok((RegisterBank::Z, 32)), +            Err(DecodeError::InvalidOperand), +          ][lp]? +        }; +        instruction.modrm_rrr.bank = r_sz; +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, m_sz); +        } else { +          apply_broadcast(instruction, 4, m_sz); +        } +      } +    } +    generated::EVEXOperandCode::VCVTPH2PS => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.opcode == Opcode::VCVTPS2PD { +        if instruction.prefixes.evex_unchecked().vex().w() { +          return Err(DecodeError::InvalidOpcode); +        } +      } else if instruction.opcode == Opcode::VCVTTPS2UQQ { +        instruction.opcode = Opcode::VCVTTPD2UQQ; +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +      instruction.mem_size = 0; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          instruction.modrm_rrr.bank = RegisterBank::Z; +          if instruction.opcode == Opcode::VCVTTPD2UQQ { +            instruction.modrm_mmm.bank = RegisterBank::Z; +          } else { +            instruction.modrm_mmm.bank = RegisterBank::Y; +          } +        } else { +          let (r_sz, m_sz) = match ( +            instruction.prefixes.evex_unchecked().vex().l(), +            instruction.prefixes.evex_unchecked().lp() +          ) { +            (true, true) => { return Err(DecodeError::InvalidOperand); } +            (false, true) => (RegisterBank::Z, RegisterBank::Y), +            (true, false) => (RegisterBank::Y, RegisterBank::X), +            (false, false) => (RegisterBank::X, RegisterBank::X), +          }; +          instruction.modrm_rrr.bank = r_sz; +          instruction.modrm_mmm.bank = m_sz; +        } +      } else { +        let (r_sz, m_sz) = match ( +          instruction.prefixes.evex_unchecked().vex().l(), +          instruction.prefixes.evex_unchecked().lp() +        ) { +          (true, true) => { return Err(DecodeError::InvalidOperand); } +          (true, false) => (RegisterBank::Y, 16), +          (false, true) => (RegisterBank::Z, 32), +          (false, false) => (RegisterBank::X, 8), +        }; +        instruction.modrm_rrr.bank = r_sz; +        if instruction.opcode == Opcode::VCVTPS2PD { +          apply_broadcast(instruction, 4, m_sz); +        } else { +          apply_broadcast(instruction, 8, m_sz); +        } +      } +    } +    generated::EVEXOperandCode::VCVTDQ2PS => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VCVTDQ2PS { +          instruction.opcode = Opcode::VCVTQQ2PS; +        } else if instruction.opcode == Opcode::VCVTUDQ2PS { +          instruction.opcode = Opcode::VCVTUQQ2PS; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +      instruction.mem_size = 0; + +      let mut lp = 0; +      if instruction.prefixes.evex_unchecked().lp() { lp |= 2; } +      if instruction.prefixes.evex_unchecked().vex().l() { lp |= 1; } + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          if instruction.prefixes.evex_unchecked().vex().w() { +            instruction.modrm_rrr.bank = RegisterBank::Y; +          } else { +            instruction.modrm_rrr.bank = RegisterBank::Z; +          } +          instruction.modrm_mmm.bank = RegisterBank::Z; +        } else { +          let (r_sz, m_sz) = if instruction.prefixes.evex_unchecked().vex().w() { +            [ +              Ok((RegisterBank::X, RegisterBank::X)), +              Ok((RegisterBank::X, RegisterBank::Y)), +              Ok((RegisterBank::Y, RegisterBank::Z)), +              Err(DecodeError::InvalidOperand), +            ][lp]? +          } else { +            [ +              Ok((RegisterBank::X, RegisterBank::X)), +              Ok((RegisterBank::Y, RegisterBank::Y)), +              Ok((RegisterBank::Z, RegisterBank::Z)), +              Err(DecodeError::InvalidOperand), +            ][lp]? +          }; +          instruction.modrm_rrr.bank = r_sz; +          instruction.modrm_mmm.bank = m_sz; +        } +      } else { +        let (r_sz, m_sz, item_sz) = if instruction.prefixes.evex_unchecked().vex().w() { +          [ +            Ok((RegisterBank::X, 16, 8)), +            Ok((RegisterBank::X, 32, 8)), +            Ok((RegisterBank::Y, 64, 8)), +            Err(DecodeError::InvalidOperand), +          ][lp]? +        } else { +          [ +            Ok((RegisterBank::X, 16, 4)), +            Ok((RegisterBank::Y, 32, 4)), +            Ok((RegisterBank::Z, 64, 4)), +            Err(DecodeError::InvalidOperand), +          ][lp]? +        }; +        instruction.modrm_rrr.bank = r_sz; +        apply_broadcast(instruction, item_sz, m_sz); +      } +    } +    generated::EVEXOperandCode::VCVTTPS2UDQ => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +      instruction.mem_size = 0; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VCVTTPS2UDQ { +          instruction.opcode = Opcode::VCVTTPD2UDQ; +        } else if instruction.opcode == Opcode::VCVTPS2UDQ { +          instruction.opcode = Opcode::VCVTPD2UDQ; +        } +      } + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          if instruction.opcode == Opcode::VCVTTPD2UDQ || instruction.opcode == Opcode::VCVTTPS2UDQ { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } +          if instruction.prefixes.evex_unchecked().vex().w() { +            instruction.modrm_rrr.bank = RegisterBank::Y; +          } else { +            instruction.modrm_rrr.bank = RegisterBank::Z; +          } +          instruction.modrm_mmm.bank = RegisterBank::Z; +        } else { +          let (r_sz, m_sz) = match ( +            instruction.prefixes.evex_unchecked().vex().l(), +            instruction.prefixes.evex_unchecked().lp() +          ) { +            (true, true) => { return Err(DecodeError::InvalidOperand); } +            (false, true) => (if instruction.prefixes.evex_unchecked().vex().w() { RegisterBank::Y } else { RegisterBank::Z }, RegisterBank::Z), +            (true, false) => (if instruction.prefixes.evex_unchecked().vex().w() { RegisterBank::X } else { RegisterBank::Y }, RegisterBank::Y), +            (false, false) => (RegisterBank::X, RegisterBank::X), +          }; +          instruction.modrm_rrr.bank = r_sz; +          instruction.modrm_mmm.bank = m_sz; +        } +      } else { +        let (r_sz, m_sz) = match ( +          instruction.prefixes.evex_unchecked().vex().l(), +          instruction.prefixes.evex_unchecked().lp() +        ) { +          (true, true) => { return Err(DecodeError::InvalidOperand); } +//          (true, false) => (RegisterBank::Y, 32), +          (true, false) => (if instruction.prefixes.evex_unchecked().vex().w() { RegisterBank::X } else { RegisterBank::Y }, 32), +          (false, true) => (if instruction.prefixes.evex_unchecked().vex().w() { RegisterBank::Y } else { RegisterBank::Z }, 64), +          (false, false) => (RegisterBank::X, 16), +        }; +        instruction.modrm_rrr.bank = r_sz; +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, m_sz); +        } else { +          apply_broadcast(instruction, 4, m_sz); +        } +      } + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VCVTDQ2PS { +          instruction.opcode = Opcode::VCVTQQ2PS; +        } +      } +    } +    generated::EVEXOperandCode::VCVTTPD2DQ => { +      check_mask_reg(instruction)?; +      deny_vex_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +      instruction.mem_size = 0; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VCVTTPS2UDQ { +          instruction.opcode = Opcode::VCVTTPD2UDQ; +        } +      } + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          if instruction.opcode == Opcode::VCVTDQ2PS || instruction.opcode == Opcode::VCVTPD2DQ { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } +          if instruction.opcode == Opcode::VCVTDQ2PS && !instruction.prefixes.evex_unchecked().vex().w() { +            instruction.modrm_rrr.bank = RegisterBank::Z; +          } else { +            instruction.modrm_rrr.bank = RegisterBank::Y; +          } +          instruction.modrm_mmm.bank = RegisterBank::Z; +        } else { +          let (r_sz, m_sz) = match ( +            instruction.prefixes.evex_unchecked().vex().l(), +            instruction.prefixes.evex_unchecked().lp() +          ) { +            (true, true) => { return Err(DecodeError::InvalidOperand); } +            (false, true) => (RegisterBank::Y, RegisterBank::Z), +            (true, false) => (RegisterBank::X, RegisterBank::Y), +            (false, false) => (RegisterBank::X, RegisterBank::X), +          }; +          instruction.modrm_rrr.bank = r_sz; +          instruction.modrm_mmm.bank = m_sz; +        } +      } else { +        let (r_sz, m_sz) = match ( +          instruction.prefixes.evex_unchecked().vex().l(), +          instruction.prefixes.evex_unchecked().lp() +        ) { +          (true, true) => { return Err(DecodeError::InvalidOperand); } +          (true, false) => (RegisterBank::X, 32), +          (false, true) => (RegisterBank::Y, 64), +          (false, false) => (RegisterBank::X, 16), +        }; +        instruction.modrm_rrr.bank = r_sz; +        apply_broadcast(instruction, 8, m_sz); +      } + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VCVTDQ2PS { +          instruction.opcode = Opcode::VCVTQQ2PS; +        } +      } +    } +    generated::EVEXOperandCode::Gm_ymm_U_zmm_sae_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_zmm(bytes, instruction, modrm, length)?; +      instruction.modrm_rrr.bank = RegisterBank::Y; +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = mem_oper; +      if mem_oper != OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Gm_V_E_xmm_sae_W1 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; +      set_reg_sizes(instruction, RegisterBank::X); + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          if instruction.opcode == Opcode::VMINSD || instruction.opcode == Opcode::VMAXSD { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          } else { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } +        } +      } else { +        instruction.mem_size = 8; +      } +    } +    generated::EVEXOperandCode::Gm_V_E_xmm_sae => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VEXP2SS { +          instruction.opcode = Opcode::VEXP2SD; +        } else if instruction.opcode == Opcode::VRCP28SS { +          instruction.opcode = Opcode::VRCP28SD; +        } else if instruction.opcode == Opcode::VRSQRT28SS { +          instruction.opcode = Opcode::VRSQRT28SD; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; +      set_reg_sizes(instruction, RegisterBank::X); + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +        } +      } else { +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +    } +    generated::EVEXOperandCode::Gm_E_zmm_sae_bcast => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VEXP2PS { +          instruction.opcode = Opcode::VEXP2PD; +        } else if instruction.opcode == Opcode::VRCP28PS { +          instruction.opcode = Opcode::VRCP28PD; +        } else if instruction.opcode == Opcode::VRSQRT28PS { +          instruction.opcode = Opcode::VRSQRT28PD; +        } +      } + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_zmm(bytes, instruction, modrm, length)?; + +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().broadcast() { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +          set_reg_sizes(instruction, RegisterBank::Z); +        } else { +          let sz = regs_size(instruction); +          if sz < 64 { +            return Err(DecodeError::InvalidOperand); +          } +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +          set_reg_sizes_from_ll(instruction)?; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +        let sz = regs_size(instruction); +        if sz < 64 { +          return Err(DecodeError::InvalidOperand); +        } + +        if instruction.prefixes.evex_unchecked().vex().w() { +          apply_broadcast(instruction, 8, sz); +        } else { +          apply_broadcast(instruction, 4, sz); +        } +        set_reg_sizes_from_ll(instruction)?; +      } +    } +    generated::EVEXOperandCode::Gm_U_zmm_sae_W0 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; + +      set_reg_sizes(instruction, RegisterBank::Z); +    } +    generated::EVEXOperandCode::Gm_U_zmm_imm8_sae_W0 => { +      deny_vex_reg(instruction)?; +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      if mem_oper != OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } +      instruction.operands[1] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      set_reg_sizes(instruction, RegisterBank::Z); +    } +    generated::EVEXOperandCode::Edd_G_xmm_imm8 => { +      deny_vex_reg(instruction)?; +      deny_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.opcode = Opcode::VPEXTRQ; +        if let OperandSpec::RegMMM = mem_oper { +          instruction.modrm_mmm.bank = RegisterBank::Q; +        } else { +          instruction.mem_size = 8; +        } +      } else { +        instruction.opcode = Opcode::VPEXTRD; +        if let OperandSpec::RegMMM = mem_oper { +          instruction.modrm_mmm.bank = RegisterBank::D; +        } else { +          instruction.mem_size = 4; +        } +      } +    } +    generated::EVEXOperandCode::VCVTUSI2SD => { +      deny_mask_reg(instruction)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      instruction.vex_reg.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      if mem_oper == OperandSpec::RegMMM { +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.modrm_mmm.bank = RegisterBank::Q; +        } else { +          instruction.modrm_mmm.bank = RegisterBank::D; +        } +        if instruction.prefixes.evex_unchecked().vex().w() { +          if instruction.prefixes.evex_unchecked().broadcast() { +            instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +          } else { +            if instruction.prefixes.evex_unchecked().lp() || !instruction.prefixes.evex_unchecked().vex().l() { +              return Err(DecodeError::InvalidOpcode); +            } +          } +        } +      } else { +        if instruction.prefixes.evex_unchecked().broadcast() { +          return Err(DecodeError::InvalidOpcode); +        } +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::VEXTRACTPS => { +      deny_vex_reg(instruction)?; +      deny_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      if let OperandSpec::RegMMM = mem_oper { +        instruction.modrm_mmm.bank = RegisterBank::D; +      } else { +        instruction.mem_size = 4; +      } +    } +    generated::EVEXOperandCode::Ewd_G_xmm_imm8 => { +      deny_vex_reg(instruction)?; +      deny_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      if let OperandSpec::RegMMM = mem_oper { +        instruction.modrm_mmm.bank = RegisterBank::D; +      } else { +        instruction.mem_size = 2; +      } +    } +    generated::EVEXOperandCode::Ebd_G_xmm_imm8 => { +      deny_vex_reg(instruction)?; +      deny_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::X; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[2] = OperandSpec::ImmU8; +      instruction.operand_count = 3; + +      if let OperandSpec::RegMMM = mem_oper { +        instruction.modrm_mmm.bank = RegisterBank::D; +      } else { +        instruction.mem_size = 1; +      } +    } +    generated::EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae => { +      check_mask_reg(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; + +      let item_size = if instruction.prefixes.evex_unchecked().vex().w() { +        if instruction.opcode == Opcode::VRANGESS { +          instruction.opcode = Opcode::VRANGESD; +          8 +        } else if instruction.opcode == Opcode::VFPCLASSSS { +          instruction.opcode = Opcode::VFPCLASSSD; +          8 +        } else if instruction.opcode == Opcode::VREDUCESS { +          instruction.opcode = Opcode::VREDUCESD; +          8 +        } else if instruction.opcode == Opcode::VFIXUPIMMSS { +          instruction.opcode = Opcode::VFIXUPIMMSD; +          8 +        } else if instruction.opcode == Opcode::VGETMANTSS { +          instruction.opcode = Opcode::VGETMANTSD; +          8 +        } else { +          4 +        } +      } else { +        4 +      }; + +      if let OperandSpec::RegMMM = mem_oper { +        instruction.mem_size = 0; +      } else{ +        instruction.mem_size = item_size; +      } +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Gm_V_E_xmm_imm8_sae => { +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if let OperandSpec::RegMMM = mem_oper { +        /* no mem size */ +      } else{ +        instruction.mem_size = 8; +      } +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.imm = read_imm_unsigned(bytes, 1, length)?; +      instruction.operands[3] = OperandSpec::ImmU8; +      instruction.operand_count = 4; + +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::Gm_V_zmm_M_xmm_W0 => { +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      instruction.modrm_rrr.bank = RegisterBank::Z; +      instruction.vex_reg.bank = RegisterBank::Z; +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if let OperandSpec::RegMMM = mem_oper { +        return Err(DecodeError::InvalidOperand); +      } else{ +        instruction.mem_size = 16; +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; +    } +    generated::EVEXOperandCode::Gm_V_M_xmm => { +      check_mask_reg(instruction)?; + +      instruction.mem_size = 16; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::VMOVSD_10 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      if mem_oper == OperandSpec::RegMMM { +        instruction.operands[1] = OperandSpec::RegVex; +        instruction.operands[2] = mem_oper; +        instruction.operand_count = 3; + +        instruction.mem_size = 0; +      } else { +        instruction.operands[1] = mem_oper; +        instruction.operand_count = 2; + +        instruction.mem_size = 8; +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::VMOVSD_11 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 1)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = mem_oper.masked(); +      if mem_oper == OperandSpec::RegMMM { +        instruction.operands[1] = OperandSpec::RegVex; +        instruction.operands[2] = OperandSpec::RegRRR; +        instruction.operand_count = 3; + +        instruction.mem_size = 0; +      } else { +        instruction.operands[1] = OperandSpec::RegRRR; +        instruction.operand_count = 2; + +        instruction.mem_size = 8; +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::VMOVSS_10 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR_maskmerge; +      if mem_oper == OperandSpec::RegMMM { +        instruction.operands[1] = OperandSpec::RegVex; +        instruction.operands[2] = mem_oper; +        instruction.operand_count = 3; + +        instruction.mem_size = 0; +      } else { +        instruction.operands[1] = mem_oper; +        instruction.operand_count = 2; + +        instruction.mem_size = 4; +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::VMOVSS_11 => { +      check_mask_reg(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = mem_oper.masked(); +      if mem_oper == OperandSpec::RegMMM { +        instruction.operands[1] = OperandSpec::RegVex; +        instruction.operands[2] = OperandSpec::RegRRR; +        instruction.operand_count = 3; + +        instruction.mem_size = 0; +      } else { +        instruction.operands[1] = OperandSpec::RegRRR; +        instruction.operand_count = 2; + +        instruction.mem_size = 4; +      } +      set_reg_sizes(instruction, RegisterBank::X); +    } +    generated::EVEXOperandCode::VCVTSI2SS => { +      check_mask_reg(instruction)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if instruction.prefixes.evex_unchecked().broadcast() && mem_oper == OperandSpec::RegMMM { +        if !instruction.prefixes.evex_unchecked().vex().w() && instruction.opcode == Opcode::VCVTSI2SD { +          instruction.operands[0] = OperandSpec::RegRRR; +        } else { +          instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +        } +      } else { +        instruction.operands[0] = OperandSpec::RegRRR; +      } +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes(instruction, RegisterBank::X); + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.modrm_mmm.bank = RegisterBank::Q; +        } else { +          instruction.modrm_mmm.bank = RegisterBank::D; +        } +      } else { +        if instruction.prefixes.evex_unchecked().vex().w() { +          instruction.mem_size = 8; +        } else { +          instruction.mem_size = 4; +        } +      } +    } +    generated::EVEXOperandCode::VCVTTSS2SI => { +      check_mask_reg(instruction)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae_noround; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR; +      } +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.modrm_rrr.bank = RegisterBank::Q; +      } else { +        instruction.modrm_rrr.bank = RegisterBank::D; +      } + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } + +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::VCVTSS2SI => { +      check_mask_reg(instruction)?; +      deny_z(instruction)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      if instruction.prefixes.evex_unchecked().broadcast() { +        instruction.operands[0] = OperandSpec::RegRRR_maskmerge_sae; +      } else { +        instruction.operands[0] = OperandSpec::RegRRR; +      } +      if instruction.prefixes.evex_unchecked().vex().w() { +        instruction.modrm_rrr.bank = RegisterBank::Q; +      } else { +        instruction.modrm_rrr.bank = RegisterBank::D; +      } + +      if mem_oper == OperandSpec::RegMMM { +        instruction.mem_size = 0; +      } else { +        instruction.mem_size = 4; +      } + +      instruction.operands[1] = mem_oper; +      instruction.operand_count = 2; +    } +    generated::EVEXOperandCode::Operands_12_W0 => { +      deny_mask_reg(instruction)?; +      deny_z(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes(instruction, RegisterBank::X); + +      if mem_oper == OperandSpec::RegMMM { +        instruction.opcode = Opcode::VMOVHLPS; + +        instruction.mem_size = 0; +      } else { +        instruction.opcode = Opcode::VMOVLPS; + +        instruction.mem_size = 8; +      } +    } +    generated::EVEXOperandCode::Operands_16_W0 => { +      deny_mask_reg(instruction)?; +      deny_z(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = OperandSpec::RegRRR; +      instruction.operands[1] = OperandSpec::RegVex; +      instruction.operands[2] = mem_oper; +      instruction.operand_count = 3; + +      set_reg_sizes(instruction, RegisterBank::X); + +      if mem_oper == OperandSpec::RegMMM { +        instruction.opcode = Opcode::VMOVLHPS; + +        instruction.mem_size = 0; +      } else { +        instruction.opcode = Opcode::VMOVHPS; + +        instruction.mem_size = 8; +      } +    } +    generated::EVEXOperandCode::Mq_G_W0 => { +      deny_mask_reg(instruction)?; +      deny_z(instruction)?; +      ensure_W(instruction, 0)?; + +      let modrm = read_modrm(bytes, length)?; +      set_rrr(instruction, modrm); +      let mem_oper = read_E_xmm(bytes, instruction, modrm, length)?; +      instruction.operands[0] = mem_oper; +      instruction.operands[1] = OperandSpec::RegRRR; +      instruction.operand_count = 2; + +      set_reg_sizes(instruction, RegisterBank::X); + +      if mem_oper == OperandSpec::RegMMM { +        return Err(DecodeError::InvalidOperand); +      } else { +        instruction.mem_size = 8; +      } +    } +    generated::EVEXOperandCode::Nothing => {} +    o => { +      panic!("unhandled operand code {:?}. opcode={}", o, instruction.opcode); +    } +  } +  Ok(()) +} diff --git a/src/shared/generated_evex.in b/src/shared/generated_evex.in new file mode 100644 index 0000000..d98346b --- /dev/null +++ b/src/shared/generated_evex.in @@ -0,0 +1,1499 @@ +#[allow(warnings)] +mod generated { +  use super::Opcode::*; +const EVEX_OPCODES: [super::Opcode; 496] = [ +  V4FMADDPS, +  V4FMADDSS, +  V4FNMADDPS, +  V4FNMADDSS, +  VADDPD, +  VADDSD, +  VADDSS, +  VAESDEC, +  VAESDECLAST, +  VAESENC, +  VAESENCLAST, +  VALIGND, +  VALIGNQ, +  VANDNPD, +  VANDPD, +  VBLENDMPD, +  VBLENDMPS, +  VBROADCASTF32X2, +  VBROADCASTF32X4, +  VBROADCASTF32X8, +  VBROADCASTF64X2, +  VBROADCASTF64X4, +  VBROADCASTI32X2, +  VBROADCASTI32X4, +  VBROADCASTI32X8, +  VBROADCASTI64X2, +  VBROADCASTI64X4, +  VBROADCASTSD, +  VBROADCASTSS, +  VCMPPD, +  VCMPSD, +  VCMPSS, +  VCOMISD, +  VCOMPRESSPD, +  VCOMPRESSPS, +  VCVTDQ2PD, +  VCVTNE2PS2BF16, +  VCVTNEPS2BF16, +  VCVTPD2DQ, +  VCVTPD2PS, +  VCVTPD2QQ, +  VCVTPD2UQQ, +  VCVTPH2PS, +  VCVTPS2DQ, +  VCVTPS2PH, +  VCVTPS2QQ, +  VCVTPS2UQQ, +  VCVTQQ2PD, +  VCVTSD2SI, +  VCVTSD2SS, +  VCVTSD2USI, +  VCVTSI2SD, +  VCVTSI2SS, +  VCVTSS2SD, +  VCVTSS2SI, +  VCVTSS2USI, +  VCVTTPD2DQ, +  VCVTTPD2QQ, +  VCVTTPD2UQQ, +  VCVTTPS2DQ, +  VCVTTPS2QQ, +  VCVTTPS2UQQ, +  VCVTTSD2SI, +  VCVTTSD2USI, +  VCVTTSS2SI, +  VCVTTSS2USI, +  VCVTUDQ2PD, +  VCVTUDQ2PS, +  VCVTUQQ2PD, +  VCVTUQQ2PS, +  VCVTUSI2SD, +  VCVTUSI2SS, +  VDBPSADBW, +  VDIVPD, +  VDIVSD, +  VDIVSS, +  VDPBF16PS, +  VEXP2PD, +  VEXP2PS, +  VEXPANDPD, +  VEXPANDPS, +  VEXTRACTF32X4, +  VEXTRACTF32X8, +  VEXTRACTF64X2, +  VEXTRACTF64X4, +  VEXTRACTI32X4, +  VEXTRACTI32X8, +  VEXTRACTI64X2, +  VEXTRACTI64X4, +  VEXTRACTPS, +  VFIXUPIMMPD, +  VFIXUPIMMPS, +  VFIXUPIMMSD, +  VFIXUPIMMSS, +  VFMADD132PD, +  VFMADD132PS, +  VFMADD132SD, +  VFMADD132SS, +  VFMADD213PD, +  VFMADD213PS, +  VFMADD213SD, +  VFMADD213SS, +  VFMADD231PD, +  VFMADD231PS, +  VFMADD231SD, +  VFMADD231SS, +  VFMADDSUB132PD, +  VFMADDSUB132PS, +  VFMADDSUB213PD, +  VFMADDSUB213PS, +  VFMADDSUB231PD, +  VFMADDSUB231PS, +  VFMSUB132PD, +  VFMSUB132PS, +  VFMSUB132SD, +  VFMSUB132SS, +  VFMSUB213PD, +  VFMSUB213PS, +  VFMSUB213SD, +  VFMSUB213SS, +  VFMSUB231PD, +  VFMSUB231PS, +  VFMSUB231SD, +  VFMSUB231SS, +  VFMSUBADD132PD, +  VFMSUBADD132PS, +  VFMSUBADD213PD, +  VFMSUBADD213PS, +  VFMSUBADD231PD, +  VFMSUBADD231PS, +  VFNMADD132PD, +  VFNMADD132PS, +  VFNMADD132SD, +  VFNMADD132SS, +  VFNMADD213PD, +  VFNMADD213PS, +  VFNMADD213SD, +  VFNMADD213SS, +  VFNMADD231PD, +  VFNMADD231PS, +  VFNMADD231SD, +  VFNMADD231SS, +  VFNMSUB132PD, +  VFNMSUB132PS, +  VFNMSUB132SD, +  VFNMSUB132SS, +  VFNMSUB213PD, +  VFNMSUB213PS, +  VFNMSUB213SD, +  VFNMSUB213SS, +  VFNMSUB231PD, +  VFNMSUB231PS, +  VFNMSUB231SD, +  VFNMSUB231SS, +  VFPCLASSPD, +  VFPCLASSPS, +  VFPCLASSSD, +  VFPCLASSSS, +  VGETEXPPD, +  VGETEXPPS, +  VGETEXPSD, +  VGETEXPSS, +  VGETMANTPD, +  VGETMANTPS, +  VGETMANTSD, +  VGETMANTSS, +  VGF2P8AFFINEINVQB, +  VGF2P8AFFINEQB, +  VGF2P8MULB, +  VINSERTF32X4, +  VINSERTF32X8, +  VINSERTF64X2, +  VINSERTF64X4, +  VINSERTI32X4, +  VINSERTI32X8, +  VINSERTI64X2, +  VINSERTI64X4, +  VINSERTPS, +  VMAXPD, +  VMAXSD, +  VMAXSS, +  VMINPD, +  VMINSD, +  VMINSS, +  VMOVAPD, +  VMOVD, +  VMOVDDUP, +  VMOVDQA32, +  VMOVDQA64, +  VMOVDQU16, +  VMOVDQU32, +  VMOVDQU64, +  VMOVDQU8, +  VMOVHPD, +  VMOVLPD, +  VMOVNTDQ, +  VMOVNTDQA, +  VMOVNTPD, +  VMOVQ, +  VMOVSD, +  VMOVSHDUP, +  VMOVSLDUP, +  VMOVSS, +  VMOVUPD, +  VMULPD, +  VMULSD, +  VMULSS, +  VORPD, +  VP2INTERSECTD, +  VP2INTERSECTQ, +  VP4DPWSSD, +  VP4DPWSSDS, +  VPABSB, +  VPABSD, +  VPABSQ, +  VPABSW, +  VPACKSSDW, +  VPACKSSWB, +  VPACKUSDW, +  VPACKUSWB, +  VPADDB, +  VPADDD, +  VPADDQ, +  VPADDSB, +  VPADDSW, +  VPADDUSB, +  VPADDUSW, +  VPADDW, +  VPALIGNR, +  VPANDD, +  VPANDND, +  VPANDNQ, +  VPANDQ, +  VPAVGB, +  VPAVGW, +  VPBLENDMB, +  VPBLENDMD, +  VPBLENDMQ, +  VPBLENDMW, +  VPBROADCASTB, +  VPBROADCASTD, +  VPBROADCASTMB2Q, +  VPBROADCASTMW2D, +  VPBROADCASTQ, +  VPBROADCASTW, +  VPCLMULQDQ, +  VPCMPB, +  VPCMPD, +  VPCMPEQB, +  VPCMPEQD, +  VPCMPEQQ, +  VPCMPEQW, +  VPCMPGTB, +  VPCMPGTD, +  VPCMPGTQ, +  VPCMPGTW, +  VPCMPQ, +  VPCMPUB, +  VPCMPUD, +  VPCMPUQ, +  VPCMPUW, +  VPCMPW, +  VPCOMPRESSB, +  VPCOMPRESSD, +  VPCOMPRESSQ, +  VPCOMPRESSW, +  VPCONFLICTD, +  VPCONFLICTQ, +  VPDPBUSD, +  VPDPBUSDS, +  VPDPWSSD, +  VPDPWSSDS, +  VPERMB, +  VPERMD, +  VPERMI2B, +  VPERMI2D, +  VPERMI2PD, +  VPERMI2PS, +  VPERMI2Q, +  VPERMI2W, +  VPERMILPD, +  VPERMILPS, +  VPERMPD, +  VPERMPS, +  VPERMQ, +  VPERMT2B, +  VPERMT2D, +  VPERMT2PD, +  VPERMT2PS, +  VPERMT2Q, +  VPERMT2W, +  VPERMW, +  VPEXPANDB, +  VPEXPANDD, +  VPEXPANDQ, +  VPEXPANDW, +  VPEXTRB, +  VPEXTRD, +  VPEXTRQ, +  VPEXTRW, +  VPINSRB, +  VPINSRD, +  VPINSRQ, +  VPINSRW, +  VPLZCNTD, +  VPLZCNTQ, +  VPMADD52HUQ, +  VPMADD52LUQ, +  VPMADDUBSW, +  VPMADDWD, +  VPMAXSB, +  VPMAXSD, +  VPMAXSQ, +  VPMAXSW, +  VPMAXUB, +  VPMAXUD, +  VPMAXUQ, +  VPMAXUW, +  VPMINSB, +  VPMINSD, +  VPMINSQ, +  VPMINSW, +  VPMINUB, +  VPMINUD, +  VPMINUQ, +  VPMINUW, +  VPMOVB2M, +  VPMOVD2M, +  VPMOVDB, +  VPMOVDW, +  VPMOVM2B, +  VPMOVM2D, +  VPMOVM2Q, +  VPMOVM2W, +  VPMOVQ2M, +  VPMOVQB, +  VPMOVQD, +  VPMOVQW, +  VPMOVSDB, +  VPMOVSDW, +  VPMOVSQB, +  VPMOVSQD, +  VPMOVSQW, +  VPMOVSWB, +  VPMOVSXBD, +  VPMOVSXBQ, +  VPMOVSXBW, +  VPMOVSXDQ, +  VPMOVSXWD, +  VPMOVSXWQ, +  VPMOVUSDB, +  VPMOVUSDW, +  VPMOVUSQB, +  VPMOVUSQD, +  VPMOVUSQW, +  VPMOVUSWB, +  VPMOVW2M, +  VPMOVWB, +  VPMOVZXBD, +  VPMOVZXBQ, +  VPMOVZXBW, +  VPMOVZXDQ, +  VPMOVZXWD, +  VPMOVZXWQ, +  VPMULDQ, +  VPMULHRSW, +  VPMULHUW, +  VPMULHW, +  VPMULLD, +  VPMULLQ, +  VPMULLW, +  VPMULTISHIFTQB, +  VPMULUDQ, +  VPOPCNTB, +  VPOPCNTD, +  VPOPCNTQ, +  VPOPCNTW, +  VPORD, +  VPORQ, +  VPROLD, +  VPROLQ, +  VPROLVD, +  VPROLVQ, +  VPRORVD, +  VPRORVQ, +  VPSADBW, +  VPSHLDD, +  VPSHLDQ, +  VPSHLDVD, +  VPSHLDVQ, +  VPSHLDVW, +  VPSHLDW, +  VPSHRDD, +  VPSHRDQ, +  VPSHRDVD, +  VPSHRDVQ, +  VPSHRDVW, +  VPSHRDW, +  VPSHUFB, +  VPSHUFBITQMB, +  VPSHUFD, +  VPSHUFHW, +  VPSHUFLW, +  VPSLLD, +  VPSLLQ, +  VPSLLVD, +  VPSLLVQ, +  VPSLLVW, +  VPSLLW, +  VPSRAD, +  VPSRAQ, +  VPSRAVD, +  VPSRAVQ, +  VPSRAVW, +  VPSRAW, +  VPSRLD, +  VPSRLQ, +  VPSRLVD, +  VPSRLVQ, +  VPSRLVW, +  VPSRLW, +  VPSUBB, +  VPSUBD, +  VPSUBQ, +  VPSUBSB, +  VPSUBSW, +  VPSUBUSB, +  VPSUBUSW, +  VPSUBW, +  VPTERNLOGD, +  VPTERNLOGQ, +  VPTESTMB, +  VPTESTMD, +  VPTESTMQ, +  VPTESTMW, +  VPTESTNMB, +  VPTESTNMD, +  VPTESTNMQ, +  VPTESTNMW, +  VPUNPCKHBW, +  VPUNPCKHDQ, +  VPUNPCKHQDQ, +  VPUNPCKHWD, +  VPUNPCKLBW, +  VPUNPCKLDQ, +  VPUNPCKLQDQ, +  VPUNPCKLWD, +  VPXORD, +  VPXORQ, +  VRANGEPD, +  VRANGEPS, +  VRANGESD, +  VRANGESS, +  VRCP14PD, +  VRCP14PS, +  VRCP14SD, +  VRCP14SS, +  VRCP28PD, +  VRCP28PS, +  VRCP28SD, +  VRCP28SS, +  VREDUCEPD, +  VREDUCEPS, +  VREDUCESD, +  VREDUCESS, +  VRNDSCALEPD, +  VRNDSCALEPS, +  VRNDSCALESD, +  VRNDSCALESS, +  VRSQRT14PD, +  VRSQRT14PS, +  VRSQRT14SD, +  VRSQRT14SS, +  VRSQRT28PD, +  VRSQRT28PS, +  VRSQRT28SD, +  VRSQRT28SS, +  VSCALEFPD, +  VSCALEFPS, +  VSCALEFSD, +  VSCALEFSS, +  VSHUFF32X4, +  VSHUFF64X2, +  VSHUFI32X4, +  VSHUFI64X2, +  VSHUFPD, +  VSQRTPD, +  VSQRTSD, +  VSQRTSS, +  VSUBPD, +  VSUBSD, +  VSUBSS, +  VUCOMISD, +  VUNPCKHPD, +  VUNPCKLPD, +  VXORPD, +]; + +#[derive(Debug, PartialEq, Eq, Copy, Clone)] +pub(crate) enum EVEXOperandCode { +  VCVTTPS2UQQ, +  VCVTUSI2SD, +  VCVTTPS2UDQ, +  Gm_E_LL_sae_bcast_W0, +  G_Ed_xmm_sae_W0, +  Maskm_V_Eq_xmm_imm8_sae_W1, +  VCVTPS2PD_W0, +  VCVTPH2PS, +  VCVTDQ2PS, +  Mask_E_LL_imm8_bcast, +  Gm_E_LL_imm8_sae, +  Gm_V_LL_E_xmm, +  Gm_V_LL_E_xmm_W0, +  Gm_V_LL_E_xmm_W1, +  VPINSRW, +  VPEXTRW, +  Maskm_V_E_LL_imm8_sae_bcast_W1, +  VCVTSI2SS, +  VCVTTSS2SI, +  VCVTSS2SI, +  VMOVSS_10, +  VMOVSS_11, +  VMOVQ_Ed_G_xmm, +  VMOVQ_G_Ed_xmm, +  VMOVD_6e, +  VMOVD_7e, +  VMOVQ_7e, +  Gm_ymm_E_zmm_sae_bcast_W1, +  Gm_xmm_E_xmm_sae_bcast_W1, +  Gm_xmm_E_ymm_sae_bcast_W1, +  Gm_E_zmm_sae_bcast, +  Gm_E_zmm_sae_bcast_W0, +  G_V_xmm_Ebd_imm8, +  G_V_xmm_Edq_imm8, +  G_V_xmm_Edq_sae, +  E_G_xmm, +  E_G_xmm_W0, +  E_G_ymm, +  E_G_ymm_W0, +  E_G_zmm, +  E_G_zmm_W0, +  E_xmm_G_ymm, +  E_xmm_G_ymm_W0, +  E_xmm_G_zmm, +  E_xmm_G_zmm_W0, +  E_ymm_G_xmm, +  E_ymm_G_xmm_W0, +  E_ymm_G_zmm, +  E_ymm_G_zmm_W0, +  Ebd_G_xmm_imm8, +  Ed_xmm_G_xmm, +  Ed_xmm_G_xmm_W0, +  Ed_xmm_G_ymm, +  Ed_xmm_G_ymm_W0, +  Edd_G_xmm_imm8, +  Edm_xmm_G_xmm, +  Edm_xmm_G_xmm_W0, +  Edm_xmm_G_ymm, +  Edm_xmm_G_ymm_W0, +  Em_G_LL, +  M_G_LL_W0, +  E_G_LL_W0, +  Em_G_LL_W0, +  Em_G_LL_W1, +  Em_G_xmm, +  Em_G_xmm_W0, +  Em_G_xmm_W1, +  Em_G_ymm, +  Em_G_ymm_W0, +  Em_G_ymm_W1, +  Em_G_zmm, +  Em_G_zmm_W0, +  Em_G_zmm_W1, +  Em_xmm_G_LL_imm8, +  Em_xmm_G_ymm, +  Em_xmm_G_ymm_W0, +  Em_xmm_G_ymm_imm8_sae_W0, +  Em_xmm_G_zmm, +  Em_xmm_G_zmm_W0, +  Em_ymm_G_zmm, +  Em_ymm_G_zmm_W0, +  Em_ymm_G_zmm_imm8, +  Em_ymm_G_zmm_imm8_sae, +  Em_ymm_G_zmm_imm8_sae_W0, +  Eq_G_xmm_imm8, +  Eq_xmm_G_xmm, +  Eq_xmm_G_xmm_W0, +  Eq_xmm_G_ymm, +  Eq_xmm_G_ymm_W0, +  Eq_xmm_G_zmm, +  Eq_xmm_G_zmm_W0, +  Eqm_G_xmm_imm8_sae_W0, +  Eqm_xmm_G_xmm, +  Eqm_xmm_G_xmm_W0, +  Eqm_xmm_G_ymm, +  Eqm_xmm_G_ymm_W0, +  Eqm_xmm_G_zmm, +  Eqm_xmm_G_zmm_W0, +  Ew_xmm_G_xmm, +  Ew_xmm_G_xmm_W0, +  Ewd_G_xmm_imm8, +  Ewm_xmm_G_xmm, +  Ewm_xmm_G_xmm_W0, +  G_E_LL_W0, +  G_E_xmm, +  G_E_xmm_W0, +  G_E_ymm, +  G_E_ymm_W0, +  G_E_zmm, +  G_E_zmm_W0, +  G_Ed_xmm_sae, +  G_LL_Mask, +  G_LL_Mask_W0, +  G_LL_Mask_W1, +  G_V_E_LL, +  G_V_E_LL_W0, +  G_V_E_LL_bcast, +  G_V_E_LL_bcast_W1, +  G_V_E_LL_imm8, +  G_V_E_LL_imm8_W0, +  G_V_E_xmm, +  G_V_E_xmm_imm8, +  G_V_E_ymm, +  G_V_E_ymm_imm8, +  G_V_E_zmm, +  G_V_E_zmm_imm8, +  G_V_Ed_xmm_imm8, +  G_V_Ed_xmm_imm8_W0, +  G_V_Mq_xmm_W1, +  G_V_U_xmm, +  G_xmm_Mask, +  G_xmm_Mask_W0, +  G_xmm_Mask_W1, +  G_ymm_Ed_xmm, +  Gm_ymm_Ed_xmm_W0, +  G_ymm_M_xmm, +  G_ymm_Mask, +  G_ymm_Mask_W0, +  G_ymm_Mask_W1, +  G_zmm_Ed_LL_bcast, +  Gm_zmm_Ed_xmm, +  G_zmm_Ed_xmm_W0, +  Gm_xmm_Ed_xmm_W0, +  Gm_zmm_Ed_xmm_W0, +  G_zmm_Ed_xmm_bcast, +  Gm_zmm_M_ymm, +  G_zmm_Mask, +  G_zmm_Mask_W0, +  G_zmm_Mask_W1, +  Gb_Eb_zmm, +  Gb_Eb_zmm_W0, +  Gb_Ew_LL_W0, +  Gb_Ew_xmm, +  Gb_Ew_xmm_W0, +  Gb_Ew_ymm, +  Gb_Ew_ymm_W0, +  Gb_Ew_zmm, +  Gb_Ew_zmm_W0, +  Gd_Ed_xmm, +  Gd_Ed_xmm_sae, +  Gm_E_LL, +  Gm_E_LL_W0, +  Gm_E_LL_W1, +  Gm_E_LL_sae, +  Gm_E_LL_bcast, +  Gm_E_LL_bcast_W0, +  Gm_E_LL_bcast_W1, +  Gm_E_LL_imm8, +  Gm_E_LL_imm8_bcast, +  Opcode_72_Gm_E_LL_imm8_bcast, +  Gm_E_LL_imm8_bcast_W0, +  Gm_E_LL_imm8_bcast_W1, +  Gm_E_LL_imm8_sae_W0, +  Gm_E_LL_imm8_sae_W1, +  Gm_E_LL_sae_bcast_W1, +  VCVTUDQ2PD, +  Gm_E_xmm, +  Gm_E_xmm_W0, +  Gm_E_xmm_W1, +  Gm_E_xmm_bcast, +  Gm_E_xmm_bcast_W0, +  Gm_E_xmm_bcast_W1, +  Gm_E_xmm_imm8, +  Gm_E_xmm_imm8_bcast, +  Gm_E_xmm_imm8_bcast_W0, +  Gm_E_xmm_imm8_bcast_W1, +  Gm_E_ymm, +  Gm_E_ymm_W0, +  Gm_E_ymm_W1, +  Gm_E_ymm_bcast, +  Gm_E_ymm_bcast_W0, +  Gm_E_ymm_bcast_W1, +  Gm_E_ymm_imm8, +  Gm_E_ymm_imm8_bcast, +  Gm_E_ymm_imm8_bcast_W0, +  Gm_E_ymm_imm8_bcast_W1, +  Gm_E_zmm, +  Gm_E_zmm_W0, +  Gm_E_zmm_W1, +  Gm_E_zmm_bcast, +  Gm_E_zmm_bcast_W0, +  Gm_E_zmm_bcast_W1, +  Gm_E_zmm_imm8, +  Gm_E_zmm_imm8_bcast, +  Gm_E_zmm_imm8_bcast_W0, +  Gm_E_zmm_imm8_bcast_W1, +  Gm_E_zmm_imm8_sae, +  Gm_E_zmm_imm8_sae_W0, +  Gm_E_zmm_imm8_sae_W1, +  Gm_E_zmm_sae, +  Gm_E_zmm_sae_W0, +  Gm_E_zmm_sae_W1, +  Gm_Eb_LL_W0, +  Gm_LL_Eb_xmm_W0, +  Gm_LL_Ew_xmm_W0, +  Gm_LL_Ed_xmm_W0, +  Gm_LL_Eq_xmm, +  Gm_Eb_xmm, +  Gm_Eb_xmm_W0, +  Gm_Eq_xmm, +  Gm_Eq_xmm_W1, +  Gm_Eq_xmm_bcast, +  Gm_Eq_xmm_sae_W1, +  Gm_LL_Ud, +  Gm_LL_Ud_W0, +  Gm_U_zmm_imm8_sae, +  Gm_U_zmm_imm8_sae_W0, +  Gm_U_zmm_imm8_sae_W1, +  Gm_U_zmm_sae, +  Gm_U_zmm_sae_W0, +  Gm_U_zmm_sae_W1, +  Gm_V_E_LL, +  Gm_V_E_LL_W0, +  Gm_V_E_LL_W1, +  Gm_V_E_LL_bcast, +  Gm_V_E_LL_bcast_W0, +  Gm_V_E_LL_bcast_W1, +  Gm_V_E_LL_imm8, +  Gm_V_E_LL_imm8_W0, +  Gm_V_E_LL_imm8_W1, +  Gm_V_E_LL_imm8_bcast, +  Gm_V_Ed_LL_imm8_bcast_W0, +  Gm_V_E_LL_imm8_bcast_W0, +  Gm_V_E_LL_imm8_bcast_W1, +  Gm_V_E_LL_imm8_sae_bcast, +  Gm_E_LL_sae_bcast, +  Gm_V_E_LL_sae_W1, +  Gm_V_Ed_xmm_sae_bcast, +  Gm_V_E_LL_sae_bcast, +  Gm_V_E_LL_sae_bcast_W0, +  Gm_V_E_LL_sae_bcast_W1, +  Gm_V_E_xmm, +  Gm_V_E_xmm_W0, +  Gm_V_E_xmm_W1, +  Gm_V_E_xmm_bcast, +  Gm_V_E_xmm_bcast_W0, +  Gm_V_E_xmm_bcast_W1, +  Gm_V_E_xmm_imm8, +  Gm_V_E_xmm_imm8_W0, +  Gm_V_E_xmm_imm8_W1, +  Gm_V_E_xmm_imm8_bcast, +  Gm_V_E_xmm_imm8_bcast_W0, +  Gm_V_E_xmm_imm8_bcast_W1, +  Gm_V_E_xmm_imm8_sae, +  Gm_V_E_xmm_sae, +  Gm_V_E_xmm_sae_W1, +  Gm_V_E_ymm, +  Gm_V_E_ymm_W0, +  Gm_V_E_ymm_W1, +  Gm_V_E_ymm_bcast, +  Gm_V_E_ymm_bcast_W0, +  Gm_V_E_ymm_bcast_W1, +  Gm_V_E_ymm_imm8, +  Gm_V_E_ymm_imm8_W0, +  Gm_V_E_ymm_imm8_W1, +  Gm_V_E_ymm_imm8_bcast, +  Gm_V_E_ymm_imm8_bcast_W0, +  Gm_V_E_ymm_imm8_bcast_W1, +  Gm_V_E_zmm, +  Gm_V_E_zmm_W0, +  Gm_V_E_zmm_W1, +  Gm_V_E_zmm_bcast, +  Gm_V_E_zmm_bcast_W0, +  Gm_V_E_zmm_bcast_W1, +  Gm_V_E_zmm_imm8, +  Gm_V_E_zmm_imm8_W0, +  Gm_V_E_zmm_imm8_W1, +  Gm_V_E_zmm_imm8_bcast, +  Gm_V_E_zmm_imm8_bcast_W0, +  Gm_V_E_zmm_imm8_bcast_W1, +  Gm_V_E_zmm_imm8_sae, +  Gm_V_E_zmm_sae, +  Gm_V_E_zmm_sae_W1, +  Gm_V_Ed_LL_sae, +  Gm_V_Ed_LL_bcast, +  Gm_V_Ed_LL_bcast_W0, +  Gm_V_Ed_LL_imm8_bcast, +  Gm_V_Ed_xmm, +  Gm_V_Ed_xmm_W0, +  Gm_V_Ed_xmm_bcast, +  Gm_V_Ed_xmm_bcast_W0, +  Gm_V_Ed_xmm_imm8_bcast, +  Gm_V_Ed_xmm_imm8_bcast_W0, +  Gm_V_Ed_xmm_imm8_sae, +  Gm_V_Ed_xmm_sae, +  Gm_V_Ed_xmm_sae_W0, +  Gm_Ed_LL_imm8_sae_noround_bcast, +  Gm_Ed_LL_sae_noround_bcast_W0, +  Gm_V_Ed_xmm_sae_noround_W0, +  Gm_V_Ed_ymm_bcast, +  Gm_V_Ed_ymm_bcast_W0, +  Gm_V_Ed_ymm_imm8_bcast, +  Gm_V_Ed_ymm_imm8_bcast_W0, +  Gm_V_Ed_zmm_bcast, +  Gm_V_Ed_zmm_bcast_W0, +  Gm_V_Ed_zmm_imm8_bcast, +  Gm_V_Ed_zmm_imm8_bcast_W0, +  Gm_V_Ed_zmm_imm8_sae, +  Gm_V_Ed_zmm_sae, +  Gm_V_Ed_zmm_sae_W0, +  Gm_V_Eq_LL_imm8_bcast_W1, +  Gm_V_Eq_xmm, +  Gm_V_Eq_xmm_W1, +  Gm_V_Eq_xmm_imm8_bcast, +  Gm_V_Eq_xmm_imm8_bcast_W1, +  Gm_V_Eq_xmm_sae, +  Gm_V_Eq_xmm_sae_W1, +  Gm_V_Eq_ymm_imm8_bcast, +  Gm_V_Eq_ymm_imm8_bcast_W1, +  Gm_V_Eq_zmm_imm8_bcast, +  Gm_V_Eq_zmm_imm8_bcast_W1, +  Gm_V_LL_E_xmm_imm8, +  Gm_V_M_xmm, +  Gm_V_U_zmm_sae, +  Gm_V_U_zmm_sae_W0, +  Gm_V_U_zmm_sae_W1, +  Gm_V_ymm_E_xmm, +  Gm_V_ymm_E_xmm_W0, +  Gm_V_ymm_E_xmm_W1, +  Gm_V_ymm_E_xmm_imm8, +  Gm_V_zmm_E_xmm, +  Gm_V_zmm_E_xmm_W0, +  Gm_V_zmm_E_xmm_W1, +  Gm_V_zmm_E_xmm_imm8, +  Gm_V_zmm_E_ymm_imm8, +  Gm_V_zmm_M_xmm, +  Gm_V_zmm_M_xmm_W0, +  Gm_xmm_Ed_xmm, +  Gm_xmm_Eq_xmm, +  Gm_xmm_Eq_xmm_W0, +  Gm_xmm_Ew_xmm, +  Gm_xmm_Ud, +  Gm_xmm_Ud_W0, +  Gm_ymm_E_xmm, +  Gm_ymm_E_xmm_W0, +  Gm_ymm_E_xmm_bcast, +  Gm_ymm_E_zmm_sae, +  Gm_ymm_E_zmm_sae_W1, +  Gm_ymm_Ed_xmm, +  VBROADCASTF32X2_Gm_ymm_Ed_xmm, +  Gm_ymm_Eq_xmm, +  Gm_ymm_Eq_xmm_W0, +  Gm_ymm_M_xmm, +  Gm_ymm_U_zmm_imm8_sae, +  Gm_ymm_U_zmm_imm8_sae_W0, +  Gm_ymm_U_zmm_sae, +  Gm_ymm_U_zmm_sae_W1, +  Gm_ymm_Ud, +  Gm_ymm_Ud_W0, +  Gm_zmm_E_xmm, +  Gm_zmm_E_ymm, +  Gm_zmm_E_ymm_W0, +  Gm_zmm_E_ymm_bcast, +  Gm_zmm_E_ymm_sae, +  Gm_zmm_E_ymm_sae_W0, +  Gm_zmm_Eq_xmm, +  Gm_zmm_Eq_xmm_W0, +  Gm_zmm_M_xmm, +  Gm_zmm_U_ymm_sae, +  Gm_zmm_Ud, +  Gm_zmm_Ud_W0, +  Gmd_Ed_xmm, +  Gmd_Ed_xmm_sae, +  Mq_G_W0, +  MEMf32_XMMf32_AVX512_W0, +  MEMf32_YMMf32_AVX512_W0, +  MEMf32_ZMMf32_AVX512_W0, +  M_G_LL_W1, +  M_G_ymm, +  M_G_ymm_W1, +  M_G_zmm, +  M_G_zmm_W1, +  Mask_E_xmm_imm8, +  Mask_Ed_xmm_imm8, +  Mask_U_LL, +  Mask_U_xmm, +  Mask_U_ymm, +  Mask_U_zmm, +  Mask_V_E_LL, +  Mask_V_E_LL_W0, +  Mask_V_E_LL_bcast, +  Mask_V_E_LL_bcast_W0, +  Mask_V_E_LL_imm8_sae_bcast_W0, +  Mask_V_E_LL_bcast_W1, +  Mask_V_E_LL_imm8, +  Mask_V_E_LL_imm8_bcast, +  Mask_V_E_xmm, +  Mask_V_E_xmm_W0, +  Mask_V_E_xmm_bcast_W0, +  Mask_V_E_xmm_bcast_W1, +  Mask_V_E_xmm_imm8, +  Mask_V_E_xmm_imm8_bcast, +  Mask_V_E_ymm, +  Mask_V_E_ymm_W0, +  Mask_V_E_ymm_bcast_W0, +  Mask_V_E_ymm_bcast_W1, +  Mask_V_E_ymm_imm8, +  Mask_V_E_ymm_imm8_bcast, +  Mask_V_E_zmm, +  Mask_V_E_zmm_W0, +  Mask_V_E_zmm_bcast_W0, +  Mask_V_E_zmm_bcast_W1, +  Mask_V_E_zmm_imm8, +  Mask_V_E_zmm_imm8_bcast, +  Mask_V_E_zmm_imm8_sae, +  Mask_V_E_zmm_imm8_sae_W1, +  Maskm_V_Ed_xmm_imm8_sae_W0, +  Maskm_V_Eq_xmm_imm8_sae, +  Mq_G_xmm_W1, +  Nothing, +  Operands_08, +  Operands_08_W0, +  Operands_09, +  Operands_09_W1, +  Operands_10, +  Operands_11, +  Operands_12, +  Operands_12_W0, +  Operands_13, +  Operands_13_W0, +  Operands_14, +  Operands_15, +  Operands_16, +  Operands_16_W0, +  Operands_17, +  Operands_1d, +  Operands_1d_W0, +  Operands_20, +  Operands_22, +  Operands_26, +  Operands_2a, +  Operands_2c, +  Operands_42, +  Operands_50, +  Operands_51, +  Operands_51_W0, +  Operands_51_W1, +  Operands_54, +  Operands_56, +  Operands_58, +  Operands_58_W0, +  Operands_58_W1, +  Operands_59, +  Operands_59_W0, +  Operands_59_W1, +  Operands_5a, +  Operands_5a_W0, +  Operands_5a_W1, +  Operands_5b, +  Operands_5b_W0, +  Operands_5c, +  Operands_5c_W0, +  Operands_5c_W1, +  Operands_5d, +  Operands_5d_W0, +  Operands_5d_W1, +  Operands_5e, +  Operands_5e_W0, +  Operands_5e_W1, +  Operands_5f, +  Operands_5f_W0, +  Operands_5f_W1, +  Operands_66, +  Operands_6e, +  Operands_72, +  Operands_72_W0, +  Operands_78, +  Operands_79, +  Operands_7a, +  Operands_7b, +  Operands_7e, +  Operands_96, +  Operands_97, +  Operands_98, +  Operands_9a, +  Operands_9c, +  Operands_9e, +  Operands_a6, +  Operands_a7, +  Operands_a8, +  Operands_aa, +  Operands_ac, +  Operands_ae, +  Operands_b6, +  Operands_b7, +  Operands_b8, +  Operands_ba, +  Operands_bc, +  Operands_be, +  Operands_c2, +  Operands_c2_W0, +  Operands_c2_W1, +  Operands_c4, +  Operands_e6, +  VCVTTPD2DQ, +  Ud_Eq_xmm, +  Ud_Eq_xmm_sae, +  VEXTRACTPS, +  VMOVSD_10, +  VMOVSD_11, +  XMMu64_XMMu64_AVX512_W1, +} + +pub(crate) const TABLES: [&'static [(u8, [(super::Opcode, EVEXOperandCode); 4])]; 12] = [ +  &EVEX_None_0f, +  &EVEX_66_0f, +  &EVEX_f2_0f, +  &EVEX_f3_0f, +  &DUMMY, +  &EVEX_66_0f38, +  &EVEX_f2_0f38, +  &EVEX_f3_0f38, +  &DUMMY, +  &EVEX_66_0f3a, +  &DUMMY, +  &DUMMY, +]; +pub(crate) const DUMMY: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 0] = [ +]; + +const EVEX_None_0f: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 30] = [ +  (0x10, [(super::Opcode::VMOVUPS, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVUPS, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVUPS, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x11, [(super::Opcode::VMOVUPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::VMOVUPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::VMOVUPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x12, [(super::Opcode::Invalid, EVEXOperandCode::Operands_12_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x13, [(super::Opcode::VMOVLPS, EVEXOperandCode::Mq_G_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x14, [(super::Opcode::VUNPCKLPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VUNPCKLPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VUNPCKLPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x15, [(super::Opcode::VUNPCKHPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VUNPCKHPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VUNPCKHPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x16, [(super::Opcode::Invalid, EVEXOperandCode::Operands_16_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x17, [(super::Opcode::VMOVHPS, EVEXOperandCode::Mq_G_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x28, [(super::Opcode::VMOVAPS, EVEXOperandCode::Gm_E_LL_sae_bcast_W0), (super::Opcode::VMOVAPS, EVEXOperandCode::Gm_E_LL_sae_bcast_W0), (super::Opcode::VMOVAPS, EVEXOperandCode::Gm_E_LL_sae_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x29, [(super::Opcode::VMOVAPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::VMOVAPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::VMOVAPS, EVEXOperandCode::Em_G_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2b, [(super::Opcode::VMOVNTPS, EVEXOperandCode::M_G_LL_W0), (super::Opcode::VMOVNTPS, EVEXOperandCode::M_G_LL_W0), (super::Opcode::VMOVNTPS, EVEXOperandCode::M_G_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2e, [(super::Opcode::VUCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VUCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VUCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VUCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0)]), +  (0x2f, [(super::Opcode::VCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0), (super::Opcode::VCOMISS, EVEXOperandCode::G_Ed_xmm_sae_W0)]), +  (0x51, [(super::Opcode::VSQRTPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VSQRTPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VSQRTPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VSQRTPS, EVEXOperandCode::Gm_E_LL_sae_bcast)]), +  (0x54, [(super::Opcode::VANDPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VANDPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VANDPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x55, [(super::Opcode::VANDNPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VANDNPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VANDNPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x56, [(super::Opcode::VORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x57, [(super::Opcode::VXORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VXORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VXORPS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x58, [(super::Opcode::VADDPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VADDPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VADDPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VADDPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]), +  (0x59, [(super::Opcode::VMULPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMULPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMULPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMULPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]), +  (0x5a, [(super::Opcode::VCVTPS2PD, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPS2PD, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPS2PD, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPS2PD, EVEXOperandCode::VCVTPH2PS)]), +  (0x5b, [(super::Opcode::VCVTDQ2PS, EVEXOperandCode::VCVTDQ2PS) +, (super::Opcode::VCVTDQ2PS, EVEXOperandCode::VCVTDQ2PS) +, (super::Opcode::VCVTDQ2PS, EVEXOperandCode::VCVTDQ2PS), (super::Opcode::VCVTDQ2PS, EVEXOperandCode::VCVTDQ2PS)]), +  (0x5c, [(super::Opcode::VSUBPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VSUBPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VSUBPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VSUBPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]), +  (0x5d, [(super::Opcode::VMINPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMINPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMINPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMINPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]), +  (0x5e, [(super::Opcode::VDIVPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VDIVPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VDIVPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VDIVPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]), +  (0x5f, [(super::Opcode::VMAXPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMAXPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMAXPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0), (super::Opcode::VMAXPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W0)]), +  (0x78, [(super::Opcode::VCVTTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ), (super::Opcode::VCVTTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ), (super::Opcode::VCVTTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ), (super::Opcode::VCVTTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ)]), +  (0x79, [(super::Opcode::VCVTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ) // operands=['VCVTPS2UDQ_ZMMu32_MASKmskw_ZMMf32_AVX512_sae', 'VCVTPS2UDQ_XMMu32_MASKmskw_MEMf32_AVX512_sae', 'VCVTPS2UDQ_XMMu32_MASKmskw_XMMf32_AVX512_sae'] +, (super::Opcode::VCVTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ) // operands=['VCVTPS2UDQ_ZMMu32_MASKmskw_ZMMf32_AVX512_sae', 'VCVTPS2UDQ_YMMu32_MASKmskw_MEMf32_AVX512_sae', 'VCVTPS2UDQ_YMMu32_MASKmskw_YMMf32_AVX512_sae'] +, (super::Opcode::VCVTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ), (super::Opcode::VCVTPS2UDQ, EVEXOperandCode::VCVTTPS2UDQ)]), +  (0xc2, [(super::Opcode::VCMPPS, EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0), (super::Opcode::VCMPPS, EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0), (super::Opcode::VCMPPS, EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0), (super::Opcode::VCMPPS, EVEXOperandCode::Mask_V_E_LL_imm8_sae_bcast_W0)]), +  (0xc6, [(super::Opcode::VSHUFPS, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W0), (super::Opcode::VSHUFPS, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W0), (super::Opcode::VSHUFPS, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +]; + +const EVEX_66_0f: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 100] = [ +  (0x10, [(super::Opcode::VMOVUPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVUPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVUPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x11, [(super::Opcode::VMOVUPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::VMOVUPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::VMOVUPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x12, [(super::Opcode::VMOVLPD, EVEXOperandCode::G_V_Mq_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x13, [(super::Opcode::VMOVLPD, EVEXOperandCode::Mq_G_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x14, [(super::Opcode::VUNPCKLPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VUNPCKLPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VUNPCKLPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x15, [(super::Opcode::VUNPCKHPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VUNPCKHPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VUNPCKHPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x16, [(super::Opcode::VMOVHPD, EVEXOperandCode::G_V_Mq_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x17, [(super::Opcode::VMOVHPD, EVEXOperandCode::Mq_G_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x28, [(super::Opcode::VMOVAPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVAPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVAPD, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x29, [(super::Opcode::VMOVAPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::VMOVAPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::VMOVAPD, EVEXOperandCode::Em_G_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2b, [(super::Opcode::VMOVNTPD, EVEXOperandCode::M_G_LL_W1), (super::Opcode::VMOVNTPD, EVEXOperandCode::M_G_LL_W1), (super::Opcode::VMOVNTPD, EVEXOperandCode::M_G_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2e, [(super::Opcode::VUCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VUCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VUCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VUCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1)]), +  (0x2f, [(super::Opcode::VCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1), (super::Opcode::VCOMISD, EVEXOperandCode::Gm_Eq_xmm_sae_W1)]), +  (0x51, [(super::Opcode::VSQRTPD, EVEXOperandCode::Gm_E_LL_sae_bcast_W1), (super::Opcode::VSQRTPD, EVEXOperandCode::Gm_E_LL_sae_bcast_W1), (super::Opcode::VSQRTPD, EVEXOperandCode::Gm_E_LL_sae_bcast_W1), (super::Opcode::VSQRTPD, EVEXOperandCode::Gm_E_LL_sae_bcast_W1)]), +  (0x54, [(super::Opcode::VANDPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VANDPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VANDPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x55, [(super::Opcode::VANDNPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VANDNPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VANDNPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x56, [(super::Opcode::VORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x57, [(super::Opcode::VXORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VXORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VXORPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x58, [(super::Opcode::VADDPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VADDPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VADDPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VADDPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]), +  (0x59, [(super::Opcode::VMULPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMULPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMULPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMULPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]), +  (0x5a, [(super::Opcode::VCVTPD2PS, EVEXOperandCode::Gm_xmm_E_xmm_sae_bcast_W1), (super::Opcode::VCVTPD2PS, EVEXOperandCode::Gm_xmm_E_ymm_sae_bcast_W1), (super::Opcode::VCVTPD2PS, EVEXOperandCode::Gm_ymm_E_zmm_sae_bcast_W1), (super::Opcode::VCVTPD2PS, EVEXOperandCode::Gm_ymm_U_zmm_sae_W1)]), +  (0x5b, [(super::Opcode::VCVTPS2DQ, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VCVTPS2DQ, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VCVTPS2DQ, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VCVTPS2DQ, EVEXOperandCode::Gm_E_LL_sae_bcast)]), +  (0x5c, [(super::Opcode::VSUBPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VSUBPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VSUBPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VSUBPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]), +  (0x5d, [(super::Opcode::VMINPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMINPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMINPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMINPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]), +  (0x5e, [(super::Opcode::VDIVPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VDIVPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VDIVPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VDIVPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]), +  (0x5f, [(super::Opcode::VMAXPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMAXPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMAXPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1), (super::Opcode::VMAXPD, EVEXOperandCode::Gm_V_E_LL_sae_bcast_W1)]), +  (0x60, [(super::Opcode::VPUNPCKLBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKLBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKLBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x61, [(super::Opcode::VPUNPCKLWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKLWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKLWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x62, [(super::Opcode::VPUNPCKLDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPUNPCKLDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPUNPCKLDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x63, [(super::Opcode::VPACKSSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPACKSSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPACKSSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x64, [(super::Opcode::VPCMPGTB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPGTB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPGTB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x65, [(super::Opcode::VPCMPGTW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPGTW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPGTW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x66, [(super::Opcode::VPCMPGTD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::VPCMPGTD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::VPCMPGTD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x67, [(super::Opcode::VPACKUSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPACKUSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPACKUSWB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x68, [(super::Opcode::VPUNPCKHBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKHBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKHBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x69, [(super::Opcode::VPUNPCKHWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKHWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPUNPCKHWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x6a, [(super::Opcode::VPUNPCKHDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPUNPCKHDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPUNPCKHDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x6b, [(super::Opcode::VPACKSSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPACKSSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPACKSSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x6c, [(super::Opcode::VPUNPCKLQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPUNPCKLQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPUNPCKLQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x6d, [(super::Opcode::VPUNPCKHQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPUNPCKHQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPUNPCKHQDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x6e, [(super::Opcode::VMOVD, EVEXOperandCode::VMOVD_6e), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x6f, [(super::Opcode::VMOVDQA32, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQA32, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQA32, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x70, [(super::Opcode::VPSHUFD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::VPSHUFD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::VPSHUFD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x72, [(super::Opcode::VPROLD, EVEXOperandCode::Opcode_72_Gm_E_LL_imm8_bcast), (super::Opcode::VPROLD, EVEXOperandCode::Opcode_72_Gm_E_LL_imm8_bcast), (super::Opcode::VPROLD, EVEXOperandCode::Opcode_72_Gm_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x74, [(super::Opcode::VPCMPEQB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPEQB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPEQB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x75, [(super::Opcode::VPCMPEQW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPEQW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPCMPEQW, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x76, [(super::Opcode::VPCMPEQD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::VPCMPEQD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::VPCMPEQD, EVEXOperandCode::Mask_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x78, [(super::Opcode::VCVTTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ) +, (super::Opcode::VCVTTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ) +, (super::Opcode::VCVTTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ), (super::Opcode::VCVTTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ)]), +  (0x79, [(super::Opcode::VCVTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ) +, (super::Opcode::VCVTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ) +, (super::Opcode::VCVTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ), (super::Opcode::VCVTPS2UQQ, EVEXOperandCode::VCVTTPS2UQQ)]), +  (0x7a, [(super::Opcode::VCVTTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ) +, (super::Opcode::VCVTTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ) +, (super::Opcode::VCVTTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ), (super::Opcode::VCVTTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ)]), +  (0x7b, [(super::Opcode::VCVTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ) +, (super::Opcode::VCVTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ) +, (super::Opcode::VCVTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ), (super::Opcode::VCVTPS2QQ, EVEXOperandCode::VCVTTPS2UQQ)]), +  (0x7e, [(super::Opcode::VMOVD, EVEXOperandCode::VMOVD_7e), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7f, [(super::Opcode::VMOVDQA32, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQA32, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQA32, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xc2, [(super::Opcode::VCMPPD, EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1), (super::Opcode::VCMPPD, EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1), (super::Opcode::VCMPPD, EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1), (super::Opcode::VCMPPD, EVEXOperandCode::Maskm_V_E_LL_imm8_sae_bcast_W1)]), +  (0xc4, [(super::Opcode::VPINSRW, EVEXOperandCode::VPINSRW), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xc5, [(super::Opcode::VPEXTRW, EVEXOperandCode::VPEXTRW), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xc6, [(super::Opcode::VSHUFPD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VSHUFPD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VSHUFPD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xd1, [(super::Opcode::VPSRLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xd2, [(super::Opcode::VPSRLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::VPSRLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::VPSRLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xd3, [(super::Opcode::VPSRLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::VPSRLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::VPSRLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xd4, [(super::Opcode::VPADDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPADDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPADDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xd5, [(super::Opcode::VPMULLW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULLW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULLW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xd6, [(super::Opcode::VMOVQ, EVEXOperandCode::VMOVQ_Ed_G_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xd8, [(super::Opcode::VPSUBUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xd9, [(super::Opcode::VPSUBUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xda, [(super::Opcode::VPMINUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xdb, [(super::Opcode::VPANDD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPANDD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPANDD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xdc, [(super::Opcode::VPADDUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDUSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xdd, [(super::Opcode::VPADDUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDUSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xde, [(super::Opcode::VPMAXUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXUB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xdf, [(super::Opcode::VPANDND, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPANDND, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPANDND, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe0, [(super::Opcode::VPAVGB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPAVGB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPAVGB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe1, [(super::Opcode::VPSRAW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRAW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRAW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe2, [(super::Opcode::VPSRAD, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRAD, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSRAD, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe3, [(super::Opcode::VPAVGW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPAVGW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPAVGW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe4, [(super::Opcode::VPMULHUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe5, [(super::Opcode::VPMULHW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe6, [(super::Opcode::VCVTTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTTPD2DQ, EVEXOperandCode::VCVTTPD2DQ)]), +  (0xe7, [(super::Opcode::VMOVNTDQ, EVEXOperandCode::E_G_LL_W0), (super::Opcode::VMOVNTDQ, EVEXOperandCode::E_G_LL_W0), (super::Opcode::VMOVNTDQ, EVEXOperandCode::E_G_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe8, [(super::Opcode::VPSUBSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xe9, [(super::Opcode::VPSUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xea, [(super::Opcode::VPMINSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xeb, [(super::Opcode::VPORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xec, [(super::Opcode::VPADDSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xed, [(super::Opcode::VPADDSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xee, [(super::Opcode::VPMAXSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xef, [(super::Opcode::VPXORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPXORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPXORD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xf1, [(super::Opcode::VPSLLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSLLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::VPSLLW, EVEXOperandCode::Gm_V_LL_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xf2, [(super::Opcode::VPSLLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::VPSLLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::VPSLLD, EVEXOperandCode::Gm_V_LL_E_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xf3, [(super::Opcode::VPSLLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::VPSLLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::VPSLLQ, EVEXOperandCode::Gm_V_LL_E_xmm_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xf4, [(super::Opcode::VPMULUDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULUDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULUDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xf5, [(super::Opcode::VPMADDWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMADDWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMADDWD, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xf6, [(super::Opcode::VPSADBW, EVEXOperandCode::G_V_E_LL), (super::Opcode::VPSADBW, EVEXOperandCode::G_V_E_LL), (super::Opcode::VPSADBW, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xf8, [(super::Opcode::VPSUBB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xf9, [(super::Opcode::VPSUBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSUBW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xfa, [(super::Opcode::VPSUBD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPSUBD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPSUBD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xfb, [(super::Opcode::VPSUBQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPSUBQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPSUBQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xfc, [(super::Opcode::VPADDB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xfd, [(super::Opcode::VPADDW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPADDW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xfe, [(super::Opcode::VPADDD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPADDD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPADDD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +]; + +const EVEX_66_0f38: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 141] = [ +  (0x00, [(super::Opcode::VPSHUFB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSHUFB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPSHUFB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x04, [(super::Opcode::VPMADDUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMADDUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMADDUBSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x0b, [(super::Opcode::VPMULHRSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHRSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMULHRSW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x0c, [(super::Opcode::VPERMILPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VPERMILPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::VPERMILPS, EVEXOperandCode::Gm_V_Ed_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x0d, [(super::Opcode::VPERMILPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPERMILPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPERMILPD, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x10, [(super::Opcode::VPSRLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSRLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSRLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x11, [(super::Opcode::VPSRAVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSRAVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSRAVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x12, [(super::Opcode::VPSLLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSLLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSLLVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x13, [(super::Opcode::VCVTPH2PS, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPH2PS, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPH2PS, EVEXOperandCode::VCVTPH2PS), (super::Opcode::VCVTPH2PS, EVEXOperandCode::VCVTPH2PS)]), +  (0x14, [(super::Opcode::VPRORVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPRORVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPRORVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x15, [(super::Opcode::VPROLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPROLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPROLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x16, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VPERMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x18, [(super::Opcode::VBROADCASTSS, EVEXOperandCode::Gm_xmm_Ed_xmm_W0), (super::Opcode::VBROADCASTSS, EVEXOperandCode::Gm_ymm_Ed_xmm_W0), (super::Opcode::VBROADCASTSS, EVEXOperandCode::Gm_zmm_Ed_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x19, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTF32X2, EVEXOperandCode::VBROADCASTF32X2_Gm_ymm_Ed_xmm), (super::Opcode::VBROADCASTF32X2, EVEXOperandCode::Gm_zmm_Ed_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTF32X4, EVEXOperandCode::Gm_ymm_M_xmm), (super::Opcode::VBROADCASTF32X4, EVEXOperandCode::Gm_zmm_M_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1b, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTF32X8, EVEXOperandCode::Gm_zmm_M_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1c, [(super::Opcode::VPABSB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPABSB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPABSB, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1d, [(super::Opcode::VPABSW, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPABSW, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPABSW, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1e, [(super::Opcode::VPABSD, EVEXOperandCode::Gm_E_LL_bcast_W0), (super::Opcode::VPABSD, EVEXOperandCode::Gm_E_LL_bcast_W0), (super::Opcode::VPABSD, EVEXOperandCode::Gm_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1f, [(super::Opcode::VPABSQ, EVEXOperandCode::Gm_E_LL_bcast_W1), (super::Opcode::VPABSQ, EVEXOperandCode::Gm_E_LL_bcast_W1), (super::Opcode::VPABSQ, EVEXOperandCode::Gm_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x20, [(super::Opcode::VPMOVSXBW, EVEXOperandCode::Gm_xmm_Eq_xmm), (super::Opcode::VPMOVSXBW, EVEXOperandCode::Gm_ymm_E_xmm), (super::Opcode::VPMOVSXBW, EVEXOperandCode::Gm_zmm_E_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x21, [(super::Opcode::VPMOVSXBD, EVEXOperandCode::Gm_xmm_Ed_xmm), (super::Opcode::VPMOVSXBD, EVEXOperandCode::Gm_ymm_Eq_xmm), (super::Opcode::VPMOVSXBD, EVEXOperandCode::Gm_zmm_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x22, [(super::Opcode::VPMOVSXBQ, EVEXOperandCode::Gm_xmm_Ew_xmm), (super::Opcode::VPMOVSXBQ, EVEXOperandCode::Gm_ymm_Ed_xmm), (super::Opcode::VPMOVSXBQ, EVEXOperandCode::Gm_zmm_Eq_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x23, [(super::Opcode::VPMOVSXWD, EVEXOperandCode::Gm_xmm_Eq_xmm), (super::Opcode::VPMOVSXWD, EVEXOperandCode::Gm_ymm_E_xmm), (super::Opcode::VPMOVSXWD, EVEXOperandCode::Gm_zmm_E_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x24, [(super::Opcode::VPMOVSXWQ, EVEXOperandCode::Gm_xmm_Ed_xmm), (super::Opcode::VPMOVSXWQ, EVEXOperandCode::Gm_ymm_Eq_xmm), (super::Opcode::VPMOVSXWQ, EVEXOperandCode::Gm_zmm_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x25, [(super::Opcode::VPMOVSXDQ, EVEXOperandCode::Gm_xmm_Eq_xmm_W0), (super::Opcode::VPMOVSXDQ, EVEXOperandCode::Gm_ymm_E_xmm_W0), (super::Opcode::VPMOVSXDQ, EVEXOperandCode::Gm_zmm_E_ymm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x26, [(super::Opcode::VPTESTMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPTESTMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPTESTMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x27, [(super::Opcode::VPTESTMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VPTESTMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VPTESTMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x28, [(super::Opcode::VPMULDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULDQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x29, [(super::Opcode::VPCMPEQQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::VPCMPEQQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::VPCMPEQQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2a, [(super::Opcode::VMOVNTDQA, EVEXOperandCode::G_E_LL_W0), (super::Opcode::VMOVNTDQA, EVEXOperandCode::G_E_LL_W0), (super::Opcode::VMOVNTDQA, EVEXOperandCode::G_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2b, [(super::Opcode::VPACKUSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPACKUSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPACKUSDW, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2c, [(super::Opcode::VSCALEFPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VSCALEFPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VSCALEFPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VSCALEFPS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0x2d, [(super::Opcode::VSCALEFSS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VSCALEFSS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VSCALEFSS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VSCALEFSS, EVEXOperandCode::Gm_V_Ed_xmm_sae)]), +  (0x30, [(super::Opcode::VPMOVZXBW, EVEXOperandCode::Gm_xmm_Eq_xmm), (super::Opcode::VPMOVZXBW, EVEXOperandCode::Gm_ymm_E_xmm), (super::Opcode::VPMOVZXBW, EVEXOperandCode::Gm_zmm_E_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x31, [(super::Opcode::VPMOVZXBD, EVEXOperandCode::Gm_xmm_Ed_xmm), (super::Opcode::VPMOVZXBD, EVEXOperandCode::Gm_ymm_Eq_xmm), (super::Opcode::VPMOVZXBD, EVEXOperandCode::Gm_zmm_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x32, [(super::Opcode::VPMOVZXBQ, EVEXOperandCode::Gm_xmm_Ew_xmm), (super::Opcode::VPMOVZXBQ, EVEXOperandCode::Gm_ymm_Ed_xmm), (super::Opcode::VPMOVZXBQ, EVEXOperandCode::Gm_zmm_Eq_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x33, [(super::Opcode::VPMOVZXWD, EVEXOperandCode::Gm_xmm_Eq_xmm), (super::Opcode::VPMOVZXWD, EVEXOperandCode::Gm_ymm_E_xmm), (super::Opcode::VPMOVZXWD, EVEXOperandCode::Gm_zmm_E_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x34, [(super::Opcode::VPMOVZXWQ, EVEXOperandCode::Gm_xmm_Ed_xmm), (super::Opcode::VPMOVZXWQ, EVEXOperandCode::Gm_ymm_Eq_xmm), (super::Opcode::VPMOVZXWQ, EVEXOperandCode::Gm_zmm_E_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x35, [(super::Opcode::VPMOVZXDQ, EVEXOperandCode::Gm_xmm_Eq_xmm_W0), (super::Opcode::VPMOVZXDQ, EVEXOperandCode::Gm_ymm_E_xmm_W0), (super::Opcode::VPMOVZXDQ, EVEXOperandCode::Gm_zmm_E_ymm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x36, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VPERMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x37, [(super::Opcode::VPCMPGTQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::VPCMPGTQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::VPCMPGTQ, EVEXOperandCode::Mask_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x38, [(super::Opcode::VPMINSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x39, [(super::Opcode::VPMINSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMINSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMINSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3a, [(super::Opcode::VPMINUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMINUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3b, [(super::Opcode::VPMINUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMINUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMINUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3c, [(super::Opcode::VPMAXSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXSB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3d, [(super::Opcode::VPMAXSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMAXSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMAXSD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3e, [(super::Opcode::VPMAXUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPMAXUW, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3f, [(super::Opcode::VPMAXUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMAXUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMAXUD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x40, [(super::Opcode::VPMULLD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMULLD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPMULLD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x42, [(super::Opcode::VGETEXPPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VGETEXPPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VGETEXPPS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VGETEXPPS, EVEXOperandCode::Gm_E_LL_sae_bcast)]), +  (0x43, [(super::Opcode::VGETEXPSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast), (super::Opcode::VGETEXPSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast), (super::Opcode::VGETEXPSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast), (super::Opcode::VGETEXPSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_bcast)]), +  (0x44, [(super::Opcode::VPLZCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPLZCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPLZCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x45, [(super::Opcode::VPSRLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSRLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSRLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x46, [(super::Opcode::VPSRAVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSRAVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSRAVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x47, [(super::Opcode::VPSLLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSLLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSLLVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x4c, [(super::Opcode::VRCP14PS, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VRCP14PS, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VRCP14PS, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x4d, [(super::Opcode::VRCP14SS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VRCP14SS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VRCP14SS, EVEXOperandCode::Gm_V_Ed_xmm_sae), (super::Opcode::VRCP14SS, EVEXOperandCode::Gm_V_Ed_xmm_sae)]), +  (0x4e, [(super::Opcode::VRSQRT14PS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VRSQRT14PS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::VRSQRT14PS, EVEXOperandCode::Gm_E_LL_sae_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x4f, [(super::Opcode::VRSQRT14SS, EVEXOperandCode::Gm_V_Ed_xmm), (super::Opcode::VRSQRT14SS, EVEXOperandCode::Gm_V_Ed_xmm), (super::Opcode::VRSQRT14SS, EVEXOperandCode::Gm_V_Ed_xmm), (super::Opcode::VRSQRT14SS, EVEXOperandCode::Gm_V_Ed_xmm)]), +  (0x50, [(super::Opcode::VPDPBUSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPBUSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPBUSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x51, [(super::Opcode::VPDPBUSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPBUSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPBUSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x52, [(super::Opcode::VPDPWSSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPWSSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPWSSD, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x53, [(super::Opcode::VPDPWSSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPWSSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VPDPWSSDS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x54, [(super::Opcode::VPOPCNTB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPOPCNTB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPOPCNTB, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x55, [(super::Opcode::VPOPCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPOPCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPOPCNTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x58, [(super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ed_xmm_W0), (super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ed_xmm_W0), (super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ed_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x59, [(super::Opcode::VBROADCASTI32X2, EVEXOperandCode::Gm_LL_Eq_xmm), (super::Opcode::VBROADCASTI32X2, EVEXOperandCode::Gm_LL_Eq_xmm), (super::Opcode::VBROADCASTI32X2, EVEXOperandCode::Gm_LL_Eq_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x5a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTI32X4, EVEXOperandCode::Gm_ymm_M_xmm), (super::Opcode::VBROADCASTI32X4, EVEXOperandCode::Gm_zmm_M_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x5b, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VBROADCASTI32X8, EVEXOperandCode::Gm_zmm_M_ymm), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x62, [(super::Opcode::VPEXPANDB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPEXPANDB, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPEXPANDB, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x63, [(super::Opcode::VPCOMPRESSB, EVEXOperandCode::Em_G_LL), (super::Opcode::VPCOMPRESSB, EVEXOperandCode::Em_G_LL), (super::Opcode::VPCOMPRESSB, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x64, [(super::Opcode::VPBLENDMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPBLENDMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPBLENDMD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x65, [(super::Opcode::VBLENDMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VBLENDMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VBLENDMPS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x66, [(super::Opcode::VPBLENDMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPBLENDMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPBLENDMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x70, [(super::Opcode::VPSHLDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSHLDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSHLDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x71, [(super::Opcode::VPSHLDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSHLDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSHLDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x72, [(super::Opcode::VPSHRDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSHRDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::VPSHRDVW, EVEXOperandCode::Gm_V_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x73, [(super::Opcode::VPSHRDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSHRDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPSHRDVD, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x75, [(super::Opcode::VPERMI2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMI2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMI2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x76, [(super::Opcode::VPERMI2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMI2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMI2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x77, [(super::Opcode::VPERMI2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMI2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMI2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x78, [(super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Eb_xmm_W0), (super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Eb_xmm_W0), (super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Eb_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x79, [(super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ew_xmm_W0), (super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ew_xmm_W0), (super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ew_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7a, [(super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::VPBROADCASTB, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7b, [(super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::VPBROADCASTW, EVEXOperandCode::Gm_LL_Ud_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7c, [(super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ud), (super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ud), (super::Opcode::VPBROADCASTD, EVEXOperandCode::Gm_LL_Ud), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7d, [(super::Opcode::VPERMT2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMT2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMT2B, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7e, [(super::Opcode::VPERMT2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMT2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::VPERMT2D, EVEXOperandCode::Gm_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7f, [(super::Opcode::VPERMT2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMT2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::VPERMT2PS, EVEXOperandCode::Gm_V_Ed_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x83, [(super::Opcode::VPMULTISHIFTQB, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULTISHIFTQB, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMULTISHIFTQB, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x88, [(super::Opcode::VEXPANDPS, EVEXOperandCode::Gm_E_LL), (super::Opcode::VEXPANDPS, EVEXOperandCode::Gm_E_LL), (super::Opcode::VEXPANDPS, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x89, [(super::Opcode::VPEXPANDD, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPEXPANDD, EVEXOperandCode::Gm_E_LL), (super::Opcode::VPEXPANDD, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x8a, [(super::Opcode::VCOMPRESSPS, EVEXOperandCode::Em_G_LL), (super::Opcode::VCOMPRESSPS, EVEXOperandCode::Em_G_LL), (super::Opcode::VCOMPRESSPS, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x8b, [(super::Opcode::VPCOMPRESSD, EVEXOperandCode::Em_G_LL), (super::Opcode::VPCOMPRESSD, EVEXOperandCode::Em_G_LL), (super::Opcode::VPCOMPRESSD, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x8d, [(super::Opcode::VPERMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::VPERMB, EVEXOperandCode::Gm_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x8f, [(super::Opcode::VPSHUFBITQMB, EVEXOperandCode::Mask_V_E_LL_W0), (super::Opcode::VPSHUFBITQMB, EVEXOperandCode::Mask_V_E_LL_W0), (super::Opcode::VPSHUFBITQMB, EVEXOperandCode::Mask_V_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x96, [(super::Opcode::VFMADDSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0x97, [(super::Opcode::VFMSUBADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0x98, [(super::Opcode::VFMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0x99, [(super::Opcode::VFMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0x9a, [(super::Opcode::VFMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0x9b, [(super::Opcode::VFMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0x9c, [(super::Opcode::VFNMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0x9d, [(super::Opcode::VFNMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD132SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0x9e, [(super::Opcode::VFNMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB132PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0x9f, [(super::Opcode::VFNMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB132SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xa6, [(super::Opcode::VFMADDSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xa7, [(super::Opcode::VFMSUBADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xa8, [(super::Opcode::VFMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xa9, [(super::Opcode::VFMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xaa, [(super::Opcode::VFMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xab, [(super::Opcode::VFMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xac, [(super::Opcode::VFNMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xad, [(super::Opcode::VFNMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD213SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xae, [(super::Opcode::VFNMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB213PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xaf, [(super::Opcode::VFNMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB213SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xb4, [(super::Opcode::VPMADD52LUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMADD52LUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMADD52LUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xb5, [(super::Opcode::VPMADD52HUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMADD52HUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::VPMADD52HUQ, EVEXOperandCode::Gm_V_E_LL_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xb6, [(super::Opcode::VFMADDSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADDSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xb7, [(super::Opcode::VFMSUBADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUBADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xb8, [(super::Opcode::VFMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xb9, [(super::Opcode::VFMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xba, [(super::Opcode::VFMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xbb, [(super::Opcode::VFMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xbc, [(super::Opcode::VFNMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMADD231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xbd, [(super::Opcode::VFNMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMADD231SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xbe, [(super::Opcode::VFNMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast), (super::Opcode::VFNMSUB231PS, EVEXOperandCode::Gm_V_E_LL_sae_bcast)]), +  (0xbf, [(super::Opcode::VFNMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae), (super::Opcode::VFNMSUB231SS, EVEXOperandCode::Gm_V_Ed_LL_sae)]), +  (0xc4, [(super::Opcode::VPCONFLICTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPCONFLICTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::VPCONFLICTD, EVEXOperandCode::Gm_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xc8, [(super::Opcode::VEXP2PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VEXP2PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VEXP2PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VEXP2PS, EVEXOperandCode::Gm_E_zmm_sae_bcast)]), +  (0xca, [(super::Opcode::VRCP28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRCP28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRCP28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRCP28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast)]), +  (0xcb, [(super::Opcode::VRCP28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRCP28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRCP28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRCP28SS, EVEXOperandCode::Gm_V_E_xmm_sae)]), +  (0xcc, [(super::Opcode::VRSQRT28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRSQRT28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRSQRT28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast), (super::Opcode::VRSQRT28PS, EVEXOperandCode::Gm_E_zmm_sae_bcast)]), +  (0xcd, [(super::Opcode::VRSQRT28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRSQRT28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRSQRT28SS, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VRSQRT28SS, EVEXOperandCode::Gm_V_E_xmm_sae)]), +  (0xcf, [(super::Opcode::VGF2P8MULB, EVEXOperandCode::Gm_V_E_LL_W0), (super::Opcode::VGF2P8MULB, EVEXOperandCode::Gm_V_E_LL_W0), (super::Opcode::VGF2P8MULB, EVEXOperandCode::Gm_V_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xdc, [(super::Opcode::VAESENC, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESENC, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESENC, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xdd, [(super::Opcode::VAESENCLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESENCLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESENCLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xde, [(super::Opcode::VAESDEC, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESDEC, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESDEC, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xdf, [(super::Opcode::VAESDECLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESDECLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::VAESDECLAST, EVEXOperandCode::G_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +]; + +const EVEX_66_0f3a: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 51] = [ +  (0x00, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VPERMQ, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::VPERMQ, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x01, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VPERMPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::VPERMPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x03, [(super::Opcode::VALIGND, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VALIGND, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VALIGND, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x04, [(super::Opcode::VPERMILPS, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::VPERMILPS, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::VPERMILPS, EVEXOperandCode::Gm_E_LL_imm8_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x05, [(super::Opcode::VPERMILPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::VPERMILPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::VPERMILPD, EVEXOperandCode::Gm_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x08, [(super::Opcode::VRNDSCALEPS, EVEXOperandCode::Gm_E_LL_imm8_sae_W0), (super::Opcode::VRNDSCALEPS, EVEXOperandCode::Gm_E_LL_imm8_sae_W0), (super::Opcode::VRNDSCALEPS, EVEXOperandCode::Gm_E_LL_imm8_sae_W0), (super::Opcode::VRNDSCALEPS, EVEXOperandCode::Gm_E_LL_imm8_sae_W0)]), +  (0x09, [(super::Opcode::VRNDSCALEPD, EVEXOperandCode::Gm_E_LL_imm8_sae_W1), (super::Opcode::VRNDSCALEPD, EVEXOperandCode::Gm_E_LL_imm8_sae_W1), (super::Opcode::VRNDSCALEPD, EVEXOperandCode::Gm_E_LL_imm8_sae_W1), (super::Opcode::VRNDSCALEPD, EVEXOperandCode::Gm_E_LL_imm8_sae_W1)]), +  (0x0a, [(super::Opcode::VRNDSCALESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRNDSCALESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRNDSCALESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRNDSCALESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]),// W0 +  (0x0b, [(super::Opcode::VRNDSCALESD, EVEXOperandCode::Gm_V_E_xmm_imm8_sae), (super::Opcode::VRNDSCALESD, EVEXOperandCode::Gm_V_E_xmm_imm8_sae), (super::Opcode::VRNDSCALESD, EVEXOperandCode::Gm_V_E_xmm_imm8_sae), (super::Opcode::VRNDSCALESD, EVEXOperandCode::Gm_V_E_xmm_imm8_sae)]),// W1 +  (0x0f, [(super::Opcode::VPALIGNR, EVEXOperandCode::Gm_V_E_LL_imm8), (super::Opcode::VPALIGNR, EVEXOperandCode::Gm_V_E_LL_imm8), (super::Opcode::VPALIGNR, EVEXOperandCode::Gm_V_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x14, [(super::Opcode::VPEXTRB, EVEXOperandCode::Ebd_G_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x15, [(super::Opcode::VPEXTRW, EVEXOperandCode::Ewd_G_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x16, [(super::Opcode::Invalid, EVEXOperandCode::Edd_G_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x17, [(super::Opcode::VEXTRACTPS, EVEXOperandCode::VEXTRACTPS), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x18, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VINSERTF32X4, EVEXOperandCode::Gm_V_LL_E_xmm_imm8), (super::Opcode::VINSERTF32X4, EVEXOperandCode::Gm_V_LL_E_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x19, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VEXTRACTF32X4, EVEXOperandCode::Em_xmm_G_LL_imm8), (super::Opcode::VEXTRACTF32X4, EVEXOperandCode::Em_xmm_G_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VINSERTF32X8, EVEXOperandCode::Gm_V_zmm_E_ymm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1b, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VEXTRACTF32X8, EVEXOperandCode::Em_ymm_G_zmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1d, [(super::Opcode::VCVTPS2PH, EVEXOperandCode::Eqm_G_xmm_imm8_sae_W0), (super::Opcode::VCVTPS2PH, EVEXOperandCode::Em_xmm_G_ymm_imm8_sae_W0), (super::Opcode::VCVTPS2PH, EVEXOperandCode::Em_ymm_G_zmm_imm8_sae_W0), (super::Opcode::VCVTPS2PH, EVEXOperandCode::Em_ymm_G_zmm_imm8_sae_W0)]), +  (0x1e, [(super::Opcode::VPCMPUD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::VPCMPUD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::VPCMPUD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x1f, [(super::Opcode::VPCMPD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::VPCMPD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::VPCMPD, EVEXOperandCode::Mask_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x20, [(super::Opcode::VPINSRB, EVEXOperandCode::G_V_xmm_Ebd_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x21, [(super::Opcode::VINSERTPS, EVEXOperandCode::G_V_Ed_xmm_imm8_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x22, [(super::Opcode::VPINSRD, EVEXOperandCode::G_V_xmm_Edq_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x23, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VSHUFF32X4, EVEXOperandCode::Gm_V_Ed_LL_imm8_bcast), (super::Opcode::VSHUFF32X4, EVEXOperandCode::Gm_V_Ed_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x25, [(super::Opcode::VPTERNLOGD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPTERNLOGD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPTERNLOGD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x26, [(super::Opcode::VGETMANTPS, EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast), (super::Opcode::VGETMANTPS, EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast), (super::Opcode::VGETMANTPS, EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast), (super::Opcode::VGETMANTPS, EVEXOperandCode::Gm_Ed_LL_imm8_sae_noround_bcast)]), +  (0x27, [(super::Opcode::VGETMANTSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VGETMANTSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VGETMANTSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VGETMANTSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]), +  (0x38, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VINSERTI32X4, EVEXOperandCode::Gm_V_ymm_E_xmm_imm8), (super::Opcode::VINSERTI32X4, EVEXOperandCode::Gm_V_zmm_E_xmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x39, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VEXTRACTI32X4, EVEXOperandCode::Em_xmm_G_LL_imm8), (super::Opcode::VEXTRACTI32X4, EVEXOperandCode::Em_xmm_G_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VINSERTI32X8, EVEXOperandCode::Gm_V_zmm_E_ymm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3b, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VEXTRACTI32X8, EVEXOperandCode::Em_ymm_G_zmm_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3e, [(super::Opcode::VPCMPUB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::VPCMPUB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::VPCMPUB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3f, [(super::Opcode::VPCMPB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::VPCMPB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::VPCMPB, EVEXOperandCode::Mask_V_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x42, [(super::Opcode::VDBPSADBW, EVEXOperandCode::Gm_V_E_LL_imm8_W0), (super::Opcode::VDBPSADBW, EVEXOperandCode::Gm_V_E_LL_imm8_W0), (super::Opcode::VDBPSADBW, EVEXOperandCode::Gm_V_E_LL_imm8_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x43, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VSHUFI32X4, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VSHUFI32X4, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x44, [(super::Opcode::VPCLMULQDQ, EVEXOperandCode::G_V_E_LL_imm8), (super::Opcode::VPCLMULQDQ, EVEXOperandCode::G_V_E_LL_imm8), (super::Opcode::VPCLMULQDQ, EVEXOperandCode::G_V_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x50, [(super::Opcode::VRANGEPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast), +  (super::Opcode::VRANGEPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast), +  (super::Opcode::VRANGEPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast), (super::Opcode::VRANGEPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast)]), +  (0x51, [(super::Opcode::VRANGESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRANGESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRANGESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VRANGESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]), +  (0x54, [(super::Opcode::VFIXUPIMMPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast) +, (super::Opcode::VFIXUPIMMPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast) +, (super::Opcode::VFIXUPIMMPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast), (super::Opcode::VFIXUPIMMPS, EVEXOperandCode::Gm_V_E_LL_imm8_sae_bcast)]), +  (0x55, [(super::Opcode::VFIXUPIMMSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VFIXUPIMMSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VFIXUPIMMSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VFIXUPIMMSS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]), +  (0x56, [(super::Opcode::VREDUCEPS, EVEXOperandCode::Gm_E_LL_imm8_sae) +, (super::Opcode::VREDUCEPS, EVEXOperandCode::Gm_E_LL_imm8_sae) +, (super::Opcode::VREDUCEPS, EVEXOperandCode::Gm_E_LL_imm8_sae), (super::Opcode::VREDUCEPS, EVEXOperandCode::Gm_E_LL_imm8_sae)]), +  (0x57, [(super::Opcode::VREDUCESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VREDUCESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VREDUCESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae), (super::Opcode::VREDUCESS, EVEXOperandCode::Gm_V_Ed_xmm_imm8_sae)]), +  (0x66, [(super::Opcode::VFPCLASSPS, EVEXOperandCode::Mask_E_LL_imm8_bcast) +, (super::Opcode::VFPCLASSPS, EVEXOperandCode::Mask_E_LL_imm8_bcast) +, (super::Opcode::VFPCLASSPS, EVEXOperandCode::Mask_E_LL_imm8_bcast) +, (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x67, [(super::Opcode::VFPCLASSSS, EVEXOperandCode::Mask_Ed_xmm_imm8), (super::Opcode::VFPCLASSSS, EVEXOperandCode::Mask_Ed_xmm_imm8), (super::Opcode::VFPCLASSSS, EVEXOperandCode::Mask_Ed_xmm_imm8), (super::Opcode::VFPCLASSSS, EVEXOperandCode::Mask_Ed_xmm_imm8)]), +  (0x70, [(super::Opcode::VPSHLDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::VPSHLDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::VPSHLDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x71, [(super::Opcode::VPSHLDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPSHLDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPSHLDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x72, [(super::Opcode::VPSHRDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::VPSHRDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::VPSHRDW, EVEXOperandCode::Gm_V_E_LL_imm8_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x73, [(super::Opcode::VPSHRDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPSHRDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::VPSHRDD, EVEXOperandCode::Gm_V_E_LL_imm8_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xce, [(super::Opcode::VGF2P8AFFINEQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VGF2P8AFFINEQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VGF2P8AFFINEQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xcf, [(super::Opcode::VGF2P8AFFINEINVQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VGF2P8AFFINEINVQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::VGF2P8AFFINEINVQB, EVEXOperandCode::Gm_V_E_LL_imm8_bcast_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +]; + +const EVEX_f2_0f: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 26] = [ +  (0x10, [(super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_10), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_10), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_10), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_10) +]),// W0 +  (0x11, [(super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_11), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_11), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_11), (super::Opcode::VMOVSS, EVEXOperandCode::VMOVSS_11) +]),// W0 +  (0x12, [(super::Opcode::VMOVSLDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVSLDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVSLDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x16, [(super::Opcode::VMOVSHDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVSHDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::VMOVSHDUP, EVEXOperandCode::Gm_E_LL_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2a, [(super::Opcode::VCVTSI2SS, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SS, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SS, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SS, EVEXOperandCode::VCVTSI2SS)]), +  (0x2c, [(super::Opcode::VCVTTSS2SI, EVEXOperandCode::VCVTTSS2SI), (super::Opcode::VCVTTSS2SI, EVEXOperandCode::VCVTTSS2SI), (super::Opcode::VCVTTSS2SI, EVEXOperandCode::VCVTTSS2SI), (super::Opcode::VCVTTSS2SI, EVEXOperandCode::VCVTTSS2SI)]), +  (0x2d, [(super::Opcode::VCVTSS2SI, EVEXOperandCode::VCVTSS2SI), (super::Opcode::VCVTSS2SI, EVEXOperandCode::VCVTSS2SI), (super::Opcode::VCVTSS2SI, EVEXOperandCode::VCVTSS2SI), (super::Opcode::VCVTSS2SI, EVEXOperandCode::VCVTSS2SI)]), +  (0x51, [(super::Opcode::VSQRTSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSQRTSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSQRTSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSQRTSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]), +  (0x58, [(super::Opcode::VADDSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VADDSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VADDSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VADDSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]), +  (0x59, [(super::Opcode::VMULSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMULSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMULSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMULSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]), +  (0x5a, [(super::Opcode::VCVTSS2SD, EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0), (super::Opcode::VCVTSS2SD, EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0), (super::Opcode::VCVTSS2SD, EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0), (super::Opcode::VCVTSS2SD, EVEXOperandCode::Gm_V_Ed_xmm_sae_noround_W0)]),// W0 +  (0x5b, [(super::Opcode::VCVTTPS2DQ, EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0), (super::Opcode::VCVTTPS2DQ, EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0), (super::Opcode::VCVTTPS2DQ, EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0), (super::Opcode::VCVTTPS2DQ, EVEXOperandCode::Gm_Ed_LL_sae_noround_bcast_W0)]), +  (0x5c, [(super::Opcode::VSUBSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSUBSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSUBSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VSUBSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]), +  (0x5d, [(super::Opcode::VMINSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMINSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMINSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMINSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),// W0 +  (0x5e, [(super::Opcode::VDIVSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VDIVSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VDIVSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VDIVSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]), +  (0x5f, [(super::Opcode::VMAXSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMAXSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMAXSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0), (super::Opcode::VMAXSS, EVEXOperandCode::Gm_V_Ed_xmm_sae_W0)]),// W0 +  (0x6f, [(super::Opcode::VMOVDQU32, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQU32, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQU32, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x70, [(super::Opcode::VPSHUFHW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::VPSHUFHW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::VPSHUFHW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x78, [(super::Opcode::VCVTTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae)]), +  (0x79, [(super::Opcode::VCVTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSS2USI, EVEXOperandCode::Gd_Ed_xmm_sae)]), +  (0x7a, [(super::Opcode::VCVTUDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTUDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTUDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTUDQ2PD, EVEXOperandCode::VCVTUDQ2PD)]), +  (0x7b, [(super::Opcode::VCVTUSI2SS, EVEXOperandCode::G_V_xmm_Edq_sae), (super::Opcode::VCVTUSI2SS, EVEXOperandCode::G_V_xmm_Edq_sae), (super::Opcode::VCVTUSI2SS, EVEXOperandCode::G_V_xmm_Edq_sae), (super::Opcode::VCVTUSI2SS, EVEXOperandCode::G_V_xmm_Edq_sae)]), +  (0x7e, [(super::Opcode::VMOVQ, EVEXOperandCode::VMOVQ_7e), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7f, [(super::Opcode::VMOVDQU32, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQU32, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQU32, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xc2, [(super::Opcode::VCMPSS, EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0), (super::Opcode::VCMPSS, EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0), (super::Opcode::VCMPSS, EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0), (super::Opcode::VCMPSS, EVEXOperandCode::Maskm_V_Ed_xmm_imm8_sae_W0)]), +  (0xe6, [(super::Opcode::VCVTDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTDQ2PD, EVEXOperandCode::VCVTUDQ2PD), (super::Opcode::VCVTDQ2PD, EVEXOperandCode::VCVTUDQ2PD)]), +]; + +const EVEX_f2_0f38: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 28] = [ +  (0x10, [(super::Opcode::VPMOVUSWB, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSWB, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVUSWB, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x11, [(super::Opcode::VPMOVUSDB, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSDB, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVUSDB, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x12, [(super::Opcode::VPMOVUSQB, EVEXOperandCode::Ewm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSQB, EVEXOperandCode::Edm_xmm_G_ymm_W0), (super::Opcode::VPMOVUSQB, EVEXOperandCode::Eqm_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x13, [(super::Opcode::VPMOVUSDW, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSDW, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVUSDW, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x14, [(super::Opcode::VPMOVUSQW, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSQW, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVUSQW, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x15, [(super::Opcode::VPMOVUSQD, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVUSQD, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVUSQD, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x20, [(super::Opcode::VPMOVSWB, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVSWB, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVSWB, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x21, [(super::Opcode::VPMOVSDB, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVSDB, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVSDB, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x22, [(super::Opcode::VPMOVSQB, EVEXOperandCode::Ewm_xmm_G_xmm_W0), (super::Opcode::VPMOVSQB, EVEXOperandCode::Edm_xmm_G_ymm_W0), (super::Opcode::VPMOVSQB, EVEXOperandCode::Eqm_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x23, [(super::Opcode::VPMOVSDW, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVSDW, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVSDW, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x24, [(super::Opcode::VPMOVSQW, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVSQW, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVSQW, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x25, [(super::Opcode::VPMOVSQD, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVSQD, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVSQD, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x26, [(super::Opcode::VPTESTNMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPTESTNMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::VPTESTNMB, EVEXOperandCode::Mask_V_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x27, [(super::Opcode::VPTESTNMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VPTESTNMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VPTESTNMD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x28, [(super::Opcode::VPMOVM2B, EVEXOperandCode::G_LL_Mask), (super::Opcode::VPMOVM2B, EVEXOperandCode::G_LL_Mask), (super::Opcode::VPMOVM2B, EVEXOperandCode::G_LL_Mask), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x29, [(super::Opcode::VPMOVB2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::VPMOVB2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::VPMOVB2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2a, [(super::Opcode::VPBROADCASTMB2Q, EVEXOperandCode::G_LL_Mask_W1), (super::Opcode::VPBROADCASTMB2Q, EVEXOperandCode::G_LL_Mask_W1), (super::Opcode::VPBROADCASTMB2Q, EVEXOperandCode::G_LL_Mask_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x30, [(super::Opcode::VPMOVWB, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVWB, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVWB, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x31, [(super::Opcode::VPMOVDB, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVDB, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVDB, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x32, [(super::Opcode::VPMOVQB, EVEXOperandCode::Ewm_xmm_G_xmm_W0), (super::Opcode::VPMOVQB, EVEXOperandCode::Edm_xmm_G_ymm_W0), (super::Opcode::VPMOVQB, EVEXOperandCode::Eqm_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x33, [(super::Opcode::VPMOVDW, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVDW, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVDW, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x34, [(super::Opcode::VPMOVQW, EVEXOperandCode::Edm_xmm_G_xmm_W0), (super::Opcode::VPMOVQW, EVEXOperandCode::Eqm_xmm_G_ymm_W0), (super::Opcode::VPMOVQW, EVEXOperandCode::Em_xmm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x35, [(super::Opcode::VPMOVQD, EVEXOperandCode::Eqm_xmm_G_xmm_W0), (super::Opcode::VPMOVQD, EVEXOperandCode::Em_xmm_G_ymm_W0), (super::Opcode::VPMOVQD, EVEXOperandCode::Em_ymm_G_zmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x38, [(super::Opcode::VPMOVM2D, EVEXOperandCode::G_LL_Mask), (super::Opcode::VPMOVM2D, EVEXOperandCode::G_LL_Mask), (super::Opcode::VPMOVM2D, EVEXOperandCode::G_LL_Mask), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x39, [(super::Opcode::VPMOVD2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::VPMOVD2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::VPMOVD2M, EVEXOperandCode::Mask_U_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x3a, [(super::Opcode::VPBROADCASTMW2D, EVEXOperandCode::G_LL_Mask_W0), (super::Opcode::VPBROADCASTMW2D, EVEXOperandCode::G_LL_Mask_W0), (super::Opcode::VPBROADCASTMW2D, EVEXOperandCode::G_LL_Mask_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x52, [(super::Opcode::VDPBF16PS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VDPBF16PS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VDPBF16PS, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x72, [(super::Opcode::VCVTNEPS2BF16, EVEXOperandCode::Operands_72_W0), (super::Opcode::VCVTNEPS2BF16, EVEXOperandCode::Operands_72_W0), (super::Opcode::VCVTNEPS2BF16, EVEXOperandCode::Operands_72_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +]; + +const EVEX_f3_0f: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 24] = [ +  (0x10, [(super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_10), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_10), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_10), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_10)]),// W1 +  (0x11, [(super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_11), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_11), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_11), (super::Opcode::VMOVSD, EVEXOperandCode::VMOVSD_11)]),// W1 +  (0x12, [(super::Opcode::VMOVDDUP, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVDDUP, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::VMOVDDUP, EVEXOperandCode::Gm_E_LL_W1), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x2a, [(super::Opcode::VCVTSI2SD, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SD, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SD, EVEXOperandCode::VCVTSI2SS), (super::Opcode::VCVTSI2SD, EVEXOperandCode::VCVTSI2SS)]), +  (0x2c, [(super::Opcode::VCVTTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae)]), +  (0x2d, [(super::Opcode::VCVTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2SI, EVEXOperandCode::Gd_Ed_xmm_sae)]), +  (0x51, [(super::Opcode::VSQRTSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSQRTSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSQRTSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSQRTSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]), +  (0x58, [(super::Opcode::VADDSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VADDSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VADDSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VADDSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]), +  (0x59, [(super::Opcode::VMULSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMULSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMULSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMULSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]), +  (0x5a, [(super::Opcode::VCVTSD2SS, EVEXOperandCode::Gm_V_Eq_xmm_sae_W1), (super::Opcode::VCVTSD2SS, EVEXOperandCode::Gm_V_Eq_xmm_sae_W1), (super::Opcode::VCVTSD2SS, EVEXOperandCode::Gm_V_Eq_xmm_sae_W1), (super::Opcode::VCVTSD2SS, EVEXOperandCode::Gm_V_Eq_xmm_sae_W1)]), +  (0x5c, [(super::Opcode::VSUBSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSUBSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSUBSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VSUBSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]), +  (0x5d, [(super::Opcode::VMINSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMINSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMINSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VMINSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]),// W1 +  (0x5e, [(super::Opcode::VDIVSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VDIVSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VDIVSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1), (super::Opcode::VDIVSD, EVEXOperandCode::Gm_V_E_xmm_sae_W1)]), +  (0x5f, [(super::Opcode::VMAXSD, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VMAXSD, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VMAXSD, EVEXOperandCode::Gm_V_E_xmm_sae), (super::Opcode::VMAXSD, EVEXOperandCode::Gm_V_E_xmm_sae)]),// W1 +  (0x6f, [(super::Opcode::VMOVDQU8, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQU8, EVEXOperandCode::Gm_E_LL), (super::Opcode::VMOVDQU8, EVEXOperandCode::Gm_E_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x70, [(super::Opcode::VPSHUFLW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::VPSHUFLW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::VPSHUFLW, EVEXOperandCode::Gm_E_LL_imm8), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x78, [(super::Opcode::VCVTTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae)]), +  (0x79, [(super::Opcode::VCVTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae), (super::Opcode::VCVTSD2USI, EVEXOperandCode::Gd_Ed_xmm_sae)]), +  (0x7a, [(super::Opcode::VCVTUDQ2PS, EVEXOperandCode::VCVTDQ2PS), (super::Opcode::VCVTUDQ2PS, EVEXOperandCode::VCVTDQ2PS), (super::Opcode::VCVTUDQ2PS, EVEXOperandCode::VCVTDQ2PS), (super::Opcode::VCVTUDQ2PS, EVEXOperandCode::VCVTDQ2PS)]), +  (0x7b, [(super::Opcode::VCVTUSI2SD, EVEXOperandCode::VCVTUSI2SD), (super::Opcode::VCVTUSI2SD, EVEXOperandCode::VCVTUSI2SD), (super::Opcode::VCVTUSI2SD, EVEXOperandCode::VCVTUSI2SD), (super::Opcode::VCVTUSI2SD, EVEXOperandCode::VCVTUSI2SD)]), +  (0x7e, [(super::Opcode::VMOVQ, EVEXOperandCode::VMOVQ_G_Ed_xmm), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x7f, [(super::Opcode::VMOVDQU8, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQU8, EVEXOperandCode::Em_G_LL), (super::Opcode::VMOVDQU8, EVEXOperandCode::Em_G_LL), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xc2, [(super::Opcode::VCMPSD, EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1), (super::Opcode::VCMPSD, EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1), (super::Opcode::VCMPSD, EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1), (super::Opcode::VCMPSD, EVEXOperandCode::Maskm_V_Eq_xmm_imm8_sae_W1)]), +  (0xe6, [(super::Opcode::VCVTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTPD2DQ, EVEXOperandCode::VCVTTPD2DQ), (super::Opcode::VCVTPD2DQ, EVEXOperandCode::VCVTTPD2DQ)]), +]; + +const EVEX_f3_0f38: [(u8, [(super::Opcode, EVEXOperandCode); 4]); 8] = [ +  (0x52, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VP4DPWSSD, EVEXOperandCode::Gm_V_zmm_M_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x53, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::VP4DPWSSDS, EVEXOperandCode::Gm_V_zmm_M_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x68, [(super::Opcode::VP2INTERSECTD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VP2INTERSECTD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::VP2INTERSECTD, EVEXOperandCode::Mask_V_E_LL_bcast), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x72, [(super::Opcode::VCVTNE2PS2BF16, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VCVTNE2PS2BF16, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::VCVTNE2PS2BF16, EVEXOperandCode::Gm_V_E_LL_bcast_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x9a, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::V4FMADDPS, EVEXOperandCode::Gm_V_zmm_M_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0x9b, [(super::Opcode::V4FMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FMADDSS, EVEXOperandCode::Gm_V_M_xmm)]),// W0 +  (0xaa, [(super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::Invalid, EVEXOperandCode::Nothing), (super::Opcode::V4FNMADDPS, EVEXOperandCode::Gm_V_zmm_M_xmm_W0), (super::Opcode::Invalid, EVEXOperandCode::Nothing)]), +  (0xab, [(super::Opcode::V4FNMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FNMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FNMADDSS, EVEXOperandCode::Gm_V_M_xmm), (super::Opcode::V4FNMADDSS, EVEXOperandCode::Gm_V_M_xmm)]),// W0 +]; +}  | 
