From 0b04fd05a955033dc781caaec6eb2b32f85c1b3f Mon Sep 17 00:00:00 2001 From: iximeow Date: Fri, 2 Jul 2021 19:37:56 -0700 Subject: fix several strict rejection for several --- src/shared/evex.in | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/shared') diff --git a/src/shared/evex.in b/src/shared/evex.in index 9c48d33..2bcd2f4 100644 --- a/src/shared/evex.in +++ b/src/shared/evex.in @@ -1196,6 +1196,9 @@ pub(crate) fn read_evex_operands::Address } generated::EVEXOperandCode::G_V_E_LL => { deny_mask_reg(instruction)?; + if [Opcode::VAESDECLAST, Opcode::VAESDEC, Opcode::VAESENC, Opcode::VAESENCLAST].contains(&instruction.opcode) { + deny_z(instruction)?; + } let sz = regs_size(instruction); @@ -3151,6 +3154,7 @@ pub(crate) fn read_evex_operands::Address } } generated::EVEXOperandCode::Gm_E_LL => { + deny_vex_reg(instruction)?; check_mask_reg(instruction)?; let sz = regs_size(instruction); @@ -4567,7 +4571,9 @@ pub(crate) fn read_evex_operands::Address let mem_oper = read_E_vex(words, instruction, modrm, RegisterBank::X)?; let item_size = if instruction.prefixes.evex_unchecked().vex().w() { - if instruction.opcode == Opcode::VRANGESS { + if instruction.opcode == Opcode::VRNDSCALESS { + return Err(DecodeError::InvalidOpcode); + } else if instruction.opcode == Opcode::VRANGESS { instruction.opcode = Opcode::VRANGESD; 8 } else if instruction.opcode == Opcode::VFPCLASSSS { @@ -4608,6 +4614,11 @@ pub(crate) fn read_evex_operands::Address set_reg_sizes(instruction, RegisterBank::X); } generated::EVEXOperandCode::Gm_V_E_xmm_imm8_sae => { + if instruction.opcode == Opcode::VRNDSCALESD { + if instruction.prefixes.evex_unchecked().vex().w() { + return Err(DecodeError::InvalidOpcode); + } + } let modrm = read_modrm(words)?; set_rrr(instruction, modrm); let mem_oper = read_E_vex(words, instruction, modrm, RegisterBank::X)?; -- cgit v1.1