From e6e7fabfc907eaf016520d9c2a2e128b0d28f019 Mon Sep 17 00:00:00 2001 From: iximeow Date: Fri, 22 Jul 2022 02:15:40 -0700 Subject: yax builds again with opcodes generated by type --- src/generated/imp.rs | 7234 +++++++++++++++++++++++++++++++++++++++++ src/generated/mod.rs | 15 + src/generated/opcode.rs | 7186 ++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + src/long_mode/display.rs | 1468 +-------- src/long_mode/mod.rs | 2150 +----------- src/protected_mode/display.rs | 1478 +-------- src/protected_mode/mod.rs | 2165 +----------- src/real_mode/display.rs | 1478 +-------- src/real_mode/mod.rs | 2165 +----------- 10 files changed, 14475 insertions(+), 10865 deletions(-) create mode 100644 src/generated/imp.rs create mode 100644 src/generated/mod.rs create mode 100644 src/generated/opcode.rs (limited to 'src') diff --git a/src/generated/imp.rs b/src/generated/imp.rs new file mode 100644 index 0000000..c028ff7 --- /dev/null +++ b/src/generated/imp.rs @@ -0,0 +1,7234 @@ +pub(crate) mod real_mode { + use crate::generated::real_mode::Opcode; + use crate::real_mode::{InstDecoder, Instruction, DecodeError}; + impl InstDecoder { + fn feature_sgx(&self) -> bool { + true + } + fn feature_smap(&self) -> bool { + true + } + fn feature_avx_unimplemented(&self) -> bool { + true + } + fn feature_uintr(&self) -> bool { + true + } + fn feature_pentium(&self) -> bool { + true + } + fn feature_aesni(&self) -> bool { + true + } + fn feature_invlpgb(&self) -> bool { + true + } + fn feature_fsgsbase(&self) -> bool { + true + } + fn feature_vmx(&self) -> bool { + true + } + fn feature_simd(&self) -> bool { + true + } + fn feature_avx(&self) -> bool { + true + } + fn feature_hreset(&self) -> bool { + true + } + fn feature_avx512_vp2intersect(&self) -> bool { + true + } + fn feature_rdpru(&self) -> bool { + true + } + fn feature_sse4_2(&self) -> bool { + true + } + fn feature_monitor(&self) -> bool { + true + } + fn feature_avx512_f_typo(&self) -> bool { + true + } + fn feature_sse4_1(&self) -> bool { + true + } + fn feature_avx512_dq(&self) -> bool { + true + } + fn feature_adx(&self) -> bool { + true + } + fn feature_fxsr(&self) -> bool { + true + } + fn feature_tsx(&self) -> bool { + true + } + fn feature_waitpkg(&self) -> bool { + true + } + fn feature_80286(&self) -> bool { + true + } + fn feature_sysenter(&self) -> bool { + true + } + fn feature_invpcid_unimplemented(&self) -> bool { + true + } + fn feature_avx512_4vnniw(&self) -> bool { + true + } + fn feature_avx512_vnni(&self) -> bool { + true + } + fn feature_avx512_pf(&self) -> bool { + true + } + fn feature_avx512_cd(&self) -> bool { + true + } + fn feature_avx512_bf16(&self) -> bool { + true + } + fn feature_avx512bw_unimplemented(&self) -> bool { + true + } + fn feature_mpk(&self) -> bool { + true + } + fn feature_avx512_f__vl_unimplemented(&self) -> bool { + true + } + fn feature_sha(&self) -> bool { + true + } + fn feature_cet(&self) -> bool { + true + } + fn feature_80486(&self) -> bool { + true + } + fn feature_sse(&self) -> bool { + true + } + fn feature_pentium_pro(&self) -> bool { + true + } + fn feature_itanium(&self) -> bool { + true + } + fn feature_mpx(&self) -> bool { + true + } + fn feature_extra_instructions(&self) -> bool { + true + } + fn feature_rdtscp(&self) -> bool { + true + } + fn feature_avx2(&self) -> bool { + true + } + fn feature_pconfig(&self) -> bool { + true + } + fn feature_avx512_ifma(&self) -> bool { + true + } + fn feature_gfni(&self) -> bool { + true + } + fn feature_vpclmulqdq(&self) -> bool { + true + } + fn feature_80386(&self) -> bool { + true + } + fn feature_movbe(&self) -> bool { + true + } + fn feature_avx512_f(&self) -> bool { + true + } + fn feature_emx(&self) -> bool { + true + } + fn feature_pclmulqdq(&self) -> bool { + true + } + fn feature_fma3(&self) -> bool { + true + } + fn feature_fma4(&self) -> bool { + true + } + fn feature_xsaveopt(&self) -> bool { + true + } + fn feature_syscall(&self) -> bool { + true + } + fn feature_sse4a(&self) -> bool { + true + } + fn feature_avx512_vpopcntdq(&self) -> bool { + true + } + fn feature_invpcid(&self) -> bool { + true + } + fn feature_80186_bound(&self) -> bool { + true + } + fn feature_tsxldtrk(&self) -> bool { + true + } + fn feature_cmov(&self) -> bool { + true + } + fn feature_avx512_bw(&self) -> bool { + true + } + fn feature_ssse3(&self) -> bool { + true + } + fn feature_clflushopt(&self) -> bool { + true + } + fn feature_80186_pusha(&self) -> bool { + true + } + fn feature_smx(&self) -> bool { + true + } + fn feature_8086_bcd(&self) -> bool { + true + } + fn feature_abm(&self) -> bool { + true + } + fn feature_3dnowprefetch(&self) -> bool { + true + } + fn feature_rdpid(&self) -> bool { + true + } + fn feature_lahfsahf(&self) -> bool { + true + } + fn feature_jcxz(&self) -> bool { + true + } + fn feature_enqcmd(&self) -> bool { + true + } + fn feature_new(&self) -> bool { + true + } + fn feature_ptwrite(&self) -> bool { + true + } + fn feature_avx512_vbmi(&self) -> bool { + true + } + fn feature_x87(&self) -> bool { + true + } + fn feature_mmx(&self) -> bool { + true + } + fn feature_avx512_bitalg(&self) -> bool { + true + } + fn feature_keylocker(&self) -> bool { + true + } + fn feature_80186(&self) -> bool { + true + } + fn feature_clwb(&self) -> bool { + true + } + fn feature_avx512_4fmaps(&self) -> bool { + true + } + fn feature_tdx(&self) -> bool { + true + } + fn feature_popcnt(&self) -> bool { + true + } + fn feature_snp(&self) -> bool { + true + } + fn feature_avx512_gfni(&self) -> bool { + true + } + fn feature_3dnow(&self) -> bool { + true + } + fn feature_avx512_vbmi2(&self) -> bool { + true + } + fn feature_8086(&self) -> bool { + true + } + fn feature_svm(&self) -> bool { + true + } + fn feature_sse3(&self) -> bool { + true + } + fn feature_sse2(&self) -> bool { + true + } + fn feature_avx512_er(&self) -> bool { + true + } + fn feature_xsave64(&self) -> bool { + true + } + fn feature_80286_arpl(&self) -> bool { + true + } + fn feature_bmi1(&self) -> bool { + true + } + fn feature_bmi2(&self) -> bool { + true + } + fn feature_movdir(&self) -> bool { + true + } + fn feature_vaes(&self) -> bool { + true + } + fn feature_xsave(&self) -> bool { + true + } + fn feature_rdrand(&self) -> bool { + true + } + fn feature_clzero(&self) -> bool { + true + } + fn feature_rdseed(&self) -> bool { + true + } + } + pub(crate) fn revise_instruction(decoder: &InstDecoder, inst: &mut Instruction) -> Result<(), DecodeError> { + if inst.prefixes.evex().is_some() { + if !decoder.avx512() { + return Err(DecodeError::InvalidOpcode); + } else { + return Ok(()); + } + } + + // for some instructions (tzcnt), not having an extension means the instruction is + // interpreted as another, rather than being simply rejected. + // we might still reject the alternate instruction later, if the extension adding *it* + // is also not supported. + if inst.opcode == Opcode::TZCNT { + if !decoder.bmi1() { + // tzcnt is only supported if bmi1 is enabled. without bmi1, this decodes as bsf. + inst.opcode = Opcode::BSF; + } + } + + match inst.opcode { + // we'll never be rejecting the instruction `Invalid` + Opcode::Invalid => {} + Opcode::ENCLS | + Opcode::ENCLU | + Opcode::ENCLV => { + if !decoder.feature_sgx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLAC | + Opcode::STAC => { + if !decoder.feature_smap() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMAXUB | + Opcode::VPMAXUB => { + if !decoder.feature_avx_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::UIRET | + Opcode::TESTUI | + Opcode::CLUI | + Opcode::STUI | + Opcode::SENDUIPI => { + if !decoder.feature_uintr() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CPUID | + Opcode::WRMSR | + Opcode::RDTSC | + Opcode::RDMSR | + Opcode::RSM | + Opcode::CMPXCHG8B => { + if !decoder.feature_pentium() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::AESKEYGENASSIST | + Opcode::AESIMC | + Opcode::AESENC | + Opcode::AESENCLAST | + Opcode::AESDEC | + Opcode::AESDECLAST => { + if !decoder.feature_aesni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVLPGB | + Opcode::TLBSYNC => { + if !decoder.feature_invlpgb() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDFSBASE | + Opcode::RDGSBASE | + Opcode::WRFSBASE | + Opcode::WRGSBASE => { + if !decoder.feature_fsgsbase() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VMPTRLD | + Opcode::VMPTRST | + Opcode::VMCLEAR | + Opcode::VMREAD | + Opcode::VMWRITE | + Opcode::VMCALL | + Opcode::VMLAUNCH | + Opcode::VMRESUME | + Opcode::VMXOFF | + Opcode::VMXON | + Opcode::INVEPT | + Opcode::INVVPID | + Opcode::VMFUNC => { + if !decoder.feature_vmx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VLDDQU | + Opcode::VPADDB | + Opcode::VPADDD | + Opcode::VPADDQ | + Opcode::VPADDW | + Opcode::VPABSB | + Opcode::VPABSW | + Opcode::VPABSD | + Opcode::VMAXSD | + Opcode::VMAXSS | + Opcode::VMINSD | + Opcode::VMINSS | + Opcode::VMULSD | + Opcode::VMULSS | + Opcode::VRCPSS | + Opcode::VPSUBUSB | + Opcode::VPSUBUSW | + Opcode::VXORPD | + Opcode::VXORPS | + Opcode::VPAVGB | + Opcode::VPAVGW | + Opcode::VANDNPD | + Opcode::VANDNPS | + Opcode::VPHADDD | + Opcode::VPHADDSW | + Opcode::VPHADDW | + Opcode::VANDPD | + Opcode::VANDPS | + Opcode::VPADDSB | + Opcode::VPADDSW | + Opcode::VPADDUSB | + Opcode::VPADDUSW | + Opcode::VPHSUBD | + Opcode::VPHSUBSW | + Opcode::VPHSUBW | + Opcode::VHADDPD | + Opcode::VHADDPS | + Opcode::VHSUBPD | + Opcode::VHSUBPS | + Opcode::VORPD | + Opcode::VORPS | + Opcode::VPBLENDVB | + Opcode::VPBLENDW | + Opcode::VADDSUBPD | + Opcode::VADDSUBPS | + Opcode::VRSQRTPS | + Opcode::VRSQRTSS | + Opcode::VPALIGNR | + Opcode::VPSUBSB | + Opcode::VPSUBSW | + Opcode::VPMULHUW | + Opcode::VPMULHW | + Opcode::VPMULLW | + Opcode::VPSHUFB | + Opcode::VPSHUFHW | + Opcode::VPSHUFLW | + Opcode::VPHMINPOSUW | + Opcode::VRCPPS | + Opcode::VMPSADBW | + Opcode::VPMADDUBSW | + Opcode::VPMADDWD | + Opcode::VMASKMOVDQU | + Opcode::VPMOVMSKB | + Opcode::VPSADBW | + Opcode::VPSLLDQ | + Opcode::VPSRLDQ | + Opcode::VDPPD | + Opcode::VDPPS | + Opcode::VLDMXCSR | + Opcode::VSTMXCSR | + Opcode::VMOVMSKPD | + Opcode::VMOVMSKPS | + Opcode::VPTEST | + Opcode::VTESTPD | + Opcode::VTESTPS | + Opcode::VPEXTRB | + Opcode::VPEXTRW | + Opcode::VPEXTRD | + Opcode::VPEXTRQ | + Opcode::VPACKSSDW | + Opcode::VPACKUSDW | + Opcode::VPACKSSWB | + Opcode::VPACKUSWB | + Opcode::VBLENDPD | + Opcode::VBLENDPS | + Opcode::VBLENDVPD | + Opcode::VBLENDVPS | + Opcode::VPMULHRSW | + Opcode::VPAND | + Opcode::VPANDN | + Opcode::VPOR | + Opcode::VPCMPEQB | + Opcode::VPCMPEQD | + Opcode::VPCMPEQQ | + Opcode::VPCMPEQW | + Opcode::VPCMPGTB | + Opcode::VPCMPGTD | + Opcode::VPCMPGTQ | + Opcode::VPCMPGTW | + Opcode::VPMAXSB | + Opcode::VPMAXSD | + Opcode::VPMAXSW | + Opcode::VPMAXUB | + Opcode::VPMAXUW | + Opcode::VPMINSB | + Opcode::VPMINSW | + Opcode::VPMINUB | + Opcode::VPMINUW | + Opcode::VPMAXUD | + Opcode::VPMINSD | + Opcode::VPSIGNB | + Opcode::VPSIGNW | + Opcode::VPSIGND | + Opcode::VPINSRB | + Opcode::VPINSRW | + Opcode::VPINSRD | + Opcode::VPINSRQ | + Opcode::VPMOVSXBD | + Opcode::VPMOVSXBQ | + Opcode::VPMOVSXBW | + Opcode::VPMOVSXDQ | + Opcode::VPMOVSXWD | + Opcode::VPMOVSXWQ | + Opcode::VPMOVZXBD | + Opcode::VPMOVZXBQ | + Opcode::VPMOVZXBW | + Opcode::VPMOVZXDQ | + Opcode::VPMOVZXWD | + Opcode::VPMOVZXWQ | + Opcode::VPMULDQ | + Opcode::VPMULLQ | + Opcode::VPMULLD | + Opcode::VPMULUDQ | + Opcode::VPSHUFD | + Opcode::VSHUFPD | + Opcode::VSHUFPS | + Opcode::VSQRTPD | + Opcode::VSQRTPS | + Opcode::VSQRTSS | + Opcode::VSQRTSD | + Opcode::VSUBPD | + Opcode::VSUBPS | + Opcode::VSUBSD | + Opcode::VSUBSS | + Opcode::VUCOMISD | + Opcode::VUCOMISS | + Opcode::VROUNDPD | + Opcode::VROUNDPS | + Opcode::VROUNDSD | + Opcode::VROUNDSS | + Opcode::VPSLLD | + Opcode::VPSLLQ | + Opcode::VPSLLW | + Opcode::VPSRAD | + Opcode::VPSRAW | + Opcode::VPSRLD | + Opcode::VPSRLQ | + Opcode::VPSRLW | + Opcode::VPSUBB | + Opcode::VPSUBW | + Opcode::VPSUBD | + Opcode::VPSUBQ | + Opcode::VPXOR | + Opcode::VPUNPCKHBW | + Opcode::VPUNPCKHWD | + Opcode::VPUNPCKHDQ | + Opcode::VPUNPCKHQDQ | + Opcode::VPUNPCKLBW | + Opcode::VPUNPCKLWD | + Opcode::VPUNPCKLDQ | + Opcode::VPUNPCKLQDQ | + Opcode::VUNPCKHPD | + Opcode::VUNPCKHPS | + Opcode::VUNPCKLPD | + Opcode::VUNPCKLPS | + Opcode::VPCMPESTRI | + Opcode::VPCMPESTRM | + Opcode::VPCMPISTRI | + Opcode::VPCMPISTRM | + Opcode::VBROADCASTSS | + Opcode::VBROADCASTSD | + Opcode::VBROADCASTF128 | + Opcode::VBROADCASTSD | + Opcode::VBROADCASTSS | + Opcode::VINSERTF128 | + Opcode::VEXTRACTF128 | + Opcode::VMASKMOVPD | + Opcode::VMASKMOVPS | + Opcode::VPERMILPD | + Opcode::VPERMILPS | + Opcode::VPERM2F128 | + Opcode::VZEROUPPER | + Opcode::VZEROALL => { + if !decoder.feature_avx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::HRESET => { + if !decoder.feature_hreset() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VP2INTERSECTD | + Opcode::VP2INTERSECTQ => { + if !decoder.feature_avx512_vp2intersect() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPRU => { + if !decoder.feature_rdpru() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CRC32 | + Opcode::PCMPESTRI | + Opcode::PCMPESTRM | + Opcode::PCMPISTRI | + Opcode::PCMPISTRM | + Opcode::PCMPGTQ => { + if !decoder.feature_sse4_2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MONITOR | + Opcode::MWAIT => { + if !decoder.feature_monitor() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPRORRD | + Opcode::VPRORRQ => { + if !decoder.feature_avx512_f_typo() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PHMINPOSUW | + Opcode::PMULDQ | + Opcode::PMULLD | + Opcode::DPPS | + Opcode::DPPD | + Opcode::PACKUSDW | + Opcode::PCMPEQQ | + Opcode::PTEST | + Opcode::MOVNTDQA | + Opcode::ROUNDSS | + Opcode::ROUNDSD | + Opcode::ROUNDPS | + Opcode::ROUNDPD | + Opcode::PMAXSB | + Opcode::PMAXSD | + Opcode::PMAXUW | + Opcode::PMAXUD | + Opcode::PMINSD | + Opcode::PMINSB | + Opcode::PMINUD | + Opcode::PMINUW | + Opcode::BLENDW | + Opcode::PBLENDW | + Opcode::BLENDVPS | + Opcode::BLENDVPD | + Opcode::PBLENDVB | + Opcode::BLENDPS | + Opcode::BLENDPD | + Opcode::MPSADBW | + Opcode::PMOVZXDQ | + Opcode::PMOVSXDQ | + Opcode::PMOVZXBD | + Opcode::PMOVSXBD | + Opcode::PMOVZXWQ | + Opcode::PMOVSXWQ | + Opcode::PMOVZXBQ | + Opcode::PMOVSXBQ | + Opcode::PMOVSXWD | + Opcode::PMOVZXWD | + Opcode::PEXTRQ | + Opcode::PEXTRD | + Opcode::PEXTRB | + Opcode::PMOVSXBW | + Opcode::PMOVZXBW | + Opcode::PINSRQ | + Opcode::PINSRD | + Opcode::PINSRB | + Opcode::EXTRACTPS | + Opcode::INSERTPS => { + if !decoder.feature_sse4_1() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::KANDB | + Opcode::KANDNB | + Opcode::KADDB | + Opcode::KTESTB | + Opcode::KADDW | + Opcode::KTESTW | + Opcode::KMOVB | + Opcode::KNOTB | + Opcode::KORB | + Opcode::KORTESTB | + Opcode::KSHIFTLB | + Opcode::KSHIFTRB | + Opcode::KXNORB | + Opcode::KXORB | + Opcode::VBROADCASTF32X2 | + Opcode::VBROADCASTF64X2 | + Opcode::VBROADCASTF32X8 | + Opcode::VBROADCASTI32X8 | + Opcode::VBROADCASTI64X2 | + Opcode::VBROADCASTI32X2 | + Opcode::VEXTRACTF32X8 | + Opcode::VEXTRACTI32X8 | + Opcode::VGETEXPSD | + Opcode::VGETEXPSS | + Opcode::VXORPD | + Opcode::VXORPS | + Opcode::VPEXTRD | + Opcode::VPEXTRQ | + Opcode::VPINSRD | + Opcode::VPINSRQ | + Opcode::VANDNPD | + Opcode::VANDNPS | + Opcode::VANDPD | + Opcode::VANDPS | + Opcode::VORPD | + Opcode::VORPS | + Opcode::VCVTTPD2QQ | + Opcode::VCVTPD2QQ | + Opcode::VCVTTPD2UQQ | + Opcode::VCVTPD2UQQ | + Opcode::VCVTTPS2QQ | + Opcode::VCVTPS2QQ | + Opcode::VCVTTPS2UQQ | + Opcode::VCVTPS2UQQ | + Opcode::VCVTUQQ2PD | + Opcode::VCVTUQQ2PS | + Opcode::VEXTRACTF64X2 | + Opcode::VEXTRACTI64X2 | + Opcode::VFPCLASSPD | + Opcode::VFPCLASSPS | + Opcode::VFPCLASSSD | + Opcode::VFPCLASSSS | + Opcode::VINSERTF64X2 | + Opcode::VINSERTF32X8 | + Opcode::VINSERTI32X8 | + Opcode::VINSERTI64X2 | + Opcode::VPMOVM2D | + Opcode::VPMOVM2Q | + Opcode::VPMOVB2D | + Opcode::VPMOVQ2M | + Opcode::VRANGEPD | + Opcode::VRANGEPS | + Opcode::VRANGESD | + Opcode::VRANGESS | + Opcode::VREDUCEPD | + Opcode::VREDUCEPS | + Opcode::VREDUCESD | + Opcode::VREDUCESS => { + if !decoder.feature_avx512_dq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ADCX | + Opcode::ADOX => { + if !decoder.feature_adx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::FXSAVE | + Opcode::FXRSTOR => { + if !decoder.feature_fxsr() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XABORT | + Opcode::XBEGIN | + Opcode::XEND | + Opcode::XTEST => { + if !decoder.feature_tsx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::TPAUSE | + Opcode::UMONITOR | + Opcode::UMWAIT => { + if !decoder.feature_waitpkg() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLTS | + Opcode::LAR | + Opcode::LGDT | + Opcode::LIDT | + Opcode::LLDT | + Opcode::LMSW | + Opcode::LSL | + Opcode::SGDT | + Opcode::SIDT | + Opcode::SLDT | + Opcode::SMSW | + Opcode::STR | + Opcode::LTR | + Opcode::VERR | + Opcode::VERW => { + if !decoder.feature_80286() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SYSENTER | + Opcode::SYSEXIT => { + if !decoder.feature_sysenter() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVVPID => { + if !decoder.feature_invpcid_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VP4DPWSSDS | + Opcode::VP4DPWSSD => { + if !decoder.feature_avx512_4vnniw() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPDPBUSDS | + Opcode::VPDPBUSD | + Opcode::VPDPWSSDS | + Opcode::VPDPWSSD => { + if !decoder.feature_avx512_vnni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VGATHERPF0DPD | + Opcode::VGATHERPF0DPS | + Opcode::VGATHERPF0QPD | + Opcode::VGATHERPF0QPS | + Opcode::VGATHERPF1DPD | + Opcode::VGATHERPF1DPS | + Opcode::VGATHERPF1QPD | + Opcode::VGATHERPF1QPS | + Opcode::VSCATTERPF0DPD | + Opcode::VSCATTERPF0DPS | + Opcode::VSCATTERPF0QPD | + Opcode::VSCATTERPF0QPS | + Opcode::VSCATTERPF1DPD | + Opcode::VSCATTERPF1DPS | + Opcode::VSCATTERPF1QPD | + Opcode::VSCATTERPF1QPS => { + if !decoder.feature_avx512_pf() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPBROADCASTMW2D | + Opcode::VPBROADCASTMB2Q | + Opcode::VPBROADCASTM | + Opcode::VPCONFLICTD | + Opcode::VPCONFLICTQ | + Opcode::VPLZCNTD | + Opcode::VPLZCNTQ => { + if !decoder.feature_avx512_cd() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VCVTNE2PS2BF16 | + Opcode::VCVTNEPS2BF16 | + Opcode::VDPBF16PS => { + if !decoder.feature_avx512_bf16() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMOVQ2M => { + if !decoder.feature_avx512bw_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPKRU | + Opcode::WRPKRU => { + if !decoder.feature_mpk() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD => { + if !decoder.feature_avx512_f__vl_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SHA1RNDS4 | + Opcode::SHA1NEXTE | + Opcode::SHA1MSG1 | + Opcode::SHA1MSG2 | + Opcode::SHA256RNDS2 | + Opcode::SHA256MSG1 | + Opcode::SHA256MSG2 => { + if !decoder.feature_sha() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::WRUSS | + Opcode::WRSS | + Opcode::INCSSP | + Opcode::SAVEPREVSSP | + Opcode::SETSSBSY | + Opcode::CLRSSBSY | + Opcode::RSTORSSP | + Opcode::ENDBR64 | + Opcode::ENDBR32 => { + if !decoder.feature_cet() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BSWAP | + Opcode::CMPXCHG | + Opcode::INVD | + Opcode::WBINVD | + Opcode::INVLPG | + Opcode::XADD => { + if !decoder.feature_80486() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVSS | + Opcode::ADDSS | + Opcode::SUBSS | + Opcode::MULSS | + Opcode::DIVSS | + Opcode::MINSS | + Opcode::MAXSS | + Opcode::SQRTSS | + Opcode::MOVUPS | + Opcode::MOVHLPS | + Opcode::MOVLPS | + Opcode::MOVHPS | + Opcode::MOVLHPS | + Opcode::UNPCKLPS | + Opcode::UNPCKHPS | + Opcode::PREFETCHNTA | + Opcode::PREFETCH0 | + Opcode::PREFETCH1 | + Opcode::PREFETCH2 | + Opcode::MOVAPS | + Opcode::CVTPI2PS | + Opcode::CVTSI2SS | + Opcode::MOVNTPS | + Opcode::CVTTSS2SI | + Opcode::CVTTPS2PI | + Opcode::CVTSS2SI | + Opcode::CVTPS2PI | + Opcode::UCOMISS | + Opcode::COMISS | + Opcode::SQRTPS | + Opcode::MOVMSKPS | + Opcode::RSQRTSS | + Opcode::RSQRTPS | + Opcode::RCPPS | + Opcode::RCPSS | + Opcode::ANDPS | + Opcode::ANDNPS | + Opcode::XORPS | + Opcode::ORPS | + Opcode::ADDPS | + Opcode::MULPS | + Opcode::SUBPS | + Opcode::MINPS | + Opcode::DIVPS | + Opcode::MAXPS | + Opcode::PSHUFW | + Opcode::LDMXCSR | + Opcode::STMXCSR | + Opcode::SFENCE | + Opcode::CMPPS | + Opcode::CMPSS | + Opcode::PINSRW | + Opcode::PEXTRW | + Opcode::SHUFPS | + Opcode::PMOVMSKB | + Opcode::PMINUB | + Opcode::PMAXUB | + Opcode::PAVGB | + Opcode::PAVGW | + Opcode::PMULHUW | + Opcode::MOVNTQ | + Opcode::PMINSW | + Opcode::PMAXSW | + Opcode::PSADBW | + Opcode::MASKMOVQ | + Opcode::LDMXCSR | + Opcode::STMXCSR => { + if !decoder.feature_sse() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::UD2 => { + if !decoder.feature_pentium_pro() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::JMPE => { + if !decoder.feature_itanium() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BNDMK | + Opcode::BNDCL | + Opcode::BNDCU | + Opcode::BNDCN | + Opcode::BNDMOV | + Opcode::BNDLDX | + Opcode::BNDSTX => { + if !decoder.feature_mpx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SWAPGS | + Opcode::SLHD | + Opcode::CDQE | + Opcode::MOVSXD | + Opcode::CMPXCHG16B => { + if !decoder.feature_extra_instructions() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDTSCP => { + if !decoder.feature_rdtscp() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VBROADCASTI128 | + Opcode::VPBROADCASTB | + Opcode::VPBROADCASTW | + Opcode::VPBROADCASTD | + Opcode::VPBROADCASTQ | + Opcode::VINSERTI128 | + Opcode::VEXTRACTI128 | + Opcode::VPMASKMOVD | + Opcode::VPMASKMOVQ | + Opcode::VPERMPS | + Opcode::VPERMD | + Opcode::VPERMPD | + Opcode::VPERMQ | + Opcode::VPERM2I128 | + Opcode::VPBLENDD | + Opcode::VPSLLVD | + Opcode::VPSLLVQ | + Opcode::VPSRLVD | + Opcode::VPSRLVQ | + Opcode::VPSRAVD => { + if !decoder.feature_avx2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PCONFIG => { + if !decoder.feature_pconfig() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMADD52HUQ | + Opcode::VPMADD52LUQ => { + if !decoder.feature_avx512_ifma() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::GF2P8AFFINEQB | + Opcode::GF2P8AFFINEINVQB | + Opcode::GF2P8MULB => { + if !decoder.feature_gfni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPCLMULQDQ => { + if !decoder.feature_vpclmulqdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BSF | + Opcode::BSR | + Opcode::BT | + Opcode::BTS | + Opcode::BTC | + Opcode::BTR | + Opcode::CDQ | + Opcode::CWDE | + Opcode::LDS | + Opcode::LES | + Opcode::LFS | + Opcode::LGS | + Opcode::LSS | + Opcode::MOVZX | + Opcode::MOVSX | + Opcode::SETO | + Opcode::SETNO | + Opcode::SETB | + Opcode::SETAE | + Opcode::SETZ | + Opcode::SETNZ | + Opcode::SETBE | + Opcode::SETA | + Opcode::SETS | + Opcode::SETNS | + Opcode::SETP | + Opcode::SETNP | + Opcode::SETL | + Opcode::SETGE | + Opcode::SETLE | + Opcode::SETG | + Opcode::SHLD | + Opcode::SHRD => { + if !decoder.feature_80386() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVBE => { + if !decoder.feature_movbe() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VCVTQQ2PD | + Opcode::VCVTQQ2PS | + Opcode::VCVTUSI2USD | + Opcode::VCVTUSI2USS | + Opcode::VEXTRACTF32X4 | + Opcode::VEXTRACTF64X4 | + Opcode::VEXTRACTI32X4 | + Opcode::VEXTRACTI64X4 | + Opcode::VFIXUPIMMSD | + Opcode::VFIXUPIMMSS | + Opcode::VINSERTI64X4 | + Opcode::VMOVDQA32 | + Opcode::VMOVDQA64 | + Opcode::VMOVDQU32 | + Opcode::VMOVDQU64 | + Opcode::VPCOMPRESSQ | + Opcode::VPCOMPRESSD | + Opcode::VSCALEDPD | + Opcode::VSCALEDPS | + Opcode::VSCALEDSD | + Opcode::VSCALEDSS | + Opcode::VSCATTERDD | + Opcode::VSCATTERDQ | + Opcode::VSCATTERQD | + Opcode::VSCATTERQQ | + Opcode::VADDPD | + Opcode::VADDPS | + Opcode::VCMPPD | + Opcode::VCMPPS | + Opcode::VCVTDQ2PD | + Opcode::VCVTDQ2PS | + Opcode::VCVTPD2DQ | + Opcode::VCVTPD2PS | + Opcode::VCVTPS2DQ | + Opcode::VCVTPS2PD | + Opcode::VCVTTPD2DQ | + Opcode::VCVTTPS2DQ | + Opcode::VDIVPD | + Opcode::VDIVPS | + Opcode::VMAXPD | + Opcode::VMAXPS | + Opcode::VMINPD | + Opcode::VMINPS | + Opcode::VMOVAPD | + Opcode::VMOVAPS | + Opcode::VMOVDDUP | + Opcode::VMOVDQA | + Opcode::VMOVDQU | + Opcode::VMOVNTDQA | + Opcode::VMOVNTDQ | + Opcode::VMOVNTPD | + Opcode::VMOVNTPS | + Opcode::VMOVSHDUP | + Opcode::VMOVSLDUP | + Opcode::VMOVUPD | + Opcode::VMOVUPS | + Opcode::VMULPD | + Opcode::VMULPS | + Opcode::VPANDD | + Opcode::VPANDQ | + Opcode::VPANDND | + Opcode::VPANDNQ | + Opcode::VPCMPEQD | + Opcode::VPCMPEQQ | + Opcode::VPCMPGTD | + Opcode::VPCMPGTQ | + Opcode::VPMAXSD | + Opcode::VPMAXSQ | + Opcode::VPMAXUD | + Opcode::VPMAXUQ | + Opcode::VPMINSD | + Opcode::VPMINSQ | + Opcode::VPMINUD | + Opcode::VPMINUQ | + Opcode::VPCMPD | + Opcode::VPCMPQ | + Opcode::VPCMPUD | + Opcode::VPCMPUQ | + Opcode::VPORD | + Opcode::VPORQ | + Opcode::VPXORD | + Opcode::VPXORQ | + Opcode::VPSLLD | + Opcode::VPSLLQ | + Opcode::VPSLLW | + Opcode::VPSRAD | + Opcode::VPSRAQ | + Opcode::VALIGND | + Opcode::VALIGNQ | + Opcode::VBLENDMPD | + Opcode::VBLENDMPS | + Opcode::VPROLD | + Opcode::VPROLQ | + Opcode::VPROLVD | + Opcode::VPROLVQ | + Opcode::VPRORD | + Opcode::VPRORQ | + Opcode::VPRORVD | + Opcode::VPRORVQ | + Opcode::VPUNPCKHDQ | + Opcode::VPUNPCKHQDQ | + Opcode::VPUNPCKLDQ | + Opcode::VPUNPCKLQDQ | + Opcode::VUNPCKHPD | + Opcode::VUNPCKHPS | + Opcode::VUNPCKLPD | + Opcode::VUNPCKLPS | + Opcode::VBROADCASTF32X4 | + Opcode::VBROADCASTF64X4 | + Opcode::VBROADCASTI64X4 | + Opcode::VBROADCASTI32X4 | + Opcode::VINSERTF32X4 | + Opcode::VINSERTI32X4 | + Opcode::VSHUFF32X4 | + Opcode::VSHUFF64X2 | + Opcode::VSHUFI32X4 | + Opcode::VSHUFI64X2 | + Opcode::VCOMPRESSD | + Opcode::VCOMPRESSQ | + Opcode::VCOMPRESSPD | + Opcode::VCOMPRESSPS | + Opcode::VEXPANDPD | + Opcode::VEXPANDPS | + Opcode::VCVTPD2UDQ | + Opcode::VCVTPS2UDQ | + Opcode::VCVTUDQ2PD | + Opcode::VCVTUDQ2PS | + Opcode::VCVTTPD2UDQ | + Opcode::VCVTTPS2UDQ | + Opcode::VFIXUPIMMPD | + Opcode::VFIXUPIMMPS | + Opcode::VCVTPH2PS | + Opcode::VCVTPS2PH | + Opcode::VFMADD132PD | + Opcode::VFMADD132PS | + Opcode::VFMADD213PD | + Opcode::VFMADD213PS | + Opcode::VFMADD231PD | + Opcode::VFMADD231PS | + Opcode::VFMADDSUB132PD | + Opcode::VFMADDSUB132PS | + Opcode::VFMADDSUB213PD | + Opcode::VFMADDSUB213PS | + Opcode::VFMADDSUB231PD | + Opcode::VFMADDSUB231PS | + Opcode::VFMSUB132PD | + Opcode::VFMSUB132PS | + Opcode::VFMSUB213PD | + Opcode::VFMSUB213PS | + Opcode::VFMSUB231PD | + Opcode::VFMSUB231PS | + Opcode::VFMSUBADD132PD | + Opcode::VFMSUBADD132PS | + Opcode::VFMSUBADD213PD | + Opcode::VFMSUBADD213PS | + Opcode::VFMSUBADD231PD | + Opcode::VFMSUBADD231PS | + Opcode::VFNMADD132PD | + Opcode::VFNMADD132PS | + Opcode::VFNMADD213PD | + Opcode::VFNMADD213PS | + Opcode::VFNMADD231PD | + Opcode::VFNMADD231PS | + Opcode::VFNMSUB132PD | + Opcode::VFNMSUB132PS | + Opcode::VFNMSUB213PD | + Opcode::VFNMSUB213PS | + Opcode::VFNMSUB231PD | + Opcode::VFNMSUB231PS | + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD | + Opcode::VGATHERDPD | + Opcode::VGATHERDPS | + Opcode::VGATHERQPD | + Opcode::VGATHERQPS | + Opcode::VGETEXPPD | + Opcode::VGETEXPPS | + Opcode::VGETMANTPD | + Opcode::VGETMANTPS | + Opcode::VPBLENDMD | + Opcode::VPBLENDMQ | + Opcode::VPERMD | + Opcode::VPERMQ | + Opcode::VPERMI2D | + Opcode::VPERMI2Q | + Opcode::VPERMI2PD | + Opcode::VPERMI2PS | + Opcode::VPERMT2D | + Opcode::VPERMT2Q | + Opcode::VPERMT2PD | + Opcode::VPERMT2PS | + Opcode::VPEXPANDD | + Opcode::VPEXPANDQ | + Opcode::VPGATHERDD | + Opcode::VPGATHERDQ | + Opcode::VPGATHERQD | + Opcode::VPGATHERQQ | + Opcode::VPSCATTERDD | + Opcode::VPSCATTERDQ | + Opcode::VPSCATTERQD | + Opcode::VPSCATTERQQ | + Opcode::VPMOVDB | + Opcode::VPMOVSDB | + Opcode::VPMOVUSDB | + Opcode::VPMOVDW | + Opcode::VPMOVSDW | + Opcode::VPMOVUSDW | + Opcode::VPMOVQB | + Opcode::VPMOVSQB | + Opcode::VPMOVUSQB | + Opcode::VPMOVQD | + Opcode::VPMOVSQD | + Opcode::VPMOVUSQD | + Opcode::VPMOVQW | + Opcode::VPMOVSQW | + Opcode::VPMOVUSQW | + Opcode::VPSRAVQ | + Opcode::VPTERNLOGD | + Opcode::VPTERNLOGQ | + Opcode::VPTESTMD | + Opcode::VPTESTMQ | + Opcode::VPTESTNMD | + Opcode::VPTESTNMQ | + Opcode::VRCP14PD | + Opcode::VRCP14PS | + Opcode::VRNDSCALEPD | + Opcode::VRNDSCALEPS | + Opcode::VRSQRT14PD | + Opcode::VRSQRT14PS | + Opcode::VSCALEFPS | + Opcode::VSCALEFPD | + Opcode::VPABSQ | + Opcode::VADDSD | + Opcode::VADDSS | + Opcode::VCMPSD | + Opcode::VCMPSS | + Opcode::VCOMISD | + Opcode::VCOMISS | + Opcode::VCVTSD2SI | + Opcode::VCVTSD2SS | + Opcode::VCVTSI2SS | + Opcode::VCVTSI2SD | + Opcode::VCVTSS2SD | + Opcode::VCVTSS2SI | + Opcode::VCVTTSS2SI | + Opcode::VCVTTSD2SI | + Opcode::VDIVSD | + Opcode::VDIVSS | + Opcode::VEXTRACTPS | + Opcode::VINSERTPS | + Opcode::VGETMANTSD | + Opcode::VGETMANTSS | + Opcode::VMOVD | + Opcode::VMOVQ | + Opcode::VMOVHLPS | + Opcode::VMOVHPD | + Opcode::VMOVHPS | + Opcode::VMOVLHPS | + Opcode::VMOVLPD | + Opcode::VMOVLPS | + Opcode::VMOVSS | + Opcode::VMOVSD | + Opcode::VSQRTSS | + Opcode::VSQRTSD | + Opcode::VSUBSD | + Opcode::VSUBSS | + Opcode::VUCOMISD | + Opcode::VUCOMISS | + Opcode::VRCP14SD | + Opcode::VRCP14SS | + Opcode::VRNDSCALESD | + Opcode::VRNDSCALESS | + Opcode::VRSQRT14SD | + Opcode::VRSQRT14SS | + Opcode::VSCALEFSS | + Opcode::VSCALEFSD | + Opcode::VINSERTF64X4 | + Opcode::VCVTUSI2SD | + Opcode::VCVTUSI2SS | + Opcode::VCVTSD2USI | + Opcode::VCVTSS2USI | + Opcode::VCVTTSD2USI | + Opcode::VCVTTSS2USI | + Opcode::KANDW | + Opcode::KANDNW | + Opcode::KMOVW | + Opcode::KNOTW | + Opcode::KORW | + Opcode::KORTESTW | + Opcode::KSHIFTLW | + Opcode::KSHIFTRW | + Opcode::KUNPCKBW | + Opcode::KXNORW | + Opcode::KXORW => { + if !decoder.feature_avx512_f() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MONITORX | + Opcode::MWAITX => { + if !decoder.feature_emx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PCLMULQDQ => { + if !decoder.feature_pclmulqdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VFMADD132PD | + Opcode::VFMADD132PS | + Opcode::VFMADD132SD | + Opcode::VFMADD132SS | + Opcode::VFMADD213PD | + Opcode::VFMADD213PS | + Opcode::VFMADD213SD | + Opcode::VFMADD213SS | + Opcode::VFMADD231PD | + Opcode::VFMADD231PS | + Opcode::VFMADD231SD | + Opcode::VFMADD231SS | + Opcode::VFMADDSUB132PD | + Opcode::VFMADDSUB132PS | + Opcode::VFMADDSUB213PD | + Opcode::VFMADDSUB213PS | + Opcode::VFMADDSUB231PD | + Opcode::VFMADDSUB231PS | + Opcode::VFMSUB132PD | + Opcode::VFMSUB132PS | + Opcode::VFMSUB132SD | + Opcode::VFMSUB132SS | + Opcode::VFMSUB213PD | + Opcode::VFMSUB213PS | + Opcode::VFMSUB213SD | + Opcode::VFMSUB213SS | + Opcode::VFMSUB231PD | + Opcode::VFMSUB231PS | + Opcode::VFMSUB231SD | + Opcode::VFMSUB231SS | + Opcode::VFMSUBADD132PD | + Opcode::VFMSUBADD132PS | + Opcode::VFMSUBADD213PD | + Opcode::VFMSUBADD213PS | + Opcode::VFMSUBADD231PD | + Opcode::VFMSUBADD231PS | + Opcode::VFNMADD132PD | + Opcode::VFNMADD132PS | + Opcode::VFNMADD132SD | + Opcode::VFNMADD132SS | + Opcode::VFNMADD213PD | + Opcode::VFNMADD213PS | + Opcode::VFNMADD213SD | + Opcode::VFNMADD213SS | + Opcode::VFNMADD231PD | + Opcode::VFNMADD231PS | + Opcode::VFNMADD231SD | + Opcode::VFNMADD231SS | + Opcode::VFNMSUB132PD | + Opcode::VFNMSUB132PS | + Opcode::VFNMSUB132SD | + Opcode::VFNMSUB132SS | + Opcode::VFNMSUB213PD | + Opcode::VFNMSUB213PS | + Opcode::VFNMSUB213SD | + Opcode::VFNMSUB213SS | + Opcode::VFNMSUB231PD | + Opcode::VFNMSUB231PS | + Opcode::VFNMSUB231SD | + Opcode::VFNMSUB231SS => { + if !decoder.feature_fma3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XSAVEOPT => { + if !decoder.feature_xsaveopt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SYSCALL | + Opcode::SYSRET => { + if !decoder.feature_syscall() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::EXTRQ | + Opcode::INSERTQ | + Opcode::MOVNTSD | + Opcode::MOVNTSS => { + if !decoder.feature_sse4a() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPOPCNTD | + Opcode::VPOPCNTQ => { + if !decoder.feature_avx512_vpopcntdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVEPT | + Opcode::INVVPID | + Opcode::INVPCID => { + if !decoder.feature_invpcid() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BOUND => { + if !decoder.feature_80186_bound() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XSUSLDTRK | + Opcode::XRESLDTRK => { + if !decoder.feature_tsxldtrk() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CMOVA | + Opcode::CMOVB | + Opcode::CMOVG | + Opcode::CMOVGE | + Opcode::CMOVL | + Opcode::CMOVLE | + Opcode::CMOVNA | + Opcode::CMOVNB | + Opcode::CMOVNO | + Opcode::CMOVNP | + Opcode::CMOVNS | + Opcode::CMOVNZ | + Opcode::CMOVO | + Opcode::CMOVP | + Opcode::CMOVS | + Opcode::CMOVZ => { + if !decoder.feature_cmov() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::KANDQ | + Opcode::KANDD | + Opcode::KANDNQ | + Opcode::KANDND | + Opcode::KMOVD | + Opcode::KMOVQ | + Opcode::KNOTD | + Opcode::KNOTQ | + Opcode::KORD | + Opcode::KORQ | + Opcode::KADDD | + Opcode::KTESTD | + Opcode::KADDQ | + Opcode::KTESTQ | + Opcode::KORTESTD | + Opcode::KORTESTQ | + Opcode::KSHIFTLD | + Opcode::KSHIFTRD | + Opcode::KSHIFTLQ | + Opcode::KSHIFTRQ | + Opcode::KUNPCKWD | + Opcode::KUNPCKDQ | + Opcode::KXNORD | + Opcode::KXNORQ | + Opcode::KXORD | + Opcode::KXORQ | + Opcode::VPCMPEQB | + Opcode::VPCMPEQW | + Opcode::VPCMPGTB | + Opcode::VPCMPGTW | + Opcode::VPSUBUSB | + Opcode::VPSUBUSW | + Opcode::VPERMW | + Opcode::VPERMI2W | + Opcode::VPERMT2W | + Opcode::VPSLLVW | + Opcode::VPSRAVW | + Opcode::VPSRLVW | + Opcode::VPEXTRB | + Opcode::VPEXTRW | + Opcode::VPINSRB | + Opcode::VPINSRW | + Opcode::VPMULHUW | + Opcode::VPMULHRSW | + Opcode::VPADDSB | + Opcode::VPADDSW | + Opcode::VPADDUSB | + Opcode::VPADDUSW | + Opcode::VPALIGNR | + Opcode::VPMOVD2M | + Opcode::VPMOVQ2M | + Opcode::VPMOVWB | + Opcode::VDBPSADBW | + Opcode::VMOVDQU8 | + Opcode::VMOVDQU16 | + Opcode::VPBLENDMB | + Opcode::VPBLENDMW | + Opcode::VPCMPB | + Opcode::VPCMPUB | + Opcode::VPCMPW | + Opcode::VPCMPUW | + Opcode::VPERMW | + Opcode::VPERMI2B | + Opcode::VPERMI2W | + Opcode::VPMOVM2B | + Opcode::VPMOVM2W | + Opcode::VPMOVB2M | + Opcode::VPMOVW2M | + Opcode::VPMOVSWB | + Opcode::VPMOVUSWB | + Opcode::VPSLLVW | + Opcode::VPSRAVW | + Opcode::VPSRLVW | + Opcode::VPTESTNMB | + Opcode::VPTESTNMW | + Opcode::VPTESTMB | + Opcode::VPTESTMW => { + if !decoder.feature_avx512_bw() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PALIGNR | + Opcode::PSIGNW | + Opcode::PSIGND | + Opcode::PSIGNB | + Opcode::PSHUFB | + Opcode::PMULHRSW | + Opcode::PMADDUBSW | + Opcode::PABSD | + Opcode::PABSW | + Opcode::PABSB | + Opcode::PHSUBSW | + Opcode::PHSUBW | + Opcode::PHSUBD | + Opcode::PHADDD | + Opcode::PHADDSW | + Opcode::PHADDW => { + if !decoder.feature_ssse3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLFLUSHOPT => { + if !decoder.feature_clflushopt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PUSHA | + Opcode::POPA => { + if !decoder.feature_80186_pusha() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::GETSEC => { + if !decoder.feature_smx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::AAA | + Opcode::AAD | + Opcode::AAM | + Opcode::AAS | + Opcode::DAA | + Opcode::DAS => { + if !decoder.feature_8086_bcd() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::POPCNT | + Opcode::LZCNT => { + if !decoder.feature_abm() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PREFETCHW => { + if !decoder.feature_3dnowprefetch() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPID => { + if !decoder.feature_rdpid() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::LAHF | + Opcode::SAHF => { + if !decoder.feature_lahfsahf() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::JCXZ => { + if !decoder.feature_jcxz() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ENQCMD | + Opcode::ENQCMDS => { + if !decoder.feature_enqcmd() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PTWRITE => { + if !decoder.feature_ptwrite() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPERMT2B | + Opcode::VPERMB => { + if !decoder.feature_avx512_vbmi() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::F2XM1 | + Opcode::FABS | + Opcode::FADD | + Opcode::FADDP | + Opcode::FBLD | + Opcode::FBSTP | + Opcode::FCHS | + Opcode::FCMOVB | + Opcode::FCMOVBE | + Opcode::FCMOVE | + Opcode::FCMOVNB | + Opcode::FCMOVNBE | + Opcode::FCMOVNE | + Opcode::FCMOVNU | + Opcode::FCMOVU | + Opcode::FCOM | + Opcode::FCOMI | + Opcode::FCOMIP | + Opcode::FCOMP | + Opcode::FCOMPP | + Opcode::FCOS | + Opcode::FDECSTP | + Opcode::FDISI8087_NOP | + Opcode::FDIV | + Opcode::FDIVP | + Opcode::FDIVR | + Opcode::FDIVRP | + Opcode::FENI8087_NOP | + Opcode::FFREE | + Opcode::FFREEP | + Opcode::FIADD | + Opcode::FICOM | + Opcode::FICOMP | + Opcode::FIDIV | + Opcode::FIDIVR | + Opcode::FILD | + Opcode::FIMUL | + Opcode::FINCSTP | + Opcode::FIST | + Opcode::FISTP | + Opcode::FISTTP | + Opcode::FISUB | + Opcode::FISUBR | + Opcode::FLD | + Opcode::FLD1 | + Opcode::FLDCW | + Opcode::FLDENV | + Opcode::FLDL2E | + Opcode::FLDL2T | + Opcode::FLDLG2 | + Opcode::FLDLN2 | + Opcode::FLDPI | + Opcode::FLDZ | + Opcode::FMUL | + Opcode::FMULP | + Opcode::FNCLEX | + Opcode::FNINIT | + Opcode::FNOP | + Opcode::FNSAVE | + Opcode::FNSTCW | + Opcode::FNSTENV | + Opcode::FNSTOR | + Opcode::FNSTSW | + Opcode::FPATAN | + Opcode::FPREM | + Opcode::FPREM1 | + Opcode::FPTAN | + Opcode::FRNDINT | + Opcode::FRSTOR | + Opcode::FSCALE | + Opcode::FSETPM287_NOP | + Opcode::FSIN | + Opcode::FSINCOS | + Opcode::FSQRT | + Opcode::FST | + Opcode::FSTP | + Opcode::FSTPNCE | + Opcode::FSUB | + Opcode::FSUBP | + Opcode::FSUBR | + Opcode::FSUBRP | + Opcode::FTST | + Opcode::FUCOM | + Opcode::FUCOMI | + Opcode::FUCOMIP | + Opcode::FUCOMP | + Opcode::FUCOMPP | + Opcode::FXAM | + Opcode::FXCH | + Opcode::FXTRACT | + Opcode::FYL2X | + Opcode::FYL2XP1 => { + if !decoder.feature_x87() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPMC | + Opcode::PUNPCKLBW | + Opcode::PUNPCKLWD | + Opcode::PUNPCKLDQ | + Opcode::PACKSSWB | + Opcode::PCMPGTB | + Opcode::PCMPGTD | + Opcode::PCMPGTW | + Opcode::PACKUSWB | + Opcode::PUNPCKHBW | + Opcode::PUNPCKHWD | + Opcode::PUNPCKHDQ | + Opcode::PACKSSDW | + Opcode::MOVD | + Opcode::MOVQ | + Opcode::PCMPEQB | + Opcode::PCMPEQD | + Opcode::PCMPEQW | + Opcode::PSRLW | + Opcode::PSRLD | + Opcode::PSRLQ | + Opcode::PMULLW | + Opcode::PSUBUSB | + Opcode::PSUBUSW | + Opcode::PAND | + Opcode::PADDUSB | + Opcode::PADDUSW | + Opcode::PANDN | + Opcode::PSRAW | + Opcode::PSRAD | + Opcode::PMULHW | + Opcode::PSUBSB | + Opcode::PSUBSW | + Opcode::POR | + Opcode::PADDSB | + Opcode::PADDSW | + Opcode::PXOR | + Opcode::PSLLW | + Opcode::PSLLD | + Opcode::PSLLQ | + Opcode::PMADDWD | + Opcode::PSUBB | + Opcode::PSUBW | + Opcode::PSUBD | + Opcode::PADDB | + Opcode::PADDW | + Opcode::PADDD | + Opcode::EMMS => { + if !decoder.feature_mmx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPOPCNTD | + Opcode::VPOPCNTQ | + Opcode::VPOPCNTB | + Opcode::VPOPCNTW | + Opcode::VPSHUFBITQMB | + Opcode::VPMULTISHIFTQB => { + if !decoder.feature_avx512_bitalg() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::AESDEC128KL | + Opcode::AESDEC256KL | + Opcode::AESDECWIDE128KL | + Opcode::AESDECWIDE256KL | + Opcode::AESENC128KL | + Opcode::AESENC256KL | + Opcode::AESENCWIDE128KL | + Opcode::AESENCWIDE256KL | + Opcode::ENCODEKEY128 | + Opcode::ENCODEKEY256 | + Opcode::LOADIWKEY => { + if !decoder.feature_keylocker() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ENTER | + Opcode::LEAVE | + Opcode::INS | + Opcode::OUTS => { + if !decoder.feature_80186() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLWB => { + if !decoder.feature_clwb() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::V4FNMADDSS | + Opcode::V4FNMADDPS | + Opcode::V4FMADDSS | + Opcode::V4FMADDPS => { + if !decoder.feature_avx512_4fmaps() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::TDCALL | + Opcode::SEAMRET | + Opcode::SEAMOPS | + Opcode::SEAMCALL => { + if !decoder.feature_tdx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::POPCNT => { + if !decoder.feature_popcnt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PSMASH | + Opcode::PVALIDATE | + Opcode::RMPADJUST | + Opcode::RMPUPDATE => { + if !decoder.feature_snp() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VGF2P8AFFINEQB | + Opcode::VGF2P8AFFINEINVQB | + Opcode::VGF2P8MULB => { + if !decoder.feature_avx512_gfni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::FEMMS | + Opcode::PI2FW | + Opcode::PI2FD | + Opcode::PF2IW | + Opcode::PF2ID | + Opcode::PMULHRW | + Opcode::PFCMPGE | + Opcode::PFMIN | + Opcode::PFRCP | + Opcode::PFRSQRT | + Opcode::PFSUB | + Opcode::PFADD | + Opcode::PFCMPGT | + Opcode::PFMAX | + Opcode::PFRCPIT1 | + Opcode::PFRSQIT1 | + Opcode::PFSUBR | + Opcode::PFACC | + Opcode::PFCMPEQ | + Opcode::PFMUL | + Opcode::PFMULHRW | + Opcode::PFRCPIT2 | + Opcode::PFNACC | + Opcode::PFPNACC | + Opcode::PSWAPD | + Opcode::PAVGUSB => { + if !decoder.feature_3dnow() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPCOMPRESSB | + Opcode::VPCOMPRESSW | + Opcode::VPSHLDVW | + Opcode::VPSHLDW | + Opcode::VPEXPANDB | + Opcode::VPEXPANDW | + Opcode::VPSHRDVW | + Opcode::VPSHRDW | + Opcode::VPSHLDVQ | + Opcode::VPSHLDVD | + Opcode::VPSHLDQ | + Opcode::VPSHLDD | + Opcode::VPSHRDQ | + Opcode::VPSHRDD | + Opcode::VPSHRDVQ | + Opcode::VPSHRDVD => { + if !decoder.feature_avx512_vbmi2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CMC | + Opcode::CLC | + Opcode::STC | + Opcode::CLI | + Opcode::STI | + Opcode::CLD | + Opcode::STD | + Opcode::ADD | + Opcode::OR | + Opcode::ADC | + Opcode::SBB | + Opcode::AND | + Opcode::XOR | + Opcode::SUB | + Opcode::CMP | + Opcode::SAR | + Opcode::SAL | + Opcode::SHR | + Opcode::SHL | + Opcode::RCR | + Opcode::RCL | + Opcode::ROR | + Opcode::ROL | + Opcode::INC | + Opcode::DEC | + Opcode::HLT | + Opcode::CALL | + Opcode::CALLF | + Opcode::JMP | + Opcode::JMPF | + Opcode::PUSH | + Opcode::POP | + Opcode::LEA | + Opcode::NOP | + Opcode::XCHG | + Opcode::POPF | + Opcode::INT | + Opcode::INTO | + Opcode::IRET | + Opcode::IRETD | + Opcode::IRETQ | + Opcode::RETF | + Opcode::ENTER | + Opcode::LEAVE | + Opcode::MOV | + Opcode::RETURN | + Opcode::PUSHF | + Opcode::WAIT | + Opcode::CBW | + Opcode::CWD | + Opcode::CQO | + Opcode::LODS | + Opcode::STOS | + Opcode::CMPS | + Opcode::SCAS | + Opcode::MOVS | + Opcode::TEST | + Opcode::IN | + Opcode::OUT | + Opcode::IMUL | + Opcode::JO | + Opcode::JNO | + Opcode::JB | + Opcode::JNB | + Opcode::JZ | + Opcode::JNZ | + Opcode::JA | + Opcode::JNA | + Opcode::JS | + Opcode::JNS | + Opcode::JP | + Opcode::JNP | + Opcode::JL | + Opcode::JGE | + Opcode::JLE | + Opcode::JG | + Opcode::UD0 | + Opcode::UD1 | + Opcode::UD2 | + Opcode::DIV | + Opcode::IDIV | + Opcode::MUL | + Opcode::NEG | + Opcode::NOT | + Opcode::XLAT | + Opcode::LOOPNZ | + Opcode::LOOPZ | + Opcode::LOOP | + Opcode::SALC => { + if !decoder.feature_8086() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLGI | + Opcode::STGI | + Opcode::SKINIT | + Opcode::VMLOAD | + Opcode::VMMCALL | + Opcode::VMSAVE | + Opcode::VMRUN | + Opcode::INVLPGA => { + if !decoder.feature_svm() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ADDSUBPD | + Opcode::ADDSUBPS | + Opcode::HSUBPD | + Opcode::HADDPD | + Opcode::MOVSLDUP | + Opcode::MOVSHDUP | + Opcode::MOVDDUP | + Opcode::HADDPS | + Opcode::HSUBPS | + Opcode::LDDQU => { + if !decoder.feature_sse3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVUPD | + Opcode::PSRLDQ | + Opcode::PSLLDQ | + Opcode::MOVSD | + Opcode::MOVLPD | + Opcode::UNPCKLPD | + Opcode::UNPCKHPD | + Opcode::MOVHPD | + Opcode::MOVAPD | + Opcode::MOVMSKPD | + Opcode::CVTPI2PD | + Opcode::CVTSI2SD | + Opcode::MOVNTPD | + Opcode::MOVNTI | + Opcode::MOVNTDQ | + Opcode::CVTTPD2PI | + Opcode::CVTTSD2SI | + Opcode::CVTPD2PI | + Opcode::CVTSD2SI | + Opcode::UCOMISD | + Opcode::COMISD | + Opcode::SQRTPD | + Opcode::SQRTSD | + Opcode::ANDPD | + Opcode::ANDNPD | + Opcode::ORPD | + Opcode::XORPD | + Opcode::ADDPD | + Opcode::ADDSD | + Opcode::MULSD | + Opcode::MULPD | + Opcode::CVTPS2PD | + Opcode::CVTPD2PS | + Opcode::CVTSS2SD | + Opcode::CVTSD2SS | + Opcode::CVTPS2DQ | + Opcode::CVTDQ2PS | + Opcode::CVTTPS2DQ | + Opcode::SUBSD | + Opcode::SUBPD | + Opcode::MINPD | + Opcode::MINSD | + Opcode::DIVPD | + Opcode::DIVSD | + Opcode::MAXPD | + Opcode::MAXSD | + Opcode::PUNPCKLQDQ | + Opcode::PUNPCKHQDQ | + Opcode::MOVDQA | + Opcode::MOVDQU | + Opcode::PSHUFHW | + Opcode::PSHUFLW | + Opcode::PSHUFD | + Opcode::LFENCE | + Opcode::MFENCE | + Opcode::CLFLUSH | + Opcode::CMPPD | + Opcode::CMPPS | + Opcode::CMPSD | + Opcode::SHUFPD | + Opcode::PADDQ | + Opcode::MOVQ2DQ | + Opcode::MOVDQ2Q | + Opcode::CVTPD2DQ | + Opcode::CVTTPD2DQ | + Opcode::CVTDQ2PD | + Opcode::PMULUDQ | + Opcode::MASKMOVDQU | + Opcode::PSUBQ => { + if !decoder.feature_sse2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VEXP2PD | + Opcode::VEXP2PS | + Opcode::VEXP2SD | + Opcode::VEXP2SS | + Opcode::VRCP28PD | + Opcode::VRCP28PS | + Opcode::VRCP28SD | + Opcode::VRCP28SS | + Opcode::VRSQRT28PD | + Opcode::VRSQRT28PS | + Opcode::VRSQRT28SD | + Opcode::VRSQRT28SS => { + if !decoder.feature_avx512_er() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XRSTORS64 | + Opcode::XSAVEC64 | + Opcode::XSAVES64 => { + if !decoder.feature_xsave64() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ARPL => { + if !decoder.feature_80286_arpl() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ANDN | + Opcode::BEXTR | + Opcode::BLSI | + Opcode::BLSMSK | + Opcode::BLSR | + Opcode::TZCNT => { + if !decoder.feature_bmi1() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BZHI | + Opcode::MULX | + Opcode::PDEP | + Opcode::PEXT | + Opcode::RORX | + Opcode::SARX | + Opcode::SHRX | + Opcode::SHLX => { + if !decoder.feature_bmi2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVDIRI | + Opcode::MOVDIR64B => { + if !decoder.feature_movdir() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VAESDEC | + Opcode::VAESDECLAST | + Opcode::VAESENC | + Opcode::VAESENCLAST | + Opcode::VAESIMC | + Opcode::VAESKEYGENASSIST => { + if !decoder.feature_vaes() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XGETBV | + Opcode::XRSTOR | + Opcode::XRSTORS | + Opcode::XSAVE | + Opcode::XSAVEC | + Opcode::XSAVES | + Opcode::XSETBV => { + if !decoder.feature_xsave() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDRAND => { + if !decoder.feature_rdrand() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLZERO => { + if !decoder.feature_clzero() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDSEED => { + if !decoder.feature_rdseed() { + return Err(DecodeError::InvalidOpcode); + + } + } + } + Ok(()) + } +} + +pub(crate) mod protected_mode { + use crate::generated::protected_mode::Opcode; + use crate::protected_mode::{InstDecoder, Instruction, DecodeError}; + impl InstDecoder { + fn feature_sgx(&self) -> bool { + true + } + fn feature_smap(&self) -> bool { + true + } + fn feature_avx_unimplemented(&self) -> bool { + true + } + fn feature_uintr(&self) -> bool { + true + } + fn feature_pentium(&self) -> bool { + true + } + fn feature_aesni(&self) -> bool { + true + } + fn feature_invlpgb(&self) -> bool { + true + } + fn feature_fsgsbase(&self) -> bool { + true + } + fn feature_vmx(&self) -> bool { + true + } + fn feature_simd(&self) -> bool { + true + } + fn feature_avx(&self) -> bool { + true + } + fn feature_hreset(&self) -> bool { + true + } + fn feature_avx512_vp2intersect(&self) -> bool { + true + } + fn feature_rdpru(&self) -> bool { + true + } + fn feature_sse4_2(&self) -> bool { + true + } + fn feature_monitor(&self) -> bool { + true + } + fn feature_avx512_f_typo(&self) -> bool { + true + } + fn feature_sse4_1(&self) -> bool { + true + } + fn feature_avx512_dq(&self) -> bool { + true + } + fn feature_adx(&self) -> bool { + true + } + fn feature_fxsr(&self) -> bool { + true + } + fn feature_tsx(&self) -> bool { + true + } + fn feature_waitpkg(&self) -> bool { + true + } + fn feature_80286(&self) -> bool { + true + } + fn feature_sysenter(&self) -> bool { + true + } + fn feature_invpcid_unimplemented(&self) -> bool { + true + } + fn feature_avx512_4vnniw(&self) -> bool { + true + } + fn feature_avx512_vnni(&self) -> bool { + true + } + fn feature_avx512_pf(&self) -> bool { + true + } + fn feature_avx512_cd(&self) -> bool { + true + } + fn feature_avx512_bf16(&self) -> bool { + true + } + fn feature_avx512bw_unimplemented(&self) -> bool { + true + } + fn feature_mpk(&self) -> bool { + true + } + fn feature_avx512_f__vl_unimplemented(&self) -> bool { + true + } + fn feature_sha(&self) -> bool { + true + } + fn feature_cet(&self) -> bool { + true + } + fn feature_80486(&self) -> bool { + true + } + fn feature_sse(&self) -> bool { + true + } + fn feature_pentium_pro(&self) -> bool { + true + } + fn feature_itanium(&self) -> bool { + true + } + fn feature_mpx(&self) -> bool { + true + } + fn feature_extra_instructions(&self) -> bool { + true + } + fn feature_rdtscp(&self) -> bool { + true + } + fn feature_avx2(&self) -> bool { + true + } + fn feature_pconfig(&self) -> bool { + true + } + fn feature_avx512_ifma(&self) -> bool { + true + } + fn feature_gfni(&self) -> bool { + true + } + fn feature_vpclmulqdq(&self) -> bool { + true + } + fn feature_80386(&self) -> bool { + true + } + fn feature_movbe(&self) -> bool { + true + } + fn feature_avx512_f(&self) -> bool { + true + } + fn feature_emx(&self) -> bool { + true + } + fn feature_pclmulqdq(&self) -> bool { + true + } + fn feature_fma3(&self) -> bool { + true + } + fn feature_fma4(&self) -> bool { + true + } + fn feature_xsaveopt(&self) -> bool { + true + } + fn feature_syscall(&self) -> bool { + true + } + fn feature_sse4a(&self) -> bool { + true + } + fn feature_avx512_vpopcntdq(&self) -> bool { + true + } + fn feature_invpcid(&self) -> bool { + true + } + fn feature_80186_bound(&self) -> bool { + true + } + fn feature_tsxldtrk(&self) -> bool { + true + } + fn feature_cmov(&self) -> bool { + true + } + fn feature_avx512_bw(&self) -> bool { + true + } + fn feature_ssse3(&self) -> bool { + true + } + fn feature_clflushopt(&self) -> bool { + true + } + fn feature_80186_pusha(&self) -> bool { + true + } + fn feature_smx(&self) -> bool { + true + } + fn feature_8086_bcd(&self) -> bool { + true + } + fn feature_abm(&self) -> bool { + true + } + fn feature_3dnowprefetch(&self) -> bool { + true + } + fn feature_rdpid(&self) -> bool { + true + } + fn feature_lahfsahf(&self) -> bool { + true + } + fn feature_enqcmd(&self) -> bool { + true + } + fn feature_jecxz(&self) -> bool { + true + } + fn feature_new(&self) -> bool { + true + } + fn feature_ptwrite(&self) -> bool { + true + } + fn feature_avx512_vbmi(&self) -> bool { + true + } + fn feature_x87(&self) -> bool { + true + } + fn feature_mmx(&self) -> bool { + true + } + fn feature_avx512_bitalg(&self) -> bool { + true + } + fn feature_keylocker(&self) -> bool { + true + } + fn feature_80186(&self) -> bool { + true + } + fn feature_clwb(&self) -> bool { + true + } + fn feature_avx512_4fmaps(&self) -> bool { + true + } + fn feature_tdx(&self) -> bool { + true + } + fn feature_popcnt(&self) -> bool { + true + } + fn feature_snp(&self) -> bool { + true + } + fn feature_avx512_gfni(&self) -> bool { + true + } + fn feature_3dnow(&self) -> bool { + true + } + fn feature_avx512_vbmi2(&self) -> bool { + true + } + fn feature_8086(&self) -> bool { + true + } + fn feature_svm(&self) -> bool { + true + } + fn feature_sse3(&self) -> bool { + true + } + fn feature_sse2(&self) -> bool { + true + } + fn feature_avx512_er(&self) -> bool { + true + } + fn feature_xsave64(&self) -> bool { + true + } + fn feature_80286_arpl(&self) -> bool { + true + } + fn feature_bmi1(&self) -> bool { + true + } + fn feature_bmi2(&self) -> bool { + true + } + fn feature_movdir(&self) -> bool { + true + } + fn feature_vaes(&self) -> bool { + true + } + fn feature_xsave(&self) -> bool { + true + } + fn feature_rdrand(&self) -> bool { + true + } + fn feature_clzero(&self) -> bool { + true + } + fn feature_rdseed(&self) -> bool { + true + } + } + pub(crate) fn revise_instruction(decoder: &InstDecoder, inst: &mut Instruction) -> Result<(), DecodeError> { + if inst.prefixes.evex().is_some() { + if !decoder.avx512() { + return Err(DecodeError::InvalidOpcode); + } else { + return Ok(()); + } + } + + // for some instructions (tzcnt), not having an extension means the instruction is + // interpreted as another, rather than being simply rejected. + // we might still reject the alternate instruction later, if the extension adding *it* + // is also not supported. + if inst.opcode == Opcode::TZCNT { + if !decoder.bmi1() { + // tzcnt is only supported if bmi1 is enabled. without bmi1, this decodes as bsf. + inst.opcode = Opcode::BSF; + } + } + + match inst.opcode { + // we'll never be rejecting the instruction `Invalid` + Opcode::Invalid => {} + Opcode::ENCLS | + Opcode::ENCLU | + Opcode::ENCLV => { + if !decoder.feature_sgx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLAC | + Opcode::STAC => { + if !decoder.feature_smap() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMAXUB | + Opcode::VPMAXUB => { + if !decoder.feature_avx_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::UIRET | + Opcode::TESTUI | + Opcode::CLUI | + Opcode::STUI | + Opcode::SENDUIPI => { + if !decoder.feature_uintr() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CPUID | + Opcode::WRMSR | + Opcode::RDTSC | + Opcode::RDMSR | + Opcode::RSM | + Opcode::CMPXCHG8B => { + if !decoder.feature_pentium() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::AESKEYGENASSIST | + Opcode::AESIMC | + Opcode::AESENC | + Opcode::AESENCLAST | + Opcode::AESDEC | + Opcode::AESDECLAST => { + if !decoder.feature_aesni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVLPGB | + Opcode::TLBSYNC => { + if !decoder.feature_invlpgb() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDFSBASE | + Opcode::RDGSBASE | + Opcode::WRFSBASE | + Opcode::WRGSBASE => { + if !decoder.feature_fsgsbase() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VMPTRLD | + Opcode::VMPTRST | + Opcode::VMCLEAR | + Opcode::VMREAD | + Opcode::VMWRITE | + Opcode::VMCALL | + Opcode::VMLAUNCH | + Opcode::VMRESUME | + Opcode::VMXOFF | + Opcode::VMXON | + Opcode::INVEPT | + Opcode::INVVPID | + Opcode::VMFUNC => { + if !decoder.feature_vmx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VLDDQU | + Opcode::VPADDB | + Opcode::VPADDD | + Opcode::VPADDQ | + Opcode::VPADDW | + Opcode::VPABSB | + Opcode::VPABSW | + Opcode::VPABSD | + Opcode::VMAXSD | + Opcode::VMAXSS | + Opcode::VMINSD | + Opcode::VMINSS | + Opcode::VMULSD | + Opcode::VMULSS | + Opcode::VRCPSS | + Opcode::VPSUBUSB | + Opcode::VPSUBUSW | + Opcode::VXORPD | + Opcode::VXORPS | + Opcode::VPAVGB | + Opcode::VPAVGW | + Opcode::VANDNPD | + Opcode::VANDNPS | + Opcode::VPHADDD | + Opcode::VPHADDSW | + Opcode::VPHADDW | + Opcode::VANDPD | + Opcode::VANDPS | + Opcode::VPADDSB | + Opcode::VPADDSW | + Opcode::VPADDUSB | + Opcode::VPADDUSW | + Opcode::VPHSUBD | + Opcode::VPHSUBSW | + Opcode::VPHSUBW | + Opcode::VHADDPD | + Opcode::VHADDPS | + Opcode::VHSUBPD | + Opcode::VHSUBPS | + Opcode::VORPD | + Opcode::VORPS | + Opcode::VPBLENDVB | + Opcode::VPBLENDW | + Opcode::VADDSUBPD | + Opcode::VADDSUBPS | + Opcode::VRSQRTPS | + Opcode::VRSQRTSS | + Opcode::VPALIGNR | + Opcode::VPSUBSB | + Opcode::VPSUBSW | + Opcode::VPMULHUW | + Opcode::VPMULHW | + Opcode::VPMULLW | + Opcode::VPSHUFB | + Opcode::VPSHUFHW | + Opcode::VPSHUFLW | + Opcode::VPHMINPOSUW | + Opcode::VRCPPS | + Opcode::VMPSADBW | + Opcode::VPMADDUBSW | + Opcode::VPMADDWD | + Opcode::VMASKMOVDQU | + Opcode::VPMOVMSKB | + Opcode::VPSADBW | + Opcode::VPSLLDQ | + Opcode::VPSRLDQ | + Opcode::VDPPD | + Opcode::VDPPS | + Opcode::VLDMXCSR | + Opcode::VSTMXCSR | + Opcode::VMOVMSKPD | + Opcode::VMOVMSKPS | + Opcode::VPTEST | + Opcode::VTESTPD | + Opcode::VTESTPS | + Opcode::VPEXTRB | + Opcode::VPEXTRW | + Opcode::VPEXTRD | + Opcode::VPEXTRQ | + Opcode::VPACKSSDW | + Opcode::VPACKUSDW | + Opcode::VPACKSSWB | + Opcode::VPACKUSWB | + Opcode::VBLENDPD | + Opcode::VBLENDPS | + Opcode::VBLENDVPD | + Opcode::VBLENDVPS | + Opcode::VPMULHRSW | + Opcode::VPAND | + Opcode::VPANDN | + Opcode::VPOR | + Opcode::VPCMPEQB | + Opcode::VPCMPEQD | + Opcode::VPCMPEQQ | + Opcode::VPCMPEQW | + Opcode::VPCMPGTB | + Opcode::VPCMPGTD | + Opcode::VPCMPGTQ | + Opcode::VPCMPGTW | + Opcode::VPMAXSB | + Opcode::VPMAXSD | + Opcode::VPMAXSW | + Opcode::VPMAXUB | + Opcode::VPMAXUW | + Opcode::VPMINSB | + Opcode::VPMINSW | + Opcode::VPMINUB | + Opcode::VPMINUW | + Opcode::VPMAXUD | + Opcode::VPMINSD | + Opcode::VPSIGNB | + Opcode::VPSIGNW | + Opcode::VPSIGND | + Opcode::VPINSRB | + Opcode::VPINSRW | + Opcode::VPINSRD | + Opcode::VPINSRQ | + Opcode::VPMOVSXBD | + Opcode::VPMOVSXBQ | + Opcode::VPMOVSXBW | + Opcode::VPMOVSXDQ | + Opcode::VPMOVSXWD | + Opcode::VPMOVSXWQ | + Opcode::VPMOVZXBD | + Opcode::VPMOVZXBQ | + Opcode::VPMOVZXBW | + Opcode::VPMOVZXDQ | + Opcode::VPMOVZXWD | + Opcode::VPMOVZXWQ | + Opcode::VPMULDQ | + Opcode::VPMULLQ | + Opcode::VPMULLD | + Opcode::VPMULUDQ | + Opcode::VPSHUFD | + Opcode::VSHUFPD | + Opcode::VSHUFPS | + Opcode::VSQRTPD | + Opcode::VSQRTPS | + Opcode::VSQRTSS | + Opcode::VSQRTSD | + Opcode::VSUBPD | + Opcode::VSUBPS | + Opcode::VSUBSD | + Opcode::VSUBSS | + Opcode::VUCOMISD | + Opcode::VUCOMISS | + Opcode::VROUNDPD | + Opcode::VROUNDPS | + Opcode::VROUNDSD | + Opcode::VROUNDSS | + Opcode::VPSLLD | + Opcode::VPSLLQ | + Opcode::VPSLLW | + Opcode::VPSRAD | + Opcode::VPSRAW | + Opcode::VPSRLD | + Opcode::VPSRLQ | + Opcode::VPSRLW | + Opcode::VPSUBB | + Opcode::VPSUBW | + Opcode::VPSUBD | + Opcode::VPSUBQ | + Opcode::VPXOR | + Opcode::VPUNPCKHBW | + Opcode::VPUNPCKHWD | + Opcode::VPUNPCKHDQ | + Opcode::VPUNPCKHQDQ | + Opcode::VPUNPCKLBW | + Opcode::VPUNPCKLWD | + Opcode::VPUNPCKLDQ | + Opcode::VPUNPCKLQDQ | + Opcode::VUNPCKHPD | + Opcode::VUNPCKHPS | + Opcode::VUNPCKLPD | + Opcode::VUNPCKLPS | + Opcode::VPCMPESTRI | + Opcode::VPCMPESTRM | + Opcode::VPCMPISTRI | + Opcode::VPCMPISTRM | + Opcode::VBROADCASTSS | + Opcode::VBROADCASTSD | + Opcode::VBROADCASTF128 | + Opcode::VBROADCASTSD | + Opcode::VBROADCASTSS | + Opcode::VINSERTF128 | + Opcode::VEXTRACTF128 | + Opcode::VMASKMOVPD | + Opcode::VMASKMOVPS | + Opcode::VPERMILPD | + Opcode::VPERMILPS | + Opcode::VPERM2F128 | + Opcode::VZEROUPPER | + Opcode::VZEROALL => { + if !decoder.feature_avx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::HRESET => { + if !decoder.feature_hreset() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VP2INTERSECTD | + Opcode::VP2INTERSECTQ => { + if !decoder.feature_avx512_vp2intersect() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPRU => { + if !decoder.feature_rdpru() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CRC32 | + Opcode::PCMPESTRI | + Opcode::PCMPESTRM | + Opcode::PCMPISTRI | + Opcode::PCMPISTRM | + Opcode::PCMPGTQ => { + if !decoder.feature_sse4_2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MONITOR | + Opcode::MWAIT => { + if !decoder.feature_monitor() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPRORRD | + Opcode::VPRORRQ => { + if !decoder.feature_avx512_f_typo() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PHMINPOSUW | + Opcode::PMULDQ | + Opcode::PMULLD | + Opcode::DPPS | + Opcode::DPPD | + Opcode::PACKUSDW | + Opcode::PCMPEQQ | + Opcode::PTEST | + Opcode::MOVNTDQA | + Opcode::ROUNDSS | + Opcode::ROUNDSD | + Opcode::ROUNDPS | + Opcode::ROUNDPD | + Opcode::PMAXSB | + Opcode::PMAXSD | + Opcode::PMAXUW | + Opcode::PMAXUD | + Opcode::PMINSD | + Opcode::PMINSB | + Opcode::PMINUD | + Opcode::PMINUW | + Opcode::BLENDW | + Opcode::PBLENDW | + Opcode::BLENDVPS | + Opcode::BLENDVPD | + Opcode::PBLENDVB | + Opcode::BLENDPS | + Opcode::BLENDPD | + Opcode::MPSADBW | + Opcode::PMOVZXDQ | + Opcode::PMOVSXDQ | + Opcode::PMOVZXBD | + Opcode::PMOVSXBD | + Opcode::PMOVZXWQ | + Opcode::PMOVSXWQ | + Opcode::PMOVZXBQ | + Opcode::PMOVSXBQ | + Opcode::PMOVSXWD | + Opcode::PMOVZXWD | + Opcode::PEXTRQ | + Opcode::PEXTRD | + Opcode::PEXTRB | + Opcode::PMOVSXBW | + Opcode::PMOVZXBW | + Opcode::PINSRQ | + Opcode::PINSRD | + Opcode::PINSRB | + Opcode::EXTRACTPS | + Opcode::INSERTPS => { + if !decoder.feature_sse4_1() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::KANDB | + Opcode::KANDNB | + Opcode::KADDB | + Opcode::KTESTB | + Opcode::KADDW | + Opcode::KTESTW | + Opcode::KMOVB | + Opcode::KNOTB | + Opcode::KORB | + Opcode::KORTESTB | + Opcode::KSHIFTLB | + Opcode::KSHIFTRB | + Opcode::KXNORB | + Opcode::KXORB | + Opcode::VBROADCASTF32X2 | + Opcode::VBROADCASTF64X2 | + Opcode::VBROADCASTF32X8 | + Opcode::VBROADCASTI32X8 | + Opcode::VBROADCASTI64X2 | + Opcode::VBROADCASTI32X2 | + Opcode::VEXTRACTF32X8 | + Opcode::VEXTRACTI32X8 | + Opcode::VGETEXPSD | + Opcode::VGETEXPSS | + Opcode::VXORPD | + Opcode::VXORPS | + Opcode::VPEXTRD | + Opcode::VPEXTRQ | + Opcode::VPINSRD | + Opcode::VPINSRQ | + Opcode::VANDNPD | + Opcode::VANDNPS | + Opcode::VANDPD | + Opcode::VANDPS | + Opcode::VORPD | + Opcode::VORPS | + Opcode::VCVTTPD2QQ | + Opcode::VCVTPD2QQ | + Opcode::VCVTTPD2UQQ | + Opcode::VCVTPD2UQQ | + Opcode::VCVTTPS2QQ | + Opcode::VCVTPS2QQ | + Opcode::VCVTTPS2UQQ | + Opcode::VCVTPS2UQQ | + Opcode::VCVTUQQ2PD | + Opcode::VCVTUQQ2PS | + Opcode::VEXTRACTF64X2 | + Opcode::VEXTRACTI64X2 | + Opcode::VFPCLASSPD | + Opcode::VFPCLASSPS | + Opcode::VFPCLASSSD | + Opcode::VFPCLASSSS | + Opcode::VINSERTF64X2 | + Opcode::VINSERTF32X8 | + Opcode::VINSERTI32X8 | + Opcode::VINSERTI64X2 | + Opcode::VPMOVM2D | + Opcode::VPMOVM2Q | + Opcode::VPMOVB2D | + Opcode::VPMOVQ2M | + Opcode::VRANGEPD | + Opcode::VRANGEPS | + Opcode::VRANGESD | + Opcode::VRANGESS | + Opcode::VREDUCEPD | + Opcode::VREDUCEPS | + Opcode::VREDUCESD | + Opcode::VREDUCESS => { + if !decoder.feature_avx512_dq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ADCX | + Opcode::ADOX => { + if !decoder.feature_adx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::FXSAVE | + Opcode::FXRSTOR => { + if !decoder.feature_fxsr() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XABORT | + Opcode::XBEGIN | + Opcode::XEND | + Opcode::XTEST => { + if !decoder.feature_tsx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::TPAUSE | + Opcode::UMONITOR | + Opcode::UMWAIT => { + if !decoder.feature_waitpkg() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLTS | + Opcode::LAR | + Opcode::LGDT | + Opcode::LIDT | + Opcode::LLDT | + Opcode::LMSW | + Opcode::LSL | + Opcode::SGDT | + Opcode::SIDT | + Opcode::SLDT | + Opcode::SMSW | + Opcode::STR | + Opcode::LTR | + Opcode::VERR | + Opcode::VERW => { + if !decoder.feature_80286() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SYSENTER | + Opcode::SYSEXIT => { + if !decoder.feature_sysenter() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVVPID => { + if !decoder.feature_invpcid_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VP4DPWSSDS | + Opcode::VP4DPWSSD => { + if !decoder.feature_avx512_4vnniw() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPDPBUSDS | + Opcode::VPDPBUSD | + Opcode::VPDPWSSDS | + Opcode::VPDPWSSD => { + if !decoder.feature_avx512_vnni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VGATHERPF0DPD | + Opcode::VGATHERPF0DPS | + Opcode::VGATHERPF0QPD | + Opcode::VGATHERPF0QPS | + Opcode::VGATHERPF1DPD | + Opcode::VGATHERPF1DPS | + Opcode::VGATHERPF1QPD | + Opcode::VGATHERPF1QPS | + Opcode::VSCATTERPF0DPD | + Opcode::VSCATTERPF0DPS | + Opcode::VSCATTERPF0QPD | + Opcode::VSCATTERPF0QPS | + Opcode::VSCATTERPF1DPD | + Opcode::VSCATTERPF1DPS | + Opcode::VSCATTERPF1QPD | + Opcode::VSCATTERPF1QPS => { + if !decoder.feature_avx512_pf() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPBROADCASTMW2D | + Opcode::VPBROADCASTMB2Q | + Opcode::VPBROADCASTM | + Opcode::VPCONFLICTD | + Opcode::VPCONFLICTQ | + Opcode::VPLZCNTD | + Opcode::VPLZCNTQ => { + if !decoder.feature_avx512_cd() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VCVTNE2PS2BF16 | + Opcode::VCVTNEPS2BF16 | + Opcode::VDPBF16PS => { + if !decoder.feature_avx512_bf16() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMOVQ2M => { + if !decoder.feature_avx512bw_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPKRU | + Opcode::WRPKRU => { + if !decoder.feature_mpk() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD => { + if !decoder.feature_avx512_f__vl_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SHA1RNDS4 | + Opcode::SHA1NEXTE | + Opcode::SHA1MSG1 | + Opcode::SHA1MSG2 | + Opcode::SHA256RNDS2 | + Opcode::SHA256MSG1 | + Opcode::SHA256MSG2 => { + if !decoder.feature_sha() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::WRUSS | + Opcode::WRSS | + Opcode::INCSSP | + Opcode::SAVEPREVSSP | + Opcode::SETSSBSY | + Opcode::CLRSSBSY | + Opcode::RSTORSSP | + Opcode::ENDBR64 | + Opcode::ENDBR32 => { + if !decoder.feature_cet() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BSWAP | + Opcode::CMPXCHG | + Opcode::INVD | + Opcode::WBINVD | + Opcode::INVLPG | + Opcode::XADD => { + if !decoder.feature_80486() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVSS | + Opcode::ADDSS | + Opcode::SUBSS | + Opcode::MULSS | + Opcode::DIVSS | + Opcode::MINSS | + Opcode::MAXSS | + Opcode::SQRTSS | + Opcode::MOVUPS | + Opcode::MOVHLPS | + Opcode::MOVLPS | + Opcode::MOVHPS | + Opcode::MOVLHPS | + Opcode::UNPCKLPS | + Opcode::UNPCKHPS | + Opcode::PREFETCHNTA | + Opcode::PREFETCH0 | + Opcode::PREFETCH1 | + Opcode::PREFETCH2 | + Opcode::MOVAPS | + Opcode::CVTPI2PS | + Opcode::CVTSI2SS | + Opcode::MOVNTPS | + Opcode::CVTTSS2SI | + Opcode::CVTTPS2PI | + Opcode::CVTSS2SI | + Opcode::CVTPS2PI | + Opcode::UCOMISS | + Opcode::COMISS | + Opcode::SQRTPS | + Opcode::MOVMSKPS | + Opcode::RSQRTSS | + Opcode::RSQRTPS | + Opcode::RCPPS | + Opcode::RCPSS | + Opcode::ANDPS | + Opcode::ANDNPS | + Opcode::XORPS | + Opcode::ORPS | + Opcode::ADDPS | + Opcode::MULPS | + Opcode::SUBPS | + Opcode::MINPS | + Opcode::DIVPS | + Opcode::MAXPS | + Opcode::PSHUFW | + Opcode::LDMXCSR | + Opcode::STMXCSR | + Opcode::SFENCE | + Opcode::CMPPS | + Opcode::CMPSS | + Opcode::PINSRW | + Opcode::PEXTRW | + Opcode::SHUFPS | + Opcode::PMOVMSKB | + Opcode::PMINUB | + Opcode::PMAXUB | + Opcode::PAVGB | + Opcode::PAVGW | + Opcode::PMULHUW | + Opcode::MOVNTQ | + Opcode::PMINSW | + Opcode::PMAXSW | + Opcode::PSADBW | + Opcode::MASKMOVQ | + Opcode::LDMXCSR | + Opcode::STMXCSR => { + if !decoder.feature_sse() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::UD2 => { + if !decoder.feature_pentium_pro() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::JMPE => { + if !decoder.feature_itanium() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BNDMK | + Opcode::BNDCL | + Opcode::BNDCU | + Opcode::BNDCN | + Opcode::BNDMOV | + Opcode::BNDLDX | + Opcode::BNDSTX => { + if !decoder.feature_mpx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SWAPGS | + Opcode::SLHD | + Opcode::CDQE | + Opcode::MOVSXD | + Opcode::CMPXCHG16B => { + if !decoder.feature_extra_instructions() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDTSCP => { + if !decoder.feature_rdtscp() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VBROADCASTI128 | + Opcode::VPBROADCASTB | + Opcode::VPBROADCASTW | + Opcode::VPBROADCASTD | + Opcode::VPBROADCASTQ | + Opcode::VINSERTI128 | + Opcode::VEXTRACTI128 | + Opcode::VPMASKMOVD | + Opcode::VPMASKMOVQ | + Opcode::VPERMPS | + Opcode::VPERMD | + Opcode::VPERMPD | + Opcode::VPERMQ | + Opcode::VPERM2I128 | + Opcode::VPBLENDD | + Opcode::VPSLLVD | + Opcode::VPSLLVQ | + Opcode::VPSRLVD | + Opcode::VPSRLVQ | + Opcode::VPSRAVD => { + if !decoder.feature_avx2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PCONFIG => { + if !decoder.feature_pconfig() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMADD52HUQ | + Opcode::VPMADD52LUQ => { + if !decoder.feature_avx512_ifma() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::GF2P8AFFINEQB | + Opcode::GF2P8AFFINEINVQB | + Opcode::GF2P8MULB => { + if !decoder.feature_gfni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPCLMULQDQ => { + if !decoder.feature_vpclmulqdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BSF | + Opcode::BSR | + Opcode::BT | + Opcode::BTS | + Opcode::BTC | + Opcode::BTR | + Opcode::CDQ | + Opcode::CWDE | + Opcode::LDS | + Opcode::LES | + Opcode::LFS | + Opcode::LGS | + Opcode::LSS | + Opcode::MOVZX | + Opcode::MOVSX | + Opcode::SETO | + Opcode::SETNO | + Opcode::SETB | + Opcode::SETAE | + Opcode::SETZ | + Opcode::SETNZ | + Opcode::SETBE | + Opcode::SETA | + Opcode::SETS | + Opcode::SETNS | + Opcode::SETP | + Opcode::SETNP | + Opcode::SETL | + Opcode::SETGE | + Opcode::SETLE | + Opcode::SETG | + Opcode::SHLD | + Opcode::SHRD => { + if !decoder.feature_80386() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVBE => { + if !decoder.feature_movbe() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VCVTQQ2PD | + Opcode::VCVTQQ2PS | + Opcode::VCVTUSI2USD | + Opcode::VCVTUSI2USS | + Opcode::VEXTRACTF32X4 | + Opcode::VEXTRACTF64X4 | + Opcode::VEXTRACTI32X4 | + Opcode::VEXTRACTI64X4 | + Opcode::VFIXUPIMMSD | + Opcode::VFIXUPIMMSS | + Opcode::VINSERTI64X4 | + Opcode::VMOVDQA32 | + Opcode::VMOVDQA64 | + Opcode::VMOVDQU32 | + Opcode::VMOVDQU64 | + Opcode::VPCOMPRESSQ | + Opcode::VPCOMPRESSD | + Opcode::VSCALEDPD | + Opcode::VSCALEDPS | + Opcode::VSCALEDSD | + Opcode::VSCALEDSS | + Opcode::VSCATTERDD | + Opcode::VSCATTERDQ | + Opcode::VSCATTERQD | + Opcode::VSCATTERQQ | + Opcode::VADDPD | + Opcode::VADDPS | + Opcode::VCMPPD | + Opcode::VCMPPS | + Opcode::VCVTDQ2PD | + Opcode::VCVTDQ2PS | + Opcode::VCVTPD2DQ | + Opcode::VCVTPD2PS | + Opcode::VCVTPS2DQ | + Opcode::VCVTPS2PD | + Opcode::VCVTTPD2DQ | + Opcode::VCVTTPS2DQ | + Opcode::VDIVPD | + Opcode::VDIVPS | + Opcode::VMAXPD | + Opcode::VMAXPS | + Opcode::VMINPD | + Opcode::VMINPS | + Opcode::VMOVAPD | + Opcode::VMOVAPS | + Opcode::VMOVDDUP | + Opcode::VMOVDQA | + Opcode::VMOVDQU | + Opcode::VMOVNTDQA | + Opcode::VMOVNTDQ | + Opcode::VMOVNTPD | + Opcode::VMOVNTPS | + Opcode::VMOVSHDUP | + Opcode::VMOVSLDUP | + Opcode::VMOVUPD | + Opcode::VMOVUPS | + Opcode::VMULPD | + Opcode::VMULPS | + Opcode::VPANDD | + Opcode::VPANDQ | + Opcode::VPANDND | + Opcode::VPANDNQ | + Opcode::VPCMPEQD | + Opcode::VPCMPEQQ | + Opcode::VPCMPGTD | + Opcode::VPCMPGTQ | + Opcode::VPMAXSD | + Opcode::VPMAXSQ | + Opcode::VPMAXUD | + Opcode::VPMAXUQ | + Opcode::VPMINSD | + Opcode::VPMINSQ | + Opcode::VPMINUD | + Opcode::VPMINUQ | + Opcode::VPCMPD | + Opcode::VPCMPQ | + Opcode::VPCMPUD | + Opcode::VPCMPUQ | + Opcode::VPORD | + Opcode::VPORQ | + Opcode::VPXORD | + Opcode::VPXORQ | + Opcode::VPSLLD | + Opcode::VPSLLQ | + Opcode::VPSLLW | + Opcode::VPSRAD | + Opcode::VPSRAQ | + Opcode::VALIGND | + Opcode::VALIGNQ | + Opcode::VBLENDMPD | + Opcode::VBLENDMPS | + Opcode::VPROLD | + Opcode::VPROLQ | + Opcode::VPROLVD | + Opcode::VPROLVQ | + Opcode::VPRORD | + Opcode::VPRORQ | + Opcode::VPRORVD | + Opcode::VPRORVQ | + Opcode::VPUNPCKHDQ | + Opcode::VPUNPCKHQDQ | + Opcode::VPUNPCKLDQ | + Opcode::VPUNPCKLQDQ | + Opcode::VUNPCKHPD | + Opcode::VUNPCKHPS | + Opcode::VUNPCKLPD | + Opcode::VUNPCKLPS | + Opcode::VBROADCASTF32X4 | + Opcode::VBROADCASTF64X4 | + Opcode::VBROADCASTI64X4 | + Opcode::VBROADCASTI32X4 | + Opcode::VINSERTF32X4 | + Opcode::VINSERTI32X4 | + Opcode::VSHUFF32X4 | + Opcode::VSHUFF64X2 | + Opcode::VSHUFI32X4 | + Opcode::VSHUFI64X2 | + Opcode::VCOMPRESSD | + Opcode::VCOMPRESSQ | + Opcode::VCOMPRESSPD | + Opcode::VCOMPRESSPS | + Opcode::VEXPANDPD | + Opcode::VEXPANDPS | + Opcode::VCVTPD2UDQ | + Opcode::VCVTPS2UDQ | + Opcode::VCVTUDQ2PD | + Opcode::VCVTUDQ2PS | + Opcode::VCVTTPD2UDQ | + Opcode::VCVTTPS2UDQ | + Opcode::VFIXUPIMMPD | + Opcode::VFIXUPIMMPS | + Opcode::VCVTPH2PS | + Opcode::VCVTPS2PH | + Opcode::VFMADD132PD | + Opcode::VFMADD132PS | + Opcode::VFMADD213PD | + Opcode::VFMADD213PS | + Opcode::VFMADD231PD | + Opcode::VFMADD231PS | + Opcode::VFMADDSUB132PD | + Opcode::VFMADDSUB132PS | + Opcode::VFMADDSUB213PD | + Opcode::VFMADDSUB213PS | + Opcode::VFMADDSUB231PD | + Opcode::VFMADDSUB231PS | + Opcode::VFMSUB132PD | + Opcode::VFMSUB132PS | + Opcode::VFMSUB213PD | + Opcode::VFMSUB213PS | + Opcode::VFMSUB231PD | + Opcode::VFMSUB231PS | + Opcode::VFMSUBADD132PD | + Opcode::VFMSUBADD132PS | + Opcode::VFMSUBADD213PD | + Opcode::VFMSUBADD213PS | + Opcode::VFMSUBADD231PD | + Opcode::VFMSUBADD231PS | + Opcode::VFNMADD132PD | + Opcode::VFNMADD132PS | + Opcode::VFNMADD213PD | + Opcode::VFNMADD213PS | + Opcode::VFNMADD231PD | + Opcode::VFNMADD231PS | + Opcode::VFNMSUB132PD | + Opcode::VFNMSUB132PS | + Opcode::VFNMSUB213PD | + Opcode::VFNMSUB213PS | + Opcode::VFNMSUB231PD | + Opcode::VFNMSUB231PS | + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD | + Opcode::VGATHERDPD | + Opcode::VGATHERDPS | + Opcode::VGATHERQPD | + Opcode::VGATHERQPS | + Opcode::VGETEXPPD | + Opcode::VGETEXPPS | + Opcode::VGETMANTPD | + Opcode::VGETMANTPS | + Opcode::VPBLENDMD | + Opcode::VPBLENDMQ | + Opcode::VPERMD | + Opcode::VPERMQ | + Opcode::VPERMI2D | + Opcode::VPERMI2Q | + Opcode::VPERMI2PD | + Opcode::VPERMI2PS | + Opcode::VPERMT2D | + Opcode::VPERMT2Q | + Opcode::VPERMT2PD | + Opcode::VPERMT2PS | + Opcode::VPEXPANDD | + Opcode::VPEXPANDQ | + Opcode::VPGATHERDD | + Opcode::VPGATHERDQ | + Opcode::VPGATHERQD | + Opcode::VPGATHERQQ | + Opcode::VPSCATTERDD | + Opcode::VPSCATTERDQ | + Opcode::VPSCATTERQD | + Opcode::VPSCATTERQQ | + Opcode::VPMOVDB | + Opcode::VPMOVSDB | + Opcode::VPMOVUSDB | + Opcode::VPMOVDW | + Opcode::VPMOVSDW | + Opcode::VPMOVUSDW | + Opcode::VPMOVQB | + Opcode::VPMOVSQB | + Opcode::VPMOVUSQB | + Opcode::VPMOVQD | + Opcode::VPMOVSQD | + Opcode::VPMOVUSQD | + Opcode::VPMOVQW | + Opcode::VPMOVSQW | + Opcode::VPMOVUSQW | + Opcode::VPSRAVQ | + Opcode::VPTERNLOGD | + Opcode::VPTERNLOGQ | + Opcode::VPTESTMD | + Opcode::VPTESTMQ | + Opcode::VPTESTNMD | + Opcode::VPTESTNMQ | + Opcode::VRCP14PD | + Opcode::VRCP14PS | + Opcode::VRNDSCALEPD | + Opcode::VRNDSCALEPS | + Opcode::VRSQRT14PD | + Opcode::VRSQRT14PS | + Opcode::VSCALEFPS | + Opcode::VSCALEFPD | + Opcode::VPABSQ | + Opcode::VADDSD | + Opcode::VADDSS | + Opcode::VCMPSD | + Opcode::VCMPSS | + Opcode::VCOMISD | + Opcode::VCOMISS | + Opcode::VCVTSD2SI | + Opcode::VCVTSD2SS | + Opcode::VCVTSI2SS | + Opcode::VCVTSI2SD | + Opcode::VCVTSS2SD | + Opcode::VCVTSS2SI | + Opcode::VCVTTSS2SI | + Opcode::VCVTTSD2SI | + Opcode::VDIVSD | + Opcode::VDIVSS | + Opcode::VEXTRACTPS | + Opcode::VINSERTPS | + Opcode::VGETMANTSD | + Opcode::VGETMANTSS | + Opcode::VMOVD | + Opcode::VMOVQ | + Opcode::VMOVHLPS | + Opcode::VMOVHPD | + Opcode::VMOVHPS | + Opcode::VMOVLHPS | + Opcode::VMOVLPD | + Opcode::VMOVLPS | + Opcode::VMOVSS | + Opcode::VMOVSD | + Opcode::VSQRTSS | + Opcode::VSQRTSD | + Opcode::VSUBSD | + Opcode::VSUBSS | + Opcode::VUCOMISD | + Opcode::VUCOMISS | + Opcode::VRCP14SD | + Opcode::VRCP14SS | + Opcode::VRNDSCALESD | + Opcode::VRNDSCALESS | + Opcode::VRSQRT14SD | + Opcode::VRSQRT14SS | + Opcode::VSCALEFSS | + Opcode::VSCALEFSD | + Opcode::VINSERTF64X4 | + Opcode::VCVTUSI2SD | + Opcode::VCVTUSI2SS | + Opcode::VCVTSD2USI | + Opcode::VCVTSS2USI | + Opcode::VCVTTSD2USI | + Opcode::VCVTTSS2USI | + Opcode::KANDW | + Opcode::KANDNW | + Opcode::KMOVW | + Opcode::KNOTW | + Opcode::KORW | + Opcode::KORTESTW | + Opcode::KSHIFTLW | + Opcode::KSHIFTRW | + Opcode::KUNPCKBW | + Opcode::KXNORW | + Opcode::KXORW => { + if !decoder.feature_avx512_f() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MONITORX | + Opcode::MWAITX => { + if !decoder.feature_emx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PCLMULQDQ => { + if !decoder.feature_pclmulqdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VFMADD132PD | + Opcode::VFMADD132PS | + Opcode::VFMADD132SD | + Opcode::VFMADD132SS | + Opcode::VFMADD213PD | + Opcode::VFMADD213PS | + Opcode::VFMADD213SD | + Opcode::VFMADD213SS | + Opcode::VFMADD231PD | + Opcode::VFMADD231PS | + Opcode::VFMADD231SD | + Opcode::VFMADD231SS | + Opcode::VFMADDSUB132PD | + Opcode::VFMADDSUB132PS | + Opcode::VFMADDSUB213PD | + Opcode::VFMADDSUB213PS | + Opcode::VFMADDSUB231PD | + Opcode::VFMADDSUB231PS | + Opcode::VFMSUB132PD | + Opcode::VFMSUB132PS | + Opcode::VFMSUB132SD | + Opcode::VFMSUB132SS | + Opcode::VFMSUB213PD | + Opcode::VFMSUB213PS | + Opcode::VFMSUB213SD | + Opcode::VFMSUB213SS | + Opcode::VFMSUB231PD | + Opcode::VFMSUB231PS | + Opcode::VFMSUB231SD | + Opcode::VFMSUB231SS | + Opcode::VFMSUBADD132PD | + Opcode::VFMSUBADD132PS | + Opcode::VFMSUBADD213PD | + Opcode::VFMSUBADD213PS | + Opcode::VFMSUBADD231PD | + Opcode::VFMSUBADD231PS | + Opcode::VFNMADD132PD | + Opcode::VFNMADD132PS | + Opcode::VFNMADD132SD | + Opcode::VFNMADD132SS | + Opcode::VFNMADD213PD | + Opcode::VFNMADD213PS | + Opcode::VFNMADD213SD | + Opcode::VFNMADD213SS | + Opcode::VFNMADD231PD | + Opcode::VFNMADD231PS | + Opcode::VFNMADD231SD | + Opcode::VFNMADD231SS | + Opcode::VFNMSUB132PD | + Opcode::VFNMSUB132PS | + Opcode::VFNMSUB132SD | + Opcode::VFNMSUB132SS | + Opcode::VFNMSUB213PD | + Opcode::VFNMSUB213PS | + Opcode::VFNMSUB213SD | + Opcode::VFNMSUB213SS | + Opcode::VFNMSUB231PD | + Opcode::VFNMSUB231PS | + Opcode::VFNMSUB231SD | + Opcode::VFNMSUB231SS => { + if !decoder.feature_fma3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XSAVEOPT => { + if !decoder.feature_xsaveopt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SYSCALL | + Opcode::SYSRET => { + if !decoder.feature_syscall() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::EXTRQ | + Opcode::INSERTQ | + Opcode::MOVNTSD | + Opcode::MOVNTSS => { + if !decoder.feature_sse4a() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPOPCNTD | + Opcode::VPOPCNTQ => { + if !decoder.feature_avx512_vpopcntdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVEPT | + Opcode::INVVPID | + Opcode::INVPCID => { + if !decoder.feature_invpcid() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BOUND => { + if !decoder.feature_80186_bound() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XSUSLDTRK | + Opcode::XRESLDTRK => { + if !decoder.feature_tsxldtrk() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CMOVA | + Opcode::CMOVB | + Opcode::CMOVG | + Opcode::CMOVGE | + Opcode::CMOVL | + Opcode::CMOVLE | + Opcode::CMOVNA | + Opcode::CMOVNB | + Opcode::CMOVNO | + Opcode::CMOVNP | + Opcode::CMOVNS | + Opcode::CMOVNZ | + Opcode::CMOVO | + Opcode::CMOVP | + Opcode::CMOVS | + Opcode::CMOVZ => { + if !decoder.feature_cmov() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::KANDQ | + Opcode::KANDD | + Opcode::KANDNQ | + Opcode::KANDND | + Opcode::KMOVD | + Opcode::KMOVQ | + Opcode::KNOTD | + Opcode::KNOTQ | + Opcode::KORD | + Opcode::KORQ | + Opcode::KADDD | + Opcode::KTESTD | + Opcode::KADDQ | + Opcode::KTESTQ | + Opcode::KORTESTD | + Opcode::KORTESTQ | + Opcode::KSHIFTLD | + Opcode::KSHIFTRD | + Opcode::KSHIFTLQ | + Opcode::KSHIFTRQ | + Opcode::KUNPCKWD | + Opcode::KUNPCKDQ | + Opcode::KXNORD | + Opcode::KXNORQ | + Opcode::KXORD | + Opcode::KXORQ | + Opcode::VPCMPEQB | + Opcode::VPCMPEQW | + Opcode::VPCMPGTB | + Opcode::VPCMPGTW | + Opcode::VPSUBUSB | + Opcode::VPSUBUSW | + Opcode::VPERMW | + Opcode::VPERMI2W | + Opcode::VPERMT2W | + Opcode::VPSLLVW | + Opcode::VPSRAVW | + Opcode::VPSRLVW | + Opcode::VPEXTRB | + Opcode::VPEXTRW | + Opcode::VPINSRB | + Opcode::VPINSRW | + Opcode::VPMULHUW | + Opcode::VPMULHRSW | + Opcode::VPADDSB | + Opcode::VPADDSW | + Opcode::VPADDUSB | + Opcode::VPADDUSW | + Opcode::VPALIGNR | + Opcode::VPMOVD2M | + Opcode::VPMOVQ2M | + Opcode::VPMOVWB | + Opcode::VDBPSADBW | + Opcode::VMOVDQU8 | + Opcode::VMOVDQU16 | + Opcode::VPBLENDMB | + Opcode::VPBLENDMW | + Opcode::VPCMPB | + Opcode::VPCMPUB | + Opcode::VPCMPW | + Opcode::VPCMPUW | + Opcode::VPERMW | + Opcode::VPERMI2B | + Opcode::VPERMI2W | + Opcode::VPMOVM2B | + Opcode::VPMOVM2W | + Opcode::VPMOVB2M | + Opcode::VPMOVW2M | + Opcode::VPMOVSWB | + Opcode::VPMOVUSWB | + Opcode::VPSLLVW | + Opcode::VPSRAVW | + Opcode::VPSRLVW | + Opcode::VPTESTNMB | + Opcode::VPTESTNMW | + Opcode::VPTESTMB | + Opcode::VPTESTMW => { + if !decoder.feature_avx512_bw() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PALIGNR | + Opcode::PSIGNW | + Opcode::PSIGND | + Opcode::PSIGNB | + Opcode::PSHUFB | + Opcode::PMULHRSW | + Opcode::PMADDUBSW | + Opcode::PABSD | + Opcode::PABSW | + Opcode::PABSB | + Opcode::PHSUBSW | + Opcode::PHSUBW | + Opcode::PHSUBD | + Opcode::PHADDD | + Opcode::PHADDSW | + Opcode::PHADDW => { + if !decoder.feature_ssse3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLFLUSHOPT => { + if !decoder.feature_clflushopt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PUSHA | + Opcode::POPA => { + if !decoder.feature_80186_pusha() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::GETSEC => { + if !decoder.feature_smx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::AAA | + Opcode::AAD | + Opcode::AAM | + Opcode::AAS | + Opcode::DAA | + Opcode::DAS => { + if !decoder.feature_8086_bcd() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::POPCNT | + Opcode::LZCNT => { + if !decoder.feature_abm() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PREFETCHW => { + if !decoder.feature_3dnowprefetch() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPID => { + if !decoder.feature_rdpid() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::LAHF | + Opcode::SAHF => { + if !decoder.feature_lahfsahf() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ENQCMD | + Opcode::ENQCMDS => { + if !decoder.feature_enqcmd() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::JECXZ => { + if !decoder.feature_jecxz() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PTWRITE => { + if !decoder.feature_ptwrite() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPERMT2B | + Opcode::VPERMB => { + if !decoder.feature_avx512_vbmi() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::F2XM1 | + Opcode::FABS | + Opcode::FADD | + Opcode::FADDP | + Opcode::FBLD | + Opcode::FBSTP | + Opcode::FCHS | + Opcode::FCMOVB | + Opcode::FCMOVBE | + Opcode::FCMOVE | + Opcode::FCMOVNB | + Opcode::FCMOVNBE | + Opcode::FCMOVNE | + Opcode::FCMOVNU | + Opcode::FCMOVU | + Opcode::FCOM | + Opcode::FCOMI | + Opcode::FCOMIP | + Opcode::FCOMP | + Opcode::FCOMPP | + Opcode::FCOS | + Opcode::FDECSTP | + Opcode::FDISI8087_NOP | + Opcode::FDIV | + Opcode::FDIVP | + Opcode::FDIVR | + Opcode::FDIVRP | + Opcode::FENI8087_NOP | + Opcode::FFREE | + Opcode::FFREEP | + Opcode::FIADD | + Opcode::FICOM | + Opcode::FICOMP | + Opcode::FIDIV | + Opcode::FIDIVR | + Opcode::FILD | + Opcode::FIMUL | + Opcode::FINCSTP | + Opcode::FIST | + Opcode::FISTP | + Opcode::FISTTP | + Opcode::FISUB | + Opcode::FISUBR | + Opcode::FLD | + Opcode::FLD1 | + Opcode::FLDCW | + Opcode::FLDENV | + Opcode::FLDL2E | + Opcode::FLDL2T | + Opcode::FLDLG2 | + Opcode::FLDLN2 | + Opcode::FLDPI | + Opcode::FLDZ | + Opcode::FMUL | + Opcode::FMULP | + Opcode::FNCLEX | + Opcode::FNINIT | + Opcode::FNOP | + Opcode::FNSAVE | + Opcode::FNSTCW | + Opcode::FNSTENV | + Opcode::FNSTOR | + Opcode::FNSTSW | + Opcode::FPATAN | + Opcode::FPREM | + Opcode::FPREM1 | + Opcode::FPTAN | + Opcode::FRNDINT | + Opcode::FRSTOR | + Opcode::FSCALE | + Opcode::FSETPM287_NOP | + Opcode::FSIN | + Opcode::FSINCOS | + Opcode::FSQRT | + Opcode::FST | + Opcode::FSTP | + Opcode::FSTPNCE | + Opcode::FSUB | + Opcode::FSUBP | + Opcode::FSUBR | + Opcode::FSUBRP | + Opcode::FTST | + Opcode::FUCOM | + Opcode::FUCOMI | + Opcode::FUCOMIP | + Opcode::FUCOMP | + Opcode::FUCOMPP | + Opcode::FXAM | + Opcode::FXCH | + Opcode::FXTRACT | + Opcode::FYL2X | + Opcode::FYL2XP1 => { + if !decoder.feature_x87() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPMC | + Opcode::PUNPCKLBW | + Opcode::PUNPCKLWD | + Opcode::PUNPCKLDQ | + Opcode::PACKSSWB | + Opcode::PCMPGTB | + Opcode::PCMPGTD | + Opcode::PCMPGTW | + Opcode::PACKUSWB | + Opcode::PUNPCKHBW | + Opcode::PUNPCKHWD | + Opcode::PUNPCKHDQ | + Opcode::PACKSSDW | + Opcode::MOVD | + Opcode::MOVQ | + Opcode::PCMPEQB | + Opcode::PCMPEQD | + Opcode::PCMPEQW | + Opcode::PSRLW | + Opcode::PSRLD | + Opcode::PSRLQ | + Opcode::PMULLW | + Opcode::PSUBUSB | + Opcode::PSUBUSW | + Opcode::PAND | + Opcode::PADDUSB | + Opcode::PADDUSW | + Opcode::PANDN | + Opcode::PSRAW | + Opcode::PSRAD | + Opcode::PMULHW | + Opcode::PSUBSB | + Opcode::PSUBSW | + Opcode::POR | + Opcode::PADDSB | + Opcode::PADDSW | + Opcode::PXOR | + Opcode::PSLLW | + Opcode::PSLLD | + Opcode::PSLLQ | + Opcode::PMADDWD | + Opcode::PSUBB | + Opcode::PSUBW | + Opcode::PSUBD | + Opcode::PADDB | + Opcode::PADDW | + Opcode::PADDD | + Opcode::EMMS => { + if !decoder.feature_mmx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPOPCNTD | + Opcode::VPOPCNTQ | + Opcode::VPOPCNTB | + Opcode::VPOPCNTW | + Opcode::VPSHUFBITQMB | + Opcode::VPMULTISHIFTQB => { + if !decoder.feature_avx512_bitalg() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::AESDEC128KL | + Opcode::AESDEC256KL | + Opcode::AESDECWIDE128KL | + Opcode::AESDECWIDE256KL | + Opcode::AESENC128KL | + Opcode::AESENC256KL | + Opcode::AESENCWIDE128KL | + Opcode::AESENCWIDE256KL | + Opcode::ENCODEKEY128 | + Opcode::ENCODEKEY256 | + Opcode::LOADIWKEY => { + if !decoder.feature_keylocker() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ENTER | + Opcode::LEAVE | + Opcode::INS | + Opcode::OUTS => { + if !decoder.feature_80186() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLWB => { + if !decoder.feature_clwb() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::V4FNMADDSS | + Opcode::V4FNMADDPS | + Opcode::V4FMADDSS | + Opcode::V4FMADDPS => { + if !decoder.feature_avx512_4fmaps() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::TDCALL | + Opcode::SEAMRET | + Opcode::SEAMOPS | + Opcode::SEAMCALL => { + if !decoder.feature_tdx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::POPCNT => { + if !decoder.feature_popcnt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PSMASH | + Opcode::PVALIDATE | + Opcode::RMPADJUST | + Opcode::RMPUPDATE => { + if !decoder.feature_snp() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VGF2P8AFFINEQB | + Opcode::VGF2P8AFFINEINVQB | + Opcode::VGF2P8MULB => { + if !decoder.feature_avx512_gfni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::FEMMS | + Opcode::PI2FW | + Opcode::PI2FD | + Opcode::PF2IW | + Opcode::PF2ID | + Opcode::PMULHRW | + Opcode::PFCMPGE | + Opcode::PFMIN | + Opcode::PFRCP | + Opcode::PFRSQRT | + Opcode::PFSUB | + Opcode::PFADD | + Opcode::PFCMPGT | + Opcode::PFMAX | + Opcode::PFRCPIT1 | + Opcode::PFRSQIT1 | + Opcode::PFSUBR | + Opcode::PFACC | + Opcode::PFCMPEQ | + Opcode::PFMUL | + Opcode::PFMULHRW | + Opcode::PFRCPIT2 | + Opcode::PFNACC | + Opcode::PFPNACC | + Opcode::PSWAPD | + Opcode::PAVGUSB => { + if !decoder.feature_3dnow() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPCOMPRESSB | + Opcode::VPCOMPRESSW | + Opcode::VPSHLDVW | + Opcode::VPSHLDW | + Opcode::VPEXPANDB | + Opcode::VPEXPANDW | + Opcode::VPSHRDVW | + Opcode::VPSHRDW | + Opcode::VPSHLDVQ | + Opcode::VPSHLDVD | + Opcode::VPSHLDQ | + Opcode::VPSHLDD | + Opcode::VPSHRDQ | + Opcode::VPSHRDD | + Opcode::VPSHRDVQ | + Opcode::VPSHRDVD => { + if !decoder.feature_avx512_vbmi2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CMC | + Opcode::CLC | + Opcode::STC | + Opcode::CLI | + Opcode::STI | + Opcode::CLD | + Opcode::STD | + Opcode::ADD | + Opcode::OR | + Opcode::ADC | + Opcode::SBB | + Opcode::AND | + Opcode::XOR | + Opcode::SUB | + Opcode::CMP | + Opcode::SAR | + Opcode::SAL | + Opcode::SHR | + Opcode::SHL | + Opcode::RCR | + Opcode::RCL | + Opcode::ROR | + Opcode::ROL | + Opcode::INC | + Opcode::DEC | + Opcode::HLT | + Opcode::CALL | + Opcode::CALLF | + Opcode::JMP | + Opcode::JMPF | + Opcode::PUSH | + Opcode::POP | + Opcode::LEA | + Opcode::NOP | + Opcode::XCHG | + Opcode::POPF | + Opcode::INT | + Opcode::INTO | + Opcode::IRET | + Opcode::IRETD | + Opcode::IRETQ | + Opcode::RETF | + Opcode::ENTER | + Opcode::LEAVE | + Opcode::MOV | + Opcode::RETURN | + Opcode::PUSHF | + Opcode::WAIT | + Opcode::CBW | + Opcode::CWD | + Opcode::CQO | + Opcode::LODS | + Opcode::STOS | + Opcode::CMPS | + Opcode::SCAS | + Opcode::MOVS | + Opcode::TEST | + Opcode::IN | + Opcode::OUT | + Opcode::IMUL | + Opcode::JO | + Opcode::JNO | + Opcode::JB | + Opcode::JNB | + Opcode::JZ | + Opcode::JNZ | + Opcode::JA | + Opcode::JNA | + Opcode::JS | + Opcode::JNS | + Opcode::JP | + Opcode::JNP | + Opcode::JL | + Opcode::JGE | + Opcode::JLE | + Opcode::JG | + Opcode::UD0 | + Opcode::UD1 | + Opcode::UD2 | + Opcode::DIV | + Opcode::IDIV | + Opcode::MUL | + Opcode::NEG | + Opcode::NOT | + Opcode::XLAT | + Opcode::LOOPNZ | + Opcode::LOOPZ | + Opcode::LOOP | + Opcode::SALC => { + if !decoder.feature_8086() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLGI | + Opcode::STGI | + Opcode::SKINIT | + Opcode::VMLOAD | + Opcode::VMMCALL | + Opcode::VMSAVE | + Opcode::VMRUN | + Opcode::INVLPGA => { + if !decoder.feature_svm() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ADDSUBPD | + Opcode::ADDSUBPS | + Opcode::HSUBPD | + Opcode::HADDPD | + Opcode::MOVSLDUP | + Opcode::MOVSHDUP | + Opcode::MOVDDUP | + Opcode::HADDPS | + Opcode::HSUBPS | + Opcode::LDDQU => { + if !decoder.feature_sse3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVUPD | + Opcode::PSRLDQ | + Opcode::PSLLDQ | + Opcode::MOVSD | + Opcode::MOVLPD | + Opcode::UNPCKLPD | + Opcode::UNPCKHPD | + Opcode::MOVHPD | + Opcode::MOVAPD | + Opcode::MOVMSKPD | + Opcode::CVTPI2PD | + Opcode::CVTSI2SD | + Opcode::MOVNTPD | + Opcode::MOVNTI | + Opcode::MOVNTDQ | + Opcode::CVTTPD2PI | + Opcode::CVTTSD2SI | + Opcode::CVTPD2PI | + Opcode::CVTSD2SI | + Opcode::UCOMISD | + Opcode::COMISD | + Opcode::SQRTPD | + Opcode::SQRTSD | + Opcode::ANDPD | + Opcode::ANDNPD | + Opcode::ORPD | + Opcode::XORPD | + Opcode::ADDPD | + Opcode::ADDSD | + Opcode::MULSD | + Opcode::MULPD | + Opcode::CVTPS2PD | + Opcode::CVTPD2PS | + Opcode::CVTSS2SD | + Opcode::CVTSD2SS | + Opcode::CVTPS2DQ | + Opcode::CVTDQ2PS | + Opcode::CVTTPS2DQ | + Opcode::SUBSD | + Opcode::SUBPD | + Opcode::MINPD | + Opcode::MINSD | + Opcode::DIVPD | + Opcode::DIVSD | + Opcode::MAXPD | + Opcode::MAXSD | + Opcode::PUNPCKLQDQ | + Opcode::PUNPCKHQDQ | + Opcode::MOVDQA | + Opcode::MOVDQU | + Opcode::PSHUFHW | + Opcode::PSHUFLW | + Opcode::PSHUFD | + Opcode::LFENCE | + Opcode::MFENCE | + Opcode::CLFLUSH | + Opcode::CMPPD | + Opcode::CMPPS | + Opcode::CMPSD | + Opcode::SHUFPD | + Opcode::PADDQ | + Opcode::MOVQ2DQ | + Opcode::MOVDQ2Q | + Opcode::CVTPD2DQ | + Opcode::CVTTPD2DQ | + Opcode::CVTDQ2PD | + Opcode::PMULUDQ | + Opcode::MASKMOVDQU | + Opcode::PSUBQ => { + if !decoder.feature_sse2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VEXP2PD | + Opcode::VEXP2PS | + Opcode::VEXP2SD | + Opcode::VEXP2SS | + Opcode::VRCP28PD | + Opcode::VRCP28PS | + Opcode::VRCP28SD | + Opcode::VRCP28SS | + Opcode::VRSQRT28PD | + Opcode::VRSQRT28PS | + Opcode::VRSQRT28SD | + Opcode::VRSQRT28SS => { + if !decoder.feature_avx512_er() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XRSTORS64 | + Opcode::XSAVEC64 | + Opcode::XSAVES64 => { + if !decoder.feature_xsave64() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ARPL => { + if !decoder.feature_80286_arpl() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ANDN | + Opcode::BEXTR | + Opcode::BLSI | + Opcode::BLSMSK | + Opcode::BLSR | + Opcode::TZCNT => { + if !decoder.feature_bmi1() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BZHI | + Opcode::MULX | + Opcode::PDEP | + Opcode::PEXT | + Opcode::RORX | + Opcode::SARX | + Opcode::SHRX | + Opcode::SHLX => { + if !decoder.feature_bmi2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVDIRI | + Opcode::MOVDIR64B => { + if !decoder.feature_movdir() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VAESDEC | + Opcode::VAESDECLAST | + Opcode::VAESENC | + Opcode::VAESENCLAST | + Opcode::VAESIMC | + Opcode::VAESKEYGENASSIST => { + if !decoder.feature_vaes() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XGETBV | + Opcode::XRSTOR | + Opcode::XRSTORS | + Opcode::XSAVE | + Opcode::XSAVEC | + Opcode::XSAVES | + Opcode::XSETBV => { + if !decoder.feature_xsave() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDRAND => { + if !decoder.feature_rdrand() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLZERO => { + if !decoder.feature_clzero() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDSEED => { + if !decoder.feature_rdseed() { + return Err(DecodeError::InvalidOpcode); + + } + } + } + Ok(()) + } +} + +pub(crate) mod long_mode { + use crate::generated::long_mode::Opcode; + use crate::long_mode::{InstDecoder, Instruction, DecodeError}; + impl InstDecoder { + fn feature_sgx(&self) -> bool { + true + } + fn feature_smap(&self) -> bool { + true + } + fn feature_avx_unimplemented(&self) -> bool { + true + } + fn feature_uintr(&self) -> bool { + true + } + fn feature_pentium(&self) -> bool { + true + } + fn feature_aesni(&self) -> bool { + true + } + fn feature_invlpgb(&self) -> bool { + true + } + fn feature_sse(&self) -> bool { + true + } + fn feature_xsaveopt(&self) -> bool { + true + } + fn feature_simd(&self) -> bool { + true + } + fn feature_avx(&self) -> bool { + true + } + fn feature_hreset(&self) -> bool { + true + } + fn feature_avx512_vp2intersect(&self) -> bool { + true + } + fn feature_itanium(&self) -> bool { + true + } + fn feature_rdpru(&self) -> bool { + true + } + fn feature_sse4_2(&self) -> bool { + true + } + fn feature_monitor(&self) -> bool { + true + } + fn feature_avx512_f_typo(&self) -> bool { + true + } + fn feature_sse4_1(&self) -> bool { + true + } + fn feature_avx512_dq(&self) -> bool { + true + } + fn feature_adx(&self) -> bool { + true + } + fn feature_fxsr(&self) -> bool { + true + } + fn feature_typo_instructions(&self) -> bool { + true + } + fn feature_tsx(&self) -> bool { + true + } + fn feature_cmpxchg16b(&self) -> bool { + true + } + fn feature_waitpkg(&self) -> bool { + true + } + fn feature_80286(&self) -> bool { + true + } + fn feature_sysenter(&self) -> bool { + true + } + fn feature_invpcid_unimplemented(&self) -> bool { + true + } + fn feature_avx512_4vnniw(&self) -> bool { + true + } + fn feature_avx512_vnni(&self) -> bool { + true + } + fn feature_avx512_pf(&self) -> bool { + true + } + fn feature_avx512_cd(&self) -> bool { + true + } + fn feature_prefetchw(&self) -> bool { + true + } + fn feature_avx512_bf16(&self) -> bool { + true + } + fn feature_avx512bw_unimplemented(&self) -> bool { + true + } + fn feature_pclmulqdq(&self) -> bool { + true + } + fn feature_avx512_f__vl_unimplemented(&self) -> bool { + true + } + fn feature_cet(&self) -> bool { + true + } + fn feature_rdseed(&self) -> bool { + true + } + fn feature_tbm(&self) -> bool { + true + } + fn feature_80486(&self) -> bool { + true + } + fn feature_fsgsbase(&self) -> bool { + true + } + fn feature_pentium_pro(&self) -> bool { + true + } + fn feature_f16c(&self) -> bool { + true + } + fn feature_mpx(&self) -> bool { + true + } + fn feature_rdtscp(&self) -> bool { + true + } + fn feature_avx2(&self) -> bool { + true + } + fn feature_pconfig(&self) -> bool { + true + } + fn feature_avx512_ifma(&self) -> bool { + true + } + fn feature_avx512_er(&self) -> bool { + true + } + fn feature_vpclmulqdq(&self) -> bool { + true + } + fn feature_80386(&self) -> bool { + true + } + fn feature_movbe(&self) -> bool { + true + } + fn feature_avx512_f(&self) -> bool { + true + } + fn feature_emx(&self) -> bool { + true + } + fn feature_fma3(&self) -> bool { + true + } + fn feature_fma4(&self) -> bool { + true + } + fn feature_vmx(&self) -> bool { + true + } + fn feature_tsxldtrk(&self) -> bool { + true + } + fn feature_syscall(&self) -> bool { + true + } + fn feature_sse4a(&self) -> bool { + true + } + fn feature_avx512_vpopcntdq(&self) -> bool { + true + } + fn feature_invpcid(&self) -> bool { + true + } + fn feature_xsave(&self) -> bool { + true + } + fn feature_cmov(&self) -> bool { + true + } + fn feature_avx512_bw(&self) -> bool { + true + } + fn feature_ssse3(&self) -> bool { + true + } + fn feature_clflushopt(&self) -> bool { + true + } + fn feature_xop(&self) -> bool { + true + } + fn feature_sha(&self) -> bool { + true + } + fn feature_64bit(&self) -> bool { + true + } + fn feature_x86_64_baseline(&self) -> bool { + true + } + fn feature_abm(&self) -> bool { + true + } + fn feature_3dnowprefetch(&self) -> bool { + true + } + fn feature_rdpid(&self) -> bool { + true + } + fn feature_lahfsahf(&self) -> bool { + true + } + fn feature_enqcmd(&self) -> bool { + true + } + fn feature_new(&self) -> bool { + true + } + fn feature_ptwrite(&self) -> bool { + true + } + fn feature_avx512_vbmi(&self) -> bool { + true + } + fn feature_x87(&self) -> bool { + true + } + fn feature_mmx(&self) -> bool { + true + } + fn feature_avx512_bitalg(&self) -> bool { + true + } + fn feature_keylocker(&self) -> bool { + true + } + fn feature_80186(&self) -> bool { + true + } + fn feature_clwb(&self) -> bool { + true + } + fn feature_mpk(&self) -> bool { + true + } + fn feature_avx512_4fmaps(&self) -> bool { + true + } + fn feature_tdx(&self) -> bool { + true + } + fn feature_popcnt(&self) -> bool { + true + } + fn feature_snp(&self) -> bool { + true + } + fn feature_avx512_gfni(&self) -> bool { + true + } + fn feature_3dnow(&self) -> bool { + true + } + fn feature_avx512_vbmi2(&self) -> bool { + true + } + fn feature_8086(&self) -> bool { + true + } + fn feature_svm(&self) -> bool { + true + } + fn feature_sse3(&self) -> bool { + true + } + fn feature_sse2(&self) -> bool { + true + } + fn feature_gfni(&self) -> bool { + true + } + fn feature_xsave64(&self) -> bool { + true + } + fn feature_smx(&self) -> bool { + true + } + fn feature_bmi1(&self) -> bool { + true + } + fn feature_bmi2(&self) -> bool { + true + } + fn feature_movdir(&self) -> bool { + true + } + fn feature_vaes(&self) -> bool { + true + } + fn feature_rdrand(&self) -> bool { + true + } + fn feature_clzero(&self) -> bool { + true + } + } + pub(crate) fn revise_instruction(decoder: &InstDecoder, inst: &mut Instruction) -> Result<(), DecodeError> { + if inst.prefixes.evex().is_some() { + if !decoder.avx512() { + return Err(DecodeError::InvalidOpcode); + } else { + return Ok(()); + } + } + + // for some instructions (tzcnt), not having an extension means the instruction is + // interpreted as another, rather than being simply rejected. + // we might still reject the alternate instruction later, if the extension adding *it* + // is also not supported. + if inst.opcode == Opcode::TZCNT { + if !decoder.bmi1() { + // tzcnt is only supported if bmi1 is enabled. without bmi1, this decodes as bsf. + inst.opcode = Opcode::BSF; + } + } + + match inst.opcode { + // we'll never be rejecting the instruction `Invalid` + Opcode::Invalid => {} + Opcode::ENCLS | + Opcode::ENCLU | + Opcode::ENCLV => { + if !decoder.feature_sgx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLAC | + Opcode::STAC => { + if !decoder.feature_smap() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMAXUB | + Opcode::VPMAXUB => { + if !decoder.feature_avx_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::UIRET | + Opcode::TESTUI | + Opcode::CLUI | + Opcode::STUI | + Opcode::SENDUIPI => { + if !decoder.feature_uintr() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CPUID | + Opcode::WRMSR | + Opcode::RDTSC | + Opcode::RDMSR | + Opcode::RSM | + Opcode::CMPXCHG8B => { + if !decoder.feature_pentium() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::AESKEYGENASSIST | + Opcode::AESIMC | + Opcode::AESENC | + Opcode::AESENCLAST | + Opcode::AESDEC | + Opcode::AESDECLAST => { + if !decoder.feature_aesni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVLPGB | + Opcode::TLBSYNC => { + if !decoder.feature_invlpgb() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVSS | + Opcode::ADDSS | + Opcode::SUBSS | + Opcode::MULSS | + Opcode::DIVSS | + Opcode::MINSS | + Opcode::MAXSS | + Opcode::SQRTSS | + Opcode::MOVUPS | + Opcode::MOVHLPS | + Opcode::MOVLPS | + Opcode::MOVHPS | + Opcode::MOVLHPS | + Opcode::UNPCKLPS | + Opcode::UNPCKHPS | + Opcode::PREFETCHNTA | + Opcode::PREFETCH0 | + Opcode::PREFETCH1 | + Opcode::PREFETCH2 | + Opcode::MOVAPS | + Opcode::CVTPI2PS | + Opcode::CVTSI2SS | + Opcode::MOVNTPS | + Opcode::CVTTSS2SI | + Opcode::CVTTPS2PI | + Opcode::CVTSS2SI | + Opcode::CVTPS2PI | + Opcode::UCOMISS | + Opcode::COMISS | + Opcode::SQRTPS | + Opcode::MOVMSKPS | + Opcode::RSQRTSS | + Opcode::RSQRTPS | + Opcode::RCPPS | + Opcode::RCPSS | + Opcode::ANDPS | + Opcode::ANDNPS | + Opcode::XORPS | + Opcode::ORPS | + Opcode::ADDPS | + Opcode::MULPS | + Opcode::SUBPS | + Opcode::MINPS | + Opcode::DIVPS | + Opcode::MAXPS | + Opcode::PSHUFW | + Opcode::LDMXCSR | + Opcode::STMXCSR | + Opcode::SFENCE | + Opcode::CMPPS | + Opcode::CMPSS | + Opcode::PINSRW | + Opcode::PEXTRW | + Opcode::SHUFPS | + Opcode::PMOVMSKB | + Opcode::PMINUB | + Opcode::PMAXUB | + Opcode::PAVGB | + Opcode::PAVGW | + Opcode::PMULHUW | + Opcode::MOVNTQ | + Opcode::PMINSW | + Opcode::PMAXSW | + Opcode::PSADBW | + Opcode::MASKMOVQ | + Opcode::LDMXCSR | + Opcode::STMXCSR => { + if !decoder.feature_sse() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XSAVEOPT => { + if !decoder.feature_xsaveopt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VLDDQU | + Opcode::VPADDB | + Opcode::VPADDD | + Opcode::VPADDQ | + Opcode::VPADDW | + Opcode::VPABSB | + Opcode::VPABSW | + Opcode::VPABSD | + Opcode::VMAXSD | + Opcode::VMAXSS | + Opcode::VMINSD | + Opcode::VMINSS | + Opcode::VMULSD | + Opcode::VMULSS | + Opcode::VRCPSS | + Opcode::VPSUBUSB | + Opcode::VPSUBUSW | + Opcode::VXORPD | + Opcode::VXORPS | + Opcode::VPAVGB | + Opcode::VPAVGW | + Opcode::VANDNPD | + Opcode::VANDNPS | + Opcode::VPHADDD | + Opcode::VPHADDSW | + Opcode::VPHADDW | + Opcode::VANDPD | + Opcode::VANDPS | + Opcode::VPADDSB | + Opcode::VPADDSW | + Opcode::VPADDUSB | + Opcode::VPADDUSW | + Opcode::VPHSUBD | + Opcode::VPHSUBSW | + Opcode::VPHSUBW | + Opcode::VHADDPD | + Opcode::VHADDPS | + Opcode::VHSUBPD | + Opcode::VHSUBPS | + Opcode::VORPD | + Opcode::VORPS | + Opcode::VPBLENDVB | + Opcode::VPBLENDW | + Opcode::VADDSUBPD | + Opcode::VADDSUBPS | + Opcode::VRSQRTPS | + Opcode::VRSQRTSS | + Opcode::VPALIGNR | + Opcode::VPSUBSB | + Opcode::VPSUBSW | + Opcode::VPMULHUW | + Opcode::VPMULHW | + Opcode::VPMULLW | + Opcode::VPSHUFB | + Opcode::VPSHUFHW | + Opcode::VPSHUFLW | + Opcode::VPHMINPOSUW | + Opcode::VRCPPS | + Opcode::VMPSADBW | + Opcode::VPMADDUBSW | + Opcode::VPMADDWD | + Opcode::VMASKMOVDQU | + Opcode::VPMOVMSKB | + Opcode::VPSADBW | + Opcode::VPSLLDQ | + Opcode::VPSRLDQ | + Opcode::VDPPD | + Opcode::VDPPS | + Opcode::VLDMXCSR | + Opcode::VSTMXCSR | + Opcode::VMOVMSKPD | + Opcode::VMOVMSKPS | + Opcode::VPTEST | + Opcode::VTESTPD | + Opcode::VTESTPS | + Opcode::VPEXTRB | + Opcode::VPEXTRW | + Opcode::VPEXTRD | + Opcode::VPEXTRQ | + Opcode::VPACKSSDW | + Opcode::VPACKUSDW | + Opcode::VPACKSSWB | + Opcode::VPACKUSWB | + Opcode::VBLENDPD | + Opcode::VBLENDPS | + Opcode::VBLENDVPD | + Opcode::VBLENDVPS | + Opcode::VPMULHRSW | + Opcode::VPAND | + Opcode::VPANDN | + Opcode::VPOR | + Opcode::VPCMPEQB | + Opcode::VPCMPEQD | + Opcode::VPCMPEQQ | + Opcode::VPCMPEQW | + Opcode::VPCMPGTB | + Opcode::VPCMPGTD | + Opcode::VPCMPGTQ | + Opcode::VPCMPGTW | + Opcode::VPMAXSB | + Opcode::VPMAXSD | + Opcode::VPMAXSW | + Opcode::VPMAXUB | + Opcode::VPMAXUW | + Opcode::VPMINSB | + Opcode::VPMINSW | + Opcode::VPMINUB | + Opcode::VPMINUW | + Opcode::VPMAXUD | + Opcode::VPMINSD | + Opcode::VPSIGNB | + Opcode::VPSIGNW | + Opcode::VPSIGND | + Opcode::VPINSRB | + Opcode::VPINSRW | + Opcode::VPINSRD | + Opcode::VPINSRQ | + Opcode::VPMOVSXBD | + Opcode::VPMOVSXBQ | + Opcode::VPMOVSXBW | + Opcode::VPMOVSXDQ | + Opcode::VPMOVSXWD | + Opcode::VPMOVSXWQ | + Opcode::VPMOVZXBD | + Opcode::VPMOVZXBQ | + Opcode::VPMOVZXBW | + Opcode::VPMOVZXDQ | + Opcode::VPMOVZXWD | + Opcode::VPMOVZXWQ | + Opcode::VPMULDQ | + Opcode::VPMULLQ | + Opcode::VPMULLD | + Opcode::VPMULUDQ | + Opcode::VPSHUFD | + Opcode::VSHUFPD | + Opcode::VSHUFPS | + Opcode::VSQRTPD | + Opcode::VSQRTPS | + Opcode::VSQRTSS | + Opcode::VSQRTSD | + Opcode::VSUBPD | + Opcode::VSUBPS | + Opcode::VSUBSD | + Opcode::VSUBSS | + Opcode::VUCOMISD | + Opcode::VUCOMISS | + Opcode::VROUNDPD | + Opcode::VROUNDPS | + Opcode::VROUNDSD | + Opcode::VROUNDSS | + Opcode::VPSLLD | + Opcode::VPSLLQ | + Opcode::VPSLLW | + Opcode::VPSRAD | + Opcode::VPSRAW | + Opcode::VPSRLD | + Opcode::VPSRLQ | + Opcode::VPSRLW | + Opcode::VPSUBB | + Opcode::VPSUBW | + Opcode::VPSUBD | + Opcode::VPSUBQ | + Opcode::VPXOR | + Opcode::VPUNPCKHBW | + Opcode::VPUNPCKHWD | + Opcode::VPUNPCKHDQ | + Opcode::VPUNPCKHQDQ | + Opcode::VPUNPCKLBW | + Opcode::VPUNPCKLWD | + Opcode::VPUNPCKLDQ | + Opcode::VPUNPCKLQDQ | + Opcode::VUNPCKHPD | + Opcode::VUNPCKHPS | + Opcode::VUNPCKLPD | + Opcode::VUNPCKLPS | + Opcode::VPCMPESTRI | + Opcode::VPCMPESTRM | + Opcode::VPCMPISTRI | + Opcode::VPCMPISTRM | + Opcode::VBROADCASTSS | + Opcode::VBROADCASTSD | + Opcode::VBROADCASTF128 | + Opcode::VBROADCASTSD | + Opcode::VBROADCASTSS | + Opcode::VINSERTF128 | + Opcode::VEXTRACTF128 | + Opcode::VMASKMOVPD | + Opcode::VMASKMOVPS | + Opcode::VPERMILPD | + Opcode::VPERMILPS | + Opcode::VPERM2F128 | + Opcode::VZEROUPPER | + Opcode::VZEROALL => { + if !decoder.feature_avx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::HRESET => { + if !decoder.feature_hreset() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VP2INTERSECTD | + Opcode::VP2INTERSECTQ => { + if !decoder.feature_avx512_vp2intersect() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::JMPE => { + if !decoder.feature_itanium() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPRU => { + if !decoder.feature_rdpru() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CRC32 | + Opcode::PCMPESTRI | + Opcode::PCMPESTRM | + Opcode::PCMPISTRI | + Opcode::PCMPISTRM | + Opcode::PCMPGTQ => { + if !decoder.feature_sse4_2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MONITOR | + Opcode::MWAIT => { + if !decoder.feature_monitor() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPRORRD | + Opcode::VPRORRQ => { + if !decoder.feature_avx512_f_typo() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PHMINPOSUW | + Opcode::PMULDQ | + Opcode::PMULLD | + Opcode::DPPS | + Opcode::DPPD | + Opcode::PACKUSDW | + Opcode::PCMPEQQ | + Opcode::PTEST | + Opcode::MOVNTDQA | + Opcode::ROUNDSS | + Opcode::ROUNDSD | + Opcode::ROUNDPS | + Opcode::ROUNDPD | + Opcode::PMAXSB | + Opcode::PMAXSD | + Opcode::PMAXUW | + Opcode::PMAXUD | + Opcode::PMINSD | + Opcode::PMINSB | + Opcode::PMINUD | + Opcode::PMINUW | + Opcode::BLENDW | + Opcode::PBLENDW | + Opcode::BLENDVPS | + Opcode::BLENDVPD | + Opcode::PBLENDVB | + Opcode::BLENDPS | + Opcode::BLENDPD | + Opcode::MPSADBW | + Opcode::PMOVZXDQ | + Opcode::PMOVSXDQ | + Opcode::PMOVZXBD | + Opcode::PMOVSXBD | + Opcode::PMOVZXWQ | + Opcode::PMOVSXWQ | + Opcode::PMOVZXBQ | + Opcode::PMOVSXBQ | + Opcode::PMOVSXWD | + Opcode::PMOVZXWD | + Opcode::PEXTRQ | + Opcode::PEXTRD | + Opcode::PEXTRB | + Opcode::PMOVSXBW | + Opcode::PMOVZXBW | + Opcode::PINSRQ | + Opcode::PINSRD | + Opcode::PINSRB | + Opcode::EXTRACTPS | + Opcode::INSERTPS => { + if !decoder.feature_sse4_1() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::KANDB | + Opcode::KANDNB | + Opcode::KADDB | + Opcode::KTESTB | + Opcode::KADDW | + Opcode::KTESTW | + Opcode::KMOVB | + Opcode::KNOTB | + Opcode::KORB | + Opcode::KORTESTB | + Opcode::KSHIFTLB | + Opcode::KSHIFTRB | + Opcode::KXNORB | + Opcode::KXORB | + Opcode::VBROADCASTF32X2 | + Opcode::VBROADCASTF64X2 | + Opcode::VBROADCASTF32X8 | + Opcode::VBROADCASTI32X8 | + Opcode::VBROADCASTI64X2 | + Opcode::VBROADCASTI32X2 | + Opcode::VEXTRACTF32X8 | + Opcode::VEXTRACTI32X8 | + Opcode::VGETEXPSD | + Opcode::VGETEXPSS | + Opcode::VXORPD | + Opcode::VXORPS | + Opcode::VPEXTRD | + Opcode::VPEXTRQ | + Opcode::VPINSRD | + Opcode::VPINSRQ | + Opcode::VANDNPD | + Opcode::VANDNPS | + Opcode::VANDPD | + Opcode::VANDPS | + Opcode::VORPD | + Opcode::VORPS | + Opcode::VCVTTPD2QQ | + Opcode::VCVTPD2QQ | + Opcode::VCVTTPD2UQQ | + Opcode::VCVTPD2UQQ | + Opcode::VCVTTPS2QQ | + Opcode::VCVTPS2QQ | + Opcode::VCVTTPS2UQQ | + Opcode::VCVTPS2UQQ | + Opcode::VCVTUQQ2PD | + Opcode::VCVTUQQ2PS | + Opcode::VEXTRACTF64X2 | + Opcode::VEXTRACTI64X2 | + Opcode::VFPCLASSPD | + Opcode::VFPCLASSPS | + Opcode::VFPCLASSSD | + Opcode::VFPCLASSSS | + Opcode::VINSERTF64X2 | + Opcode::VINSERTF32X8 | + Opcode::VINSERTI32X8 | + Opcode::VINSERTI64X2 | + Opcode::VPMOVM2D | + Opcode::VPMOVM2Q | + Opcode::VPMOVB2D | + Opcode::VPMOVQ2M | + Opcode::VRANGEPD | + Opcode::VRANGEPS | + Opcode::VRANGESD | + Opcode::VRANGESS | + Opcode::VREDUCEPD | + Opcode::VREDUCEPS | + Opcode::VREDUCESD | + Opcode::VREDUCESS => { + if !decoder.feature_avx512_dq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ADCX | + Opcode::ADOX => { + if !decoder.feature_adx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::FXSAVE | + Opcode::FXRSTOR => { + if !decoder.feature_fxsr() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SLHD => { + if !decoder.feature_typo_instructions() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XABORT | + Opcode::XBEGIN | + Opcode::XEND | + Opcode::XTEST => { + if !decoder.feature_tsx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CMPXCHG16B => { + if !decoder.feature_cmpxchg16b() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::TPAUSE | + Opcode::UMONITOR | + Opcode::UMWAIT => { + if !decoder.feature_waitpkg() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLTS | + Opcode::LAR | + Opcode::LGDT | + Opcode::LIDT | + Opcode::LLDT | + Opcode::LMSW | + Opcode::LSL | + Opcode::SGDT | + Opcode::SIDT | + Opcode::SLDT | + Opcode::SMSW | + Opcode::STR | + Opcode::LTR | + Opcode::VERR | + Opcode::VERW => { + if !decoder.feature_80286() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SYSENTER | + Opcode::SYSEXIT => { + if !decoder.feature_sysenter() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVVPID => { + if !decoder.feature_invpcid_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VP4DPWSSDS | + Opcode::VP4DPWSSD => { + if !decoder.feature_avx512_4vnniw() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPDPBUSDS | + Opcode::VPDPBUSD | + Opcode::VPDPWSSDS | + Opcode::VPDPWSSD => { + if !decoder.feature_avx512_vnni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VGATHERPF0DPD | + Opcode::VGATHERPF0DPS | + Opcode::VGATHERPF0QPD | + Opcode::VGATHERPF0QPS | + Opcode::VGATHERPF1DPD | + Opcode::VGATHERPF1DPS | + Opcode::VGATHERPF1QPD | + Opcode::VGATHERPF1QPS | + Opcode::VSCATTERPF0DPD | + Opcode::VSCATTERPF0DPS | + Opcode::VSCATTERPF0QPD | + Opcode::VSCATTERPF0QPS | + Opcode::VSCATTERPF1DPD | + Opcode::VSCATTERPF1DPS | + Opcode::VSCATTERPF1QPD | + Opcode::VSCATTERPF1QPS => { + if !decoder.feature_avx512_pf() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPBROADCASTMW2D | + Opcode::VPBROADCASTMB2Q | + Opcode::VPBROADCASTM | + Opcode::VPCONFLICTD | + Opcode::VPCONFLICTQ | + Opcode::VPLZCNTD | + Opcode::VPLZCNTQ => { + if !decoder.feature_avx512_cd() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VCVTNE2PS2BF16 | + Opcode::VCVTNEPS2BF16 | + Opcode::VDPBF16PS => { + if !decoder.feature_avx512_bf16() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMOVQ2M => { + if !decoder.feature_avx512bw_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PCLMULQDQ => { + if !decoder.feature_pclmulqdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD => { + if !decoder.feature_avx512_f__vl_unimplemented() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::WRUSS | + Opcode::WRSS | + Opcode::INCSSP | + Opcode::SAVEPREVSSP | + Opcode::SETSSBSY | + Opcode::CLRSSBSY | + Opcode::RSTORSSP | + Opcode::ENDBR64 | + Opcode::ENDBR32 => { + if !decoder.feature_cet() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDSEED => { + if !decoder.feature_rdseed() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BSWAP | + Opcode::CMPXCHG | + Opcode::INVD | + Opcode::WBINVD | + Opcode::INVLPG | + Opcode::XADD => { + if !decoder.feature_80486() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDFSBASE | + Opcode::RDGSBASE | + Opcode::WRFSBASE | + Opcode::WRGSBASE => { + if !decoder.feature_fsgsbase() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::UD2 => { + if !decoder.feature_pentium_pro() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VCVTPH2PS | + Opcode::VCVTPS2PH => { + if !decoder.feature_f16c() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BNDMK | + Opcode::BNDCL | + Opcode::BNDCU | + Opcode::BNDCN | + Opcode::BNDMOV | + Opcode::BNDLDX | + Opcode::BNDSTX => { + if !decoder.feature_mpx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDTSCP => { + if !decoder.feature_rdtscp() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VBROADCASTI128 | + Opcode::VPBROADCASTB | + Opcode::VPBROADCASTW | + Opcode::VPBROADCASTD | + Opcode::VPBROADCASTQ | + Opcode::VINSERTI128 | + Opcode::VEXTRACTI128 | + Opcode::VPMASKMOVD | + Opcode::VPMASKMOVQ | + Opcode::VPERMPS | + Opcode::VPERMD | + Opcode::VPERMPD | + Opcode::VPERMQ | + Opcode::VPERM2I128 | + Opcode::VPBLENDD | + Opcode::VPSLLVD | + Opcode::VPSLLVQ | + Opcode::VPSRLVD | + Opcode::VPSRLVQ | + Opcode::VPSRAVD => { + if !decoder.feature_avx2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PCONFIG => { + if !decoder.feature_pconfig() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPMADD52HUQ | + Opcode::VPMADD52LUQ => { + if !decoder.feature_avx512_ifma() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VEXP2PD | + Opcode::VEXP2PS | + Opcode::VEXP2SD | + Opcode::VEXP2SS | + Opcode::VRCP28PD | + Opcode::VRCP28PS | + Opcode::VRCP28SD | + Opcode::VRCP28SS | + Opcode::VRSQRT28PD | + Opcode::VRSQRT28PS | + Opcode::VRSQRT28SD | + Opcode::VRSQRT28SS => { + if !decoder.feature_avx512_er() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPCLMULQDQ => { + if !decoder.feature_vpclmulqdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BSF | + Opcode::BSR | + Opcode::BT | + Opcode::BTS | + Opcode::BTC | + Opcode::BTR | + Opcode::CDQ | + Opcode::CWDE | + Opcode::LDS | + Opcode::LES | + Opcode::LFS | + Opcode::LGS | + Opcode::LSS | + Opcode::MOVZX | + Opcode::MOVSX | + Opcode::SETO | + Opcode::SETNO | + Opcode::SETB | + Opcode::SETAE | + Opcode::SETZ | + Opcode::SETNZ | + Opcode::SETBE | + Opcode::SETA | + Opcode::SETS | + Opcode::SETNS | + Opcode::SETP | + Opcode::SETNP | + Opcode::SETL | + Opcode::SETGE | + Opcode::SETLE | + Opcode::SETG | + Opcode::SHLD | + Opcode::SHRD => { + if !decoder.feature_80386() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVBE => { + if !decoder.feature_movbe() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VCVTQQ2PD | + Opcode::VCVTQQ2PS | + Opcode::VCVTUSI2USD | + Opcode::VCVTUSI2USS | + Opcode::VEXTRACTF32X4 | + Opcode::VEXTRACTF64X4 | + Opcode::VEXTRACTI32X4 | + Opcode::VEXTRACTI64X4 | + Opcode::VFIXUPIMMSD | + Opcode::VFIXUPIMMSS | + Opcode::VINSERTI64X4 | + Opcode::VMOVDQA32 | + Opcode::VMOVDQA64 | + Opcode::VMOVDQU32 | + Opcode::VMOVDQU64 | + Opcode::VPCOMPRESSQ | + Opcode::VPCOMPRESSD | + Opcode::VSCALEDPD | + Opcode::VSCALEDPS | + Opcode::VSCALEDSD | + Opcode::VSCALEDSS | + Opcode::VSCATTERDD | + Opcode::VSCATTERDQ | + Opcode::VSCATTERQD | + Opcode::VSCATTERQQ | + Opcode::VADDPD | + Opcode::VADDPS | + Opcode::VCMPPD | + Opcode::VCMPPS | + Opcode::VCVTDQ2PD | + Opcode::VCVTDQ2PS | + Opcode::VCVTPD2DQ | + Opcode::VCVTPD2PS | + Opcode::VCVTPS2DQ | + Opcode::VCVTPS2PD | + Opcode::VCVTTPD2DQ | + Opcode::VCVTTPS2DQ | + Opcode::VDIVPD | + Opcode::VDIVPS | + Opcode::VMAXPD | + Opcode::VMAXPS | + Opcode::VMINPD | + Opcode::VMINPS | + Opcode::VMOVAPD | + Opcode::VMOVAPS | + Opcode::VMOVDDUP | + Opcode::VMOVDQA | + Opcode::VMOVDQU | + Opcode::VMOVNTDQA | + Opcode::VMOVNTDQ | + Opcode::VMOVNTPD | + Opcode::VMOVNTPS | + Opcode::VMOVSHDUP | + Opcode::VMOVSLDUP | + Opcode::VMOVUPD | + Opcode::VMOVUPS | + Opcode::VMULPD | + Opcode::VMULPS | + Opcode::VPANDD | + Opcode::VPANDQ | + Opcode::VPANDND | + Opcode::VPANDNQ | + Opcode::VPCMPEQD | + Opcode::VPCMPEQQ | + Opcode::VPCMPGTD | + Opcode::VPCMPGTQ | + Opcode::VPMAXSD | + Opcode::VPMAXSQ | + Opcode::VPMAXUD | + Opcode::VPMAXUQ | + Opcode::VPMINSD | + Opcode::VPMINSQ | + Opcode::VPMINUD | + Opcode::VPMINUQ | + Opcode::VPCMPD | + Opcode::VPCMPQ | + Opcode::VPCMPUD | + Opcode::VPCMPUQ | + Opcode::VPORD | + Opcode::VPORQ | + Opcode::VPXORD | + Opcode::VPXORQ | + Opcode::VPSLLD | + Opcode::VPSLLQ | + Opcode::VPSLLW | + Opcode::VPSRAD | + Opcode::VPSRAQ | + Opcode::VALIGND | + Opcode::VALIGNQ | + Opcode::VBLENDMPD | + Opcode::VBLENDMPS | + Opcode::VPROLD | + Opcode::VPROLQ | + Opcode::VPROLVD | + Opcode::VPROLVQ | + Opcode::VPRORD | + Opcode::VPRORQ | + Opcode::VPRORVD | + Opcode::VPRORVQ | + Opcode::VPUNPCKHDQ | + Opcode::VPUNPCKHQDQ | + Opcode::VPUNPCKLDQ | + Opcode::VPUNPCKLQDQ | + Opcode::VUNPCKHPD | + Opcode::VUNPCKHPS | + Opcode::VUNPCKLPD | + Opcode::VUNPCKLPS | + Opcode::VBROADCASTF32X4 | + Opcode::VBROADCASTF64X4 | + Opcode::VBROADCASTI64X4 | + Opcode::VBROADCASTI32X4 | + Opcode::VINSERTF32X4 | + Opcode::VINSERTI32X4 | + Opcode::VSHUFF32X4 | + Opcode::VSHUFF64X2 | + Opcode::VSHUFI32X4 | + Opcode::VSHUFI64X2 | + Opcode::VCOMPRESSD | + Opcode::VCOMPRESSQ | + Opcode::VCOMPRESSPD | + Opcode::VCOMPRESSPS | + Opcode::VEXPANDPD | + Opcode::VEXPANDPS | + Opcode::VCVTPD2UDQ | + Opcode::VCVTPS2UDQ | + Opcode::VCVTUDQ2PD | + Opcode::VCVTUDQ2PS | + Opcode::VCVTTPD2UDQ | + Opcode::VCVTTPS2UDQ | + Opcode::VFIXUPIMMPD | + Opcode::VFIXUPIMMPS | + Opcode::VCVTPH2PS | + Opcode::VCVTPS2PH | + Opcode::VFMADD132PD | + Opcode::VFMADD132PS | + Opcode::VFMADD213PD | + Opcode::VFMADD213PS | + Opcode::VFMADD231PD | + Opcode::VFMADD231PS | + Opcode::VFMADDSUB132PD | + Opcode::VFMADDSUB132PS | + Opcode::VFMADDSUB213PD | + Opcode::VFMADDSUB213PS | + Opcode::VFMADDSUB231PD | + Opcode::VFMADDSUB231PS | + Opcode::VFMSUB132PD | + Opcode::VFMSUB132PS | + Opcode::VFMSUB213PD | + Opcode::VFMSUB213PS | + Opcode::VFMSUB231PD | + Opcode::VFMSUB231PS | + Opcode::VFMSUBADD132PD | + Opcode::VFMSUBADD132PS | + Opcode::VFMSUBADD213PD | + Opcode::VFMSUBADD213PS | + Opcode::VFMSUBADD231PD | + Opcode::VFMSUBADD231PS | + Opcode::VFNMADD132PD | + Opcode::VFNMADD132PS | + Opcode::VFNMADD213PD | + Opcode::VFNMADD213PS | + Opcode::VFNMADD231PD | + Opcode::VFNMADD231PS | + Opcode::VFNMSUB132PD | + Opcode::VFNMSUB132PS | + Opcode::VFNMSUB213PD | + Opcode::VFNMSUB213PS | + Opcode::VFNMSUB231PD | + Opcode::VFNMSUB231PS | + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD | + Opcode::VGATHERDPD | + Opcode::VGATHERDPS | + Opcode::VGATHERQPD | + Opcode::VGATHERQPS | + Opcode::VGETEXPPD | + Opcode::VGETEXPPS | + Opcode::VGETMANTPD | + Opcode::VGETMANTPS | + Opcode::VPBLENDMD | + Opcode::VPBLENDMQ | + Opcode::VPERMD | + Opcode::VPERMQ | + Opcode::VPERMI2D | + Opcode::VPERMI2Q | + Opcode::VPERMI2PD | + Opcode::VPERMI2PS | + Opcode::VPERMT2D | + Opcode::VPERMT2Q | + Opcode::VPERMT2PD | + Opcode::VPERMT2PS | + Opcode::VPEXPANDD | + Opcode::VPEXPANDQ | + Opcode::VPGATHERDD | + Opcode::VPGATHERDQ | + Opcode::VPGATHERQD | + Opcode::VPGATHERQQ | + Opcode::VPSCATTERDD | + Opcode::VPSCATTERDQ | + Opcode::VPSCATTERQD | + Opcode::VPSCATTERQQ | + Opcode::VPMOVDB | + Opcode::VPMOVSDB | + Opcode::VPMOVUSDB | + Opcode::VPMOVDW | + Opcode::VPMOVSDW | + Opcode::VPMOVUSDW | + Opcode::VPMOVQB | + Opcode::VPMOVSQB | + Opcode::VPMOVUSQB | + Opcode::VPMOVQD | + Opcode::VPMOVSQD | + Opcode::VPMOVUSQD | + Opcode::VPMOVQW | + Opcode::VPMOVSQW | + Opcode::VPMOVUSQW | + Opcode::VPSRAVQ | + Opcode::VPTERNLOGD | + Opcode::VPTERNLOGQ | + Opcode::VPTESTMD | + Opcode::VPTESTMQ | + Opcode::VPTESTNMD | + Opcode::VPTESTNMQ | + Opcode::VRCP14PD | + Opcode::VRCP14PS | + Opcode::VRNDSCALEPD | + Opcode::VRNDSCALEPS | + Opcode::VRSQRT14PD | + Opcode::VRSQRT14PS | + Opcode::VSCALEFPS | + Opcode::VSCALEFPD | + Opcode::VPABSQ | + Opcode::VADDSD | + Opcode::VADDSS | + Opcode::VCMPSD | + Opcode::VCMPSS | + Opcode::VCOMISD | + Opcode::VCOMISS | + Opcode::VCVTSD2SI | + Opcode::VCVTSD2SS | + Opcode::VCVTSI2SS | + Opcode::VCVTSI2SD | + Opcode::VCVTSS2SD | + Opcode::VCVTSS2SI | + Opcode::VCVTTSS2SI | + Opcode::VCVTTSD2SI | + Opcode::VDIVSD | + Opcode::VDIVSS | + Opcode::VEXTRACTPS | + Opcode::VINSERTPS | + Opcode::VGETMANTSD | + Opcode::VGETMANTSS | + Opcode::VMOVD | + Opcode::VMOVQ | + Opcode::VMOVHLPS | + Opcode::VMOVHPD | + Opcode::VMOVHPS | + Opcode::VMOVLHPS | + Opcode::VMOVLPD | + Opcode::VMOVLPS | + Opcode::VMOVSS | + Opcode::VMOVSD | + Opcode::VSQRTSS | + Opcode::VSQRTSD | + Opcode::VSUBSD | + Opcode::VSUBSS | + Opcode::VUCOMISD | + Opcode::VUCOMISS | + Opcode::VRCP14SD | + Opcode::VRCP14SS | + Opcode::VRNDSCALESD | + Opcode::VRNDSCALESS | + Opcode::VRSQRT14SD | + Opcode::VRSQRT14SS | + Opcode::VSCALEFSS | + Opcode::VSCALEFSD | + Opcode::VINSERTF64X4 | + Opcode::VCVTUSI2SD | + Opcode::VCVTUSI2SS | + Opcode::VCVTSD2USI | + Opcode::VCVTSS2USI | + Opcode::VCVTTSD2USI | + Opcode::VCVTTSS2USI | + Opcode::KANDW | + Opcode::KANDNW | + Opcode::KMOVW | + Opcode::KNOTW | + Opcode::KORW | + Opcode::KORTESTW | + Opcode::KSHIFTLW | + Opcode::KSHIFTRW | + Opcode::KUNPCKBW | + Opcode::KXNORW | + Opcode::KXORW => { + if !decoder.feature_avx512_f() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MONITORX | + Opcode::MWAITX => { + if !decoder.feature_emx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VFMADD132PD | + Opcode::VFMADD132PS | + Opcode::VFMADD132SD | + Opcode::VFMADD132SS | + Opcode::VFMADD213PD | + Opcode::VFMADD213PS | + Opcode::VFMADD213SD | + Opcode::VFMADD213SS | + Opcode::VFMADD231PD | + Opcode::VFMADD231PS | + Opcode::VFMADD231SD | + Opcode::VFMADD231SS | + Opcode::VFMADDSUB132PD | + Opcode::VFMADDSUB132PS | + Opcode::VFMADDSUB213PD | + Opcode::VFMADDSUB213PS | + Opcode::VFMADDSUB231PD | + Opcode::VFMADDSUB231PS | + Opcode::VFMSUB132PD | + Opcode::VFMSUB132PS | + Opcode::VFMSUB132SD | + Opcode::VFMSUB132SS | + Opcode::VFMSUB213PD | + Opcode::VFMSUB213PS | + Opcode::VFMSUB213SD | + Opcode::VFMSUB213SS | + Opcode::VFMSUB231PD | + Opcode::VFMSUB231PS | + Opcode::VFMSUB231SD | + Opcode::VFMSUB231SS | + Opcode::VFMSUBADD132PD | + Opcode::VFMSUBADD132PS | + Opcode::VFMSUBADD213PD | + Opcode::VFMSUBADD213PS | + Opcode::VFMSUBADD231PD | + Opcode::VFMSUBADD231PS | + Opcode::VFNMADD132PD | + Opcode::VFNMADD132PS | + Opcode::VFNMADD132SD | + Opcode::VFNMADD132SS | + Opcode::VFNMADD213PD | + Opcode::VFNMADD213PS | + Opcode::VFNMADD213SD | + Opcode::VFNMADD213SS | + Opcode::VFNMADD231PD | + Opcode::VFNMADD231PS | + Opcode::VFNMADD231SD | + Opcode::VFNMADD231SS | + Opcode::VFNMSUB132PD | + Opcode::VFNMSUB132PS | + Opcode::VFNMSUB132SD | + Opcode::VFNMSUB132SS | + Opcode::VFNMSUB213PD | + Opcode::VFNMSUB213PS | + Opcode::VFNMSUB213SD | + Opcode::VFNMSUB213SS | + Opcode::VFNMSUB231PD | + Opcode::VFNMSUB231PS | + Opcode::VFNMSUB231SD | + Opcode::VFNMSUB231SS => { + if !decoder.feature_fma3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VMPTRLD | + Opcode::VMPTRST | + Opcode::VMCLEAR | + Opcode::VMREAD | + Opcode::VMWRITE | + Opcode::VMCALL | + Opcode::VMLAUNCH | + Opcode::VMRESUME | + Opcode::VMXOFF | + Opcode::VMXON | + Opcode::INVEPT | + Opcode::INVVPID | + Opcode::VMFUNC => { + if !decoder.feature_vmx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XSUSLDTRK | + Opcode::XRESLDTRK => { + if !decoder.feature_tsxldtrk() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SYSCALL | + Opcode::SYSRET => { + if !decoder.feature_syscall() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::EXTRQ | + Opcode::INSERTQ | + Opcode::MOVNTSD | + Opcode::MOVNTSS => { + if !decoder.feature_sse4a() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPOPCNTD | + Opcode::VPOPCNTQ => { + if !decoder.feature_avx512_vpopcntdq() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::INVEPT | + Opcode::INVVPID | + Opcode::INVPCID => { + if !decoder.feature_invpcid() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XGETBV | + Opcode::XRSTOR | + Opcode::XRSTORS | + Opcode::XSAVE | + Opcode::XSAVEC | + Opcode::XSAVES | + Opcode::XSETBV => { + if !decoder.feature_xsave() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CMOVA | + Opcode::CMOVB | + Opcode::CMOVG | + Opcode::CMOVGE | + Opcode::CMOVL | + Opcode::CMOVLE | + Opcode::CMOVNA | + Opcode::CMOVNB | + Opcode::CMOVNO | + Opcode::CMOVNP | + Opcode::CMOVNS | + Opcode::CMOVNZ | + Opcode::CMOVO | + Opcode::CMOVP | + Opcode::CMOVS | + Opcode::CMOVZ => { + if !decoder.feature_cmov() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::KANDQ | + Opcode::KANDD | + Opcode::KANDNQ | + Opcode::KANDND | + Opcode::KMOVD | + Opcode::KMOVQ | + Opcode::KNOTD | + Opcode::KNOTQ | + Opcode::KORD | + Opcode::KORQ | + Opcode::KADDD | + Opcode::KTESTD | + Opcode::KADDQ | + Opcode::KTESTQ | + Opcode::KORTESTD | + Opcode::KORTESTQ | + Opcode::KSHIFTLD | + Opcode::KSHIFTRD | + Opcode::KSHIFTLQ | + Opcode::KSHIFTRQ | + Opcode::KUNPCKWD | + Opcode::KUNPCKDQ | + Opcode::KXNORD | + Opcode::KXNORQ | + Opcode::KXORD | + Opcode::KXORQ | + Opcode::VPCMPEQB | + Opcode::VPCMPEQW | + Opcode::VPCMPGTB | + Opcode::VPCMPGTW | + Opcode::VPSUBUSB | + Opcode::VPSUBUSW | + Opcode::VPERMW | + Opcode::VPERMI2W | + Opcode::VPERMT2W | + Opcode::VPSLLVW | + Opcode::VPSRAVW | + Opcode::VPSRLVW | + Opcode::VPEXTRB | + Opcode::VPEXTRW | + Opcode::VPINSRB | + Opcode::VPINSRW | + Opcode::VPMULHUW | + Opcode::VPMULHRSW | + Opcode::VPADDSB | + Opcode::VPADDSW | + Opcode::VPADDUSB | + Opcode::VPADDUSW | + Opcode::VPALIGNR | + Opcode::VPMOVD2M | + Opcode::VPMOVQ2M | + Opcode::VPMOVWB | + Opcode::VDBPSADBW | + Opcode::VMOVDQU8 | + Opcode::VMOVDQU16 | + Opcode::VPBLENDMB | + Opcode::VPBLENDMW | + Opcode::VPCMPB | + Opcode::VPCMPUB | + Opcode::VPCMPW | + Opcode::VPCMPUW | + Opcode::VPERMW | + Opcode::VPERMI2B | + Opcode::VPERMI2W | + Opcode::VPMOVM2B | + Opcode::VPMOVM2W | + Opcode::VPMOVB2M | + Opcode::VPMOVW2M | + Opcode::VPMOVSWB | + Opcode::VPMOVUSWB | + Opcode::VPSLLVW | + Opcode::VPSRAVW | + Opcode::VPSRLVW | + Opcode::VPTESTNMB | + Opcode::VPTESTNMW | + Opcode::VPTESTMB | + Opcode::VPTESTMW => { + if !decoder.feature_avx512_bw() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PALIGNR | + Opcode::PSIGNW | + Opcode::PSIGND | + Opcode::PSIGNB | + Opcode::PSHUFB | + Opcode::PMULHRSW | + Opcode::PMADDUBSW | + Opcode::PABSD | + Opcode::PABSW | + Opcode::PABSB | + Opcode::PHSUBSW | + Opcode::PHSUBW | + Opcode::PHSUBD | + Opcode::PHADDD | + Opcode::PHADDSW | + Opcode::PHADDW => { + if !decoder.feature_ssse3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLFLUSHOPT => { + if !decoder.feature_clflushopt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::SHA1RNDS4 | + Opcode::SHA1NEXTE | + Opcode::SHA1MSG1 | + Opcode::SHA1MSG2 | + Opcode::SHA256RNDS2 | + Opcode::SHA256MSG1 | + Opcode::SHA256MSG2 => { + if !decoder.feature_sha() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::JRCXZ | + Opcode::CDQE | + Opcode::MOVZX | + Opcode::SWAPGS | + Opcode::MOVSXD => { + if !decoder.feature_64bit() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::POPCNT | + Opcode::LZCNT => { + if !decoder.feature_abm() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PREFETCHW => { + if !decoder.feature_3dnowprefetch() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPID => { + if !decoder.feature_rdpid() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::LAHF | + Opcode::SAHF => { + if !decoder.feature_lahfsahf() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ENQCMD | + Opcode::ENQCMDS => { + if !decoder.feature_enqcmd() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PTWRITE => { + if !decoder.feature_ptwrite() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPERMT2B | + Opcode::VPERMB => { + if !decoder.feature_avx512_vbmi() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::F2XM1 | + Opcode::FABS | + Opcode::FADD | + Opcode::FADDP | + Opcode::FBLD | + Opcode::FBSTP | + Opcode::FCHS | + Opcode::FCMOVB | + Opcode::FCMOVBE | + Opcode::FCMOVE | + Opcode::FCMOVNB | + Opcode::FCMOVNBE | + Opcode::FCMOVNE | + Opcode::FCMOVNU | + Opcode::FCMOVU | + Opcode::FCOM | + Opcode::FCOMI | + Opcode::FCOMIP | + Opcode::FCOMP | + Opcode::FCOMPP | + Opcode::FCOS | + Opcode::FDECSTP | + Opcode::FDISI8087_NOP | + Opcode::FDIV | + Opcode::FDIVP | + Opcode::FDIVR | + Opcode::FDIVRP | + Opcode::FENI8087_NOP | + Opcode::FFREE | + Opcode::FFREEP | + Opcode::FIADD | + Opcode::FICOM | + Opcode::FICOMP | + Opcode::FIDIV | + Opcode::FIDIVR | + Opcode::FILD | + Opcode::FIMUL | + Opcode::FINCSTP | + Opcode::FIST | + Opcode::FISTP | + Opcode::FISTTP | + Opcode::FISUB | + Opcode::FISUBR | + Opcode::FLD | + Opcode::FLD1 | + Opcode::FLDCW | + Opcode::FLDENV | + Opcode::FLDL2E | + Opcode::FLDL2T | + Opcode::FLDLG2 | + Opcode::FLDLN2 | + Opcode::FLDPI | + Opcode::FLDZ | + Opcode::FMUL | + Opcode::FMULP | + Opcode::FNCLEX | + Opcode::FNINIT | + Opcode::FNOP | + Opcode::FNSAVE | + Opcode::FNSTCW | + Opcode::FNSTENV | + Opcode::FNSTOR | + Opcode::FNSTSW | + Opcode::FPATAN | + Opcode::FPREM | + Opcode::FPREM1 | + Opcode::FPTAN | + Opcode::FRNDINT | + Opcode::FRSTOR | + Opcode::FSCALE | + Opcode::FSETPM287_NOP | + Opcode::FSIN | + Opcode::FSINCOS | + Opcode::FSQRT | + Opcode::FST | + Opcode::FSTP | + Opcode::FSTPNCE | + Opcode::FSUB | + Opcode::FSUBP | + Opcode::FSUBR | + Opcode::FSUBRP | + Opcode::FTST | + Opcode::FUCOM | + Opcode::FUCOMI | + Opcode::FUCOMIP | + Opcode::FUCOMP | + Opcode::FUCOMPP | + Opcode::FXAM | + Opcode::FXCH | + Opcode::FXTRACT | + Opcode::FYL2X | + Opcode::FYL2XP1 => { + if !decoder.feature_x87() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPMC | + Opcode::PUNPCKLBW | + Opcode::PUNPCKLWD | + Opcode::PUNPCKLDQ | + Opcode::PACKSSWB | + Opcode::PCMPGTB | + Opcode::PCMPGTD | + Opcode::PCMPGTW | + Opcode::PACKUSWB | + Opcode::PUNPCKHBW | + Opcode::PUNPCKHWD | + Opcode::PUNPCKHDQ | + Opcode::PACKSSDW | + Opcode::MOVD | + Opcode::MOVQ | + Opcode::PCMPEQB | + Opcode::PCMPEQD | + Opcode::PCMPEQW | + Opcode::PSRLW | + Opcode::PSRLD | + Opcode::PSRLQ | + Opcode::PMULLW | + Opcode::PSUBUSB | + Opcode::PSUBUSW | + Opcode::PAND | + Opcode::PADDUSB | + Opcode::PADDUSW | + Opcode::PANDN | + Opcode::PSRAW | + Opcode::PSRAD | + Opcode::PMULHW | + Opcode::PSUBSB | + Opcode::PSUBSW | + Opcode::POR | + Opcode::PADDSB | + Opcode::PADDSW | + Opcode::PXOR | + Opcode::PSLLW | + Opcode::PSLLD | + Opcode::PSLLQ | + Opcode::PMADDWD | + Opcode::PSUBB | + Opcode::PSUBW | + Opcode::PSUBD | + Opcode::PADDB | + Opcode::PADDW | + Opcode::PADDD | + Opcode::EMMS => { + if !decoder.feature_mmx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPOPCNTD | + Opcode::VPOPCNTQ | + Opcode::VPOPCNTB | + Opcode::VPOPCNTW | + Opcode::VPSHUFBITQMB | + Opcode::VPMULTISHIFTQB => { + if !decoder.feature_avx512_bitalg() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::AESDEC128KL | + Opcode::AESDEC256KL | + Opcode::AESDECWIDE128KL | + Opcode::AESDECWIDE256KL | + Opcode::AESENC128KL | + Opcode::AESENC256KL | + Opcode::AESENCWIDE128KL | + Opcode::AESENCWIDE256KL | + Opcode::ENCODEKEY128 | + Opcode::ENCODEKEY256 | + Opcode::LOADIWKEY => { + if !decoder.feature_keylocker() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ENTER | + Opcode::LEAVE | + Opcode::INS | + Opcode::OUTS => { + if !decoder.feature_80186() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLWB => { + if !decoder.feature_clwb() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDPKRU | + Opcode::WRPKRU => { + if !decoder.feature_mpk() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::V4FNMADDSS | + Opcode::V4FNMADDPS | + Opcode::V4FMADDSS | + Opcode::V4FMADDPS => { + if !decoder.feature_avx512_4fmaps() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::TDCALL | + Opcode::SEAMRET | + Opcode::SEAMOPS | + Opcode::SEAMCALL => { + if !decoder.feature_tdx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::POPCNT => { + if !decoder.feature_popcnt() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::PSMASH | + Opcode::PVALIDATE | + Opcode::RMPADJUST | + Opcode::RMPUPDATE => { + if !decoder.feature_snp() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VGF2P8AFFINEQB | + Opcode::VGF2P8AFFINEINVQB | + Opcode::VGF2P8MULB => { + if !decoder.feature_avx512_gfni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::FEMMS | + Opcode::PI2FW | + Opcode::PI2FD | + Opcode::PF2IW | + Opcode::PF2ID | + Opcode::PMULHRW | + Opcode::PFCMPGE | + Opcode::PFMIN | + Opcode::PFRCP | + Opcode::PFRSQRT | + Opcode::PFSUB | + Opcode::PFADD | + Opcode::PFCMPGT | + Opcode::PFMAX | + Opcode::PFRCPIT1 | + Opcode::PFRSQIT1 | + Opcode::PFSUBR | + Opcode::PFACC | + Opcode::PFCMPEQ | + Opcode::PFMUL | + Opcode::PFMULHRW | + Opcode::PFRCPIT2 | + Opcode::PFNACC | + Opcode::PFPNACC | + Opcode::PSWAPD | + Opcode::PAVGUSB => { + if !decoder.feature_3dnow() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VPCOMPRESSB | + Opcode::VPCOMPRESSW | + Opcode::VPSHLDVW | + Opcode::VPSHLDW | + Opcode::VPEXPANDB | + Opcode::VPEXPANDW | + Opcode::VPSHRDVW | + Opcode::VPSHRDW | + Opcode::VPSHLDVQ | + Opcode::VPSHLDVD | + Opcode::VPSHLDQ | + Opcode::VPSHLDD | + Opcode::VPSHRDQ | + Opcode::VPSHRDD | + Opcode::VPSHRDVQ | + Opcode::VPSHRDVD => { + if !decoder.feature_avx512_vbmi2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CMC | + Opcode::CLC | + Opcode::STC | + Opcode::CLI | + Opcode::STI | + Opcode::CLD | + Opcode::STD | + Opcode::ADD | + Opcode::OR | + Opcode::ADC | + Opcode::SBB | + Opcode::AND | + Opcode::XOR | + Opcode::SUB | + Opcode::CMP | + Opcode::SAR | + Opcode::SAL | + Opcode::SHR | + Opcode::SHL | + Opcode::RCR | + Opcode::RCL | + Opcode::ROR | + Opcode::ROL | + Opcode::INC | + Opcode::DEC | + Opcode::HLT | + Opcode::CALL | + Opcode::CALLF | + Opcode::JMP | + Opcode::JMPF | + Opcode::PUSH | + Opcode::POP | + Opcode::LEA | + Opcode::NOP | + Opcode::XCHG | + Opcode::POPF | + Opcode::INT | + Opcode::INTO | + Opcode::IRET | + Opcode::IRETD | + Opcode::IRETQ | + Opcode::RETF | + Opcode::ENTER | + Opcode::LEAVE | + Opcode::MOV | + Opcode::RETURN | + Opcode::PUSHF | + Opcode::WAIT | + Opcode::CBW | + Opcode::CWD | + Opcode::CQO | + Opcode::LODS | + Opcode::STOS | + Opcode::CMPS | + Opcode::SCAS | + Opcode::MOVS | + Opcode::TEST | + Opcode::IN | + Opcode::OUT | + Opcode::IMUL | + Opcode::JO | + Opcode::JNO | + Opcode::JB | + Opcode::JNB | + Opcode::JZ | + Opcode::JNZ | + Opcode::JA | + Opcode::JNA | + Opcode::JS | + Opcode::JNS | + Opcode::JP | + Opcode::JNP | + Opcode::JL | + Opcode::JGE | + Opcode::JLE | + Opcode::JG | + Opcode::UD0 | + Opcode::UD1 | + Opcode::UD2 | + Opcode::DIV | + Opcode::IDIV | + Opcode::MUL | + Opcode::NEG | + Opcode::NOT | + Opcode::XLAT | + Opcode::LOOPNZ | + Opcode::LOOPZ | + Opcode::LOOP | + Opcode::SALC => { + if !decoder.feature_8086() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLGI | + Opcode::STGI | + Opcode::SKINIT | + Opcode::VMLOAD | + Opcode::VMMCALL | + Opcode::VMSAVE | + Opcode::VMRUN | + Opcode::INVLPGA => { + if !decoder.feature_svm() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ADDSUBPD | + Opcode::ADDSUBPS | + Opcode::HSUBPD | + Opcode::HADDPD | + Opcode::MOVSLDUP | + Opcode::MOVSHDUP | + Opcode::MOVDDUP | + Opcode::HADDPS | + Opcode::HSUBPS | + Opcode::LDDQU => { + if !decoder.feature_sse3() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVUPD | + Opcode::PSRLDQ | + Opcode::PSLLDQ | + Opcode::MOVSD | + Opcode::MOVLPD | + Opcode::UNPCKLPD | + Opcode::UNPCKHPD | + Opcode::MOVHPD | + Opcode::MOVAPD | + Opcode::MOVMSKPD | + Opcode::CVTPI2PD | + Opcode::CVTSI2SD | + Opcode::MOVNTPD | + Opcode::MOVNTI | + Opcode::MOVNTDQ | + Opcode::CVTTPD2PI | + Opcode::CVTTSD2SI | + Opcode::CVTPD2PI | + Opcode::CVTSD2SI | + Opcode::UCOMISD | + Opcode::COMISD | + Opcode::SQRTPD | + Opcode::SQRTSD | + Opcode::ANDPD | + Opcode::ANDNPD | + Opcode::ORPD | + Opcode::XORPD | + Opcode::ADDPD | + Opcode::ADDSD | + Opcode::MULSD | + Opcode::MULPD | + Opcode::CVTPS2PD | + Opcode::CVTPD2PS | + Opcode::CVTSS2SD | + Opcode::CVTSD2SS | + Opcode::CVTPS2DQ | + Opcode::CVTDQ2PS | + Opcode::CVTTPS2DQ | + Opcode::SUBSD | + Opcode::SUBPD | + Opcode::MINPD | + Opcode::MINSD | + Opcode::DIVPD | + Opcode::DIVSD | + Opcode::MAXPD | + Opcode::MAXSD | + Opcode::PUNPCKLQDQ | + Opcode::PUNPCKHQDQ | + Opcode::MOVDQA | + Opcode::MOVDQU | + Opcode::PSHUFHW | + Opcode::PSHUFLW | + Opcode::PSHUFD | + Opcode::LFENCE | + Opcode::MFENCE | + Opcode::CLFLUSH | + Opcode::CMPPD | + Opcode::CMPPS | + Opcode::CMPSD | + Opcode::SHUFPD | + Opcode::PADDQ | + Opcode::MOVQ2DQ | + Opcode::MOVDQ2Q | + Opcode::CVTPD2DQ | + Opcode::CVTTPD2DQ | + Opcode::CVTDQ2PD | + Opcode::PMULUDQ | + Opcode::MASKMOVDQU | + Opcode::PSUBQ => { + if !decoder.feature_sse2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::GF2P8AFFINEQB | + Opcode::GF2P8AFFINEINVQB | + Opcode::GF2P8MULB => { + if !decoder.feature_gfni() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::XRSTORS64 | + Opcode::XSAVEC64 | + Opcode::XSAVES64 => { + if !decoder.feature_xsave64() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::GETSEC => { + if !decoder.feature_smx() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::ANDN | + Opcode::BEXTR | + Opcode::BLSI | + Opcode::BLSMSK | + Opcode::BLSR | + Opcode::TZCNT => { + if !decoder.feature_bmi1() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::BZHI | + Opcode::MULX | + Opcode::PDEP | + Opcode::PEXT | + Opcode::RORX | + Opcode::SARX | + Opcode::SHRX | + Opcode::SHLX => { + if !decoder.feature_bmi2() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::MOVDIRI | + Opcode::MOVDIR64B => { + if !decoder.feature_movdir() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::VAESDEC | + Opcode::VAESDECLAST | + Opcode::VAESENC | + Opcode::VAESENCLAST | + Opcode::VAESIMC | + Opcode::VAESKEYGENASSIST => { + if !decoder.feature_vaes() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::RDRAND => { + if !decoder.feature_rdrand() { + return Err(DecodeError::InvalidOpcode); + + } + } + Opcode::CLZERO => { + if !decoder.feature_clzero() { + return Err(DecodeError::InvalidOpcode); + + } + } + } + Ok(()) + } +} + diff --git a/src/generated/mod.rs b/src/generated/mod.rs new file mode 100644 index 0000000..6338309 --- /dev/null +++ b/src/generated/mod.rs @@ -0,0 +1,15 @@ +pub(crate) mod opcode; +pub(crate) mod imp; + +pub(crate) mod real_mode { + pub(crate) use super::opcode::real_mode::Opcode as Opcode; + pub(crate) use super::imp::real_mode::revise_instruction as revise_instruction; +} +pub(crate) mod protected_mode { + pub(crate) use super::opcode::protected_mode::Opcode as Opcode; + pub(crate) use super::imp::protected_mode::revise_instruction as revise_instruction; +} +pub(crate) mod long_mode { + pub(crate) use super::opcode::long_mode::Opcode as Opcode; + pub(crate) use super::imp::long_mode::revise_instruction as revise_instruction; +} diff --git a/src/generated/opcode.rs b/src/generated/opcode.rs new file mode 100644 index 0000000..cc573f1 --- /dev/null +++ b/src/generated/opcode.rs @@ -0,0 +1,7186 @@ +#[allow(non_camel_case_types)] +#[derive(Copy, Clone, Debug, Eq, PartialEq)] +#[non_exhaustive] +#[repr(u16)] +pub enum Opcode { + AAA, + AAD, + AAM, + AAS, + ADC, + ADCX, + ADD, + ADDPD, + ADDPS, + ADDSD, + ADDSS, + ADDSUBPD, + ADDSUBPS, + ADOX, + AESDEC, + AESDEC128KL, + AESDEC256KL, + AESDECLAST, + AESDECWIDE128KL, + AESDECWIDE256KL, + AESENC, + AESENC128KL, + AESENC256KL, + AESENCLAST, + AESENCWIDE128KL, + AESENCWIDE256KL, + AESIMC, + AESKEYGENASSIST, + AND, + ANDN, + ANDNPD, + ANDNPS, + ANDPD, + ANDPS, + ARPL, + BEXTR, + BLENDPD, + BLENDPS, + BLENDVPD, + BLENDVPS, + BLENDW, + BLSI, + BLSMSK, + BLSR, + BNDCL, + BNDCN, + BNDCU, + BNDLDX, + BNDMK, + BNDMOV, + BNDSTX, + BOUND, + BSF, + BSR, + BSWAP, + BT, + BTC, + BTR, + BTS, + BZHI, + CALL, + CALLF, + CBW, + CDQ, + CDQE, + CLAC, + CLC, + CLD, + CLFLUSH, + CLFLUSHOPT, + CLGI, + CLI, + CLRSSBSY, + CLTS, + CLUI, + CLWB, + CLZERO, + CMC, + CMOVA, + CMOVB, + CMOVG, + CMOVGE, + CMOVL, + CMOVLE, + CMOVNA, + CMOVNB, + CMOVNO, + CMOVNP, + CMOVNS, + CMOVNZ, + CMOVO, + CMOVP, + CMOVS, + CMOVZ, + CMP, + CMPPD, + CMPPS, + CMPS, + CMPSD, + CMPSS, + CMPXCHG, + CMPXCHG16B, + CMPXCHG8B, + COMISD, + COMISS, + CPUID, + CQO, + CRC32, + CVTDQ2PD, + CVTDQ2PS, + CVTPD2DQ, + CVTPD2PI, + CVTPD2PS, + CVTPI2PD, + CVTPI2PS, + CVTPS2DQ, + CVTPS2PD, + CVTPS2PI, + CVTSD2SI, + CVTSD2SS, + CVTSI2SD, + CVTSI2SS, + CVTSS2SD, + CVTSS2SI, + CVTTPD2DQ, + CVTTPD2PI, + CVTTPS2DQ, + CVTTPS2PI, + CVTTSD2SI, + CVTTSS2SI, + CWD, + CWDE, + DAA, + DAS, + DEC, + DIV, + DIVPD, + DIVPS, + DIVSD, + DIVSS, + DPPD, + DPPS, + EMMS, + ENCLS, + ENCLU, + ENCLV, + ENCODEKEY128, + ENCODEKEY256, + ENDBR32, + ENDBR64, + ENQCMD, + ENQCMDS, + ENTER, + EXTRACTPS, + EXTRQ, + F2XM1, + FABS, + FADD, + FADDP, + FBLD, + FBSTP, + FCHS, + FCMOVB, + FCMOVBE, + FCMOVE, + FCMOVNB, + FCMOVNBE, + FCMOVNE, + FCMOVNU, + FCMOVU, + FCOM, + FCOMI, + FCOMIP, + FCOMP, + FCOMPP, + FCOS, + FDECSTP, + FDISI8087_NOP, + FDIV, + FDIVP, + FDIVR, + FDIVRP, + FEMMS, + FENI8087_NOP, + FFREE, + FFREEP, + FIADD, + FICOM, + FICOMP, + FIDIV, + FIDIVR, + FILD, + FIMUL, + FINCSTP, + FIST, + FISTP, + FISTTP, + FISUB, + FISUBR, + FLD, + FLD1, + FLDCW, + FLDENV, + FLDL2E, + FLDL2T, + FLDLG2, + FLDLN2, + FLDPI, + FLDZ, + FMUL, + FMULP, + FNCLEX, + FNINIT, + FNOP, + FNSAVE, + FNSTCW, + FNSTENV, + FNSTOR, + FNSTSW, + FPATAN, + FPREM, + FPREM1, + FPTAN, + FRNDINT, + FRSTOR, + FSCALE, + FSETPM287_NOP, + FSIN, + FSINCOS, + FSQRT, + FST, + FSTP, + FSTPNCE, + FSUB, + FSUBP, + FSUBR, + FSUBRP, + FTST, + FUCOM, + FUCOMI, + FUCOMIP, + FUCOMP, + FUCOMPP, + FXAM, + FXCH, + FXRSTOR, + FXSAVE, + FXTRACT, + FYL2X, + FYL2XP1, + GETSEC, + GF2P8AFFINEINVQB, + GF2P8AFFINEQB, + GF2P8MULB, + HADDPD, + HADDPS, + HLT, + HRESET, + HSUBPD, + HSUBPS, + IDIV, + IMUL, + IN, + INC, + INCSSP, + INS, + INSERTPS, + INSERTQ, + INT, + INTO, + Invalid, + INVD, + INVEPT, + INVLPG, + INVLPGA, + INVLPGB, + INVPCID, + INVVPID, + IRET, + IRETD, + IRETQ, + JA, + JB, + JCXZ, + JECXZ, + JG, + JGE, + JL, + JLE, + JMP, + JMPE, + JMPF, + JNA, + JNB, + JNO, + JNP, + JNS, + JNZ, + JO, + JP, + JRCXZ, + JS, + JZ, + KADDB, + KADDD, + KADDQ, + KADDW, + KANDB, + KANDD, + KANDNB, + KANDND, + KANDNQ, + KANDNW, + KANDQ, + KANDW, + KMOVB, + KMOVD, + KMOVQ, + KMOVW, + KNOTB, + KNOTD, + KNOTQ, + KNOTW, + KORB, + KORD, + KORQ, + KORTESTB, + KORTESTD, + KORTESTQ, + KORTESTW, + KORW, + KSHIFTLB, + KSHIFTLD, + KSHIFTLQ, + KSHIFTLW, + KSHIFTRB, + KSHIFTRD, + KSHIFTRQ, + KSHIFTRW, + KTESTB, + KTESTD, + KTESTQ, + KTESTW, + KUNPCKBW, + KUNPCKDQ, + KUNPCKWD, + KXNORB, + KXNORD, + KXNORQ, + KXNORW, + KXORB, + KXORD, + KXORQ, + KXORW, + LAHF, + LAR, + LDDQU, + LDMXCSR, + LDS, + LEA, + LEAVE, + LES, + LFENCE, + LFS, + LGDT, + LGS, + LIDT, + LLDT, + LMSW, + LOADIWKEY, + LODS, + LOOP, + LOOPNZ, + LOOPZ, + LSL, + LSS, + LTR, + LZCNT, + MASKMOVDQU, + MASKMOVQ, + MAXPD, + MAXPS, + MAXSD, + MAXSS, + MFENCE, + MINPD, + MINPS, + MINSD, + MINSS, + MONITOR, + MONITORX, + MOV, + MOVAPD, + MOVAPS, + MOVBE, + MOVD, + MOVDDUP, + MOVDIR64B, + MOVDIRI, + MOVDQ2Q, + MOVDQA, + MOVDQU, + MOVHLPS, + MOVHPD, + MOVHPS, + MOVLHPS, + MOVLPD, + MOVLPS, + MOVMSKPD, + MOVMSKPS, + MOVNTDQ, + MOVNTDQA, + MOVNTI, + MOVNTPD, + MOVNTPS, + MOVNTQ, + MOVNTSD, + MOVNTSS, + MOVQ, + MOVQ2DQ, + MOVS, + MOVSD, + MOVSHDUP, + MOVSLDUP, + MOVSS, + MOVSX, + MOVSXD, + MOVUPD, + MOVUPS, + MOVZX, + MPSADBW, + MUL, + MULPD, + MULPS, + MULSD, + MULSS, + MULX, + MWAIT, + MWAITX, + NEG, + NOP, + NOT, + OR, + ORPD, + ORPS, + OUT, + OUTS, + PABSB, + PABSD, + PABSW, + PACKSSDW, + PACKSSWB, + PACKUSDW, + PACKUSWB, + PADDB, + PADDD, + PADDQ, + PADDSB, + PADDSW, + PADDUSB, + PADDUSW, + PADDW, + PALIGNR, + PAND, + PANDN, + PAVGB, + PAVGUSB, + PAVGW, + PBLENDVB, + PBLENDW, + PCLMULQDQ, + PCMPEQB, + PCMPEQD, + PCMPEQQ, + PCMPEQW, + PCMPESTRI, + PCMPESTRM, + PCMPGTB, + PCMPGTD, + PCMPGTQ, + PCMPGTW, + PCMPISTRI, + PCMPISTRM, + PCONFIG, + PDEP, + PEXT, + PEXTRB, + PEXTRD, + PEXTRQ, + PEXTRW, + PF2ID, + PF2IW, + PFACC, + PFADD, + PFCMPEQ, + PFCMPGE, + PFCMPGT, + PFMAX, + PFMIN, + PFMUL, + PFMULHRW, + PFNACC, + PFPNACC, + PFRCP, + PFRCPIT1, + PFRCPIT2, + PFRSQIT1, + PFRSQRT, + PFSUB, + PFSUBR, + PHADDD, + PHADDSW, + PHADDW, + PHMINPOSUW, + PHSUBD, + PHSUBSW, + PHSUBW, + PI2FD, + PI2FW, + PINSRB, + PINSRD, + PINSRQ, + PINSRW, + PMADDUBSW, + PMADDWD, + PMAXSB, + PMAXSD, + PMAXSW, + PMAXUB, + PMAXUD, + PMAXUW, + PMINSB, + PMINSD, + PMINSW, + PMINUB, + PMINUD, + PMINUW, + PMOVMSKB, + PMOVSXBD, + PMOVSXBQ, + PMOVSXBW, + PMOVSXDQ, + PMOVSXWD, + PMOVSXWQ, + PMOVZXBD, + PMOVZXBQ, + PMOVZXBW, + PMOVZXDQ, + PMOVZXWD, + PMOVZXWQ, + PMULDQ, + PMULHRSW, + PMULHRW, + PMULHUW, + PMULHW, + PMULLD, + PMULLW, + PMULUDQ, + POP, + POPA, + POPCNT, + POPF, + POR, + PREFETCH0, + PREFETCH1, + PREFETCH2, + PREFETCHNTA, + PREFETCHW, + PSADBW, + PSHUFB, + PSHUFD, + PSHUFHW, + PSHUFLW, + PSHUFW, + PSIGNB, + PSIGND, + PSIGNW, + PSLLD, + PSLLDQ, + PSLLQ, + PSLLW, + PSMASH, + PSRAD, + PSRAW, + PSRLD, + PSRLDQ, + PSRLQ, + PSRLW, + PSUBB, + PSUBD, + PSUBQ, + PSUBSB, + PSUBSW, + PSUBUSB, + PSUBUSW, + PSUBW, + PSWAPD, + PTEST, + PTWRITE, + PUNPCKHBW, + PUNPCKHDQ, + PUNPCKHQDQ, + PUNPCKHWD, + PUNPCKLBW, + PUNPCKLDQ, + PUNPCKLQDQ, + PUNPCKLWD, + PUSH, + PUSHA, + PUSHF, + PVALIDATE, + PXOR, + RCL, + RCPPS, + RCPSS, + RCR, + RDFSBASE, + RDGSBASE, + RDMSR, + RDPID, + RDPKRU, + RDPMC, + RDPRU, + RDRAND, + RDSEED, + RDTSC, + RDTSCP, + RETF, + RETURN, + RMPADJUST, + RMPUPDATE, + ROL, + ROR, + RORX, + ROUNDPD, + ROUNDPS, + ROUNDSD, + ROUNDSS, + RSM, + RSQRTPS, + RSQRTSS, + RSTORSSP, + SAHF, + SAL, + SALC, + SAR, + SARX, + SAVEPREVSSP, + SBB, + SCAS, + SEAMCALL, + SEAMOPS, + SEAMRET, + SENDUIPI, + SETA, + SETAE, + SETB, + SETBE, + SETG, + SETGE, + SETL, + SETLE, + SETNO, + SETNP, + SETNS, + SETNZ, + SETO, + SETP, + SETS, + SETSSBSY, + SETZ, + SFENCE, + SGDT, + SHA1MSG1, + SHA1MSG2, + SHA1NEXTE, + SHA1RNDS4, + SHA256MSG1, + SHA256MSG2, + SHA256RNDS2, + SHL, + SHLD, + SHLX, + SHR, + SHRD, + SHRX, + SHUFPD, + SHUFPS, + SIDT, + SKINIT, + SLDT, + SLHD, + SMSW, + SQRTPD, + SQRTPS, + SQRTSD, + SQRTSS, + STAC, + STC, + STD, + STGI, + STI, + STMXCSR, + STOS, + STR, + STUI, + SUB, + SUBPD, + SUBPS, + SUBSD, + SUBSS, + SWAPGS, + SYSCALL, + SYSENTER, + SYSEXIT, + SYSRET, + TDCALL, + TEST, + TESTUI, + TLBSYNC, + TPAUSE, + TZCNT, + UCOMISD, + UCOMISS, + UD0, + UD1, + UD2, + UIRET, + UMONITOR, + UMWAIT, + UNPCKHPD, + UNPCKHPS, + UNPCKLPD, + UNPCKLPS, + V4FMADDPS, + V4FMADDSS, + V4FNMADDPS, + V4FNMADDSS, + VADDPD, + VADDPS, + VADDSD, + VADDSS, + VADDSUBPD, + VADDSUBPS, + VAESDEC, + VAESDECLAST, + VAESENC, + VAESENCLAST, + VAESIMC, + VAESKEYGENASSIST, + VALIGND, + VALIGNQ, + VANDNPD, + VANDNPS, + VANDPD, + VANDPS, + VBLENDMPD, + VBLENDMPS, + VBLENDPD, + VBLENDPS, + VBLENDVPD, + VBLENDVPS, + VBROADCASTF128, + VBROADCASTF32X2, + VBROADCASTF32X4, + VBROADCASTF32X8, + VBROADCASTF64X2, + VBROADCASTF64X4, + VBROADCASTI128, + VBROADCASTI32X2, + VBROADCASTI32X4, + VBROADCASTI32X8, + VBROADCASTI64X2, + VBROADCASTI64X4, + VBROADCASTSD, + VBROADCASTSS, + VCMPPD, + VCMPPS, + VCMPSD, + VCMPSS, + VCOMISD, + VCOMISS, + VCOMPRESSD, + VCOMPRESSPD, + VCOMPRESSPS, + VCOMPRESSQ, + VCVTDQ2PD, + VCVTDQ2PS, + VCVTNE2PS2BF16, + VCVTNEPS2BF16, + VCVTPD2DQ, + VCVTPD2PS, + VCVTPD2QQ, + VCVTPD2UDQ, + VCVTPD2UQQ, + VCVTPH2PS, + VCVTPS2DQ, + VCVTPS2PD, + VCVTPS2PH, + VCVTPS2QQ, + VCVTPS2UDQ, + VCVTPS2UQQ, + VCVTQQ2PD, + VCVTQQ2PS, + VCVTSD2SI, + VCVTSD2SS, + VCVTSD2USI, + VCVTSI2SD, + VCVTSI2SS, + VCVTSS2SD, + VCVTSS2SI, + VCVTSS2USI, + VCVTTPD2DQ, + VCVTTPD2QQ, + VCVTTPD2UDQ, + VCVTTPD2UQQ, + VCVTTPS2DQ, + VCVTTPS2QQ, + VCVTTPS2UDQ, + VCVTTPS2UQQ, + VCVTTSD2SI, + VCVTTSD2USI, + VCVTTSS2SI, + VCVTTSS2USI, + VCVTUDQ2PD, + VCVTUDQ2PS, + VCVTUQQ2PD, + VCVTUQQ2PS, + VCVTUSI2SD, + VCVTUSI2SS, + VCVTUSI2USD, + VCVTUSI2USS, + VDBPSADBW, + VDIVPD, + VDIVPS, + VDIVSD, + VDIVSS, + VDPBF16PS, + VDPPD, + VDPPS, + VERR, + VERW, + VEXP2PD, + VEXP2PS, + VEXP2SD, + VEXP2SS, + VEXPANDPD, + VEXPANDPS, + VEXTRACTF128, + VEXTRACTF32X4, + VEXTRACTF32X8, + VEXTRACTF64X2, + VEXTRACTF64X4, + VEXTRACTI128, + 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, + VGATHERDPD, + VGATHERDPS, + VGATHERPF0DPD, + VGATHERPF0DPS, + VGATHERPF0QPD, + VGATHERPF0QPS, + VGATHERPF1DPD, + VGATHERPF1DPS, + VGATHERPF1QPD, + VGATHERPF1QPS, + VGATHERQPD, + VGATHERQPS, + VGETEXPPD, + VGETEXPPS, + VGETEXPSD, + VGETEXPSS, + VGETMANTPD, + VGETMANTPS, + VGETMANTSD, + VGETMANTSS, + VGF2P8AFFINEINVQB, + VGF2P8AFFINEQB, + VGF2P8MULB, + VHADDPD, + VHADDPS, + VHSUBPD, + VHSUBPS, + VINSERTF128, + VINSERTF32X4, + VINSERTF32X8, + VINSERTF64X2, + VINSERTF64X4, + VINSERTI128, + VINSERTI32X4, + VINSERTI32X8, + VINSERTI64X2, + VINSERTI64X4, + VINSERTPS, + VLDDQU, + VLDMXCSR, + VMASKMOVDQU, + VMASKMOVPD, + VMASKMOVPS, + VMAXPD, + VMAXPS, + VMAXSD, + VMAXSS, + VMCALL, + VMCLEAR, + VMFUNC, + VMINPD, + VMINPS, + VMINSD, + VMINSS, + VMLAUNCH, + VMLOAD, + VMMCALL, + VMOVAPD, + VMOVAPS, + VMOVD, + VMOVDDUP, + VMOVDQA, + VMOVDQA32, + VMOVDQA64, + VMOVDQU, + VMOVDQU16, + VMOVDQU32, + VMOVDQU64, + VMOVDQU8, + VMOVHLPS, + VMOVHPD, + VMOVHPS, + VMOVLHPS, + VMOVLPD, + VMOVLPS, + VMOVMSKPD, + VMOVMSKPS, + VMOVNTDQ, + VMOVNTDQA, + VMOVNTPD, + VMOVNTPS, + VMOVQ, + VMOVSD, + VMOVSHDUP, + VMOVSLDUP, + VMOVSS, + VMOVUPD, + VMOVUPS, + VMPSADBW, + VMPTRLD, + VMPTRST, + VMREAD, + VMRESUME, + VMRUN, + VMSAVE, + VMULPD, + VMULPS, + VMULSD, + VMULSS, + VMWRITE, + VMXOFF, + VMXON, + VORPD, + VORPS, + VP2INTERSECTD, + VP2INTERSECTQ, + VP4DPWSSD, + VP4DPWSSDS, + VPABSB, + VPABSD, + VPABSQ, + VPABSW, + VPACKSSDW, + VPACKSSWB, + VPACKUSDW, + VPACKUSWB, + VPADDB, + VPADDD, + VPADDQ, + VPADDSB, + VPADDSW, + VPADDUSB, + VPADDUSW, + VPADDW, + VPALIGNR, + VPAND, + VPANDD, + VPANDN, + VPANDND, + VPANDNQ, + VPANDQ, + VPAVGB, + VPAVGW, + VPBLENDD, + VPBLENDMB, + VPBLENDMD, + VPBLENDMQ, + VPBLENDMW, + VPBLENDVB, + VPBLENDW, + VPBROADCASTB, + VPBROADCASTD, + VPBROADCASTM, + VPBROADCASTMB2Q, + VPBROADCASTMW2D, + VPBROADCASTQ, + VPBROADCASTW, + VPCLMULQDQ, + VPCMPB, + VPCMPD, + VPCMPEQB, + VPCMPEQD, + VPCMPEQQ, + VPCMPEQW, + VPCMPESTRI, + VPCMPESTRM, + VPCMPGTB, + VPCMPGTD, + VPCMPGTQ, + VPCMPGTW, + VPCMPISTRI, + VPCMPISTRM, + VPCMPQ, + VPCMPUB, + VPCMPUD, + VPCMPUQ, + VPCMPUW, + VPCMPW, + VPCOMPRESSB, + VPCOMPRESSD, + VPCOMPRESSQ, + VPCOMPRESSW, + VPCONFLICTD, + VPCONFLICTQ, + VPDPBUSD, + VPDPBUSDS, + VPDPWSSD, + VPDPWSSDS, + VPERM2F128, + VPERM2I128, + 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, + VPGATHERDD, + VPGATHERDQ, + VPGATHERQD, + VPGATHERQQ, + VPHADDD, + VPHADDSW, + VPHADDW, + VPHMINPOSUW, + VPHSUBD, + VPHSUBSW, + VPHSUBW, + VPINSRB, + VPINSRD, + VPINSRQ, + VPINSRW, + VPLZCNTD, + VPLZCNTQ, + VPMADD52HUQ, + VPMADD52LUQ, + VPMADDUBSW, + VPMADDWD, + VPMASKMOVD, + VPMASKMOVQ, + VPMAXSB, + VPMAXSD, + VPMAXSQ, + VPMAXSW, + VPMAXUB, + VPMAXUD, + VPMAXUQ, + VPMAXUW, + VPMINSB, + VPMINSD, + VPMINSQ, + VPMINSW, + VPMINUB, + VPMINUD, + VPMINUQ, + VPMINUW, + VPMOVB2D, + VPMOVB2M, + VPMOVD2M, + VPMOVDB, + VPMOVDW, + VPMOVM2B, + VPMOVM2D, + VPMOVM2Q, + VPMOVM2W, + VPMOVMSKB, + 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, + VPOR, + VPORD, + VPORQ, + VPROLD, + VPROLQ, + VPROLVD, + VPROLVQ, + VPRORD, + VPRORQ, + VPRORRD, + VPRORRQ, + VPRORVD, + VPRORVQ, + VPSADBW, + VPSCATTERDD, + VPSCATTERDQ, + VPSCATTERQD, + VPSCATTERQQ, + VPSHLDD, + VPSHLDQ, + VPSHLDVD, + VPSHLDVQ, + VPSHLDVW, + VPSHLDW, + VPSHRDD, + VPSHRDQ, + VPSHRDVD, + VPSHRDVQ, + VPSHRDVW, + VPSHRDW, + VPSHUFB, + VPSHUFBITQMB, + VPSHUFD, + VPSHUFHW, + VPSHUFLW, + VPSIGNB, + VPSIGND, + VPSIGNW, + VPSLLD, + VPSLLDQ, + VPSLLQ, + VPSLLVD, + VPSLLVQ, + VPSLLVW, + VPSLLW, + VPSRAD, + VPSRAQ, + VPSRAVD, + VPSRAVQ, + VPSRAVW, + VPSRAW, + VPSRLD, + VPSRLDQ, + VPSRLQ, + VPSRLVD, + VPSRLVQ, + VPSRLVW, + VPSRLW, + VPSUBB, + VPSUBD, + VPSUBQ, + VPSUBSB, + VPSUBSW, + VPSUBUSB, + VPSUBUSW, + VPSUBW, + VPTERNLOGD, + VPTERNLOGQ, + VPTEST, + VPTESTMB, + VPTESTMD, + VPTESTMQ, + VPTESTMW, + VPTESTNMB, + VPTESTNMD, + VPTESTNMQ, + VPTESTNMW, + VPUNPCKHBW, + VPUNPCKHDQ, + VPUNPCKHQDQ, + VPUNPCKHWD, + VPUNPCKLBW, + VPUNPCKLDQ, + VPUNPCKLQDQ, + VPUNPCKLWD, + VPXOR, + VPXORD, + VPXORQ, + VRANGEPD, + VRANGEPS, + VRANGESD, + VRANGESS, + VRCP14PD, + VRCP14PS, + VRCP14SD, + VRCP14SS, + VRCP28PD, + VRCP28PS, + VRCP28SD, + VRCP28SS, + VRCPPS, + VRCPSS, + VREDUCEPD, + VREDUCEPS, + VREDUCESD, + VREDUCESS, + VRNDSCALEPD, + VRNDSCALEPS, + VRNDSCALESD, + VRNDSCALESS, + VROUNDPD, + VROUNDPS, + VROUNDSD, + VROUNDSS, + VRSQRT14PD, + VRSQRT14PS, + VRSQRT14SD, + VRSQRT14SS, + VRSQRT28PD, + VRSQRT28PS, + VRSQRT28SD, + VRSQRT28SS, + VRSQRTPS, + VRSQRTSS, + VSCALEDPD, + VSCALEDPS, + VSCALEDSD, + VSCALEDSS, + VSCALEFPD, + VSCALEFPS, + VSCALEFSD, + VSCALEFSS, + VSCATTERDD, + VSCATTERDPD, + VSCATTERDPS, + VSCATTERDQ, + VSCATTERPF0DPD, + VSCATTERPF0DPS, + VSCATTERPF0QPD, + VSCATTERPF0QPS, + VSCATTERPF1DPD, + VSCATTERPF1DPS, + VSCATTERPF1QPD, + VSCATTERPF1QPS, + VSCATTERQD, + VSCATTERQPD, + VSCATTERQPS, + VSCATTERQQ, + VSHUFF32X4, + VSHUFF64X2, + VSHUFI32X4, + VSHUFI64X2, + VSHUFPD, + VSHUFPS, + VSQRTPD, + VSQRTPS, + VSQRTSD, + VSQRTSS, + VSTMXCSR, + VSUBPD, + VSUBPS, + VSUBSD, + VSUBSS, + VTESTPD, + VTESTPS, + VUCOMISD, + VUCOMISS, + VUNPCKHPD, + VUNPCKHPS, + VUNPCKLPD, + VUNPCKLPS, + VXORPD, + VXORPS, + VZEROALL, + VZEROUPPER, + WAIT, + WBINVD, + WRFSBASE, + WRGSBASE, + WRMSR, + WRPKRU, + WRSS, + WRUSS, + XABORT, + XADD, + XBEGIN, + XCHG, + XEND, + XGETBV, + XLAT, + XOR, + XORPD, + XORPS, + XRESLDTRK, + XRSTOR, + XRSTORS, + XRSTORS64, + XSAVE, + XSAVEC, + XSAVEC64, + XSAVEOPT, + XSAVES, + XSAVES64, + XSETBV, + XSUSLDTRK, + XTEST, +} + +pub(crate) const MNEMONICS: &'static [&'static str] = &[ + "aaa", + "aad", + "aam", + "aas", + "adc", + "adcx", + "add", + "addpd", + "addps", + "addsd", + "addss", + "addsubpd", + "addsubps", + "adox", + "aesdec", + "aesdec128kl", + "aesdec256kl", + "aesdeclast", + "aesdecwide128kl", + "aesdecwide256kl", + "aesenc", + "aesenc128kl", + "aesenc256kl", + "aesenclast", + "aesencwide128kl", + "aesencwide256kl", + "aesimc", + "aeskeygenassist", + "and", + "andn", + "andnpd", + "andnps", + "andpd", + "andps", + "arpl", + "bextr", + "blendpd", + "blendps", + "blendvpd", + "blendvps", + "blendw", + "blsi", + "blsmsk", + "blsr", + "bndcl", + "bndcn", + "bndcu", + "bndldx", + "bndmk", + "bndmov", + "bndstx", + "bound", + "bsf", + "bsr", + "bswap", + "bt", + "btc", + "btr", + "bts", + "bzhi", + "call", + "callf", + "cbw", + "cdq", + "cdqe", + "clac", + "clc", + "cld", + "clflush", + "clflushopt", + "clgi", + "cli", + "clrssbsy", + "clts", + "clui", + "clwb", + "clzero", + "cmc", + "cmova", + "cmovb", + "cmovg", + "cmovge", + "cmovl", + "cmovle", + "cmovna", + "cmovnb", + "cmovno", + "cmovnp", + "cmovns", + "cmovnz", + "cmovo", + "cmovp", + "cmovs", + "cmovz", + "cmp", + "cmppd", + "cmpps", + "cmps", + "cmpsd", + "cmpss", + "cmpxchg", + "cmpxchg16b", + "cmpxchg8b", + "comisd", + "comiss", + "cpuid", + "cqo", + "crc32", + "cvtdq2pd", + "cvtdq2ps", + "cvtpd2dq", + "cvtpd2pi", + "cvtpd2ps", + "cvtpi2pd", + "cvtpi2ps", + "cvtps2dq", + "cvtps2pd", + "cvtps2pi", + "cvtsd2si", + "cvtsd2ss", + "cvtsi2sd", + "cvtsi2ss", + "cvtss2sd", + "cvtss2si", + "cvttpd2dq", + "cvttpd2pi", + "cvttps2dq", + "cvttps2pi", + "cvttsd2si", + "cvttss2si", + "cwd", + "cwde", + "daa", + "das", + "dec", + "div", + "divpd", + "divps", + "divsd", + "divss", + "dppd", + "dpps", + "emms", + "encls", + "enclu", + "enclv", + "encodekey128", + "encodekey256", + "endbr32", + "endbr64", + "enqcmd", + "enqcmds", + "enter", + "extractps", + "extrq", + "f2xm1", + "fabs", + "fadd", + "faddp", + "fbld", + "fbstp", + "fchs", + "fcmovb", + "fcmovbe", + "fcmove", + "fcmovnb", + "fcmovnbe", + "fcmovne", + "fcmovnu", + "fcmovu", + "fcom", + "fcomi", + "fcomip", + "fcomp", + "fcompp", + "fcos", + "fdecstp", + "fdisi8087_nop", + "fdiv", + "fdivp", + "fdivr", + "fdivrp", + "femms", + "feni8087_nop", + "ffree", + "ffreep", + "fiadd", + "ficom", + "ficomp", + "fidiv", + "fidivr", + "fild", + "fimul", + "fincstp", + "fist", + "fistp", + "fisttp", + "fisub", + "fisubr", + "fld", + "fld1", + "fldcw", + "fldenv", + "fldl2e", + "fldl2t", + "fldlg2", + "fldln2", + "fldpi", + "fldz", + "fmul", + "fmulp", + "fnclex", + "fninit", + "fnop", + "fnsave", + "fnstcw", + "fnstenv", + "fnstor", + "fnstsw", + "fpatan", + "fprem", + "fprem1", + "fptan", + "frndint", + "frstor", + "fscale", + "fsetpm287_nop", + "fsin", + "fsincos", + "fsqrt", + "fst", + "fstp", + "fstpnce", + "fsub", + "fsubp", + "fsubr", + "fsubrp", + "ftst", + "fucom", + "fucomi", + "fucomip", + "fucomp", + "fucompp", + "fxam", + "fxch", + "fxrstor", + "fxsave", + "fxtract", + "fyl2x", + "fyl2xp1", + "getsec", + "gf2p8affineinvqb", + "gf2p8affineqb", + "gf2p8mulb", + "haddpd", + "haddps", + "hlt", + "hreset", + "hsubpd", + "hsubps", + "idiv", + "imul", + "in", + "inc", + "incssp", + "ins", + "insertps", + "insertq", + "int", + "into", + "invalid", + "invd", + "invept", + "invlpg", + "invlpga", + "invlpgb", + "invpcid", + "invvpid", + "iret", + "iretd", + "iretq", + "ja", + "jb", + "jcxz", + "jecxz", + "jg", + "jge", + "jl", + "jle", + "jmp", + "jmpe", + "jmpf", + "jna", + "jnb", + "jno", + "jnp", + "jns", + "jnz", + "jo", + "jp", + "jrcxz", + "js", + "jz", + "kaddb", + "kaddd", + "kaddq", + "kaddw", + "kandb", + "kandd", + "kandnb", + "kandnd", + "kandnq", + "kandnw", + "kandq", + "kandw", + "kmovb", + "kmovd", + "kmovq", + "kmovw", + "knotb", + "knotd", + "knotq", + "knotw", + "korb", + "kord", + "korq", + "kortestb", + "kortestd", + "kortestq", + "kortestw", + "korw", + "kshiftlb", + "kshiftld", + "kshiftlq", + "kshiftlw", + "kshiftrb", + "kshiftrd", + "kshiftrq", + "kshiftrw", + "ktestb", + "ktestd", + "ktestq", + "ktestw", + "kunpckbw", + "kunpckdq", + "kunpckwd", + "kxnorb", + "kxnord", + "kxnorq", + "kxnorw", + "kxorb", + "kxord", + "kxorq", + "kxorw", + "lahf", + "lar", + "lddqu", + "ldmxcsr", + "lds", + "lea", + "leave", + "les", + "lfence", + "lfs", + "lgdt", + "lgs", + "lidt", + "lldt", + "lmsw", + "loadiwkey", + "lods", + "loop", + "loopnz", + "loopz", + "lsl", + "lss", + "ltr", + "lzcnt", + "maskmovdqu", + "maskmovq", + "maxpd", + "maxps", + "maxsd", + "maxss", + "mfence", + "minpd", + "minps", + "minsd", + "minss", + "monitor", + "monitorx", + "mov", + "movapd", + "movaps", + "movbe", + "movd", + "movddup", + "movdir64b", + "movdiri", + "movdq2q", + "movdqa", + "movdqu", + "movhlps", + "movhpd", + "movhps", + "movlhps", + "movlpd", + "movlps", + "movmskpd", + "movmskps", + "movntdq", + "movntdqa", + "movnti", + "movntpd", + "movntps", + "movntq", + "movntsd", + "movntss", + "movq", + "movq2dq", + "movs", + "movsd", + "movshdup", + "movsldup", + "movss", + "movsx", + "movsxd", + "movupd", + "movups", + "movzx", + "mpsadbw", + "mul", + "mulpd", + "mulps", + "mulsd", + "mulss", + "mulx", + "mwait", + "mwaitx", + "neg", + "nop", + "not", + "or", + "orpd", + "orps", + "out", + "outs", + "pabsb", + "pabsd", + "pabsw", + "packssdw", + "packsswb", + "packusdw", + "packuswb", + "paddb", + "paddd", + "paddq", + "paddsb", + "paddsw", + "paddusb", + "paddusw", + "paddw", + "palignr", + "pand", + "pandn", + "pavgb", + "pavgusb", + "pavgw", + "pblendvb", + "pblendw", + "pclmulqdq", + "pcmpeqb", + "pcmpeqd", + "pcmpeqq", + "pcmpeqw", + "pcmpestri", + "pcmpestrm", + "pcmpgtb", + "pcmpgtd", + "pcmpgtq", + "pcmpgtw", + "pcmpistri", + "pcmpistrm", + "pconfig", + "pdep", + "pext", + "pextrb", + "pextrd", + "pextrq", + "pextrw", + "pf2id", + "pf2iw", + "pfacc", + "pfadd", + "pfcmpeq", + "pfcmpge", + "pfcmpgt", + "pfmax", + "pfmin", + "pfmul", + "pfmulhrw", + "pfnacc", + "pfpnacc", + "pfrcp", + "pfrcpit1", + "pfrcpit2", + "pfrsqit1", + "pfrsqrt", + "pfsub", + "pfsubr", + "phaddd", + "phaddsw", + "phaddw", + "phminposuw", + "phsubd", + "phsubsw", + "phsubw", + "pi2fd", + "pi2fw", + "pinsrb", + "pinsrd", + "pinsrq", + "pinsrw", + "pmaddubsw", + "pmaddwd", + "pmaxsb", + "pmaxsd", + "pmaxsw", + "pmaxub", + "pmaxud", + "pmaxuw", + "pminsb", + "pminsd", + "pminsw", + "pminub", + "pminud", + "pminuw", + "pmovmskb", + "pmovsxbd", + "pmovsxbq", + "pmovsxbw", + "pmovsxdq", + "pmovsxwd", + "pmovsxwq", + "pmovzxbd", + "pmovzxbq", + "pmovzxbw", + "pmovzxdq", + "pmovzxwd", + "pmovzxwq", + "pmuldq", + "pmulhrsw", + "pmulhrw", + "pmulhuw", + "pmulhw", + "pmulld", + "pmullw", + "pmuludq", + "pop", + "popa", + "popcnt", + "popf", + "por", + "prefetch0", + "prefetch1", + "prefetch2", + "prefetchnta", + "prefetchw", + "psadbw", + "pshufb", + "pshufd", + "pshufhw", + "pshuflw", + "pshufw", + "psignb", + "psignd", + "psignw", + "pslld", + "pslldq", + "psllq", + "psllw", + "psmash", + "psrad", + "psraw", + "psrld", + "psrldq", + "psrlq", + "psrlw", + "psubb", + "psubd", + "psubq", + "psubsb", + "psubsw", + "psubusb", + "psubusw", + "psubw", + "pswapd", + "ptest", + "ptwrite", + "punpckhbw", + "punpckhdq", + "punpckhqdq", + "punpckhwd", + "punpcklbw", + "punpckldq", + "punpcklqdq", + "punpcklwd", + "push", + "pusha", + "pushf", + "pvalidate", + "pxor", + "rcl", + "rcpps", + "rcpss", + "rcr", + "rdfsbase", + "rdgsbase", + "rdmsr", + "rdpid", + "rdpkru", + "rdpmc", + "rdpru", + "rdrand", + "rdseed", + "rdtsc", + "rdtscp", + "retf", + "return", + "rmpadjust", + "rmpupdate", + "rol", + "ror", + "rorx", + "roundpd", + "roundps", + "roundsd", + "roundss", + "rsm", + "rsqrtps", + "rsqrtss", + "rstorssp", + "sahf", + "sal", + "salc", + "sar", + "sarx", + "saveprevssp", + "sbb", + "scas", + "seamcall", + "seamops", + "seamret", + "senduipi", + "seta", + "setae", + "setb", + "setbe", + "setg", + "setge", + "setl", + "setle", + "setno", + "setnp", + "setns", + "setnz", + "seto", + "setp", + "sets", + "setssbsy", + "setz", + "sfence", + "sgdt", + "sha1msg1", + "sha1msg2", + "sha1nexte", + "sha1rnds4", + "sha256msg1", + "sha256msg2", + "sha256rnds2", + "shl", + "shld", + "shlx", + "shr", + "shrd", + "shrx", + "shufpd", + "shufps", + "sidt", + "skinit", + "sldt", + "slhd", + "smsw", + "sqrtpd", + "sqrtps", + "sqrtsd", + "sqrtss", + "stac", + "stc", + "std", + "stgi", + "sti", + "stmxcsr", + "stos", + "str", + "stui", + "sub", + "subpd", + "subps", + "subsd", + "subss", + "swapgs", + "syscall", + "sysenter", + "sysexit", + "sysret", + "tdcall", + "test", + "testui", + "tlbsync", + "tpause", + "tzcnt", + "ucomisd", + "ucomiss", + "ud0", + "ud1", + "ud2", + "uiret", + "umonitor", + "umwait", + "unpckhpd", + "unpckhps", + "unpcklpd", + "unpcklps", + "v4fmaddps", + "v4fmaddss", + "v4fnmaddps", + "v4fnmaddss", + "vaddpd", + "vaddps", + "vaddsd", + "vaddss", + "vaddsubpd", + "vaddsubps", + "vaesdec", + "vaesdeclast", + "vaesenc", + "vaesenclast", + "vaesimc", + "vaeskeygenassist", + "valignd", + "valignq", + "vandnpd", + "vandnps", + "vandpd", + "vandps", + "vblendmpd", + "vblendmps", + "vblendpd", + "vblendps", + "vblendvpd", + "vblendvps", + "vbroadcastf128", + "vbroadcastf32x2", + "vbroadcastf32x4", + "vbroadcastf32x8", + "vbroadcastf64x2", + "vbroadcastf64x4", + "vbroadcasti128", + "vbroadcasti32x2", + "vbroadcasti32x4", + "vbroadcasti32x8", + "vbroadcasti64x2", + "vbroadcasti64x4", + "vbroadcastsd", + "vbroadcastss", + "vcmppd", + "vcmpps", + "vcmpsd", + "vcmpss", + "vcomisd", + "vcomiss", + "vcompressd", + "vcompresspd", + "vcompressps", + "vcompressq", + "vcvtdq2pd", + "vcvtdq2ps", + "vcvtne2ps2bf16", + "vcvtneps2bf16", + "vcvtpd2dq", + "vcvtpd2ps", + "vcvtpd2qq", + "vcvtpd2udq", + "vcvtpd2uqq", + "vcvtph2ps", + "vcvtps2dq", + "vcvtps2pd", + "vcvtps2ph", + "vcvtps2qq", + "vcvtps2udq", + "vcvtps2uqq", + "vcvtqq2pd", + "vcvtqq2ps", + "vcvtsd2si", + "vcvtsd2ss", + "vcvtsd2usi", + "vcvtsi2sd", + "vcvtsi2ss", + "vcvtss2sd", + "vcvtss2si", + "vcvtss2usi", + "vcvttpd2dq", + "vcvttpd2qq", + "vcvttpd2udq", + "vcvttpd2uqq", + "vcvttps2dq", + "vcvttps2qq", + "vcvttps2udq", + "vcvttps2uqq", + "vcvttsd2si", + "vcvttsd2usi", + "vcvttss2si", + "vcvttss2usi", + "vcvtudq2pd", + "vcvtudq2ps", + "vcvtuqq2pd", + "vcvtuqq2ps", + "vcvtusi2sd", + "vcvtusi2ss", + "vcvtusi2usd", + "vcvtusi2uss", + "vdbpsadbw", + "vdivpd", + "vdivps", + "vdivsd", + "vdivss", + "vdpbf16ps", + "vdppd", + "vdpps", + "verr", + "verw", + "vexp2pd", + "vexp2ps", + "vexp2sd", + "vexp2ss", + "vexpandpd", + "vexpandps", + "vextractf128", + "vextractf32x4", + "vextractf32x8", + "vextractf64x2", + "vextractf64x4", + "vextracti128", + "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", + "vgatherdpd", + "vgatherdps", + "vgatherpf0dpd", + "vgatherpf0dps", + "vgatherpf0qpd", + "vgatherpf0qps", + "vgatherpf1dpd", + "vgatherpf1dps", + "vgatherpf1qpd", + "vgatherpf1qps", + "vgatherqpd", + "vgatherqps", + "vgetexppd", + "vgetexpps", + "vgetexpsd", + "vgetexpss", + "vgetmantpd", + "vgetmantps", + "vgetmantsd", + "vgetmantss", + "vgf2p8affineinvqb", + "vgf2p8affineqb", + "vgf2p8mulb", + "vhaddpd", + "vhaddps", + "vhsubpd", + "vhsubps", + "vinsertf128", + "vinsertf32x4", + "vinsertf32x8", + "vinsertf64x2", + "vinsertf64x4", + "vinserti128", + "vinserti32x4", + "vinserti32x8", + "vinserti64x2", + "vinserti64x4", + "vinsertps", + "vlddqu", + "vldmxcsr", + "vmaskmovdqu", + "vmaskmovpd", + "vmaskmovps", + "vmaxpd", + "vmaxps", + "vmaxsd", + "vmaxss", + "vmcall", + "vmclear", + "vmfunc", + "vminpd", + "vminps", + "vminsd", + "vminss", + "vmlaunch", + "vmload", + "vmmcall", + "vmovapd", + "vmovaps", + "vmovd", + "vmovddup", + "vmovdqa", + "vmovdqa32", + "vmovdqa64", + "vmovdqu", + "vmovdqu16", + "vmovdqu32", + "vmovdqu64", + "vmovdqu8", + "vmovhlps", + "vmovhpd", + "vmovhps", + "vmovlhps", + "vmovlpd", + "vmovlps", + "vmovmskpd", + "vmovmskps", + "vmovntdq", + "vmovntdqa", + "vmovntpd", + "vmovntps", + "vmovq", + "vmovsd", + "vmovshdup", + "vmovsldup", + "vmovss", + "vmovupd", + "vmovups", + "vmpsadbw", + "vmptrld", + "vmptrst", + "vmread", + "vmresume", + "vmrun", + "vmsave", + "vmulpd", + "vmulps", + "vmulsd", + "vmulss", + "vmwrite", + "vmxoff", + "vmxon", + "vorpd", + "vorps", + "vp2intersectd", + "vp2intersectq", + "vp4dpwssd", + "vp4dpwssds", + "vpabsb", + "vpabsd", + "vpabsq", + "vpabsw", + "vpackssdw", + "vpacksswb", + "vpackusdw", + "vpackuswb", + "vpaddb", + "vpaddd", + "vpaddq", + "vpaddsb", + "vpaddsw", + "vpaddusb", + "vpaddusw", + "vpaddw", + "vpalignr", + "vpand", + "vpandd", + "vpandn", + "vpandnd", + "vpandnq", + "vpandq", + "vpavgb", + "vpavgw", + "vpblendd", + "vpblendmb", + "vpblendmd", + "vpblendmq", + "vpblendmw", + "vpblendvb", + "vpblendw", + "vpbroadcastb", + "vpbroadcastd", + "vpbroadcastm", + "vpbroadcastmb2q", + "vpbroadcastmw2d", + "vpbroadcastq", + "vpbroadcastw", + "vpclmulqdq", + "vpcmpb", + "vpcmpd", + "vpcmpeqb", + "vpcmpeqd", + "vpcmpeqq", + "vpcmpeqw", + "vpcmpestri", + "vpcmpestrm", + "vpcmpgtb", + "vpcmpgtd", + "vpcmpgtq", + "vpcmpgtw", + "vpcmpistri", + "vpcmpistrm", + "vpcmpq", + "vpcmpub", + "vpcmpud", + "vpcmpuq", + "vpcmpuw", + "vpcmpw", + "vpcompressb", + "vpcompressd", + "vpcompressq", + "vpcompressw", + "vpconflictd", + "vpconflictq", + "vpdpbusd", + "vpdpbusds", + "vpdpwssd", + "vpdpwssds", + "vperm2f128", + "vperm2i128", + "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", + "vpgatherdd", + "vpgatherdq", + "vpgatherqd", + "vpgatherqq", + "vphaddd", + "vphaddsw", + "vphaddw", + "vphminposuw", + "vphsubd", + "vphsubsw", + "vphsubw", + "vpinsrb", + "vpinsrd", + "vpinsrq", + "vpinsrw", + "vplzcntd", + "vplzcntq", + "vpmadd52huq", + "vpmadd52luq", + "vpmaddubsw", + "vpmaddwd", + "vpmaskmovd", + "vpmaskmovq", + "vpmaxsb", + "vpmaxsd", + "vpmaxsq", + "vpmaxsw", + "vpmaxub", + "vpmaxud", + "vpmaxuq", + "vpmaxuw", + "vpminsb", + "vpminsd", + "vpminsq", + "vpminsw", + "vpminub", + "vpminud", + "vpminuq", + "vpminuw", + "vpmovb2d", + "vpmovb2m", + "vpmovd2m", + "vpmovdb", + "vpmovdw", + "vpmovm2b", + "vpmovm2d", + "vpmovm2q", + "vpmovm2w", + "vpmovmskb", + "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", + "vpor", + "vpord", + "vporq", + "vprold", + "vprolq", + "vprolvd", + "vprolvq", + "vprord", + "vprorq", + "vprorrd", + "vprorrq", + "vprorvd", + "vprorvq", + "vpsadbw", + "vpscatterdd", + "vpscatterdq", + "vpscatterqd", + "vpscatterqq", + "vpshldd", + "vpshldq", + "vpshldvd", + "vpshldvq", + "vpshldvw", + "vpshldw", + "vpshrdd", + "vpshrdq", + "vpshrdvd", + "vpshrdvq", + "vpshrdvw", + "vpshrdw", + "vpshufb", + "vpshufbitqmb", + "vpshufd", + "vpshufhw", + "vpshuflw", + "vpsignb", + "vpsignd", + "vpsignw", + "vpslld", + "vpslldq", + "vpsllq", + "vpsllvd", + "vpsllvq", + "vpsllvw", + "vpsllw", + "vpsrad", + "vpsraq", + "vpsravd", + "vpsravq", + "vpsravw", + "vpsraw", + "vpsrld", + "vpsrldq", + "vpsrlq", + "vpsrlvd", + "vpsrlvq", + "vpsrlvw", + "vpsrlw", + "vpsubb", + "vpsubd", + "vpsubq", + "vpsubsb", + "vpsubsw", + "vpsubusb", + "vpsubusw", + "vpsubw", + "vpternlogd", + "vpternlogq", + "vptest", + "vptestmb", + "vptestmd", + "vptestmq", + "vptestmw", + "vptestnmb", + "vptestnmd", + "vptestnmq", + "vptestnmw", + "vpunpckhbw", + "vpunpckhdq", + "vpunpckhqdq", + "vpunpckhwd", + "vpunpcklbw", + "vpunpckldq", + "vpunpcklqdq", + "vpunpcklwd", + "vpxor", + "vpxord", + "vpxorq", + "vrangepd", + "vrangeps", + "vrangesd", + "vrangess", + "vrcp14pd", + "vrcp14ps", + "vrcp14sd", + "vrcp14ss", + "vrcp28pd", + "vrcp28ps", + "vrcp28sd", + "vrcp28ss", + "vrcpps", + "vrcpss", + "vreducepd", + "vreduceps", + "vreducesd", + "vreducess", + "vrndscalepd", + "vrndscaleps", + "vrndscalesd", + "vrndscaless", + "vroundpd", + "vroundps", + "vroundsd", + "vroundss", + "vrsqrt14pd", + "vrsqrt14ps", + "vrsqrt14sd", + "vrsqrt14ss", + "vrsqrt28pd", + "vrsqrt28ps", + "vrsqrt28sd", + "vrsqrt28ss", + "vrsqrtps", + "vrsqrtss", + "vscaledpd", + "vscaledps", + "vscaledsd", + "vscaledss", + "vscalefpd", + "vscalefps", + "vscalefsd", + "vscalefss", + "vscatterdd", + "vscatterdpd", + "vscatterdps", + "vscatterdq", + "vscatterpf0dpd", + "vscatterpf0dps", + "vscatterpf0qpd", + "vscatterpf0qps", + "vscatterpf1dpd", + "vscatterpf1dps", + "vscatterpf1qpd", + "vscatterpf1qps", + "vscatterqd", + "vscatterqpd", + "vscatterqps", + "vscatterqq", + "vshuff32x4", + "vshuff64x2", + "vshufi32x4", + "vshufi64x2", + "vshufpd", + "vshufps", + "vsqrtpd", + "vsqrtps", + "vsqrtsd", + "vsqrtss", + "vstmxcsr", + "vsubpd", + "vsubps", + "vsubsd", + "vsubss", + "vtestpd", + "vtestps", + "vucomisd", + "vucomiss", + "vunpckhpd", + "vunpckhps", + "vunpcklpd", + "vunpcklps", + "vxorpd", + "vxorps", + "vzeroall", + "vzeroupper", + "wait", + "wbinvd", + "wrfsbase", + "wrgsbase", + "wrmsr", + "wrpkru", + "wrss", + "wruss", + "xabort", + "xadd", + "xbegin", + "xchg", + "xend", + "xgetbv", + "xlat", + "xor", + "xorpd", + "xorps", + "xresldtrk", + "xrstor", + "xrstors", + "xrstors64", + "xsave", + "xsavec", + "xsavec64", + "xsaveopt", + "xsaves", + "xsaves64", + "xsetbv", + "xsusldtrk", + "xtest", +]; + +pub(crate) mod real_mode { + #[allow(non_camel_case_types)] + #[derive(Copy, Clone, Debug, Eq, PartialEq)] + #[non_exhaustive] + #[repr(u16)] + pub enum Opcode { + AAA = super::Opcode::AAA as u16, + AAD = super::Opcode::AAD as u16, + AAM = super::Opcode::AAM as u16, + AAS = super::Opcode::AAS as u16, + ADC = super::Opcode::ADC as u16, + ADCX = super::Opcode::ADCX as u16, + ADD = super::Opcode::ADD as u16, + ADDPD = super::Opcode::ADDPD as u16, + ADDPS = super::Opcode::ADDPS as u16, + ADDSD = super::Opcode::ADDSD as u16, + ADDSS = super::Opcode::ADDSS as u16, + ADDSUBPD = super::Opcode::ADDSUBPD as u16, + ADDSUBPS = super::Opcode::ADDSUBPS as u16, + ADOX = super::Opcode::ADOX as u16, + AESDEC = super::Opcode::AESDEC as u16, + AESDEC128KL = super::Opcode::AESDEC128KL as u16, + AESDEC256KL = super::Opcode::AESDEC256KL as u16, + AESDECLAST = super::Opcode::AESDECLAST as u16, + AESDECWIDE128KL = super::Opcode::AESDECWIDE128KL as u16, + AESDECWIDE256KL = super::Opcode::AESDECWIDE256KL as u16, + AESENC = super::Opcode::AESENC as u16, + AESENC128KL = super::Opcode::AESENC128KL as u16, + AESENC256KL = super::Opcode::AESENC256KL as u16, + AESENCLAST = super::Opcode::AESENCLAST as u16, + AESENCWIDE128KL = super::Opcode::AESENCWIDE128KL as u16, + AESENCWIDE256KL = super::Opcode::AESENCWIDE256KL as u16, + AESIMC = super::Opcode::AESIMC as u16, + AESKEYGENASSIST = super::Opcode::AESKEYGENASSIST as u16, + AND = super::Opcode::AND as u16, + ANDN = super::Opcode::ANDN as u16, + ANDNPD = super::Opcode::ANDNPD as u16, + ANDNPS = super::Opcode::ANDNPS as u16, + ANDPD = super::Opcode::ANDPD as u16, + ANDPS = super::Opcode::ANDPS as u16, + ARPL = super::Opcode::ARPL as u16, + BEXTR = super::Opcode::BEXTR as u16, + BLENDPD = super::Opcode::BLENDPD as u16, + BLENDPS = super::Opcode::BLENDPS as u16, + BLENDVPD = super::Opcode::BLENDVPD as u16, + BLENDVPS = super::Opcode::BLENDVPS as u16, + BLENDW = super::Opcode::BLENDW as u16, + BLSI = super::Opcode::BLSI as u16, + BLSMSK = super::Opcode::BLSMSK as u16, + BLSR = super::Opcode::BLSR as u16, + BNDCL = super::Opcode::BNDCL as u16, + BNDCN = super::Opcode::BNDCN as u16, + BNDCU = super::Opcode::BNDCU as u16, + BNDLDX = super::Opcode::BNDLDX as u16, + BNDMK = super::Opcode::BNDMK as u16, + BNDMOV = super::Opcode::BNDMOV as u16, + BNDSTX = super::Opcode::BNDSTX as u16, + BOUND = super::Opcode::BOUND as u16, + BSF = super::Opcode::BSF as u16, + BSR = super::Opcode::BSR as u16, + BSWAP = super::Opcode::BSWAP as u16, + BT = super::Opcode::BT as u16, + BTC = super::Opcode::BTC as u16, + BTR = super::Opcode::BTR as u16, + BTS = super::Opcode::BTS as u16, + BZHI = super::Opcode::BZHI as u16, + CALL = super::Opcode::CALL as u16, + CALLF = super::Opcode::CALLF as u16, + CBW = super::Opcode::CBW as u16, + CDQ = super::Opcode::CDQ as u16, + CDQE = super::Opcode::CDQE as u16, + CLAC = super::Opcode::CLAC as u16, + CLC = super::Opcode::CLC as u16, + CLD = super::Opcode::CLD as u16, + CLFLUSH = super::Opcode::CLFLUSH as u16, + CLFLUSHOPT = super::Opcode::CLFLUSHOPT as u16, + CLGI = super::Opcode::CLGI as u16, + CLI = super::Opcode::CLI as u16, + CLRSSBSY = super::Opcode::CLRSSBSY as u16, + CLTS = super::Opcode::CLTS as u16, + CLUI = super::Opcode::CLUI as u16, + CLWB = super::Opcode::CLWB as u16, + CLZERO = super::Opcode::CLZERO as u16, + CMC = super::Opcode::CMC as u16, + CMOVA = super::Opcode::CMOVA as u16, + CMOVB = super::Opcode::CMOVB as u16, + CMOVG = super::Opcode::CMOVG as u16, + CMOVGE = super::Opcode::CMOVGE as u16, + CMOVL = super::Opcode::CMOVL as u16, + CMOVLE = super::Opcode::CMOVLE as u16, + CMOVNA = super::Opcode::CMOVNA as u16, + CMOVNB = super::Opcode::CMOVNB as u16, + CMOVNO = super::Opcode::CMOVNO as u16, + CMOVNP = super::Opcode::CMOVNP as u16, + CMOVNS = super::Opcode::CMOVNS as u16, + CMOVNZ = super::Opcode::CMOVNZ as u16, + CMOVO = super::Opcode::CMOVO as u16, + CMOVP = super::Opcode::CMOVP as u16, + CMOVS = super::Opcode::CMOVS as u16, + CMOVZ = super::Opcode::CMOVZ as u16, + CMP = super::Opcode::CMP as u16, + CMPPD = super::Opcode::CMPPD as u16, + CMPPS = super::Opcode::CMPPS as u16, + CMPS = super::Opcode::CMPS as u16, + CMPSD = super::Opcode::CMPSD as u16, + CMPSS = super::Opcode::CMPSS as u16, + CMPXCHG = super::Opcode::CMPXCHG as u16, + CMPXCHG16B = super::Opcode::CMPXCHG16B as u16, + CMPXCHG8B = super::Opcode::CMPXCHG8B as u16, + COMISD = super::Opcode::COMISD as u16, + COMISS = super::Opcode::COMISS as u16, + CPUID = super::Opcode::CPUID as u16, + CQO = super::Opcode::CQO as u16, + CRC32 = super::Opcode::CRC32 as u16, + CVTDQ2PD = super::Opcode::CVTDQ2PD as u16, + CVTDQ2PS = super::Opcode::CVTDQ2PS as u16, + CVTPD2DQ = super::Opcode::CVTPD2DQ as u16, + CVTPD2PI = super::Opcode::CVTPD2PI as u16, + CVTPD2PS = super::Opcode::CVTPD2PS as u16, + CVTPI2PD = super::Opcode::CVTPI2PD as u16, + CVTPI2PS = super::Opcode::CVTPI2PS as u16, + CVTPS2DQ = super::Opcode::CVTPS2DQ as u16, + CVTPS2PD = super::Opcode::CVTPS2PD as u16, + CVTPS2PI = super::Opcode::CVTPS2PI as u16, + CVTSD2SI = super::Opcode::CVTSD2SI as u16, + CVTSD2SS = super::Opcode::CVTSD2SS as u16, + CVTSI2SD = super::Opcode::CVTSI2SD as u16, + CVTSI2SS = super::Opcode::CVTSI2SS as u16, + CVTSS2SD = super::Opcode::CVTSS2SD as u16, + CVTSS2SI = super::Opcode::CVTSS2SI as u16, + CVTTPD2DQ = super::Opcode::CVTTPD2DQ as u16, + CVTTPD2PI = super::Opcode::CVTTPD2PI as u16, + CVTTPS2DQ = super::Opcode::CVTTPS2DQ as u16, + CVTTPS2PI = super::Opcode::CVTTPS2PI as u16, + CVTTSD2SI = super::Opcode::CVTTSD2SI as u16, + CVTTSS2SI = super::Opcode::CVTTSS2SI as u16, + CWD = super::Opcode::CWD as u16, + CWDE = super::Opcode::CWDE as u16, + DAA = super::Opcode::DAA as u16, + DAS = super::Opcode::DAS as u16, + DEC = super::Opcode::DEC as u16, + DIV = super::Opcode::DIV as u16, + DIVPD = super::Opcode::DIVPD as u16, + DIVPS = super::Opcode::DIVPS as u16, + DIVSD = super::Opcode::DIVSD as u16, + DIVSS = super::Opcode::DIVSS as u16, + DPPD = super::Opcode::DPPD as u16, + DPPS = super::Opcode::DPPS as u16, + EMMS = super::Opcode::EMMS as u16, + ENCLS = super::Opcode::ENCLS as u16, + ENCLU = super::Opcode::ENCLU as u16, + ENCLV = super::Opcode::ENCLV as u16, + ENCODEKEY128 = super::Opcode::ENCODEKEY128 as u16, + ENCODEKEY256 = super::Opcode::ENCODEKEY256 as u16, + ENDBR32 = super::Opcode::ENDBR32 as u16, + ENDBR64 = super::Opcode::ENDBR64 as u16, + ENQCMD = super::Opcode::ENQCMD as u16, + ENQCMDS = super::Opcode::ENQCMDS as u16, + ENTER = super::Opcode::ENTER as u16, + EXTRACTPS = super::Opcode::EXTRACTPS as u16, + EXTRQ = super::Opcode::EXTRQ as u16, + F2XM1 = super::Opcode::F2XM1 as u16, + FABS = super::Opcode::FABS as u16, + FADD = super::Opcode::FADD as u16, + FADDP = super::Opcode::FADDP as u16, + FBLD = super::Opcode::FBLD as u16, + FBSTP = super::Opcode::FBSTP as u16, + FCHS = super::Opcode::FCHS as u16, + FCMOVB = super::Opcode::FCMOVB as u16, + FCMOVBE = super::Opcode::FCMOVBE as u16, + FCMOVE = super::Opcode::FCMOVE as u16, + FCMOVNB = super::Opcode::FCMOVNB as u16, + FCMOVNBE = super::Opcode::FCMOVNBE as u16, + FCMOVNE = super::Opcode::FCMOVNE as u16, + FCMOVNU = super::Opcode::FCMOVNU as u16, + FCMOVU = super::Opcode::FCMOVU as u16, + FCOM = super::Opcode::FCOM as u16, + FCOMI = super::Opcode::FCOMI as u16, + FCOMIP = super::Opcode::FCOMIP as u16, + FCOMP = super::Opcode::FCOMP as u16, + FCOMPP = super::Opcode::FCOMPP as u16, + FCOS = super::Opcode::FCOS as u16, + FDECSTP = super::Opcode::FDECSTP as u16, + FDISI8087_NOP = super::Opcode::FDISI8087_NOP as u16, + FDIV = super::Opcode::FDIV as u16, + FDIVP = super::Opcode::FDIVP as u16, + FDIVR = super::Opcode::FDIVR as u16, + FDIVRP = super::Opcode::FDIVRP as u16, + FEMMS = super::Opcode::FEMMS as u16, + FENI8087_NOP = super::Opcode::FENI8087_NOP as u16, + FFREE = super::Opcode::FFREE as u16, + FFREEP = super::Opcode::FFREEP as u16, + FIADD = super::Opcode::FIADD as u16, + FICOM = super::Opcode::FICOM as u16, + FICOMP = super::Opcode::FICOMP as u16, + FIDIV = super::Opcode::FIDIV as u16, + FIDIVR = super::Opcode::FIDIVR as u16, + FILD = super::Opcode::FILD as u16, + FIMUL = super::Opcode::FIMUL as u16, + FINCSTP = super::Opcode::FINCSTP as u16, + FIST = super::Opcode::FIST as u16, + FISTP = super::Opcode::FISTP as u16, + FISTTP = super::Opcode::FISTTP as u16, + FISUB = super::Opcode::FISUB as u16, + FISUBR = super::Opcode::FISUBR as u16, + FLD = super::Opcode::FLD as u16, + FLD1 = super::Opcode::FLD1 as u16, + FLDCW = super::Opcode::FLDCW as u16, + FLDENV = super::Opcode::FLDENV as u16, + FLDL2E = super::Opcode::FLDL2E as u16, + FLDL2T = super::Opcode::FLDL2T as u16, + FLDLG2 = super::Opcode::FLDLG2 as u16, + FLDLN2 = super::Opcode::FLDLN2 as u16, + FLDPI = super::Opcode::FLDPI as u16, + FLDZ = super::Opcode::FLDZ as u16, + FMUL = super::Opcode::FMUL as u16, + FMULP = super::Opcode::FMULP as u16, + FNCLEX = super::Opcode::FNCLEX as u16, + FNINIT = super::Opcode::FNINIT as u16, + FNOP = super::Opcode::FNOP as u16, + FNSAVE = super::Opcode::FNSAVE as u16, + FNSTCW = super::Opcode::FNSTCW as u16, + FNSTENV = super::Opcode::FNSTENV as u16, + FNSTOR = super::Opcode::FNSTOR as u16, + FNSTSW = super::Opcode::FNSTSW as u16, + FPATAN = super::Opcode::FPATAN as u16, + FPREM = super::Opcode::FPREM as u16, + FPREM1 = super::Opcode::FPREM1 as u16, + FPTAN = super::Opcode::FPTAN as u16, + FRNDINT = super::Opcode::FRNDINT as u16, + FRSTOR = super::Opcode::FRSTOR as u16, + FSCALE = super::Opcode::FSCALE as u16, + FSETPM287_NOP = super::Opcode::FSETPM287_NOP as u16, + FSIN = super::Opcode::FSIN as u16, + FSINCOS = super::Opcode::FSINCOS as u16, + FSQRT = super::Opcode::FSQRT as u16, + FST = super::Opcode::FST as u16, + FSTP = super::Opcode::FSTP as u16, + FSTPNCE = super::Opcode::FSTPNCE as u16, + FSUB = super::Opcode::FSUB as u16, + FSUBP = super::Opcode::FSUBP as u16, + FSUBR = super::Opcode::FSUBR as u16, + FSUBRP = super::Opcode::FSUBRP as u16, + FTST = super::Opcode::FTST as u16, + FUCOM = super::Opcode::FUCOM as u16, + FUCOMI = super::Opcode::FUCOMI as u16, + FUCOMIP = super::Opcode::FUCOMIP as u16, + FUCOMP = super::Opcode::FUCOMP as u16, + FUCOMPP = super::Opcode::FUCOMPP as u16, + FXAM = super::Opcode::FXAM as u16, + FXCH = super::Opcode::FXCH as u16, + FXRSTOR = super::Opcode::FXRSTOR as u16, + FXSAVE = super::Opcode::FXSAVE as u16, + FXTRACT = super::Opcode::FXTRACT as u16, + FYL2X = super::Opcode::FYL2X as u16, + FYL2XP1 = super::Opcode::FYL2XP1 as u16, + GETSEC = super::Opcode::GETSEC as u16, + GF2P8AFFINEINVQB = super::Opcode::GF2P8AFFINEINVQB as u16, + GF2P8AFFINEQB = super::Opcode::GF2P8AFFINEQB as u16, + GF2P8MULB = super::Opcode::GF2P8MULB as u16, + HADDPD = super::Opcode::HADDPD as u16, + HADDPS = super::Opcode::HADDPS as u16, + HLT = super::Opcode::HLT as u16, + HRESET = super::Opcode::HRESET as u16, + HSUBPD = super::Opcode::HSUBPD as u16, + HSUBPS = super::Opcode::HSUBPS as u16, + IDIV = super::Opcode::IDIV as u16, + IMUL = super::Opcode::IMUL as u16, + IN = super::Opcode::IN as u16, + INC = super::Opcode::INC as u16, + INCSSP = super::Opcode::INCSSP as u16, + INS = super::Opcode::INS as u16, + INSERTPS = super::Opcode::INSERTPS as u16, + INSERTQ = super::Opcode::INSERTQ as u16, + INT = super::Opcode::INT as u16, + INTO = super::Opcode::INTO as u16, + Invalid = super::Opcode::Invalid as u16, + INVD = super::Opcode::INVD as u16, + INVEPT = super::Opcode::INVEPT as u16, + INVLPG = super::Opcode::INVLPG as u16, + INVLPGA = super::Opcode::INVLPGA as u16, + INVLPGB = super::Opcode::INVLPGB as u16, + INVPCID = super::Opcode::INVPCID as u16, + INVVPID = super::Opcode::INVVPID as u16, + IRET = super::Opcode::IRET as u16, + IRETD = super::Opcode::IRETD as u16, + IRETQ = super::Opcode::IRETQ as u16, + JA = super::Opcode::JA as u16, + JB = super::Opcode::JB as u16, + JCXZ = super::Opcode::JCXZ as u16, + JG = super::Opcode::JG as u16, + JGE = super::Opcode::JGE as u16, + JL = super::Opcode::JL as u16, + JLE = super::Opcode::JLE as u16, + JMP = super::Opcode::JMP as u16, + JMPE = super::Opcode::JMPE as u16, + JMPF = super::Opcode::JMPF as u16, + JNA = super::Opcode::JNA as u16, + JNB = super::Opcode::JNB as u16, + JNO = super::Opcode::JNO as u16, + JNP = super::Opcode::JNP as u16, + JNS = super::Opcode::JNS as u16, + JNZ = super::Opcode::JNZ as u16, + JO = super::Opcode::JO as u16, + JP = super::Opcode::JP as u16, + JS = super::Opcode::JS as u16, + JZ = super::Opcode::JZ as u16, + KADDB = super::Opcode::KADDB as u16, + KADDD = super::Opcode::KADDD as u16, + KADDQ = super::Opcode::KADDQ as u16, + KADDW = super::Opcode::KADDW as u16, + KANDB = super::Opcode::KANDB as u16, + KANDD = super::Opcode::KANDD as u16, + KANDNB = super::Opcode::KANDNB as u16, + KANDND = super::Opcode::KANDND as u16, + KANDNQ = super::Opcode::KANDNQ as u16, + KANDNW = super::Opcode::KANDNW as u16, + KANDQ = super::Opcode::KANDQ as u16, + KANDW = super::Opcode::KANDW as u16, + KMOVB = super::Opcode::KMOVB as u16, + KMOVD = super::Opcode::KMOVD as u16, + KMOVQ = super::Opcode::KMOVQ as u16, + KMOVW = super::Opcode::KMOVW as u16, + KNOTB = super::Opcode::KNOTB as u16, + KNOTD = super::Opcode::KNOTD as u16, + KNOTQ = super::Opcode::KNOTQ as u16, + KNOTW = super::Opcode::KNOTW as u16, + KORB = super::Opcode::KORB as u16, + KORD = super::Opcode::KORD as u16, + KORQ = super::Opcode::KORQ as u16, + KORTESTB = super::Opcode::KORTESTB as u16, + KORTESTD = super::Opcode::KORTESTD as u16, + KORTESTQ = super::Opcode::KORTESTQ as u16, + KORTESTW = super::Opcode::KORTESTW as u16, + KORW = super::Opcode::KORW as u16, + KSHIFTLB = super::Opcode::KSHIFTLB as u16, + KSHIFTLD = super::Opcode::KSHIFTLD as u16, + KSHIFTLQ = super::Opcode::KSHIFTLQ as u16, + KSHIFTLW = super::Opcode::KSHIFTLW as u16, + KSHIFTRB = super::Opcode::KSHIFTRB as u16, + KSHIFTRD = super::Opcode::KSHIFTRD as u16, + KSHIFTRQ = super::Opcode::KSHIFTRQ as u16, + KSHIFTRW = super::Opcode::KSHIFTRW as u16, + KTESTB = super::Opcode::KTESTB as u16, + KTESTD = super::Opcode::KTESTD as u16, + KTESTQ = super::Opcode::KTESTQ as u16, + KTESTW = super::Opcode::KTESTW as u16, + KUNPCKBW = super::Opcode::KUNPCKBW as u16, + KUNPCKDQ = super::Opcode::KUNPCKDQ as u16, + KUNPCKWD = super::Opcode::KUNPCKWD as u16, + KXNORB = super::Opcode::KXNORB as u16, + KXNORD = super::Opcode::KXNORD as u16, + KXNORQ = super::Opcode::KXNORQ as u16, + KXNORW = super::Opcode::KXNORW as u16, + KXORB = super::Opcode::KXORB as u16, + KXORD = super::Opcode::KXORD as u16, + KXORQ = super::Opcode::KXORQ as u16, + KXORW = super::Opcode::KXORW as u16, + LAHF = super::Opcode::LAHF as u16, + LAR = super::Opcode::LAR as u16, + LDDQU = super::Opcode::LDDQU as u16, + LDMXCSR = super::Opcode::LDMXCSR as u16, + LDS = super::Opcode::LDS as u16, + LEA = super::Opcode::LEA as u16, + LEAVE = super::Opcode::LEAVE as u16, + LES = super::Opcode::LES as u16, + LFENCE = super::Opcode::LFENCE as u16, + LFS = super::Opcode::LFS as u16, + LGDT = super::Opcode::LGDT as u16, + LGS = super::Opcode::LGS as u16, + LIDT = super::Opcode::LIDT as u16, + LLDT = super::Opcode::LLDT as u16, + LMSW = super::Opcode::LMSW as u16, + LOADIWKEY = super::Opcode::LOADIWKEY as u16, + LODS = super::Opcode::LODS as u16, + LOOP = super::Opcode::LOOP as u16, + LOOPNZ = super::Opcode::LOOPNZ as u16, + LOOPZ = super::Opcode::LOOPZ as u16, + LSL = super::Opcode::LSL as u16, + LSS = super::Opcode::LSS as u16, + LTR = super::Opcode::LTR as u16, + LZCNT = super::Opcode::LZCNT as u16, + MASKMOVDQU = super::Opcode::MASKMOVDQU as u16, + MASKMOVQ = super::Opcode::MASKMOVQ as u16, + MAXPD = super::Opcode::MAXPD as u16, + MAXPS = super::Opcode::MAXPS as u16, + MAXSD = super::Opcode::MAXSD as u16, + MAXSS = super::Opcode::MAXSS as u16, + MFENCE = super::Opcode::MFENCE as u16, + MINPD = super::Opcode::MINPD as u16, + MINPS = super::Opcode::MINPS as u16, + MINSD = super::Opcode::MINSD as u16, + MINSS = super::Opcode::MINSS as u16, + MONITOR = super::Opcode::MONITOR as u16, + MONITORX = super::Opcode::MONITORX as u16, + MOV = super::Opcode::MOV as u16, + MOVAPD = super::Opcode::MOVAPD as u16, + MOVAPS = super::Opcode::MOVAPS as u16, + MOVBE = super::Opcode::MOVBE as u16, + MOVD = super::Opcode::MOVD as u16, + MOVDDUP = super::Opcode::MOVDDUP as u16, + MOVDIR64B = super::Opcode::MOVDIR64B as u16, + MOVDIRI = super::Opcode::MOVDIRI as u16, + MOVDQ2Q = super::Opcode::MOVDQ2Q as u16, + MOVDQA = super::Opcode::MOVDQA as u16, + MOVDQU = super::Opcode::MOVDQU as u16, + MOVHLPS = super::Opcode::MOVHLPS as u16, + MOVHPD = super::Opcode::MOVHPD as u16, + MOVHPS = super::Opcode::MOVHPS as u16, + MOVLHPS = super::Opcode::MOVLHPS as u16, + MOVLPD = super::Opcode::MOVLPD as u16, + MOVLPS = super::Opcode::MOVLPS as u16, + MOVMSKPD = super::Opcode::MOVMSKPD as u16, + MOVMSKPS = super::Opcode::MOVMSKPS as u16, + MOVNTDQ = super::Opcode::MOVNTDQ as u16, + MOVNTDQA = super::Opcode::MOVNTDQA as u16, + MOVNTI = super::Opcode::MOVNTI as u16, + MOVNTPD = super::Opcode::MOVNTPD as u16, + MOVNTPS = super::Opcode::MOVNTPS as u16, + MOVNTQ = super::Opcode::MOVNTQ as u16, + MOVNTSD = super::Opcode::MOVNTSD as u16, + MOVNTSS = super::Opcode::MOVNTSS as u16, + MOVQ = super::Opcode::MOVQ as u16, + MOVQ2DQ = super::Opcode::MOVQ2DQ as u16, + MOVS = super::Opcode::MOVS as u16, + MOVSD = super::Opcode::MOVSD as u16, + MOVSHDUP = super::Opcode::MOVSHDUP as u16, + MOVSLDUP = super::Opcode::MOVSLDUP as u16, + MOVSS = super::Opcode::MOVSS as u16, + MOVSX = super::Opcode::MOVSX as u16, + MOVSXD = super::Opcode::MOVSXD as u16, + MOVUPD = super::Opcode::MOVUPD as u16, + MOVUPS = super::Opcode::MOVUPS as u16, + MOVZX = super::Opcode::MOVZX as u16, + MPSADBW = super::Opcode::MPSADBW as u16, + MUL = super::Opcode::MUL as u16, + MULPD = super::Opcode::MULPD as u16, + MULPS = super::Opcode::MULPS as u16, + MULSD = super::Opcode::MULSD as u16, + MULSS = super::Opcode::MULSS as u16, + MULX = super::Opcode::MULX as u16, + MWAIT = super::Opcode::MWAIT as u16, + MWAITX = super::Opcode::MWAITX as u16, + NEG = super::Opcode::NEG as u16, + NOP = super::Opcode::NOP as u16, + NOT = super::Opcode::NOT as u16, + OR = super::Opcode::OR as u16, + ORPD = super::Opcode::ORPD as u16, + ORPS = super::Opcode::ORPS as u16, + OUT = super::Opcode::OUT as u16, + OUTS = super::Opcode::OUTS as u16, + PABSB = super::Opcode::PABSB as u16, + PABSD = super::Opcode::PABSD as u16, + PABSW = super::Opcode::PABSW as u16, + PACKSSDW = super::Opcode::PACKSSDW as u16, + PACKSSWB = super::Opcode::PACKSSWB as u16, + PACKUSDW = super::Opcode::PACKUSDW as u16, + PACKUSWB = super::Opcode::PACKUSWB as u16, + PADDB = super::Opcode::PADDB as u16, + PADDD = super::Opcode::PADDD as u16, + PADDQ = super::Opcode::PADDQ as u16, + PADDSB = super::Opcode::PADDSB as u16, + PADDSW = super::Opcode::PADDSW as u16, + PADDUSB = super::Opcode::PADDUSB as u16, + PADDUSW = super::Opcode::PADDUSW as u16, + PADDW = super::Opcode::PADDW as u16, + PALIGNR = super::Opcode::PALIGNR as u16, + PAND = super::Opcode::PAND as u16, + PANDN = super::Opcode::PANDN as u16, + PAVGB = super::Opcode::PAVGB as u16, + PAVGUSB = super::Opcode::PAVGUSB as u16, + PAVGW = super::Opcode::PAVGW as u16, + PBLENDVB = super::Opcode::PBLENDVB as u16, + PBLENDW = super::Opcode::PBLENDW as u16, + PCLMULQDQ = super::Opcode::PCLMULQDQ as u16, + PCMPEQB = super::Opcode::PCMPEQB as u16, + PCMPEQD = super::Opcode::PCMPEQD as u16, + PCMPEQQ = super::Opcode::PCMPEQQ as u16, + PCMPEQW = super::Opcode::PCMPEQW as u16, + PCMPESTRI = super::Opcode::PCMPESTRI as u16, + PCMPESTRM = super::Opcode::PCMPESTRM as u16, + PCMPGTB = super::Opcode::PCMPGTB as u16, + PCMPGTD = super::Opcode::PCMPGTD as u16, + PCMPGTQ = super::Opcode::PCMPGTQ as u16, + PCMPGTW = super::Opcode::PCMPGTW as u16, + PCMPISTRI = super::Opcode::PCMPISTRI as u16, + PCMPISTRM = super::Opcode::PCMPISTRM as u16, + PCONFIG = super::Opcode::PCONFIG as u16, + PDEP = super::Opcode::PDEP as u16, + PEXT = super::Opcode::PEXT as u16, + PEXTRB = super::Opcode::PEXTRB as u16, + PEXTRD = super::Opcode::PEXTRD as u16, + PEXTRQ = super::Opcode::PEXTRQ as u16, + PEXTRW = super::Opcode::PEXTRW as u16, + PF2ID = super::Opcode::PF2ID as u16, + PF2IW = super::Opcode::PF2IW as u16, + PFACC = super::Opcode::PFACC as u16, + PFADD = super::Opcode::PFADD as u16, + PFCMPEQ = super::Opcode::PFCMPEQ as u16, + PFCMPGE = super::Opcode::PFCMPGE as u16, + PFCMPGT = super::Opcode::PFCMPGT as u16, + PFMAX = super::Opcode::PFMAX as u16, + PFMIN = super::Opcode::PFMIN as u16, + PFMUL = super::Opcode::PFMUL as u16, + PFMULHRW = super::Opcode::PFMULHRW as u16, + PFNACC = super::Opcode::PFNACC as u16, + PFPNACC = super::Opcode::PFPNACC as u16, + PFRCP = super::Opcode::PFRCP as u16, + PFRCPIT1 = super::Opcode::PFRCPIT1 as u16, + PFRCPIT2 = super::Opcode::PFRCPIT2 as u16, + PFRSQIT1 = super::Opcode::PFRSQIT1 as u16, + PFRSQRT = super::Opcode::PFRSQRT as u16, + PFSUB = super::Opcode::PFSUB as u16, + PFSUBR = super::Opcode::PFSUBR as u16, + PHADDD = super::Opcode::PHADDD as u16, + PHADDSW = super::Opcode::PHADDSW as u16, + PHADDW = super::Opcode::PHADDW as u16, + PHMINPOSUW = super::Opcode::PHMINPOSUW as u16, + PHSUBD = super::Opcode::PHSUBD as u16, + PHSUBSW = super::Opcode::PHSUBSW as u16, + PHSUBW = super::Opcode::PHSUBW as u16, + PI2FD = super::Opcode::PI2FD as u16, + PI2FW = super::Opcode::PI2FW as u16, + PINSRB = super::Opcode::PINSRB as u16, + PINSRD = super::Opcode::PINSRD as u16, + PINSRQ = super::Opcode::PINSRQ as u16, + PINSRW = super::Opcode::PINSRW as u16, + PMADDUBSW = super::Opcode::PMADDUBSW as u16, + PMADDWD = super::Opcode::PMADDWD as u16, + PMAXSB = super::Opcode::PMAXSB as u16, + PMAXSD = super::Opcode::PMAXSD as u16, + PMAXSW = super::Opcode::PMAXSW as u16, + PMAXUB = super::Opcode::PMAXUB as u16, + PMAXUD = super::Opcode::PMAXUD as u16, + PMAXUW = super::Opcode::PMAXUW as u16, + PMINSB = super::Opcode::PMINSB as u16, + PMINSD = super::Opcode::PMINSD as u16, + PMINSW = super::Opcode::PMINSW as u16, + PMINUB = super::Opcode::PMINUB as u16, + PMINUD = super::Opcode::PMINUD as u16, + PMINUW = super::Opcode::PMINUW as u16, + PMOVMSKB = super::Opcode::PMOVMSKB as u16, + PMOVSXBD = super::Opcode::PMOVSXBD as u16, + PMOVSXBQ = super::Opcode::PMOVSXBQ as u16, + PMOVSXBW = super::Opcode::PMOVSXBW as u16, + PMOVSXDQ = super::Opcode::PMOVSXDQ as u16, + PMOVSXWD = super::Opcode::PMOVSXWD as u16, + PMOVSXWQ = super::Opcode::PMOVSXWQ as u16, + PMOVZXBD = super::Opcode::PMOVZXBD as u16, + PMOVZXBQ = super::Opcode::PMOVZXBQ as u16, + PMOVZXBW = super::Opcode::PMOVZXBW as u16, + PMOVZXDQ = super::Opcode::PMOVZXDQ as u16, + PMOVZXWD = super::Opcode::PMOVZXWD as u16, + PMOVZXWQ = super::Opcode::PMOVZXWQ as u16, + PMULDQ = super::Opcode::PMULDQ as u16, + PMULHRSW = super::Opcode::PMULHRSW as u16, + PMULHRW = super::Opcode::PMULHRW as u16, + PMULHUW = super::Opcode::PMULHUW as u16, + PMULHW = super::Opcode::PMULHW as u16, + PMULLD = super::Opcode::PMULLD as u16, + PMULLW = super::Opcode::PMULLW as u16, + PMULUDQ = super::Opcode::PMULUDQ as u16, + POP = super::Opcode::POP as u16, + POPA = super::Opcode::POPA as u16, + POPCNT = super::Opcode::POPCNT as u16, + POPF = super::Opcode::POPF as u16, + POR = super::Opcode::POR as u16, + PREFETCH0 = super::Opcode::PREFETCH0 as u16, + PREFETCH1 = super::Opcode::PREFETCH1 as u16, + PREFETCH2 = super::Opcode::PREFETCH2 as u16, + PREFETCHNTA = super::Opcode::PREFETCHNTA as u16, + PREFETCHW = super::Opcode::PREFETCHW as u16, + PSADBW = super::Opcode::PSADBW as u16, + PSHUFB = super::Opcode::PSHUFB as u16, + PSHUFD = super::Opcode::PSHUFD as u16, + PSHUFHW = super::Opcode::PSHUFHW as u16, + PSHUFLW = super::Opcode::PSHUFLW as u16, + PSHUFW = super::Opcode::PSHUFW as u16, + PSIGNB = super::Opcode::PSIGNB as u16, + PSIGND = super::Opcode::PSIGND as u16, + PSIGNW = super::Opcode::PSIGNW as u16, + PSLLD = super::Opcode::PSLLD as u16, + PSLLDQ = super::Opcode::PSLLDQ as u16, + PSLLQ = super::Opcode::PSLLQ as u16, + PSLLW = super::Opcode::PSLLW as u16, + PSMASH = super::Opcode::PSMASH as u16, + PSRAD = super::Opcode::PSRAD as u16, + PSRAW = super::Opcode::PSRAW as u16, + PSRLD = super::Opcode::PSRLD as u16, + PSRLDQ = super::Opcode::PSRLDQ as u16, + PSRLQ = super::Opcode::PSRLQ as u16, + PSRLW = super::Opcode::PSRLW as u16, + PSUBB = super::Opcode::PSUBB as u16, + PSUBD = super::Opcode::PSUBD as u16, + PSUBQ = super::Opcode::PSUBQ as u16, + PSUBSB = super::Opcode::PSUBSB as u16, + PSUBSW = super::Opcode::PSUBSW as u16, + PSUBUSB = super::Opcode::PSUBUSB as u16, + PSUBUSW = super::Opcode::PSUBUSW as u16, + PSUBW = super::Opcode::PSUBW as u16, + PSWAPD = super::Opcode::PSWAPD as u16, + PTEST = super::Opcode::PTEST as u16, + PTWRITE = super::Opcode::PTWRITE as u16, + PUNPCKHBW = super::Opcode::PUNPCKHBW as u16, + PUNPCKHDQ = super::Opcode::PUNPCKHDQ as u16, + PUNPCKHQDQ = super::Opcode::PUNPCKHQDQ as u16, + PUNPCKHWD = super::Opcode::PUNPCKHWD as u16, + PUNPCKLBW = super::Opcode::PUNPCKLBW as u16, + PUNPCKLDQ = super::Opcode::PUNPCKLDQ as u16, + PUNPCKLQDQ = super::Opcode::PUNPCKLQDQ as u16, + PUNPCKLWD = super::Opcode::PUNPCKLWD as u16, + PUSH = super::Opcode::PUSH as u16, + PUSHA = super::Opcode::PUSHA as u16, + PUSHF = super::Opcode::PUSHF as u16, + PVALIDATE = super::Opcode::PVALIDATE as u16, + PXOR = super::Opcode::PXOR as u16, + RCL = super::Opcode::RCL as u16, + RCPPS = super::Opcode::RCPPS as u16, + RCPSS = super::Opcode::RCPSS as u16, + RCR = super::Opcode::RCR as u16, + RDFSBASE = super::Opcode::RDFSBASE as u16, + RDGSBASE = super::Opcode::RDGSBASE as u16, + RDMSR = super::Opcode::RDMSR as u16, + RDPID = super::Opcode::RDPID as u16, + RDPKRU = super::Opcode::RDPKRU as u16, + RDPMC = super::Opcode::RDPMC as u16, + RDPRU = super::Opcode::RDPRU as u16, + RDRAND = super::Opcode::RDRAND as u16, + RDSEED = super::Opcode::RDSEED as u16, + RDTSC = super::Opcode::RDTSC as u16, + RDTSCP = super::Opcode::RDTSCP as u16, + RETF = super::Opcode::RETF as u16, + RETURN = super::Opcode::RETURN as u16, + RMPADJUST = super::Opcode::RMPADJUST as u16, + RMPUPDATE = super::Opcode::RMPUPDATE as u16, + ROL = super::Opcode::ROL as u16, + ROR = super::Opcode::ROR as u16, + RORX = super::Opcode::RORX as u16, + ROUNDPD = super::Opcode::ROUNDPD as u16, + ROUNDPS = super::Opcode::ROUNDPS as u16, + ROUNDSD = super::Opcode::ROUNDSD as u16, + ROUNDSS = super::Opcode::ROUNDSS as u16, + RSM = super::Opcode::RSM as u16, + RSQRTPS = super::Opcode::RSQRTPS as u16, + RSQRTSS = super::Opcode::RSQRTSS as u16, + RSTORSSP = super::Opcode::RSTORSSP as u16, + SAHF = super::Opcode::SAHF as u16, + SAL = super::Opcode::SAL as u16, + SALC = super::Opcode::SALC as u16, + SAR = super::Opcode::SAR as u16, + SARX = super::Opcode::SARX as u16, + SAVEPREVSSP = super::Opcode::SAVEPREVSSP as u16, + SBB = super::Opcode::SBB as u16, + SCAS = super::Opcode::SCAS as u16, + SEAMCALL = super::Opcode::SEAMCALL as u16, + SEAMOPS = super::Opcode::SEAMOPS as u16, + SEAMRET = super::Opcode::SEAMRET as u16, + SENDUIPI = super::Opcode::SENDUIPI as u16, + SETA = super::Opcode::SETA as u16, + SETAE = super::Opcode::SETAE as u16, + SETB = super::Opcode::SETB as u16, + SETBE = super::Opcode::SETBE as u16, + SETG = super::Opcode::SETG as u16, + SETGE = super::Opcode::SETGE as u16, + SETL = super::Opcode::SETL as u16, + SETLE = super::Opcode::SETLE as u16, + SETNO = super::Opcode::SETNO as u16, + SETNP = super::Opcode::SETNP as u16, + SETNS = super::Opcode::SETNS as u16, + SETNZ = super::Opcode::SETNZ as u16, + SETO = super::Opcode::SETO as u16, + SETP = super::Opcode::SETP as u16, + SETS = super::Opcode::SETS as u16, + SETSSBSY = super::Opcode::SETSSBSY as u16, + SETZ = super::Opcode::SETZ as u16, + SFENCE = super::Opcode::SFENCE as u16, + SGDT = super::Opcode::SGDT as u16, + SHA1MSG1 = super::Opcode::SHA1MSG1 as u16, + SHA1MSG2 = super::Opcode::SHA1MSG2 as u16, + SHA1NEXTE = super::Opcode::SHA1NEXTE as u16, + SHA1RNDS4 = super::Opcode::SHA1RNDS4 as u16, + SHA256MSG1 = super::Opcode::SHA256MSG1 as u16, + SHA256MSG2 = super::Opcode::SHA256MSG2 as u16, + SHA256RNDS2 = super::Opcode::SHA256RNDS2 as u16, + SHL = super::Opcode::SHL as u16, + SHLD = super::Opcode::SHLD as u16, + SHLX = super::Opcode::SHLX as u16, + SHR = super::Opcode::SHR as u16, + SHRD = super::Opcode::SHRD as u16, + SHRX = super::Opcode::SHRX as u16, + SHUFPD = super::Opcode::SHUFPD as u16, + SHUFPS = super::Opcode::SHUFPS as u16, + SIDT = super::Opcode::SIDT as u16, + SKINIT = super::Opcode::SKINIT as u16, + SLDT = super::Opcode::SLDT as u16, + SLHD = super::Opcode::SLHD as u16, + SMSW = super::Opcode::SMSW as u16, + SQRTPD = super::Opcode::SQRTPD as u16, + SQRTPS = super::Opcode::SQRTPS as u16, + SQRTSD = super::Opcode::SQRTSD as u16, + SQRTSS = super::Opcode::SQRTSS as u16, + STAC = super::Opcode::STAC as u16, + STC = super::Opcode::STC as u16, + STD = super::Opcode::STD as u16, + STGI = super::Opcode::STGI as u16, + STI = super::Opcode::STI as u16, + STMXCSR = super::Opcode::STMXCSR as u16, + STOS = super::Opcode::STOS as u16, + STR = super::Opcode::STR as u16, + STUI = super::Opcode::STUI as u16, + SUB = super::Opcode::SUB as u16, + SUBPD = super::Opcode::SUBPD as u16, + SUBPS = super::Opcode::SUBPS as u16, + SUBSD = super::Opcode::SUBSD as u16, + SUBSS = super::Opcode::SUBSS as u16, + SWAPGS = super::Opcode::SWAPGS as u16, + SYSCALL = super::Opcode::SYSCALL as u16, + SYSENTER = super::Opcode::SYSENTER as u16, + SYSEXIT = super::Opcode::SYSEXIT as u16, + SYSRET = super::Opcode::SYSRET as u16, + TDCALL = super::Opcode::TDCALL as u16, + TEST = super::Opcode::TEST as u16, + TESTUI = super::Opcode::TESTUI as u16, + TLBSYNC = super::Opcode::TLBSYNC as u16, + TPAUSE = super::Opcode::TPAUSE as u16, + TZCNT = super::Opcode::TZCNT as u16, + UCOMISD = super::Opcode::UCOMISD as u16, + UCOMISS = super::Opcode::UCOMISS as u16, + UD0 = super::Opcode::UD0 as u16, + UD1 = super::Opcode::UD1 as u16, + UD2 = super::Opcode::UD2 as u16, + UIRET = super::Opcode::UIRET as u16, + UMONITOR = super::Opcode::UMONITOR as u16, + UMWAIT = super::Opcode::UMWAIT as u16, + UNPCKHPD = super::Opcode::UNPCKHPD as u16, + UNPCKHPS = super::Opcode::UNPCKHPS as u16, + UNPCKLPD = super::Opcode::UNPCKLPD as u16, + UNPCKLPS = super::Opcode::UNPCKLPS as u16, + V4FMADDPS = super::Opcode::V4FMADDPS as u16, + V4FMADDSS = super::Opcode::V4FMADDSS as u16, + V4FNMADDPS = super::Opcode::V4FNMADDPS as u16, + V4FNMADDSS = super::Opcode::V4FNMADDSS as u16, + VADDPD = super::Opcode::VADDPD as u16, + VADDPS = super::Opcode::VADDPS as u16, + VADDSD = super::Opcode::VADDSD as u16, + VADDSS = super::Opcode::VADDSS as u16, + VADDSUBPD = super::Opcode::VADDSUBPD as u16, + VADDSUBPS = super::Opcode::VADDSUBPS as u16, + VAESDEC = super::Opcode::VAESDEC as u16, + VAESDECLAST = super::Opcode::VAESDECLAST as u16, + VAESENC = super::Opcode::VAESENC as u16, + VAESENCLAST = super::Opcode::VAESENCLAST as u16, + VAESIMC = super::Opcode::VAESIMC as u16, + VAESKEYGENASSIST = super::Opcode::VAESKEYGENASSIST as u16, + VALIGND = super::Opcode::VALIGND as u16, + VALIGNQ = super::Opcode::VALIGNQ as u16, + VANDNPD = super::Opcode::VANDNPD as u16, + VANDNPS = super::Opcode::VANDNPS as u16, + VANDPD = super::Opcode::VANDPD as u16, + VANDPS = super::Opcode::VANDPS as u16, + VBLENDMPD = super::Opcode::VBLENDMPD as u16, + VBLENDMPS = super::Opcode::VBLENDMPS as u16, + VBLENDPD = super::Opcode::VBLENDPD as u16, + VBLENDPS = super::Opcode::VBLENDPS as u16, + VBLENDVPD = super::Opcode::VBLENDVPD as u16, + VBLENDVPS = super::Opcode::VBLENDVPS as u16, + VBROADCASTF128 = super::Opcode::VBROADCASTF128 as u16, + VBROADCASTF32X2 = super::Opcode::VBROADCASTF32X2 as u16, + VBROADCASTF32X4 = super::Opcode::VBROADCASTF32X4 as u16, + VBROADCASTF32X8 = super::Opcode::VBROADCASTF32X8 as u16, + VBROADCASTF64X2 = super::Opcode::VBROADCASTF64X2 as u16, + VBROADCASTF64X4 = super::Opcode::VBROADCASTF64X4 as u16, + VBROADCASTI128 = super::Opcode::VBROADCASTI128 as u16, + VBROADCASTI32X2 = super::Opcode::VBROADCASTI32X2 as u16, + VBROADCASTI32X4 = super::Opcode::VBROADCASTI32X4 as u16, + VBROADCASTI32X8 = super::Opcode::VBROADCASTI32X8 as u16, + VBROADCASTI64X2 = super::Opcode::VBROADCASTI64X2 as u16, + VBROADCASTI64X4 = super::Opcode::VBROADCASTI64X4 as u16, + VBROADCASTSD = super::Opcode::VBROADCASTSD as u16, + VBROADCASTSS = super::Opcode::VBROADCASTSS as u16, + VCMPPD = super::Opcode::VCMPPD as u16, + VCMPPS = super::Opcode::VCMPPS as u16, + VCMPSD = super::Opcode::VCMPSD as u16, + VCMPSS = super::Opcode::VCMPSS as u16, + VCOMISD = super::Opcode::VCOMISD as u16, + VCOMISS = super::Opcode::VCOMISS as u16, + VCOMPRESSD = super::Opcode::VCOMPRESSD as u16, + VCOMPRESSPD = super::Opcode::VCOMPRESSPD as u16, + VCOMPRESSPS = super::Opcode::VCOMPRESSPS as u16, + VCOMPRESSQ = super::Opcode::VCOMPRESSQ as u16, + VCVTDQ2PD = super::Opcode::VCVTDQ2PD as u16, + VCVTDQ2PS = super::Opcode::VCVTDQ2PS as u16, + VCVTNE2PS2BF16 = super::Opcode::VCVTNE2PS2BF16 as u16, + VCVTNEPS2BF16 = super::Opcode::VCVTNEPS2BF16 as u16, + VCVTPD2DQ = super::Opcode::VCVTPD2DQ as u16, + VCVTPD2PS = super::Opcode::VCVTPD2PS as u16, + VCVTPD2QQ = super::Opcode::VCVTPD2QQ as u16, + VCVTPD2UDQ = super::Opcode::VCVTPD2UDQ as u16, + VCVTPD2UQQ = super::Opcode::VCVTPD2UQQ as u16, + VCVTPH2PS = super::Opcode::VCVTPH2PS as u16, + VCVTPS2DQ = super::Opcode::VCVTPS2DQ as u16, + VCVTPS2PD = super::Opcode::VCVTPS2PD as u16, + VCVTPS2PH = super::Opcode::VCVTPS2PH as u16, + VCVTPS2QQ = super::Opcode::VCVTPS2QQ as u16, + VCVTPS2UDQ = super::Opcode::VCVTPS2UDQ as u16, + VCVTPS2UQQ = super::Opcode::VCVTPS2UQQ as u16, + VCVTQQ2PD = super::Opcode::VCVTQQ2PD as u16, + VCVTQQ2PS = super::Opcode::VCVTQQ2PS as u16, + VCVTSD2SI = super::Opcode::VCVTSD2SI as u16, + VCVTSD2SS = super::Opcode::VCVTSD2SS as u16, + VCVTSD2USI = super::Opcode::VCVTSD2USI as u16, + VCVTSI2SD = super::Opcode::VCVTSI2SD as u16, + VCVTSI2SS = super::Opcode::VCVTSI2SS as u16, + VCVTSS2SD = super::Opcode::VCVTSS2SD as u16, + VCVTSS2SI = super::Opcode::VCVTSS2SI as u16, + VCVTSS2USI = super::Opcode::VCVTSS2USI as u16, + VCVTTPD2DQ = super::Opcode::VCVTTPD2DQ as u16, + VCVTTPD2QQ = super::Opcode::VCVTTPD2QQ as u16, + VCVTTPD2UDQ = super::Opcode::VCVTTPD2UDQ as u16, + VCVTTPD2UQQ = super::Opcode::VCVTTPD2UQQ as u16, + VCVTTPS2DQ = super::Opcode::VCVTTPS2DQ as u16, + VCVTTPS2QQ = super::Opcode::VCVTTPS2QQ as u16, + VCVTTPS2UDQ = super::Opcode::VCVTTPS2UDQ as u16, + VCVTTPS2UQQ = super::Opcode::VCVTTPS2UQQ as u16, + VCVTTSD2SI = super::Opcode::VCVTTSD2SI as u16, + VCVTTSD2USI = super::Opcode::VCVTTSD2USI as u16, + VCVTTSS2SI = super::Opcode::VCVTTSS2SI as u16, + VCVTTSS2USI = super::Opcode::VCVTTSS2USI as u16, + VCVTUDQ2PD = super::Opcode::VCVTUDQ2PD as u16, + VCVTUDQ2PS = super::Opcode::VCVTUDQ2PS as u16, + VCVTUQQ2PD = super::Opcode::VCVTUQQ2PD as u16, + VCVTUQQ2PS = super::Opcode::VCVTUQQ2PS as u16, + VCVTUSI2SD = super::Opcode::VCVTUSI2SD as u16, + VCVTUSI2SS = super::Opcode::VCVTUSI2SS as u16, + VCVTUSI2USD = super::Opcode::VCVTUSI2USD as u16, + VCVTUSI2USS = super::Opcode::VCVTUSI2USS as u16, + VDBPSADBW = super::Opcode::VDBPSADBW as u16, + VDIVPD = super::Opcode::VDIVPD as u16, + VDIVPS = super::Opcode::VDIVPS as u16, + VDIVSD = super::Opcode::VDIVSD as u16, + VDIVSS = super::Opcode::VDIVSS as u16, + VDPBF16PS = super::Opcode::VDPBF16PS as u16, + VDPPD = super::Opcode::VDPPD as u16, + VDPPS = super::Opcode::VDPPS as u16, + VERR = super::Opcode::VERR as u16, + VERW = super::Opcode::VERW as u16, + VEXP2PD = super::Opcode::VEXP2PD as u16, + VEXP2PS = super::Opcode::VEXP2PS as u16, + VEXP2SD = super::Opcode::VEXP2SD as u16, + VEXP2SS = super::Opcode::VEXP2SS as u16, + VEXPANDPD = super::Opcode::VEXPANDPD as u16, + VEXPANDPS = super::Opcode::VEXPANDPS as u16, + VEXTRACTF128 = super::Opcode::VEXTRACTF128 as u16, + VEXTRACTF32X4 = super::Opcode::VEXTRACTF32X4 as u16, + VEXTRACTF32X8 = super::Opcode::VEXTRACTF32X8 as u16, + VEXTRACTF64X2 = super::Opcode::VEXTRACTF64X2 as u16, + VEXTRACTF64X4 = super::Opcode::VEXTRACTF64X4 as u16, + VEXTRACTI128 = super::Opcode::VEXTRACTI128 as u16, + VEXTRACTI32X4 = super::Opcode::VEXTRACTI32X4 as u16, + VEXTRACTI32X8 = super::Opcode::VEXTRACTI32X8 as u16, + VEXTRACTI64X2 = super::Opcode::VEXTRACTI64X2 as u16, + VEXTRACTI64X4 = super::Opcode::VEXTRACTI64X4 as u16, + VEXTRACTPS = super::Opcode::VEXTRACTPS as u16, + VFIXUPIMMPD = super::Opcode::VFIXUPIMMPD as u16, + VFIXUPIMMPS = super::Opcode::VFIXUPIMMPS as u16, + VFIXUPIMMSD = super::Opcode::VFIXUPIMMSD as u16, + VFIXUPIMMSS = super::Opcode::VFIXUPIMMSS as u16, + VFMADD132PD = super::Opcode::VFMADD132PD as u16, + VFMADD132PS = super::Opcode::VFMADD132PS as u16, + VFMADD132SD = super::Opcode::VFMADD132SD as u16, + VFMADD132SS = super::Opcode::VFMADD132SS as u16, + VFMADD213PD = super::Opcode::VFMADD213PD as u16, + VFMADD213PS = super::Opcode::VFMADD213PS as u16, + VFMADD213SD = super::Opcode::VFMADD213SD as u16, + VFMADD213SS = super::Opcode::VFMADD213SS as u16, + VFMADD231PD = super::Opcode::VFMADD231PD as u16, + VFMADD231PS = super::Opcode::VFMADD231PS as u16, + VFMADD231SD = super::Opcode::VFMADD231SD as u16, + VFMADD231SS = super::Opcode::VFMADD231SS as u16, + VFMADDSUB132PD = super::Opcode::VFMADDSUB132PD as u16, + VFMADDSUB132PS = super::Opcode::VFMADDSUB132PS as u16, + VFMADDSUB213PD = super::Opcode::VFMADDSUB213PD as u16, + VFMADDSUB213PS = super::Opcode::VFMADDSUB213PS as u16, + VFMADDSUB231PD = super::Opcode::VFMADDSUB231PD as u16, + VFMADDSUB231PS = super::Opcode::VFMADDSUB231PS as u16, + VFMSUB132PD = super::Opcode::VFMSUB132PD as u16, + VFMSUB132PS = super::Opcode::VFMSUB132PS as u16, + VFMSUB132SD = super::Opcode::VFMSUB132SD as u16, + VFMSUB132SS = super::Opcode::VFMSUB132SS as u16, + VFMSUB213PD = super::Opcode::VFMSUB213PD as u16, + VFMSUB213PS = super::Opcode::VFMSUB213PS as u16, + VFMSUB213SD = super::Opcode::VFMSUB213SD as u16, + VFMSUB213SS = super::Opcode::VFMSUB213SS as u16, + VFMSUB231PD = super::Opcode::VFMSUB231PD as u16, + VFMSUB231PS = super::Opcode::VFMSUB231PS as u16, + VFMSUB231SD = super::Opcode::VFMSUB231SD as u16, + VFMSUB231SS = super::Opcode::VFMSUB231SS as u16, + VFMSUBADD132PD = super::Opcode::VFMSUBADD132PD as u16, + VFMSUBADD132PS = super::Opcode::VFMSUBADD132PS as u16, + VFMSUBADD213PD = super::Opcode::VFMSUBADD213PD as u16, + VFMSUBADD213PS = super::Opcode::VFMSUBADD213PS as u16, + VFMSUBADD231PD = super::Opcode::VFMSUBADD231PD as u16, + VFMSUBADD231PS = super::Opcode::VFMSUBADD231PS as u16, + VFNMADD132PD = super::Opcode::VFNMADD132PD as u16, + VFNMADD132PS = super::Opcode::VFNMADD132PS as u16, + VFNMADD132SD = super::Opcode::VFNMADD132SD as u16, + VFNMADD132SS = super::Opcode::VFNMADD132SS as u16, + VFNMADD213PD = super::Opcode::VFNMADD213PD as u16, + VFNMADD213PS = super::Opcode::VFNMADD213PS as u16, + VFNMADD213SD = super::Opcode::VFNMADD213SD as u16, + VFNMADD213SS = super::Opcode::VFNMADD213SS as u16, + VFNMADD231PD = super::Opcode::VFNMADD231PD as u16, + VFNMADD231PS = super::Opcode::VFNMADD231PS as u16, + VFNMADD231SD = super::Opcode::VFNMADD231SD as u16, + VFNMADD231SS = super::Opcode::VFNMADD231SS as u16, + VFNMSUB132PD = super::Opcode::VFNMSUB132PD as u16, + VFNMSUB132PS = super::Opcode::VFNMSUB132PS as u16, + VFNMSUB132SD = super::Opcode::VFNMSUB132SD as u16, + VFNMSUB132SS = super::Opcode::VFNMSUB132SS as u16, + VFNMSUB213PD = super::Opcode::VFNMSUB213PD as u16, + VFNMSUB213PS = super::Opcode::VFNMSUB213PS as u16, + VFNMSUB213SD = super::Opcode::VFNMSUB213SD as u16, + VFNMSUB213SS = super::Opcode::VFNMSUB213SS as u16, + VFNMSUB231PD = super::Opcode::VFNMSUB231PD as u16, + VFNMSUB231PS = super::Opcode::VFNMSUB231PS as u16, + VFNMSUB231SD = super::Opcode::VFNMSUB231SD as u16, + VFNMSUB231SS = super::Opcode::VFNMSUB231SS as u16, + VFPCLASSPD = super::Opcode::VFPCLASSPD as u16, + VFPCLASSPS = super::Opcode::VFPCLASSPS as u16, + VFPCLASSSD = super::Opcode::VFPCLASSSD as u16, + VFPCLASSSS = super::Opcode::VFPCLASSSS as u16, + VGATHERDPD = super::Opcode::VGATHERDPD as u16, + VGATHERDPS = super::Opcode::VGATHERDPS as u16, + VGATHERPF0DPD = super::Opcode::VGATHERPF0DPD as u16, + VGATHERPF0DPS = super::Opcode::VGATHERPF0DPS as u16, + VGATHERPF0QPD = super::Opcode::VGATHERPF0QPD as u16, + VGATHERPF0QPS = super::Opcode::VGATHERPF0QPS as u16, + VGATHERPF1DPD = super::Opcode::VGATHERPF1DPD as u16, + VGATHERPF1DPS = super::Opcode::VGATHERPF1DPS as u16, + VGATHERPF1QPD = super::Opcode::VGATHERPF1QPD as u16, + VGATHERPF1QPS = super::Opcode::VGATHERPF1QPS as u16, + VGATHERQPD = super::Opcode::VGATHERQPD as u16, + VGATHERQPS = super::Opcode::VGATHERQPS as u16, + VGETEXPPD = super::Opcode::VGETEXPPD as u16, + VGETEXPPS = super::Opcode::VGETEXPPS as u16, + VGETEXPSD = super::Opcode::VGETEXPSD as u16, + VGETEXPSS = super::Opcode::VGETEXPSS as u16, + VGETMANTPD = super::Opcode::VGETMANTPD as u16, + VGETMANTPS = super::Opcode::VGETMANTPS as u16, + VGETMANTSD = super::Opcode::VGETMANTSD as u16, + VGETMANTSS = super::Opcode::VGETMANTSS as u16, + VGF2P8AFFINEINVQB = super::Opcode::VGF2P8AFFINEINVQB as u16, + VGF2P8AFFINEQB = super::Opcode::VGF2P8AFFINEQB as u16, + VGF2P8MULB = super::Opcode::VGF2P8MULB as u16, + VHADDPD = super::Opcode::VHADDPD as u16, + VHADDPS = super::Opcode::VHADDPS as u16, + VHSUBPD = super::Opcode::VHSUBPD as u16, + VHSUBPS = super::Opcode::VHSUBPS as u16, + VINSERTF128 = super::Opcode::VINSERTF128 as u16, + VINSERTF32X4 = super::Opcode::VINSERTF32X4 as u16, + VINSERTF32X8 = super::Opcode::VINSERTF32X8 as u16, + VINSERTF64X2 = super::Opcode::VINSERTF64X2 as u16, + VINSERTF64X4 = super::Opcode::VINSERTF64X4 as u16, + VINSERTI128 = super::Opcode::VINSERTI128 as u16, + VINSERTI32X4 = super::Opcode::VINSERTI32X4 as u16, + VINSERTI32X8 = super::Opcode::VINSERTI32X8 as u16, + VINSERTI64X2 = super::Opcode::VINSERTI64X2 as u16, + VINSERTI64X4 = super::Opcode::VINSERTI64X4 as u16, + VINSERTPS = super::Opcode::VINSERTPS as u16, + VLDDQU = super::Opcode::VLDDQU as u16, + VLDMXCSR = super::Opcode::VLDMXCSR as u16, + VMASKMOVDQU = super::Opcode::VMASKMOVDQU as u16, + VMASKMOVPD = super::Opcode::VMASKMOVPD as u16, + VMASKMOVPS = super::Opcode::VMASKMOVPS as u16, + VMAXPD = super::Opcode::VMAXPD as u16, + VMAXPS = super::Opcode::VMAXPS as u16, + VMAXSD = super::Opcode::VMAXSD as u16, + VMAXSS = super::Opcode::VMAXSS as u16, + VMCALL = super::Opcode::VMCALL as u16, + VMCLEAR = super::Opcode::VMCLEAR as u16, + VMFUNC = super::Opcode::VMFUNC as u16, + VMINPD = super::Opcode::VMINPD as u16, + VMINPS = super::Opcode::VMINPS as u16, + VMINSD = super::Opcode::VMINSD as u16, + VMINSS = super::Opcode::VMINSS as u16, + VMLAUNCH = super::Opcode::VMLAUNCH as u16, + VMLOAD = super::Opcode::VMLOAD as u16, + VMMCALL = super::Opcode::VMMCALL as u16, + VMOVAPD = super::Opcode::VMOVAPD as u16, + VMOVAPS = super::Opcode::VMOVAPS as u16, + VMOVD = super::Opcode::VMOVD as u16, + VMOVDDUP = super::Opcode::VMOVDDUP as u16, + VMOVDQA = super::Opcode::VMOVDQA as u16, + VMOVDQA32 = super::Opcode::VMOVDQA32 as u16, + VMOVDQA64 = super::Opcode::VMOVDQA64 as u16, + VMOVDQU = super::Opcode::VMOVDQU as u16, + VMOVDQU16 = super::Opcode::VMOVDQU16 as u16, + VMOVDQU32 = super::Opcode::VMOVDQU32 as u16, + VMOVDQU64 = super::Opcode::VMOVDQU64 as u16, + VMOVDQU8 = super::Opcode::VMOVDQU8 as u16, + VMOVHLPS = super::Opcode::VMOVHLPS as u16, + VMOVHPD = super::Opcode::VMOVHPD as u16, + VMOVHPS = super::Opcode::VMOVHPS as u16, + VMOVLHPS = super::Opcode::VMOVLHPS as u16, + VMOVLPD = super::Opcode::VMOVLPD as u16, + VMOVLPS = super::Opcode::VMOVLPS as u16, + VMOVMSKPD = super::Opcode::VMOVMSKPD as u16, + VMOVMSKPS = super::Opcode::VMOVMSKPS as u16, + VMOVNTDQ = super::Opcode::VMOVNTDQ as u16, + VMOVNTDQA = super::Opcode::VMOVNTDQA as u16, + VMOVNTPD = super::Opcode::VMOVNTPD as u16, + VMOVNTPS = super::Opcode::VMOVNTPS as u16, + VMOVQ = super::Opcode::VMOVQ as u16, + VMOVSD = super::Opcode::VMOVSD as u16, + VMOVSHDUP = super::Opcode::VMOVSHDUP as u16, + VMOVSLDUP = super::Opcode::VMOVSLDUP as u16, + VMOVSS = super::Opcode::VMOVSS as u16, + VMOVUPD = super::Opcode::VMOVUPD as u16, + VMOVUPS = super::Opcode::VMOVUPS as u16, + VMPSADBW = super::Opcode::VMPSADBW as u16, + VMPTRLD = super::Opcode::VMPTRLD as u16, + VMPTRST = super::Opcode::VMPTRST as u16, + VMREAD = super::Opcode::VMREAD as u16, + VMRESUME = super::Opcode::VMRESUME as u16, + VMRUN = super::Opcode::VMRUN as u16, + VMSAVE = super::Opcode::VMSAVE as u16, + VMULPD = super::Opcode::VMULPD as u16, + VMULPS = super::Opcode::VMULPS as u16, + VMULSD = super::Opcode::VMULSD as u16, + VMULSS = super::Opcode::VMULSS as u16, + VMWRITE = super::Opcode::VMWRITE as u16, + VMXOFF = super::Opcode::VMXOFF as u16, + VMXON = super::Opcode::VMXON as u16, + VORPD = super::Opcode::VORPD as u16, + VORPS = super::Opcode::VORPS as u16, + VP2INTERSECTD = super::Opcode::VP2INTERSECTD as u16, + VP2INTERSECTQ = super::Opcode::VP2INTERSECTQ as u16, + VP4DPWSSD = super::Opcode::VP4DPWSSD as u16, + VP4DPWSSDS = super::Opcode::VP4DPWSSDS as u16, + VPABSB = super::Opcode::VPABSB as u16, + VPABSD = super::Opcode::VPABSD as u16, + VPABSQ = super::Opcode::VPABSQ as u16, + VPABSW = super::Opcode::VPABSW as u16, + VPACKSSDW = super::Opcode::VPACKSSDW as u16, + VPACKSSWB = super::Opcode::VPACKSSWB as u16, + VPACKUSDW = super::Opcode::VPACKUSDW as u16, + VPACKUSWB = super::Opcode::VPACKUSWB as u16, + VPADDB = super::Opcode::VPADDB as u16, + VPADDD = super::Opcode::VPADDD as u16, + VPADDQ = super::Opcode::VPADDQ as u16, + VPADDSB = super::Opcode::VPADDSB as u16, + VPADDSW = super::Opcode::VPADDSW as u16, + VPADDUSB = super::Opcode::VPADDUSB as u16, + VPADDUSW = super::Opcode::VPADDUSW as u16, + VPADDW = super::Opcode::VPADDW as u16, + VPALIGNR = super::Opcode::VPALIGNR as u16, + VPAND = super::Opcode::VPAND as u16, + VPANDD = super::Opcode::VPANDD as u16, + VPANDN = super::Opcode::VPANDN as u16, + VPANDND = super::Opcode::VPANDND as u16, + VPANDNQ = super::Opcode::VPANDNQ as u16, + VPANDQ = super::Opcode::VPANDQ as u16, + VPAVGB = super::Opcode::VPAVGB as u16, + VPAVGW = super::Opcode::VPAVGW as u16, + VPBLENDD = super::Opcode::VPBLENDD as u16, + VPBLENDMB = super::Opcode::VPBLENDMB as u16, + VPBLENDMD = super::Opcode::VPBLENDMD as u16, + VPBLENDMQ = super::Opcode::VPBLENDMQ as u16, + VPBLENDMW = super::Opcode::VPBLENDMW as u16, + VPBLENDVB = super::Opcode::VPBLENDVB as u16, + VPBLENDW = super::Opcode::VPBLENDW as u16, + VPBROADCASTB = super::Opcode::VPBROADCASTB as u16, + VPBROADCASTD = super::Opcode::VPBROADCASTD as u16, + VPBROADCASTM = super::Opcode::VPBROADCASTM as u16, + VPBROADCASTMB2Q = super::Opcode::VPBROADCASTMB2Q as u16, + VPBROADCASTMW2D = super::Opcode::VPBROADCASTMW2D as u16, + VPBROADCASTQ = super::Opcode::VPBROADCASTQ as u16, + VPBROADCASTW = super::Opcode::VPBROADCASTW as u16, + VPCLMULQDQ = super::Opcode::VPCLMULQDQ as u16, + VPCMPB = super::Opcode::VPCMPB as u16, + VPCMPD = super::Opcode::VPCMPD as u16, + VPCMPEQB = super::Opcode::VPCMPEQB as u16, + VPCMPEQD = super::Opcode::VPCMPEQD as u16, + VPCMPEQQ = super::Opcode::VPCMPEQQ as u16, + VPCMPEQW = super::Opcode::VPCMPEQW as u16, + VPCMPESTRI = super::Opcode::VPCMPESTRI as u16, + VPCMPESTRM = super::Opcode::VPCMPESTRM as u16, + VPCMPGTB = super::Opcode::VPCMPGTB as u16, + VPCMPGTD = super::Opcode::VPCMPGTD as u16, + VPCMPGTQ = super::Opcode::VPCMPGTQ as u16, + VPCMPGTW = super::Opcode::VPCMPGTW as u16, + VPCMPISTRI = super::Opcode::VPCMPISTRI as u16, + VPCMPISTRM = super::Opcode::VPCMPISTRM as u16, + VPCMPQ = super::Opcode::VPCMPQ as u16, + VPCMPUB = super::Opcode::VPCMPUB as u16, + VPCMPUD = super::Opcode::VPCMPUD as u16, + VPCMPUQ = super::Opcode::VPCMPUQ as u16, + VPCMPUW = super::Opcode::VPCMPUW as u16, + VPCMPW = super::Opcode::VPCMPW as u16, + VPCOMPRESSB = super::Opcode::VPCOMPRESSB as u16, + VPCOMPRESSD = super::Opcode::VPCOMPRESSD as u16, + VPCOMPRESSQ = super::Opcode::VPCOMPRESSQ as u16, + VPCOMPRESSW = super::Opcode::VPCOMPRESSW as u16, + VPCONFLICTD = super::Opcode::VPCONFLICTD as u16, + VPCONFLICTQ = super::Opcode::VPCONFLICTQ as u16, + VPDPBUSD = super::Opcode::VPDPBUSD as u16, + VPDPBUSDS = super::Opcode::VPDPBUSDS as u16, + VPDPWSSD = super::Opcode::VPDPWSSD as u16, + VPDPWSSDS = super::Opcode::VPDPWSSDS as u16, + VPERM2F128 = super::Opcode::VPERM2F128 as u16, + VPERM2I128 = super::Opcode::VPERM2I128 as u16, + VPERMB = super::Opcode::VPERMB as u16, + VPERMD = super::Opcode::VPERMD as u16, + VPERMI2B = super::Opcode::VPERMI2B as u16, + VPERMI2D = super::Opcode::VPERMI2D as u16, + VPERMI2PD = super::Opcode::VPERMI2PD as u16, + VPERMI2PS = super::Opcode::VPERMI2PS as u16, + VPERMI2Q = super::Opcode::VPERMI2Q as u16, + VPERMI2W = super::Opcode::VPERMI2W as u16, + VPERMILPD = super::Opcode::VPERMILPD as u16, + VPERMILPS = super::Opcode::VPERMILPS as u16, + VPERMPD = super::Opcode::VPERMPD as u16, + VPERMPS = super::Opcode::VPERMPS as u16, + VPERMQ = super::Opcode::VPERMQ as u16, + VPERMT2B = super::Opcode::VPERMT2B as u16, + VPERMT2D = super::Opcode::VPERMT2D as u16, + VPERMT2PD = super::Opcode::VPERMT2PD as u16, + VPERMT2PS = super::Opcode::VPERMT2PS as u16, + VPERMT2Q = super::Opcode::VPERMT2Q as u16, + VPERMT2W = super::Opcode::VPERMT2W as u16, + VPERMW = super::Opcode::VPERMW as u16, + VPEXPANDB = super::Opcode::VPEXPANDB as u16, + VPEXPANDD = super::Opcode::VPEXPANDD as u16, + VPEXPANDQ = super::Opcode::VPEXPANDQ as u16, + VPEXPANDW = super::Opcode::VPEXPANDW as u16, + VPEXTRB = super::Opcode::VPEXTRB as u16, + VPEXTRD = super::Opcode::VPEXTRD as u16, + VPEXTRQ = super::Opcode::VPEXTRQ as u16, + VPEXTRW = super::Opcode::VPEXTRW as u16, + VPGATHERDD = super::Opcode::VPGATHERDD as u16, + VPGATHERDQ = super::Opcode::VPGATHERDQ as u16, + VPGATHERQD = super::Opcode::VPGATHERQD as u16, + VPGATHERQQ = super::Opcode::VPGATHERQQ as u16, + VPHADDD = super::Opcode::VPHADDD as u16, + VPHADDSW = super::Opcode::VPHADDSW as u16, + VPHADDW = super::Opcode::VPHADDW as u16, + VPHMINPOSUW = super::Opcode::VPHMINPOSUW as u16, + VPHSUBD = super::Opcode::VPHSUBD as u16, + VPHSUBSW = super::Opcode::VPHSUBSW as u16, + VPHSUBW = super::Opcode::VPHSUBW as u16, + VPINSRB = super::Opcode::VPINSRB as u16, + VPINSRD = super::Opcode::VPINSRD as u16, + VPINSRQ = super::Opcode::VPINSRQ as u16, + VPINSRW = super::Opcode::VPINSRW as u16, + VPLZCNTD = super::Opcode::VPLZCNTD as u16, + VPLZCNTQ = super::Opcode::VPLZCNTQ as u16, + VPMADD52HUQ = super::Opcode::VPMADD52HUQ as u16, + VPMADD52LUQ = super::Opcode::VPMADD52LUQ as u16, + VPMADDUBSW = super::Opcode::VPMADDUBSW as u16, + VPMADDWD = super::Opcode::VPMADDWD as u16, + VPMASKMOVD = super::Opcode::VPMASKMOVD as u16, + VPMASKMOVQ = super::Opcode::VPMASKMOVQ as u16, + VPMAXSB = super::Opcode::VPMAXSB as u16, + VPMAXSD = super::Opcode::VPMAXSD as u16, + VPMAXSQ = super::Opcode::VPMAXSQ as u16, + VPMAXSW = super::Opcode::VPMAXSW as u16, + VPMAXUB = super::Opcode::VPMAXUB as u16, + VPMAXUD = super::Opcode::VPMAXUD as u16, + VPMAXUQ = super::Opcode::VPMAXUQ as u16, + VPMAXUW = super::Opcode::VPMAXUW as u16, + VPMINSB = super::Opcode::VPMINSB as u16, + VPMINSD = super::Opcode::VPMINSD as u16, + VPMINSQ = super::Opcode::VPMINSQ as u16, + VPMINSW = super::Opcode::VPMINSW as u16, + VPMINUB = super::Opcode::VPMINUB as u16, + VPMINUD = super::Opcode::VPMINUD as u16, + VPMINUQ = super::Opcode::VPMINUQ as u16, + VPMINUW = super::Opcode::VPMINUW as u16, + VPMOVB2D = super::Opcode::VPMOVB2D as u16, + VPMOVB2M = super::Opcode::VPMOVB2M as u16, + VPMOVD2M = super::Opcode::VPMOVD2M as u16, + VPMOVDB = super::Opcode::VPMOVDB as u16, + VPMOVDW = super::Opcode::VPMOVDW as u16, + VPMOVM2B = super::Opcode::VPMOVM2B as u16, + VPMOVM2D = super::Opcode::VPMOVM2D as u16, + VPMOVM2Q = super::Opcode::VPMOVM2Q as u16, + VPMOVM2W = super::Opcode::VPMOVM2W as u16, + VPMOVMSKB = super::Opcode::VPMOVMSKB as u16, + VPMOVQ2M = super::Opcode::VPMOVQ2M as u16, + VPMOVQB = super::Opcode::VPMOVQB as u16, + VPMOVQD = super::Opcode::VPMOVQD as u16, + VPMOVQW = super::Opcode::VPMOVQW as u16, + VPMOVSDB = super::Opcode::VPMOVSDB as u16, + VPMOVSDW = super::Opcode::VPMOVSDW as u16, + VPMOVSQB = super::Opcode::VPMOVSQB as u16, + VPMOVSQD = super::Opcode::VPMOVSQD as u16, + VPMOVSQW = super::Opcode::VPMOVSQW as u16, + VPMOVSWB = super::Opcode::VPMOVSWB as u16, + VPMOVSXBD = super::Opcode::VPMOVSXBD as u16, + VPMOVSXBQ = super::Opcode::VPMOVSXBQ as u16, + VPMOVSXBW = super::Opcode::VPMOVSXBW as u16, + VPMOVSXDQ = super::Opcode::VPMOVSXDQ as u16, + VPMOVSXWD = super::Opcode::VPMOVSXWD as u16, + VPMOVSXWQ = super::Opcode::VPMOVSXWQ as u16, + VPMOVUSDB = super::Opcode::VPMOVUSDB as u16, + VPMOVUSDW = super::Opcode::VPMOVUSDW as u16, + VPMOVUSQB = super::Opcode::VPMOVUSQB as u16, + VPMOVUSQD = super::Opcode::VPMOVUSQD as u16, + VPMOVUSQW = super::Opcode::VPMOVUSQW as u16, + VPMOVUSWB = super::Opcode::VPMOVUSWB as u16, + VPMOVW2M = super::Opcode::VPMOVW2M as u16, + VPMOVWB = super::Opcode::VPMOVWB as u16, + VPMOVZXBD = super::Opcode::VPMOVZXBD as u16, + VPMOVZXBQ = super::Opcode::VPMOVZXBQ as u16, + VPMOVZXBW = super::Opcode::VPMOVZXBW as u16, + VPMOVZXDQ = super::Opcode::VPMOVZXDQ as u16, + VPMOVZXWD = super::Opcode::VPMOVZXWD as u16, + VPMOVZXWQ = super::Opcode::VPMOVZXWQ as u16, + VPMULDQ = super::Opcode::VPMULDQ as u16, + VPMULHRSW = super::Opcode::VPMULHRSW as u16, + VPMULHUW = super::Opcode::VPMULHUW as u16, + VPMULHW = super::Opcode::VPMULHW as u16, + VPMULLD = super::Opcode::VPMULLD as u16, + VPMULLQ = super::Opcode::VPMULLQ as u16, + VPMULLW = super::Opcode::VPMULLW as u16, + VPMULTISHIFTQB = super::Opcode::VPMULTISHIFTQB as u16, + VPMULUDQ = super::Opcode::VPMULUDQ as u16, + VPOPCNTB = super::Opcode::VPOPCNTB as u16, + VPOPCNTD = super::Opcode::VPOPCNTD as u16, + VPOPCNTQ = super::Opcode::VPOPCNTQ as u16, + VPOPCNTW = super::Opcode::VPOPCNTW as u16, + VPOR = super::Opcode::VPOR as u16, + VPORD = super::Opcode::VPORD as u16, + VPORQ = super::Opcode::VPORQ as u16, + VPROLD = super::Opcode::VPROLD as u16, + VPROLQ = super::Opcode::VPROLQ as u16, + VPROLVD = super::Opcode::VPROLVD as u16, + VPROLVQ = super::Opcode::VPROLVQ as u16, + VPRORD = super::Opcode::VPRORD as u16, + VPRORQ = super::Opcode::VPRORQ as u16, + VPRORRD = super::Opcode::VPRORRD as u16, + VPRORRQ = super::Opcode::VPRORRQ as u16, + VPRORVD = super::Opcode::VPRORVD as u16, + VPRORVQ = super::Opcode::VPRORVQ as u16, + VPSADBW = super::Opcode::VPSADBW as u16, + VPSCATTERDD = super::Opcode::VPSCATTERDD as u16, + VPSCATTERDQ = super::Opcode::VPSCATTERDQ as u16, + VPSCATTERQD = super::Opcode::VPSCATTERQD as u16, + VPSCATTERQQ = super::Opcode::VPSCATTERQQ as u16, + VPSHLDD = super::Opcode::VPSHLDD as u16, + VPSHLDQ = super::Opcode::VPSHLDQ as u16, + VPSHLDVD = super::Opcode::VPSHLDVD as u16, + VPSHLDVQ = super::Opcode::VPSHLDVQ as u16, + VPSHLDVW = super::Opcode::VPSHLDVW as u16, + VPSHLDW = super::Opcode::VPSHLDW as u16, + VPSHRDD = super::Opcode::VPSHRDD as u16, + VPSHRDQ = super::Opcode::VPSHRDQ as u16, + VPSHRDVD = super::Opcode::VPSHRDVD as u16, + VPSHRDVQ = super::Opcode::VPSHRDVQ as u16, + VPSHRDVW = super::Opcode::VPSHRDVW as u16, + VPSHRDW = super::Opcode::VPSHRDW as u16, + VPSHUFB = super::Opcode::VPSHUFB as u16, + VPSHUFBITQMB = super::Opcode::VPSHUFBITQMB as u16, + VPSHUFD = super::Opcode::VPSHUFD as u16, + VPSHUFHW = super::Opcode::VPSHUFHW as u16, + VPSHUFLW = super::Opcode::VPSHUFLW as u16, + VPSIGNB = super::Opcode::VPSIGNB as u16, + VPSIGND = super::Opcode::VPSIGND as u16, + VPSIGNW = super::Opcode::VPSIGNW as u16, + VPSLLD = super::Opcode::VPSLLD as u16, + VPSLLDQ = super::Opcode::VPSLLDQ as u16, + VPSLLQ = super::Opcode::VPSLLQ as u16, + VPSLLVD = super::Opcode::VPSLLVD as u16, + VPSLLVQ = super::Opcode::VPSLLVQ as u16, + VPSLLVW = super::Opcode::VPSLLVW as u16, + VPSLLW = super::Opcode::VPSLLW as u16, + VPSRAD = super::Opcode::VPSRAD as u16, + VPSRAQ = super::Opcode::VPSRAQ as u16, + VPSRAVD = super::Opcode::VPSRAVD as u16, + VPSRAVQ = super::Opcode::VPSRAVQ as u16, + VPSRAVW = super::Opcode::VPSRAVW as u16, + VPSRAW = super::Opcode::VPSRAW as u16, + VPSRLD = super::Opcode::VPSRLD as u16, + VPSRLDQ = super::Opcode::VPSRLDQ as u16, + VPSRLQ = super::Opcode::VPSRLQ as u16, + VPSRLVD = super::Opcode::VPSRLVD as u16, + VPSRLVQ = super::Opcode::VPSRLVQ as u16, + VPSRLVW = super::Opcode::VPSRLVW as u16, + VPSRLW = super::Opcode::VPSRLW as u16, + VPSUBB = super::Opcode::VPSUBB as u16, + VPSUBD = super::Opcode::VPSUBD as u16, + VPSUBQ = super::Opcode::VPSUBQ as u16, + VPSUBSB = super::Opcode::VPSUBSB as u16, + VPSUBSW = super::Opcode::VPSUBSW as u16, + VPSUBUSB = super::Opcode::VPSUBUSB as u16, + VPSUBUSW = super::Opcode::VPSUBUSW as u16, + VPSUBW = super::Opcode::VPSUBW as u16, + VPTERNLOGD = super::Opcode::VPTERNLOGD as u16, + VPTERNLOGQ = super::Opcode::VPTERNLOGQ as u16, + VPTEST = super::Opcode::VPTEST as u16, + VPTESTMB = super::Opcode::VPTESTMB as u16, + VPTESTMD = super::Opcode::VPTESTMD as u16, + VPTESTMQ = super::Opcode::VPTESTMQ as u16, + VPTESTMW = super::Opcode::VPTESTMW as u16, + VPTESTNMB = super::Opcode::VPTESTNMB as u16, + VPTESTNMD = super::Opcode::VPTESTNMD as u16, + VPTESTNMQ = super::Opcode::VPTESTNMQ as u16, + VPTESTNMW = super::Opcode::VPTESTNMW as u16, + VPUNPCKHBW = super::Opcode::VPUNPCKHBW as u16, + VPUNPCKHDQ = super::Opcode::VPUNPCKHDQ as u16, + VPUNPCKHQDQ = super::Opcode::VPUNPCKHQDQ as u16, + VPUNPCKHWD = super::Opcode::VPUNPCKHWD as u16, + VPUNPCKLBW = super::Opcode::VPUNPCKLBW as u16, + VPUNPCKLDQ = super::Opcode::VPUNPCKLDQ as u16, + VPUNPCKLQDQ = super::Opcode::VPUNPCKLQDQ as u16, + VPUNPCKLWD = super::Opcode::VPUNPCKLWD as u16, + VPXOR = super::Opcode::VPXOR as u16, + VPXORD = super::Opcode::VPXORD as u16, + VPXORQ = super::Opcode::VPXORQ as u16, + VRANGEPD = super::Opcode::VRANGEPD as u16, + VRANGEPS = super::Opcode::VRANGEPS as u16, + VRANGESD = super::Opcode::VRANGESD as u16, + VRANGESS = super::Opcode::VRANGESS as u16, + VRCP14PD = super::Opcode::VRCP14PD as u16, + VRCP14PS = super::Opcode::VRCP14PS as u16, + VRCP14SD = super::Opcode::VRCP14SD as u16, + VRCP14SS = super::Opcode::VRCP14SS as u16, + VRCP28PD = super::Opcode::VRCP28PD as u16, + VRCP28PS = super::Opcode::VRCP28PS as u16, + VRCP28SD = super::Opcode::VRCP28SD as u16, + VRCP28SS = super::Opcode::VRCP28SS as u16, + VRCPPS = super::Opcode::VRCPPS as u16, + VRCPSS = super::Opcode::VRCPSS as u16, + VREDUCEPD = super::Opcode::VREDUCEPD as u16, + VREDUCEPS = super::Opcode::VREDUCEPS as u16, + VREDUCESD = super::Opcode::VREDUCESD as u16, + VREDUCESS = super::Opcode::VREDUCESS as u16, + VRNDSCALEPD = super::Opcode::VRNDSCALEPD as u16, + VRNDSCALEPS = super::Opcode::VRNDSCALEPS as u16, + VRNDSCALESD = super::Opcode::VRNDSCALESD as u16, + VRNDSCALESS = super::Opcode::VRNDSCALESS as u16, + VROUNDPD = super::Opcode::VROUNDPD as u16, + VROUNDPS = super::Opcode::VROUNDPS as u16, + VROUNDSD = super::Opcode::VROUNDSD as u16, + VROUNDSS = super::Opcode::VROUNDSS as u16, + VRSQRT14PD = super::Opcode::VRSQRT14PD as u16, + VRSQRT14PS = super::Opcode::VRSQRT14PS as u16, + VRSQRT14SD = super::Opcode::VRSQRT14SD as u16, + VRSQRT14SS = super::Opcode::VRSQRT14SS as u16, + VRSQRT28PD = super::Opcode::VRSQRT28PD as u16, + VRSQRT28PS = super::Opcode::VRSQRT28PS as u16, + VRSQRT28SD = super::Opcode::VRSQRT28SD as u16, + VRSQRT28SS = super::Opcode::VRSQRT28SS as u16, + VRSQRTPS = super::Opcode::VRSQRTPS as u16, + VRSQRTSS = super::Opcode::VRSQRTSS as u16, + VSCALEDPD = super::Opcode::VSCALEDPD as u16, + VSCALEDPS = super::Opcode::VSCALEDPS as u16, + VSCALEDSD = super::Opcode::VSCALEDSD as u16, + VSCALEDSS = super::Opcode::VSCALEDSS as u16, + VSCALEFPD = super::Opcode::VSCALEFPD as u16, + VSCALEFPS = super::Opcode::VSCALEFPS as u16, + VSCALEFSD = super::Opcode::VSCALEFSD as u16, + VSCALEFSS = super::Opcode::VSCALEFSS as u16, + VSCATTERDD = super::Opcode::VSCATTERDD as u16, + VSCATTERDPD = super::Opcode::VSCATTERDPD as u16, + VSCATTERDPS = super::Opcode::VSCATTERDPS as u16, + VSCATTERDQ = super::Opcode::VSCATTERDQ as u16, + VSCATTERPF0DPD = super::Opcode::VSCATTERPF0DPD as u16, + VSCATTERPF0DPS = super::Opcode::VSCATTERPF0DPS as u16, + VSCATTERPF0QPD = super::Opcode::VSCATTERPF0QPD as u16, + VSCATTERPF0QPS = super::Opcode::VSCATTERPF0QPS as u16, + VSCATTERPF1DPD = super::Opcode::VSCATTERPF1DPD as u16, + VSCATTERPF1DPS = super::Opcode::VSCATTERPF1DPS as u16, + VSCATTERPF1QPD = super::Opcode::VSCATTERPF1QPD as u16, + VSCATTERPF1QPS = super::Opcode::VSCATTERPF1QPS as u16, + VSCATTERQD = super::Opcode::VSCATTERQD as u16, + VSCATTERQPD = super::Opcode::VSCATTERQPD as u16, + VSCATTERQPS = super::Opcode::VSCATTERQPS as u16, + VSCATTERQQ = super::Opcode::VSCATTERQQ as u16, + VSHUFF32X4 = super::Opcode::VSHUFF32X4 as u16, + VSHUFF64X2 = super::Opcode::VSHUFF64X2 as u16, + VSHUFI32X4 = super::Opcode::VSHUFI32X4 as u16, + VSHUFI64X2 = super::Opcode::VSHUFI64X2 as u16, + VSHUFPD = super::Opcode::VSHUFPD as u16, + VSHUFPS = super::Opcode::VSHUFPS as u16, + VSQRTPD = super::Opcode::VSQRTPD as u16, + VSQRTPS = super::Opcode::VSQRTPS as u16, + VSQRTSD = super::Opcode::VSQRTSD as u16, + VSQRTSS = super::Opcode::VSQRTSS as u16, + VSTMXCSR = super::Opcode::VSTMXCSR as u16, + VSUBPD = super::Opcode::VSUBPD as u16, + VSUBPS = super::Opcode::VSUBPS as u16, + VSUBSD = super::Opcode::VSUBSD as u16, + VSUBSS = super::Opcode::VSUBSS as u16, + VTESTPD = super::Opcode::VTESTPD as u16, + VTESTPS = super::Opcode::VTESTPS as u16, + VUCOMISD = super::Opcode::VUCOMISD as u16, + VUCOMISS = super::Opcode::VUCOMISS as u16, + VUNPCKHPD = super::Opcode::VUNPCKHPD as u16, + VUNPCKHPS = super::Opcode::VUNPCKHPS as u16, + VUNPCKLPD = super::Opcode::VUNPCKLPD as u16, + VUNPCKLPS = super::Opcode::VUNPCKLPS as u16, + VXORPD = super::Opcode::VXORPD as u16, + VXORPS = super::Opcode::VXORPS as u16, + VZEROALL = super::Opcode::VZEROALL as u16, + VZEROUPPER = super::Opcode::VZEROUPPER as u16, + WAIT = super::Opcode::WAIT as u16, + WBINVD = super::Opcode::WBINVD as u16, + WRFSBASE = super::Opcode::WRFSBASE as u16, + WRGSBASE = super::Opcode::WRGSBASE as u16, + WRMSR = super::Opcode::WRMSR as u16, + WRPKRU = super::Opcode::WRPKRU as u16, + WRSS = super::Opcode::WRSS as u16, + WRUSS = super::Opcode::WRUSS as u16, + XABORT = super::Opcode::XABORT as u16, + XADD = super::Opcode::XADD as u16, + XBEGIN = super::Opcode::XBEGIN as u16, + XCHG = super::Opcode::XCHG as u16, + XEND = super::Opcode::XEND as u16, + XGETBV = super::Opcode::XGETBV as u16, + XLAT = super::Opcode::XLAT as u16, + XOR = super::Opcode::XOR as u16, + XORPD = super::Opcode::XORPD as u16, + XORPS = super::Opcode::XORPS as u16, + XRESLDTRK = super::Opcode::XRESLDTRK as u16, + XRSTOR = super::Opcode::XRSTOR as u16, + XRSTORS = super::Opcode::XRSTORS as u16, + XRSTORS64 = super::Opcode::XRSTORS64 as u16, + XSAVE = super::Opcode::XSAVE as u16, + XSAVEC = super::Opcode::XSAVEC as u16, + XSAVEC64 = super::Opcode::XSAVEC64 as u16, + XSAVEOPT = super::Opcode::XSAVEOPT as u16, + XSAVES = super::Opcode::XSAVES as u16, + XSAVES64 = super::Opcode::XSAVES64 as u16, + XSETBV = super::Opcode::XSETBV as u16, + XSUSLDTRK = super::Opcode::XSUSLDTRK as u16, + XTEST = super::Opcode::XTEST as u16, + } +} + +pub(crate) mod protected_mode { + #[allow(non_camel_case_types)] + #[derive(Copy, Clone, Debug, Eq, PartialEq)] + #[non_exhaustive] + #[repr(u16)] + pub enum Opcode { + AAA = super::Opcode::AAA as u16, + AAD = super::Opcode::AAD as u16, + AAM = super::Opcode::AAM as u16, + AAS = super::Opcode::AAS as u16, + ADC = super::Opcode::ADC as u16, + ADCX = super::Opcode::ADCX as u16, + ADD = super::Opcode::ADD as u16, + ADDPD = super::Opcode::ADDPD as u16, + ADDPS = super::Opcode::ADDPS as u16, + ADDSD = super::Opcode::ADDSD as u16, + ADDSS = super::Opcode::ADDSS as u16, + ADDSUBPD = super::Opcode::ADDSUBPD as u16, + ADDSUBPS = super::Opcode::ADDSUBPS as u16, + ADOX = super::Opcode::ADOX as u16, + AESDEC = super::Opcode::AESDEC as u16, + AESDEC128KL = super::Opcode::AESDEC128KL as u16, + AESDEC256KL = super::Opcode::AESDEC256KL as u16, + AESDECLAST = super::Opcode::AESDECLAST as u16, + AESDECWIDE128KL = super::Opcode::AESDECWIDE128KL as u16, + AESDECWIDE256KL = super::Opcode::AESDECWIDE256KL as u16, + AESENC = super::Opcode::AESENC as u16, + AESENC128KL = super::Opcode::AESENC128KL as u16, + AESENC256KL = super::Opcode::AESENC256KL as u16, + AESENCLAST = super::Opcode::AESENCLAST as u16, + AESENCWIDE128KL = super::Opcode::AESENCWIDE128KL as u16, + AESENCWIDE256KL = super::Opcode::AESENCWIDE256KL as u16, + AESIMC = super::Opcode::AESIMC as u16, + AESKEYGENASSIST = super::Opcode::AESKEYGENASSIST as u16, + AND = super::Opcode::AND as u16, + ANDN = super::Opcode::ANDN as u16, + ANDNPD = super::Opcode::ANDNPD as u16, + ANDNPS = super::Opcode::ANDNPS as u16, + ANDPD = super::Opcode::ANDPD as u16, + ANDPS = super::Opcode::ANDPS as u16, + ARPL = super::Opcode::ARPL as u16, + BEXTR = super::Opcode::BEXTR as u16, + BLENDPD = super::Opcode::BLENDPD as u16, + BLENDPS = super::Opcode::BLENDPS as u16, + BLENDVPD = super::Opcode::BLENDVPD as u16, + BLENDVPS = super::Opcode::BLENDVPS as u16, + BLENDW = super::Opcode::BLENDW as u16, + BLSI = super::Opcode::BLSI as u16, + BLSMSK = super::Opcode::BLSMSK as u16, + BLSR = super::Opcode::BLSR as u16, + BNDCL = super::Opcode::BNDCL as u16, + BNDCN = super::Opcode::BNDCN as u16, + BNDCU = super::Opcode::BNDCU as u16, + BNDLDX = super::Opcode::BNDLDX as u16, + BNDMK = super::Opcode::BNDMK as u16, + BNDMOV = super::Opcode::BNDMOV as u16, + BNDSTX = super::Opcode::BNDSTX as u16, + BOUND = super::Opcode::BOUND as u16, + BSF = super::Opcode::BSF as u16, + BSR = super::Opcode::BSR as u16, + BSWAP = super::Opcode::BSWAP as u16, + BT = super::Opcode::BT as u16, + BTC = super::Opcode::BTC as u16, + BTR = super::Opcode::BTR as u16, + BTS = super::Opcode::BTS as u16, + BZHI = super::Opcode::BZHI as u16, + CALL = super::Opcode::CALL as u16, + CALLF = super::Opcode::CALLF as u16, + CBW = super::Opcode::CBW as u16, + CDQ = super::Opcode::CDQ as u16, + CDQE = super::Opcode::CDQE as u16, + CLAC = super::Opcode::CLAC as u16, + CLC = super::Opcode::CLC as u16, + CLD = super::Opcode::CLD as u16, + CLFLUSH = super::Opcode::CLFLUSH as u16, + CLFLUSHOPT = super::Opcode::CLFLUSHOPT as u16, + CLGI = super::Opcode::CLGI as u16, + CLI = super::Opcode::CLI as u16, + CLRSSBSY = super::Opcode::CLRSSBSY as u16, + CLTS = super::Opcode::CLTS as u16, + CLUI = super::Opcode::CLUI as u16, + CLWB = super::Opcode::CLWB as u16, + CLZERO = super::Opcode::CLZERO as u16, + CMC = super::Opcode::CMC as u16, + CMOVA = super::Opcode::CMOVA as u16, + CMOVB = super::Opcode::CMOVB as u16, + CMOVG = super::Opcode::CMOVG as u16, + CMOVGE = super::Opcode::CMOVGE as u16, + CMOVL = super::Opcode::CMOVL as u16, + CMOVLE = super::Opcode::CMOVLE as u16, + CMOVNA = super::Opcode::CMOVNA as u16, + CMOVNB = super::Opcode::CMOVNB as u16, + CMOVNO = super::Opcode::CMOVNO as u16, + CMOVNP = super::Opcode::CMOVNP as u16, + CMOVNS = super::Opcode::CMOVNS as u16, + CMOVNZ = super::Opcode::CMOVNZ as u16, + CMOVO = super::Opcode::CMOVO as u16, + CMOVP = super::Opcode::CMOVP as u16, + CMOVS = super::Opcode::CMOVS as u16, + CMOVZ = super::Opcode::CMOVZ as u16, + CMP = super::Opcode::CMP as u16, + CMPPD = super::Opcode::CMPPD as u16, + CMPPS = super::Opcode::CMPPS as u16, + CMPS = super::Opcode::CMPS as u16, + CMPSD = super::Opcode::CMPSD as u16, + CMPSS = super::Opcode::CMPSS as u16, + CMPXCHG = super::Opcode::CMPXCHG as u16, + CMPXCHG16B = super::Opcode::CMPXCHG16B as u16, + CMPXCHG8B = super::Opcode::CMPXCHG8B as u16, + COMISD = super::Opcode::COMISD as u16, + COMISS = super::Opcode::COMISS as u16, + CPUID = super::Opcode::CPUID as u16, + CQO = super::Opcode::CQO as u16, + CRC32 = super::Opcode::CRC32 as u16, + CVTDQ2PD = super::Opcode::CVTDQ2PD as u16, + CVTDQ2PS = super::Opcode::CVTDQ2PS as u16, + CVTPD2DQ = super::Opcode::CVTPD2DQ as u16, + CVTPD2PI = super::Opcode::CVTPD2PI as u16, + CVTPD2PS = super::Opcode::CVTPD2PS as u16, + CVTPI2PD = super::Opcode::CVTPI2PD as u16, + CVTPI2PS = super::Opcode::CVTPI2PS as u16, + CVTPS2DQ = super::Opcode::CVTPS2DQ as u16, + CVTPS2PD = super::Opcode::CVTPS2PD as u16, + CVTPS2PI = super::Opcode::CVTPS2PI as u16, + CVTSD2SI = super::Opcode::CVTSD2SI as u16, + CVTSD2SS = super::Opcode::CVTSD2SS as u16, + CVTSI2SD = super::Opcode::CVTSI2SD as u16, + CVTSI2SS = super::Opcode::CVTSI2SS as u16, + CVTSS2SD = super::Opcode::CVTSS2SD as u16, + CVTSS2SI = super::Opcode::CVTSS2SI as u16, + CVTTPD2DQ = super::Opcode::CVTTPD2DQ as u16, + CVTTPD2PI = super::Opcode::CVTTPD2PI as u16, + CVTTPS2DQ = super::Opcode::CVTTPS2DQ as u16, + CVTTPS2PI = super::Opcode::CVTTPS2PI as u16, + CVTTSD2SI = super::Opcode::CVTTSD2SI as u16, + CVTTSS2SI = super::Opcode::CVTTSS2SI as u16, + CWD = super::Opcode::CWD as u16, + CWDE = super::Opcode::CWDE as u16, + DAA = super::Opcode::DAA as u16, + DAS = super::Opcode::DAS as u16, + DEC = super::Opcode::DEC as u16, + DIV = super::Opcode::DIV as u16, + DIVPD = super::Opcode::DIVPD as u16, + DIVPS = super::Opcode::DIVPS as u16, + DIVSD = super::Opcode::DIVSD as u16, + DIVSS = super::Opcode::DIVSS as u16, + DPPD = super::Opcode::DPPD as u16, + DPPS = super::Opcode::DPPS as u16, + EMMS = super::Opcode::EMMS as u16, + ENCLS = super::Opcode::ENCLS as u16, + ENCLU = super::Opcode::ENCLU as u16, + ENCLV = super::Opcode::ENCLV as u16, + ENCODEKEY128 = super::Opcode::ENCODEKEY128 as u16, + ENCODEKEY256 = super::Opcode::ENCODEKEY256 as u16, + ENDBR32 = super::Opcode::ENDBR32 as u16, + ENDBR64 = super::Opcode::ENDBR64 as u16, + ENQCMD = super::Opcode::ENQCMD as u16, + ENQCMDS = super::Opcode::ENQCMDS as u16, + ENTER = super::Opcode::ENTER as u16, + EXTRACTPS = super::Opcode::EXTRACTPS as u16, + EXTRQ = super::Opcode::EXTRQ as u16, + F2XM1 = super::Opcode::F2XM1 as u16, + FABS = super::Opcode::FABS as u16, + FADD = super::Opcode::FADD as u16, + FADDP = super::Opcode::FADDP as u16, + FBLD = super::Opcode::FBLD as u16, + FBSTP = super::Opcode::FBSTP as u16, + FCHS = super::Opcode::FCHS as u16, + FCMOVB = super::Opcode::FCMOVB as u16, + FCMOVBE = super::Opcode::FCMOVBE as u16, + FCMOVE = super::Opcode::FCMOVE as u16, + FCMOVNB = super::Opcode::FCMOVNB as u16, + FCMOVNBE = super::Opcode::FCMOVNBE as u16, + FCMOVNE = super::Opcode::FCMOVNE as u16, + FCMOVNU = super::Opcode::FCMOVNU as u16, + FCMOVU = super::Opcode::FCMOVU as u16, + FCOM = super::Opcode::FCOM as u16, + FCOMI = super::Opcode::FCOMI as u16, + FCOMIP = super::Opcode::FCOMIP as u16, + FCOMP = super::Opcode::FCOMP as u16, + FCOMPP = super::Opcode::FCOMPP as u16, + FCOS = super::Opcode::FCOS as u16, + FDECSTP = super::Opcode::FDECSTP as u16, + FDISI8087_NOP = super::Opcode::FDISI8087_NOP as u16, + FDIV = super::Opcode::FDIV as u16, + FDIVP = super::Opcode::FDIVP as u16, + FDIVR = super::Opcode::FDIVR as u16, + FDIVRP = super::Opcode::FDIVRP as u16, + FEMMS = super::Opcode::FEMMS as u16, + FENI8087_NOP = super::Opcode::FENI8087_NOP as u16, + FFREE = super::Opcode::FFREE as u16, + FFREEP = super::Opcode::FFREEP as u16, + FIADD = super::Opcode::FIADD as u16, + FICOM = super::Opcode::FICOM as u16, + FICOMP = super::Opcode::FICOMP as u16, + FIDIV = super::Opcode::FIDIV as u16, + FIDIVR = super::Opcode::FIDIVR as u16, + FILD = super::Opcode::FILD as u16, + FIMUL = super::Opcode::FIMUL as u16, + FINCSTP = super::Opcode::FINCSTP as u16, + FIST = super::Opcode::FIST as u16, + FISTP = super::Opcode::FISTP as u16, + FISTTP = super::Opcode::FISTTP as u16, + FISUB = super::Opcode::FISUB as u16, + FISUBR = super::Opcode::FISUBR as u16, + FLD = super::Opcode::FLD as u16, + FLD1 = super::Opcode::FLD1 as u16, + FLDCW = super::Opcode::FLDCW as u16, + FLDENV = super::Opcode::FLDENV as u16, + FLDL2E = super::Opcode::FLDL2E as u16, + FLDL2T = super::Opcode::FLDL2T as u16, + FLDLG2 = super::Opcode::FLDLG2 as u16, + FLDLN2 = super::Opcode::FLDLN2 as u16, + FLDPI = super::Opcode::FLDPI as u16, + FLDZ = super::Opcode::FLDZ as u16, + FMUL = super::Opcode::FMUL as u16, + FMULP = super::Opcode::FMULP as u16, + FNCLEX = super::Opcode::FNCLEX as u16, + FNINIT = super::Opcode::FNINIT as u16, + FNOP = super::Opcode::FNOP as u16, + FNSAVE = super::Opcode::FNSAVE as u16, + FNSTCW = super::Opcode::FNSTCW as u16, + FNSTENV = super::Opcode::FNSTENV as u16, + FNSTOR = super::Opcode::FNSTOR as u16, + FNSTSW = super::Opcode::FNSTSW as u16, + FPATAN = super::Opcode::FPATAN as u16, + FPREM = super::Opcode::FPREM as u16, + FPREM1 = super::Opcode::FPREM1 as u16, + FPTAN = super::Opcode::FPTAN as u16, + FRNDINT = super::Opcode::FRNDINT as u16, + FRSTOR = super::Opcode::FRSTOR as u16, + FSCALE = super::Opcode::FSCALE as u16, + FSETPM287_NOP = super::Opcode::FSETPM287_NOP as u16, + FSIN = super::Opcode::FSIN as u16, + FSINCOS = super::Opcode::FSINCOS as u16, + FSQRT = super::Opcode::FSQRT as u16, + FST = super::Opcode::FST as u16, + FSTP = super::Opcode::FSTP as u16, + FSTPNCE = super::Opcode::FSTPNCE as u16, + FSUB = super::Opcode::FSUB as u16, + FSUBP = super::Opcode::FSUBP as u16, + FSUBR = super::Opcode::FSUBR as u16, + FSUBRP = super::Opcode::FSUBRP as u16, + FTST = super::Opcode::FTST as u16, + FUCOM = super::Opcode::FUCOM as u16, + FUCOMI = super::Opcode::FUCOMI as u16, + FUCOMIP = super::Opcode::FUCOMIP as u16, + FUCOMP = super::Opcode::FUCOMP as u16, + FUCOMPP = super::Opcode::FUCOMPP as u16, + FXAM = super::Opcode::FXAM as u16, + FXCH = super::Opcode::FXCH as u16, + FXRSTOR = super::Opcode::FXRSTOR as u16, + FXSAVE = super::Opcode::FXSAVE as u16, + FXTRACT = super::Opcode::FXTRACT as u16, + FYL2X = super::Opcode::FYL2X as u16, + FYL2XP1 = super::Opcode::FYL2XP1 as u16, + GETSEC = super::Opcode::GETSEC as u16, + GF2P8AFFINEINVQB = super::Opcode::GF2P8AFFINEINVQB as u16, + GF2P8AFFINEQB = super::Opcode::GF2P8AFFINEQB as u16, + GF2P8MULB = super::Opcode::GF2P8MULB as u16, + HADDPD = super::Opcode::HADDPD as u16, + HADDPS = super::Opcode::HADDPS as u16, + HLT = super::Opcode::HLT as u16, + HRESET = super::Opcode::HRESET as u16, + HSUBPD = super::Opcode::HSUBPD as u16, + HSUBPS = super::Opcode::HSUBPS as u16, + IDIV = super::Opcode::IDIV as u16, + IMUL = super::Opcode::IMUL as u16, + IN = super::Opcode::IN as u16, + INC = super::Opcode::INC as u16, + INCSSP = super::Opcode::INCSSP as u16, + INS = super::Opcode::INS as u16, + INSERTPS = super::Opcode::INSERTPS as u16, + INSERTQ = super::Opcode::INSERTQ as u16, + INT = super::Opcode::INT as u16, + INTO = super::Opcode::INTO as u16, + Invalid = super::Opcode::Invalid as u16, + INVD = super::Opcode::INVD as u16, + INVEPT = super::Opcode::INVEPT as u16, + INVLPG = super::Opcode::INVLPG as u16, + INVLPGA = super::Opcode::INVLPGA as u16, + INVLPGB = super::Opcode::INVLPGB as u16, + INVPCID = super::Opcode::INVPCID as u16, + INVVPID = super::Opcode::INVVPID as u16, + IRET = super::Opcode::IRET as u16, + IRETD = super::Opcode::IRETD as u16, + IRETQ = super::Opcode::IRETQ as u16, + JA = super::Opcode::JA as u16, + JB = super::Opcode::JB as u16, + JECXZ = super::Opcode::JECXZ as u16, + JG = super::Opcode::JG as u16, + JGE = super::Opcode::JGE as u16, + JL = super::Opcode::JL as u16, + JLE = super::Opcode::JLE as u16, + JMP = super::Opcode::JMP as u16, + JMPE = super::Opcode::JMPE as u16, + JMPF = super::Opcode::JMPF as u16, + JNA = super::Opcode::JNA as u16, + JNB = super::Opcode::JNB as u16, + JNO = super::Opcode::JNO as u16, + JNP = super::Opcode::JNP as u16, + JNS = super::Opcode::JNS as u16, + JNZ = super::Opcode::JNZ as u16, + JO = super::Opcode::JO as u16, + JP = super::Opcode::JP as u16, + JS = super::Opcode::JS as u16, + JZ = super::Opcode::JZ as u16, + KADDB = super::Opcode::KADDB as u16, + KADDD = super::Opcode::KADDD as u16, + KADDQ = super::Opcode::KADDQ as u16, + KADDW = super::Opcode::KADDW as u16, + KANDB = super::Opcode::KANDB as u16, + KANDD = super::Opcode::KANDD as u16, + KANDNB = super::Opcode::KANDNB as u16, + KANDND = super::Opcode::KANDND as u16, + KANDNQ = super::Opcode::KANDNQ as u16, + KANDNW = super::Opcode::KANDNW as u16, + KANDQ = super::Opcode::KANDQ as u16, + KANDW = super::Opcode::KANDW as u16, + KMOVB = super::Opcode::KMOVB as u16, + KMOVD = super::Opcode::KMOVD as u16, + KMOVQ = super::Opcode::KMOVQ as u16, + KMOVW = super::Opcode::KMOVW as u16, + KNOTB = super::Opcode::KNOTB as u16, + KNOTD = super::Opcode::KNOTD as u16, + KNOTQ = super::Opcode::KNOTQ as u16, + KNOTW = super::Opcode::KNOTW as u16, + KORB = super::Opcode::KORB as u16, + KORD = super::Opcode::KORD as u16, + KORQ = super::Opcode::KORQ as u16, + KORTESTB = super::Opcode::KORTESTB as u16, + KORTESTD = super::Opcode::KORTESTD as u16, + KORTESTQ = super::Opcode::KORTESTQ as u16, + KORTESTW = super::Opcode::KORTESTW as u16, + KORW = super::Opcode::KORW as u16, + KSHIFTLB = super::Opcode::KSHIFTLB as u16, + KSHIFTLD = super::Opcode::KSHIFTLD as u16, + KSHIFTLQ = super::Opcode::KSHIFTLQ as u16, + KSHIFTLW = super::Opcode::KSHIFTLW as u16, + KSHIFTRB = super::Opcode::KSHIFTRB as u16, + KSHIFTRD = super::Opcode::KSHIFTRD as u16, + KSHIFTRQ = super::Opcode::KSHIFTRQ as u16, + KSHIFTRW = super::Opcode::KSHIFTRW as u16, + KTESTB = super::Opcode::KTESTB as u16, + KTESTD = super::Opcode::KTESTD as u16, + KTESTQ = super::Opcode::KTESTQ as u16, + KTESTW = super::Opcode::KTESTW as u16, + KUNPCKBW = super::Opcode::KUNPCKBW as u16, + KUNPCKDQ = super::Opcode::KUNPCKDQ as u16, + KUNPCKWD = super::Opcode::KUNPCKWD as u16, + KXNORB = super::Opcode::KXNORB as u16, + KXNORD = super::Opcode::KXNORD as u16, + KXNORQ = super::Opcode::KXNORQ as u16, + KXNORW = super::Opcode::KXNORW as u16, + KXORB = super::Opcode::KXORB as u16, + KXORD = super::Opcode::KXORD as u16, + KXORQ = super::Opcode::KXORQ as u16, + KXORW = super::Opcode::KXORW as u16, + LAHF = super::Opcode::LAHF as u16, + LAR = super::Opcode::LAR as u16, + LDDQU = super::Opcode::LDDQU as u16, + LDMXCSR = super::Opcode::LDMXCSR as u16, + LDS = super::Opcode::LDS as u16, + LEA = super::Opcode::LEA as u16, + LEAVE = super::Opcode::LEAVE as u16, + LES = super::Opcode::LES as u16, + LFENCE = super::Opcode::LFENCE as u16, + LFS = super::Opcode::LFS as u16, + LGDT = super::Opcode::LGDT as u16, + LGS = super::Opcode::LGS as u16, + LIDT = super::Opcode::LIDT as u16, + LLDT = super::Opcode::LLDT as u16, + LMSW = super::Opcode::LMSW as u16, + LOADIWKEY = super::Opcode::LOADIWKEY as u16, + LODS = super::Opcode::LODS as u16, + LOOP = super::Opcode::LOOP as u16, + LOOPNZ = super::Opcode::LOOPNZ as u16, + LOOPZ = super::Opcode::LOOPZ as u16, + LSL = super::Opcode::LSL as u16, + LSS = super::Opcode::LSS as u16, + LTR = super::Opcode::LTR as u16, + LZCNT = super::Opcode::LZCNT as u16, + MASKMOVDQU = super::Opcode::MASKMOVDQU as u16, + MASKMOVQ = super::Opcode::MASKMOVQ as u16, + MAXPD = super::Opcode::MAXPD as u16, + MAXPS = super::Opcode::MAXPS as u16, + MAXSD = super::Opcode::MAXSD as u16, + MAXSS = super::Opcode::MAXSS as u16, + MFENCE = super::Opcode::MFENCE as u16, + MINPD = super::Opcode::MINPD as u16, + MINPS = super::Opcode::MINPS as u16, + MINSD = super::Opcode::MINSD as u16, + MINSS = super::Opcode::MINSS as u16, + MONITOR = super::Opcode::MONITOR as u16, + MONITORX = super::Opcode::MONITORX as u16, + MOV = super::Opcode::MOV as u16, + MOVAPD = super::Opcode::MOVAPD as u16, + MOVAPS = super::Opcode::MOVAPS as u16, + MOVBE = super::Opcode::MOVBE as u16, + MOVD = super::Opcode::MOVD as u16, + MOVDDUP = super::Opcode::MOVDDUP as u16, + MOVDIR64B = super::Opcode::MOVDIR64B as u16, + MOVDIRI = super::Opcode::MOVDIRI as u16, + MOVDQ2Q = super::Opcode::MOVDQ2Q as u16, + MOVDQA = super::Opcode::MOVDQA as u16, + MOVDQU = super::Opcode::MOVDQU as u16, + MOVHLPS = super::Opcode::MOVHLPS as u16, + MOVHPD = super::Opcode::MOVHPD as u16, + MOVHPS = super::Opcode::MOVHPS as u16, + MOVLHPS = super::Opcode::MOVLHPS as u16, + MOVLPD = super::Opcode::MOVLPD as u16, + MOVLPS = super::Opcode::MOVLPS as u16, + MOVMSKPD = super::Opcode::MOVMSKPD as u16, + MOVMSKPS = super::Opcode::MOVMSKPS as u16, + MOVNTDQ = super::Opcode::MOVNTDQ as u16, + MOVNTDQA = super::Opcode::MOVNTDQA as u16, + MOVNTI = super::Opcode::MOVNTI as u16, + MOVNTPD = super::Opcode::MOVNTPD as u16, + MOVNTPS = super::Opcode::MOVNTPS as u16, + MOVNTQ = super::Opcode::MOVNTQ as u16, + MOVNTSD = super::Opcode::MOVNTSD as u16, + MOVNTSS = super::Opcode::MOVNTSS as u16, + MOVQ = super::Opcode::MOVQ as u16, + MOVQ2DQ = super::Opcode::MOVQ2DQ as u16, + MOVS = super::Opcode::MOVS as u16, + MOVSD = super::Opcode::MOVSD as u16, + MOVSHDUP = super::Opcode::MOVSHDUP as u16, + MOVSLDUP = super::Opcode::MOVSLDUP as u16, + MOVSS = super::Opcode::MOVSS as u16, + MOVSX = super::Opcode::MOVSX as u16, + MOVSXD = super::Opcode::MOVSXD as u16, + MOVUPD = super::Opcode::MOVUPD as u16, + MOVUPS = super::Opcode::MOVUPS as u16, + MOVZX = super::Opcode::MOVZX as u16, + MPSADBW = super::Opcode::MPSADBW as u16, + MUL = super::Opcode::MUL as u16, + MULPD = super::Opcode::MULPD as u16, + MULPS = super::Opcode::MULPS as u16, + MULSD = super::Opcode::MULSD as u16, + MULSS = super::Opcode::MULSS as u16, + MULX = super::Opcode::MULX as u16, + MWAIT = super::Opcode::MWAIT as u16, + MWAITX = super::Opcode::MWAITX as u16, + NEG = super::Opcode::NEG as u16, + NOP = super::Opcode::NOP as u16, + NOT = super::Opcode::NOT as u16, + OR = super::Opcode::OR as u16, + ORPD = super::Opcode::ORPD as u16, + ORPS = super::Opcode::ORPS as u16, + OUT = super::Opcode::OUT as u16, + OUTS = super::Opcode::OUTS as u16, + PABSB = super::Opcode::PABSB as u16, + PABSD = super::Opcode::PABSD as u16, + PABSW = super::Opcode::PABSW as u16, + PACKSSDW = super::Opcode::PACKSSDW as u16, + PACKSSWB = super::Opcode::PACKSSWB as u16, + PACKUSDW = super::Opcode::PACKUSDW as u16, + PACKUSWB = super::Opcode::PACKUSWB as u16, + PADDB = super::Opcode::PADDB as u16, + PADDD = super::Opcode::PADDD as u16, + PADDQ = super::Opcode::PADDQ as u16, + PADDSB = super::Opcode::PADDSB as u16, + PADDSW = super::Opcode::PADDSW as u16, + PADDUSB = super::Opcode::PADDUSB as u16, + PADDUSW = super::Opcode::PADDUSW as u16, + PADDW = super::Opcode::PADDW as u16, + PALIGNR = super::Opcode::PALIGNR as u16, + PAND = super::Opcode::PAND as u16, + PANDN = super::Opcode::PANDN as u16, + PAVGB = super::Opcode::PAVGB as u16, + PAVGUSB = super::Opcode::PAVGUSB as u16, + PAVGW = super::Opcode::PAVGW as u16, + PBLENDVB = super::Opcode::PBLENDVB as u16, + PBLENDW = super::Opcode::PBLENDW as u16, + PCLMULQDQ = super::Opcode::PCLMULQDQ as u16, + PCMPEQB = super::Opcode::PCMPEQB as u16, + PCMPEQD = super::Opcode::PCMPEQD as u16, + PCMPEQQ = super::Opcode::PCMPEQQ as u16, + PCMPEQW = super::Opcode::PCMPEQW as u16, + PCMPESTRI = super::Opcode::PCMPESTRI as u16, + PCMPESTRM = super::Opcode::PCMPESTRM as u16, + PCMPGTB = super::Opcode::PCMPGTB as u16, + PCMPGTD = super::Opcode::PCMPGTD as u16, + PCMPGTQ = super::Opcode::PCMPGTQ as u16, + PCMPGTW = super::Opcode::PCMPGTW as u16, + PCMPISTRI = super::Opcode::PCMPISTRI as u16, + PCMPISTRM = super::Opcode::PCMPISTRM as u16, + PCONFIG = super::Opcode::PCONFIG as u16, + PDEP = super::Opcode::PDEP as u16, + PEXT = super::Opcode::PEXT as u16, + PEXTRB = super::Opcode::PEXTRB as u16, + PEXTRD = super::Opcode::PEXTRD as u16, + PEXTRQ = super::Opcode::PEXTRQ as u16, + PEXTRW = super::Opcode::PEXTRW as u16, + PF2ID = super::Opcode::PF2ID as u16, + PF2IW = super::Opcode::PF2IW as u16, + PFACC = super::Opcode::PFACC as u16, + PFADD = super::Opcode::PFADD as u16, + PFCMPEQ = super::Opcode::PFCMPEQ as u16, + PFCMPGE = super::Opcode::PFCMPGE as u16, + PFCMPGT = super::Opcode::PFCMPGT as u16, + PFMAX = super::Opcode::PFMAX as u16, + PFMIN = super::Opcode::PFMIN as u16, + PFMUL = super::Opcode::PFMUL as u16, + PFMULHRW = super::Opcode::PFMULHRW as u16, + PFNACC = super::Opcode::PFNACC as u16, + PFPNACC = super::Opcode::PFPNACC as u16, + PFRCP = super::Opcode::PFRCP as u16, + PFRCPIT1 = super::Opcode::PFRCPIT1 as u16, + PFRCPIT2 = super::Opcode::PFRCPIT2 as u16, + PFRSQIT1 = super::Opcode::PFRSQIT1 as u16, + PFRSQRT = super::Opcode::PFRSQRT as u16, + PFSUB = super::Opcode::PFSUB as u16, + PFSUBR = super::Opcode::PFSUBR as u16, + PHADDD = super::Opcode::PHADDD as u16, + PHADDSW = super::Opcode::PHADDSW as u16, + PHADDW = super::Opcode::PHADDW as u16, + PHMINPOSUW = super::Opcode::PHMINPOSUW as u16, + PHSUBD = super::Opcode::PHSUBD as u16, + PHSUBSW = super::Opcode::PHSUBSW as u16, + PHSUBW = super::Opcode::PHSUBW as u16, + PI2FD = super::Opcode::PI2FD as u16, + PI2FW = super::Opcode::PI2FW as u16, + PINSRB = super::Opcode::PINSRB as u16, + PINSRD = super::Opcode::PINSRD as u16, + PINSRQ = super::Opcode::PINSRQ as u16, + PINSRW = super::Opcode::PINSRW as u16, + PMADDUBSW = super::Opcode::PMADDUBSW as u16, + PMADDWD = super::Opcode::PMADDWD as u16, + PMAXSB = super::Opcode::PMAXSB as u16, + PMAXSD = super::Opcode::PMAXSD as u16, + PMAXSW = super::Opcode::PMAXSW as u16, + PMAXUB = super::Opcode::PMAXUB as u16, + PMAXUD = super::Opcode::PMAXUD as u16, + PMAXUW = super::Opcode::PMAXUW as u16, + PMINSB = super::Opcode::PMINSB as u16, + PMINSD = super::Opcode::PMINSD as u16, + PMINSW = super::Opcode::PMINSW as u16, + PMINUB = super::Opcode::PMINUB as u16, + PMINUD = super::Opcode::PMINUD as u16, + PMINUW = super::Opcode::PMINUW as u16, + PMOVMSKB = super::Opcode::PMOVMSKB as u16, + PMOVSXBD = super::Opcode::PMOVSXBD as u16, + PMOVSXBQ = super::Opcode::PMOVSXBQ as u16, + PMOVSXBW = super::Opcode::PMOVSXBW as u16, + PMOVSXDQ = super::Opcode::PMOVSXDQ as u16, + PMOVSXWD = super::Opcode::PMOVSXWD as u16, + PMOVSXWQ = super::Opcode::PMOVSXWQ as u16, + PMOVZXBD = super::Opcode::PMOVZXBD as u16, + PMOVZXBQ = super::Opcode::PMOVZXBQ as u16, + PMOVZXBW = super::Opcode::PMOVZXBW as u16, + PMOVZXDQ = super::Opcode::PMOVZXDQ as u16, + PMOVZXWD = super::Opcode::PMOVZXWD as u16, + PMOVZXWQ = super::Opcode::PMOVZXWQ as u16, + PMULDQ = super::Opcode::PMULDQ as u16, + PMULHRSW = super::Opcode::PMULHRSW as u16, + PMULHRW = super::Opcode::PMULHRW as u16, + PMULHUW = super::Opcode::PMULHUW as u16, + PMULHW = super::Opcode::PMULHW as u16, + PMULLD = super::Opcode::PMULLD as u16, + PMULLW = super::Opcode::PMULLW as u16, + PMULUDQ = super::Opcode::PMULUDQ as u16, + POP = super::Opcode::POP as u16, + POPA = super::Opcode::POPA as u16, + POPCNT = super::Opcode::POPCNT as u16, + POPF = super::Opcode::POPF as u16, + POR = super::Opcode::POR as u16, + PREFETCH0 = super::Opcode::PREFETCH0 as u16, + PREFETCH1 = super::Opcode::PREFETCH1 as u16, + PREFETCH2 = super::Opcode::PREFETCH2 as u16, + PREFETCHNTA = super::Opcode::PREFETCHNTA as u16, + PREFETCHW = super::Opcode::PREFETCHW as u16, + PSADBW = super::Opcode::PSADBW as u16, + PSHUFB = super::Opcode::PSHUFB as u16, + PSHUFD = super::Opcode::PSHUFD as u16, + PSHUFHW = super::Opcode::PSHUFHW as u16, + PSHUFLW = super::Opcode::PSHUFLW as u16, + PSHUFW = super::Opcode::PSHUFW as u16, + PSIGNB = super::Opcode::PSIGNB as u16, + PSIGND = super::Opcode::PSIGND as u16, + PSIGNW = super::Opcode::PSIGNW as u16, + PSLLD = super::Opcode::PSLLD as u16, + PSLLDQ = super::Opcode::PSLLDQ as u16, + PSLLQ = super::Opcode::PSLLQ as u16, + PSLLW = super::Opcode::PSLLW as u16, + PSMASH = super::Opcode::PSMASH as u16, + PSRAD = super::Opcode::PSRAD as u16, + PSRAW = super::Opcode::PSRAW as u16, + PSRLD = super::Opcode::PSRLD as u16, + PSRLDQ = super::Opcode::PSRLDQ as u16, + PSRLQ = super::Opcode::PSRLQ as u16, + PSRLW = super::Opcode::PSRLW as u16, + PSUBB = super::Opcode::PSUBB as u16, + PSUBD = super::Opcode::PSUBD as u16, + PSUBQ = super::Opcode::PSUBQ as u16, + PSUBSB = super::Opcode::PSUBSB as u16, + PSUBSW = super::Opcode::PSUBSW as u16, + PSUBUSB = super::Opcode::PSUBUSB as u16, + PSUBUSW = super::Opcode::PSUBUSW as u16, + PSUBW = super::Opcode::PSUBW as u16, + PSWAPD = super::Opcode::PSWAPD as u16, + PTEST = super::Opcode::PTEST as u16, + PTWRITE = super::Opcode::PTWRITE as u16, + PUNPCKHBW = super::Opcode::PUNPCKHBW as u16, + PUNPCKHDQ = super::Opcode::PUNPCKHDQ as u16, + PUNPCKHQDQ = super::Opcode::PUNPCKHQDQ as u16, + PUNPCKHWD = super::Opcode::PUNPCKHWD as u16, + PUNPCKLBW = super::Opcode::PUNPCKLBW as u16, + PUNPCKLDQ = super::Opcode::PUNPCKLDQ as u16, + PUNPCKLQDQ = super::Opcode::PUNPCKLQDQ as u16, + PUNPCKLWD = super::Opcode::PUNPCKLWD as u16, + PUSH = super::Opcode::PUSH as u16, + PUSHA = super::Opcode::PUSHA as u16, + PUSHF = super::Opcode::PUSHF as u16, + PVALIDATE = super::Opcode::PVALIDATE as u16, + PXOR = super::Opcode::PXOR as u16, + RCL = super::Opcode::RCL as u16, + RCPPS = super::Opcode::RCPPS as u16, + RCPSS = super::Opcode::RCPSS as u16, + RCR = super::Opcode::RCR as u16, + RDFSBASE = super::Opcode::RDFSBASE as u16, + RDGSBASE = super::Opcode::RDGSBASE as u16, + RDMSR = super::Opcode::RDMSR as u16, + RDPID = super::Opcode::RDPID as u16, + RDPKRU = super::Opcode::RDPKRU as u16, + RDPMC = super::Opcode::RDPMC as u16, + RDPRU = super::Opcode::RDPRU as u16, + RDRAND = super::Opcode::RDRAND as u16, + RDSEED = super::Opcode::RDSEED as u16, + RDTSC = super::Opcode::RDTSC as u16, + RDTSCP = super::Opcode::RDTSCP as u16, + RETF = super::Opcode::RETF as u16, + RETURN = super::Opcode::RETURN as u16, + RMPADJUST = super::Opcode::RMPADJUST as u16, + RMPUPDATE = super::Opcode::RMPUPDATE as u16, + ROL = super::Opcode::ROL as u16, + ROR = super::Opcode::ROR as u16, + RORX = super::Opcode::RORX as u16, + ROUNDPD = super::Opcode::ROUNDPD as u16, + ROUNDPS = super::Opcode::ROUNDPS as u16, + ROUNDSD = super::Opcode::ROUNDSD as u16, + ROUNDSS = super::Opcode::ROUNDSS as u16, + RSM = super::Opcode::RSM as u16, + RSQRTPS = super::Opcode::RSQRTPS as u16, + RSQRTSS = super::Opcode::RSQRTSS as u16, + RSTORSSP = super::Opcode::RSTORSSP as u16, + SAHF = super::Opcode::SAHF as u16, + SAL = super::Opcode::SAL as u16, + SALC = super::Opcode::SALC as u16, + SAR = super::Opcode::SAR as u16, + SARX = super::Opcode::SARX as u16, + SAVEPREVSSP = super::Opcode::SAVEPREVSSP as u16, + SBB = super::Opcode::SBB as u16, + SCAS = super::Opcode::SCAS as u16, + SEAMCALL = super::Opcode::SEAMCALL as u16, + SEAMOPS = super::Opcode::SEAMOPS as u16, + SEAMRET = super::Opcode::SEAMRET as u16, + SENDUIPI = super::Opcode::SENDUIPI as u16, + SETA = super::Opcode::SETA as u16, + SETAE = super::Opcode::SETAE as u16, + SETB = super::Opcode::SETB as u16, + SETBE = super::Opcode::SETBE as u16, + SETG = super::Opcode::SETG as u16, + SETGE = super::Opcode::SETGE as u16, + SETL = super::Opcode::SETL as u16, + SETLE = super::Opcode::SETLE as u16, + SETNO = super::Opcode::SETNO as u16, + SETNP = super::Opcode::SETNP as u16, + SETNS = super::Opcode::SETNS as u16, + SETNZ = super::Opcode::SETNZ as u16, + SETO = super::Opcode::SETO as u16, + SETP = super::Opcode::SETP as u16, + SETS = super::Opcode::SETS as u16, + SETSSBSY = super::Opcode::SETSSBSY as u16, + SETZ = super::Opcode::SETZ as u16, + SFENCE = super::Opcode::SFENCE as u16, + SGDT = super::Opcode::SGDT as u16, + SHA1MSG1 = super::Opcode::SHA1MSG1 as u16, + SHA1MSG2 = super::Opcode::SHA1MSG2 as u16, + SHA1NEXTE = super::Opcode::SHA1NEXTE as u16, + SHA1RNDS4 = super::Opcode::SHA1RNDS4 as u16, + SHA256MSG1 = super::Opcode::SHA256MSG1 as u16, + SHA256MSG2 = super::Opcode::SHA256MSG2 as u16, + SHA256RNDS2 = super::Opcode::SHA256RNDS2 as u16, + SHL = super::Opcode::SHL as u16, + SHLD = super::Opcode::SHLD as u16, + SHLX = super::Opcode::SHLX as u16, + SHR = super::Opcode::SHR as u16, + SHRD = super::Opcode::SHRD as u16, + SHRX = super::Opcode::SHRX as u16, + SHUFPD = super::Opcode::SHUFPD as u16, + SHUFPS = super::Opcode::SHUFPS as u16, + SIDT = super::Opcode::SIDT as u16, + SKINIT = super::Opcode::SKINIT as u16, + SLDT = super::Opcode::SLDT as u16, + SLHD = super::Opcode::SLHD as u16, + SMSW = super::Opcode::SMSW as u16, + SQRTPD = super::Opcode::SQRTPD as u16, + SQRTPS = super::Opcode::SQRTPS as u16, + SQRTSD = super::Opcode::SQRTSD as u16, + SQRTSS = super::Opcode::SQRTSS as u16, + STAC = super::Opcode::STAC as u16, + STC = super::Opcode::STC as u16, + STD = super::Opcode::STD as u16, + STGI = super::Opcode::STGI as u16, + STI = super::Opcode::STI as u16, + STMXCSR = super::Opcode::STMXCSR as u16, + STOS = super::Opcode::STOS as u16, + STR = super::Opcode::STR as u16, + STUI = super::Opcode::STUI as u16, + SUB = super::Opcode::SUB as u16, + SUBPD = super::Opcode::SUBPD as u16, + SUBPS = super::Opcode::SUBPS as u16, + SUBSD = super::Opcode::SUBSD as u16, + SUBSS = super::Opcode::SUBSS as u16, + SWAPGS = super::Opcode::SWAPGS as u16, + SYSCALL = super::Opcode::SYSCALL as u16, + SYSENTER = super::Opcode::SYSENTER as u16, + SYSEXIT = super::Opcode::SYSEXIT as u16, + SYSRET = super::Opcode::SYSRET as u16, + TDCALL = super::Opcode::TDCALL as u16, + TEST = super::Opcode::TEST as u16, + TESTUI = super::Opcode::TESTUI as u16, + TLBSYNC = super::Opcode::TLBSYNC as u16, + TPAUSE = super::Opcode::TPAUSE as u16, + TZCNT = super::Opcode::TZCNT as u16, + UCOMISD = super::Opcode::UCOMISD as u16, + UCOMISS = super::Opcode::UCOMISS as u16, + UD0 = super::Opcode::UD0 as u16, + UD1 = super::Opcode::UD1 as u16, + UD2 = super::Opcode::UD2 as u16, + UIRET = super::Opcode::UIRET as u16, + UMONITOR = super::Opcode::UMONITOR as u16, + UMWAIT = super::Opcode::UMWAIT as u16, + UNPCKHPD = super::Opcode::UNPCKHPD as u16, + UNPCKHPS = super::Opcode::UNPCKHPS as u16, + UNPCKLPD = super::Opcode::UNPCKLPD as u16, + UNPCKLPS = super::Opcode::UNPCKLPS as u16, + V4FMADDPS = super::Opcode::V4FMADDPS as u16, + V4FMADDSS = super::Opcode::V4FMADDSS as u16, + V4FNMADDPS = super::Opcode::V4FNMADDPS as u16, + V4FNMADDSS = super::Opcode::V4FNMADDSS as u16, + VADDPD = super::Opcode::VADDPD as u16, + VADDPS = super::Opcode::VADDPS as u16, + VADDSD = super::Opcode::VADDSD as u16, + VADDSS = super::Opcode::VADDSS as u16, + VADDSUBPD = super::Opcode::VADDSUBPD as u16, + VADDSUBPS = super::Opcode::VADDSUBPS as u16, + VAESDEC = super::Opcode::VAESDEC as u16, + VAESDECLAST = super::Opcode::VAESDECLAST as u16, + VAESENC = super::Opcode::VAESENC as u16, + VAESENCLAST = super::Opcode::VAESENCLAST as u16, + VAESIMC = super::Opcode::VAESIMC as u16, + VAESKEYGENASSIST = super::Opcode::VAESKEYGENASSIST as u16, + VALIGND = super::Opcode::VALIGND as u16, + VALIGNQ = super::Opcode::VALIGNQ as u16, + VANDNPD = super::Opcode::VANDNPD as u16, + VANDNPS = super::Opcode::VANDNPS as u16, + VANDPD = super::Opcode::VANDPD as u16, + VANDPS = super::Opcode::VANDPS as u16, + VBLENDMPD = super::Opcode::VBLENDMPD as u16, + VBLENDMPS = super::Opcode::VBLENDMPS as u16, + VBLENDPD = super::Opcode::VBLENDPD as u16, + VBLENDPS = super::Opcode::VBLENDPS as u16, + VBLENDVPD = super::Opcode::VBLENDVPD as u16, + VBLENDVPS = super::Opcode::VBLENDVPS as u16, + VBROADCASTF128 = super::Opcode::VBROADCASTF128 as u16, + VBROADCASTF32X2 = super::Opcode::VBROADCASTF32X2 as u16, + VBROADCASTF32X4 = super::Opcode::VBROADCASTF32X4 as u16, + VBROADCASTF32X8 = super::Opcode::VBROADCASTF32X8 as u16, + VBROADCASTF64X2 = super::Opcode::VBROADCASTF64X2 as u16, + VBROADCASTF64X4 = super::Opcode::VBROADCASTF64X4 as u16, + VBROADCASTI128 = super::Opcode::VBROADCASTI128 as u16, + VBROADCASTI32X2 = super::Opcode::VBROADCASTI32X2 as u16, + VBROADCASTI32X4 = super::Opcode::VBROADCASTI32X4 as u16, + VBROADCASTI32X8 = super::Opcode::VBROADCASTI32X8 as u16, + VBROADCASTI64X2 = super::Opcode::VBROADCASTI64X2 as u16, + VBROADCASTI64X4 = super::Opcode::VBROADCASTI64X4 as u16, + VBROADCASTSD = super::Opcode::VBROADCASTSD as u16, + VBROADCASTSS = super::Opcode::VBROADCASTSS as u16, + VCMPPD = super::Opcode::VCMPPD as u16, + VCMPPS = super::Opcode::VCMPPS as u16, + VCMPSD = super::Opcode::VCMPSD as u16, + VCMPSS = super::Opcode::VCMPSS as u16, + VCOMISD = super::Opcode::VCOMISD as u16, + VCOMISS = super::Opcode::VCOMISS as u16, + VCOMPRESSD = super::Opcode::VCOMPRESSD as u16, + VCOMPRESSPD = super::Opcode::VCOMPRESSPD as u16, + VCOMPRESSPS = super::Opcode::VCOMPRESSPS as u16, + VCOMPRESSQ = super::Opcode::VCOMPRESSQ as u16, + VCVTDQ2PD = super::Opcode::VCVTDQ2PD as u16, + VCVTDQ2PS = super::Opcode::VCVTDQ2PS as u16, + VCVTNE2PS2BF16 = super::Opcode::VCVTNE2PS2BF16 as u16, + VCVTNEPS2BF16 = super::Opcode::VCVTNEPS2BF16 as u16, + VCVTPD2DQ = super::Opcode::VCVTPD2DQ as u16, + VCVTPD2PS = super::Opcode::VCVTPD2PS as u16, + VCVTPD2QQ = super::Opcode::VCVTPD2QQ as u16, + VCVTPD2UDQ = super::Opcode::VCVTPD2UDQ as u16, + VCVTPD2UQQ = super::Opcode::VCVTPD2UQQ as u16, + VCVTPH2PS = super::Opcode::VCVTPH2PS as u16, + VCVTPS2DQ = super::Opcode::VCVTPS2DQ as u16, + VCVTPS2PD = super::Opcode::VCVTPS2PD as u16, + VCVTPS2PH = super::Opcode::VCVTPS2PH as u16, + VCVTPS2QQ = super::Opcode::VCVTPS2QQ as u16, + VCVTPS2UDQ = super::Opcode::VCVTPS2UDQ as u16, + VCVTPS2UQQ = super::Opcode::VCVTPS2UQQ as u16, + VCVTQQ2PD = super::Opcode::VCVTQQ2PD as u16, + VCVTQQ2PS = super::Opcode::VCVTQQ2PS as u16, + VCVTSD2SI = super::Opcode::VCVTSD2SI as u16, + VCVTSD2SS = super::Opcode::VCVTSD2SS as u16, + VCVTSD2USI = super::Opcode::VCVTSD2USI as u16, + VCVTSI2SD = super::Opcode::VCVTSI2SD as u16, + VCVTSI2SS = super::Opcode::VCVTSI2SS as u16, + VCVTSS2SD = super::Opcode::VCVTSS2SD as u16, + VCVTSS2SI = super::Opcode::VCVTSS2SI as u16, + VCVTSS2USI = super::Opcode::VCVTSS2USI as u16, + VCVTTPD2DQ = super::Opcode::VCVTTPD2DQ as u16, + VCVTTPD2QQ = super::Opcode::VCVTTPD2QQ as u16, + VCVTTPD2UDQ = super::Opcode::VCVTTPD2UDQ as u16, + VCVTTPD2UQQ = super::Opcode::VCVTTPD2UQQ as u16, + VCVTTPS2DQ = super::Opcode::VCVTTPS2DQ as u16, + VCVTTPS2QQ = super::Opcode::VCVTTPS2QQ as u16, + VCVTTPS2UDQ = super::Opcode::VCVTTPS2UDQ as u16, + VCVTTPS2UQQ = super::Opcode::VCVTTPS2UQQ as u16, + VCVTTSD2SI = super::Opcode::VCVTTSD2SI as u16, + VCVTTSD2USI = super::Opcode::VCVTTSD2USI as u16, + VCVTTSS2SI = super::Opcode::VCVTTSS2SI as u16, + VCVTTSS2USI = super::Opcode::VCVTTSS2USI as u16, + VCVTUDQ2PD = super::Opcode::VCVTUDQ2PD as u16, + VCVTUDQ2PS = super::Opcode::VCVTUDQ2PS as u16, + VCVTUQQ2PD = super::Opcode::VCVTUQQ2PD as u16, + VCVTUQQ2PS = super::Opcode::VCVTUQQ2PS as u16, + VCVTUSI2SD = super::Opcode::VCVTUSI2SD as u16, + VCVTUSI2SS = super::Opcode::VCVTUSI2SS as u16, + VCVTUSI2USD = super::Opcode::VCVTUSI2USD as u16, + VCVTUSI2USS = super::Opcode::VCVTUSI2USS as u16, + VDBPSADBW = super::Opcode::VDBPSADBW as u16, + VDIVPD = super::Opcode::VDIVPD as u16, + VDIVPS = super::Opcode::VDIVPS as u16, + VDIVSD = super::Opcode::VDIVSD as u16, + VDIVSS = super::Opcode::VDIVSS as u16, + VDPBF16PS = super::Opcode::VDPBF16PS as u16, + VDPPD = super::Opcode::VDPPD as u16, + VDPPS = super::Opcode::VDPPS as u16, + VERR = super::Opcode::VERR as u16, + VERW = super::Opcode::VERW as u16, + VEXP2PD = super::Opcode::VEXP2PD as u16, + VEXP2PS = super::Opcode::VEXP2PS as u16, + VEXP2SD = super::Opcode::VEXP2SD as u16, + VEXP2SS = super::Opcode::VEXP2SS as u16, + VEXPANDPD = super::Opcode::VEXPANDPD as u16, + VEXPANDPS = super::Opcode::VEXPANDPS as u16, + VEXTRACTF128 = super::Opcode::VEXTRACTF128 as u16, + VEXTRACTF32X4 = super::Opcode::VEXTRACTF32X4 as u16, + VEXTRACTF32X8 = super::Opcode::VEXTRACTF32X8 as u16, + VEXTRACTF64X2 = super::Opcode::VEXTRACTF64X2 as u16, + VEXTRACTF64X4 = super::Opcode::VEXTRACTF64X4 as u16, + VEXTRACTI128 = super::Opcode::VEXTRACTI128 as u16, + VEXTRACTI32X4 = super::Opcode::VEXTRACTI32X4 as u16, + VEXTRACTI32X8 = super::Opcode::VEXTRACTI32X8 as u16, + VEXTRACTI64X2 = super::Opcode::VEXTRACTI64X2 as u16, + VEXTRACTI64X4 = super::Opcode::VEXTRACTI64X4 as u16, + VEXTRACTPS = super::Opcode::VEXTRACTPS as u16, + VFIXUPIMMPD = super::Opcode::VFIXUPIMMPD as u16, + VFIXUPIMMPS = super::Opcode::VFIXUPIMMPS as u16, + VFIXUPIMMSD = super::Opcode::VFIXUPIMMSD as u16, + VFIXUPIMMSS = super::Opcode::VFIXUPIMMSS as u16, + VFMADD132PD = super::Opcode::VFMADD132PD as u16, + VFMADD132PS = super::Opcode::VFMADD132PS as u16, + VFMADD132SD = super::Opcode::VFMADD132SD as u16, + VFMADD132SS = super::Opcode::VFMADD132SS as u16, + VFMADD213PD = super::Opcode::VFMADD213PD as u16, + VFMADD213PS = super::Opcode::VFMADD213PS as u16, + VFMADD213SD = super::Opcode::VFMADD213SD as u16, + VFMADD213SS = super::Opcode::VFMADD213SS as u16, + VFMADD231PD = super::Opcode::VFMADD231PD as u16, + VFMADD231PS = super::Opcode::VFMADD231PS as u16, + VFMADD231SD = super::Opcode::VFMADD231SD as u16, + VFMADD231SS = super::Opcode::VFMADD231SS as u16, + VFMADDSUB132PD = super::Opcode::VFMADDSUB132PD as u16, + VFMADDSUB132PS = super::Opcode::VFMADDSUB132PS as u16, + VFMADDSUB213PD = super::Opcode::VFMADDSUB213PD as u16, + VFMADDSUB213PS = super::Opcode::VFMADDSUB213PS as u16, + VFMADDSUB231PD = super::Opcode::VFMADDSUB231PD as u16, + VFMADDSUB231PS = super::Opcode::VFMADDSUB231PS as u16, + VFMSUB132PD = super::Opcode::VFMSUB132PD as u16, + VFMSUB132PS = super::Opcode::VFMSUB132PS as u16, + VFMSUB132SD = super::Opcode::VFMSUB132SD as u16, + VFMSUB132SS = super::Opcode::VFMSUB132SS as u16, + VFMSUB213PD = super::Opcode::VFMSUB213PD as u16, + VFMSUB213PS = super::Opcode::VFMSUB213PS as u16, + VFMSUB213SD = super::Opcode::VFMSUB213SD as u16, + VFMSUB213SS = super::Opcode::VFMSUB213SS as u16, + VFMSUB231PD = super::Opcode::VFMSUB231PD as u16, + VFMSUB231PS = super::Opcode::VFMSUB231PS as u16, + VFMSUB231SD = super::Opcode::VFMSUB231SD as u16, + VFMSUB231SS = super::Opcode::VFMSUB231SS as u16, + VFMSUBADD132PD = super::Opcode::VFMSUBADD132PD as u16, + VFMSUBADD132PS = super::Opcode::VFMSUBADD132PS as u16, + VFMSUBADD213PD = super::Opcode::VFMSUBADD213PD as u16, + VFMSUBADD213PS = super::Opcode::VFMSUBADD213PS as u16, + VFMSUBADD231PD = super::Opcode::VFMSUBADD231PD as u16, + VFMSUBADD231PS = super::Opcode::VFMSUBADD231PS as u16, + VFNMADD132PD = super::Opcode::VFNMADD132PD as u16, + VFNMADD132PS = super::Opcode::VFNMADD132PS as u16, + VFNMADD132SD = super::Opcode::VFNMADD132SD as u16, + VFNMADD132SS = super::Opcode::VFNMADD132SS as u16, + VFNMADD213PD = super::Opcode::VFNMADD213PD as u16, + VFNMADD213PS = super::Opcode::VFNMADD213PS as u16, + VFNMADD213SD = super::Opcode::VFNMADD213SD as u16, + VFNMADD213SS = super::Opcode::VFNMADD213SS as u16, + VFNMADD231PD = super::Opcode::VFNMADD231PD as u16, + VFNMADD231PS = super::Opcode::VFNMADD231PS as u16, + VFNMADD231SD = super::Opcode::VFNMADD231SD as u16, + VFNMADD231SS = super::Opcode::VFNMADD231SS as u16, + VFNMSUB132PD = super::Opcode::VFNMSUB132PD as u16, + VFNMSUB132PS = super::Opcode::VFNMSUB132PS as u16, + VFNMSUB132SD = super::Opcode::VFNMSUB132SD as u16, + VFNMSUB132SS = super::Opcode::VFNMSUB132SS as u16, + VFNMSUB213PD = super::Opcode::VFNMSUB213PD as u16, + VFNMSUB213PS = super::Opcode::VFNMSUB213PS as u16, + VFNMSUB213SD = super::Opcode::VFNMSUB213SD as u16, + VFNMSUB213SS = super::Opcode::VFNMSUB213SS as u16, + VFNMSUB231PD = super::Opcode::VFNMSUB231PD as u16, + VFNMSUB231PS = super::Opcode::VFNMSUB231PS as u16, + VFNMSUB231SD = super::Opcode::VFNMSUB231SD as u16, + VFNMSUB231SS = super::Opcode::VFNMSUB231SS as u16, + VFPCLASSPD = super::Opcode::VFPCLASSPD as u16, + VFPCLASSPS = super::Opcode::VFPCLASSPS as u16, + VFPCLASSSD = super::Opcode::VFPCLASSSD as u16, + VFPCLASSSS = super::Opcode::VFPCLASSSS as u16, + VGATHERDPD = super::Opcode::VGATHERDPD as u16, + VGATHERDPS = super::Opcode::VGATHERDPS as u16, + VGATHERPF0DPD = super::Opcode::VGATHERPF0DPD as u16, + VGATHERPF0DPS = super::Opcode::VGATHERPF0DPS as u16, + VGATHERPF0QPD = super::Opcode::VGATHERPF0QPD as u16, + VGATHERPF0QPS = super::Opcode::VGATHERPF0QPS as u16, + VGATHERPF1DPD = super::Opcode::VGATHERPF1DPD as u16, + VGATHERPF1DPS = super::Opcode::VGATHERPF1DPS as u16, + VGATHERPF1QPD = super::Opcode::VGATHERPF1QPD as u16, + VGATHERPF1QPS = super::Opcode::VGATHERPF1QPS as u16, + VGATHERQPD = super::Opcode::VGATHERQPD as u16, + VGATHERQPS = super::Opcode::VGATHERQPS as u16, + VGETEXPPD = super::Opcode::VGETEXPPD as u16, + VGETEXPPS = super::Opcode::VGETEXPPS as u16, + VGETEXPSD = super::Opcode::VGETEXPSD as u16, + VGETEXPSS = super::Opcode::VGETEXPSS as u16, + VGETMANTPD = super::Opcode::VGETMANTPD as u16, + VGETMANTPS = super::Opcode::VGETMANTPS as u16, + VGETMANTSD = super::Opcode::VGETMANTSD as u16, + VGETMANTSS = super::Opcode::VGETMANTSS as u16, + VGF2P8AFFINEINVQB = super::Opcode::VGF2P8AFFINEINVQB as u16, + VGF2P8AFFINEQB = super::Opcode::VGF2P8AFFINEQB as u16, + VGF2P8MULB = super::Opcode::VGF2P8MULB as u16, + VHADDPD = super::Opcode::VHADDPD as u16, + VHADDPS = super::Opcode::VHADDPS as u16, + VHSUBPD = super::Opcode::VHSUBPD as u16, + VHSUBPS = super::Opcode::VHSUBPS as u16, + VINSERTF128 = super::Opcode::VINSERTF128 as u16, + VINSERTF32X4 = super::Opcode::VINSERTF32X4 as u16, + VINSERTF32X8 = super::Opcode::VINSERTF32X8 as u16, + VINSERTF64X2 = super::Opcode::VINSERTF64X2 as u16, + VINSERTF64X4 = super::Opcode::VINSERTF64X4 as u16, + VINSERTI128 = super::Opcode::VINSERTI128 as u16, + VINSERTI32X4 = super::Opcode::VINSERTI32X4 as u16, + VINSERTI32X8 = super::Opcode::VINSERTI32X8 as u16, + VINSERTI64X2 = super::Opcode::VINSERTI64X2 as u16, + VINSERTI64X4 = super::Opcode::VINSERTI64X4 as u16, + VINSERTPS = super::Opcode::VINSERTPS as u16, + VLDDQU = super::Opcode::VLDDQU as u16, + VLDMXCSR = super::Opcode::VLDMXCSR as u16, + VMASKMOVDQU = super::Opcode::VMASKMOVDQU as u16, + VMASKMOVPD = super::Opcode::VMASKMOVPD as u16, + VMASKMOVPS = super::Opcode::VMASKMOVPS as u16, + VMAXPD = super::Opcode::VMAXPD as u16, + VMAXPS = super::Opcode::VMAXPS as u16, + VMAXSD = super::Opcode::VMAXSD as u16, + VMAXSS = super::Opcode::VMAXSS as u16, + VMCALL = super::Opcode::VMCALL as u16, + VMCLEAR = super::Opcode::VMCLEAR as u16, + VMFUNC = super::Opcode::VMFUNC as u16, + VMINPD = super::Opcode::VMINPD as u16, + VMINPS = super::Opcode::VMINPS as u16, + VMINSD = super::Opcode::VMINSD as u16, + VMINSS = super::Opcode::VMINSS as u16, + VMLAUNCH = super::Opcode::VMLAUNCH as u16, + VMLOAD = super::Opcode::VMLOAD as u16, + VMMCALL = super::Opcode::VMMCALL as u16, + VMOVAPD = super::Opcode::VMOVAPD as u16, + VMOVAPS = super::Opcode::VMOVAPS as u16, + VMOVD = super::Opcode::VMOVD as u16, + VMOVDDUP = super::Opcode::VMOVDDUP as u16, + VMOVDQA = super::Opcode::VMOVDQA as u16, + VMOVDQA32 = super::Opcode::VMOVDQA32 as u16, + VMOVDQA64 = super::Opcode::VMOVDQA64 as u16, + VMOVDQU = super::Opcode::VMOVDQU as u16, + VMOVDQU16 = super::Opcode::VMOVDQU16 as u16, + VMOVDQU32 = super::Opcode::VMOVDQU32 as u16, + VMOVDQU64 = super::Opcode::VMOVDQU64 as u16, + VMOVDQU8 = super::Opcode::VMOVDQU8 as u16, + VMOVHLPS = super::Opcode::VMOVHLPS as u16, + VMOVHPD = super::Opcode::VMOVHPD as u16, + VMOVHPS = super::Opcode::VMOVHPS as u16, + VMOVLHPS = super::Opcode::VMOVLHPS as u16, + VMOVLPD = super::Opcode::VMOVLPD as u16, + VMOVLPS = super::Opcode::VMOVLPS as u16, + VMOVMSKPD = super::Opcode::VMOVMSKPD as u16, + VMOVMSKPS = super::Opcode::VMOVMSKPS as u16, + VMOVNTDQ = super::Opcode::VMOVNTDQ as u16, + VMOVNTDQA = super::Opcode::VMOVNTDQA as u16, + VMOVNTPD = super::Opcode::VMOVNTPD as u16, + VMOVNTPS = super::Opcode::VMOVNTPS as u16, + VMOVQ = super::Opcode::VMOVQ as u16, + VMOVSD = super::Opcode::VMOVSD as u16, + VMOVSHDUP = super::Opcode::VMOVSHDUP as u16, + VMOVSLDUP = super::Opcode::VMOVSLDUP as u16, + VMOVSS = super::Opcode::VMOVSS as u16, + VMOVUPD = super::Opcode::VMOVUPD as u16, + VMOVUPS = super::Opcode::VMOVUPS as u16, + VMPSADBW = super::Opcode::VMPSADBW as u16, + VMPTRLD = super::Opcode::VMPTRLD as u16, + VMPTRST = super::Opcode::VMPTRST as u16, + VMREAD = super::Opcode::VMREAD as u16, + VMRESUME = super::Opcode::VMRESUME as u16, + VMRUN = super::Opcode::VMRUN as u16, + VMSAVE = super::Opcode::VMSAVE as u16, + VMULPD = super::Opcode::VMULPD as u16, + VMULPS = super::Opcode::VMULPS as u16, + VMULSD = super::Opcode::VMULSD as u16, + VMULSS = super::Opcode::VMULSS as u16, + VMWRITE = super::Opcode::VMWRITE as u16, + VMXOFF = super::Opcode::VMXOFF as u16, + VMXON = super::Opcode::VMXON as u16, + VORPD = super::Opcode::VORPD as u16, + VORPS = super::Opcode::VORPS as u16, + VP2INTERSECTD = super::Opcode::VP2INTERSECTD as u16, + VP2INTERSECTQ = super::Opcode::VP2INTERSECTQ as u16, + VP4DPWSSD = super::Opcode::VP4DPWSSD as u16, + VP4DPWSSDS = super::Opcode::VP4DPWSSDS as u16, + VPABSB = super::Opcode::VPABSB as u16, + VPABSD = super::Opcode::VPABSD as u16, + VPABSQ = super::Opcode::VPABSQ as u16, + VPABSW = super::Opcode::VPABSW as u16, + VPACKSSDW = super::Opcode::VPACKSSDW as u16, + VPACKSSWB = super::Opcode::VPACKSSWB as u16, + VPACKUSDW = super::Opcode::VPACKUSDW as u16, + VPACKUSWB = super::Opcode::VPACKUSWB as u16, + VPADDB = super::Opcode::VPADDB as u16, + VPADDD = super::Opcode::VPADDD as u16, + VPADDQ = super::Opcode::VPADDQ as u16, + VPADDSB = super::Opcode::VPADDSB as u16, + VPADDSW = super::Opcode::VPADDSW as u16, + VPADDUSB = super::Opcode::VPADDUSB as u16, + VPADDUSW = super::Opcode::VPADDUSW as u16, + VPADDW = super::Opcode::VPADDW as u16, + VPALIGNR = super::Opcode::VPALIGNR as u16, + VPAND = super::Opcode::VPAND as u16, + VPANDD = super::Opcode::VPANDD as u16, + VPANDN = super::Opcode::VPANDN as u16, + VPANDND = super::Opcode::VPANDND as u16, + VPANDNQ = super::Opcode::VPANDNQ as u16, + VPANDQ = super::Opcode::VPANDQ as u16, + VPAVGB = super::Opcode::VPAVGB as u16, + VPAVGW = super::Opcode::VPAVGW as u16, + VPBLENDD = super::Opcode::VPBLENDD as u16, + VPBLENDMB = super::Opcode::VPBLENDMB as u16, + VPBLENDMD = super::Opcode::VPBLENDMD as u16, + VPBLENDMQ = super::Opcode::VPBLENDMQ as u16, + VPBLENDMW = super::Opcode::VPBLENDMW as u16, + VPBLENDVB = super::Opcode::VPBLENDVB as u16, + VPBLENDW = super::Opcode::VPBLENDW as u16, + VPBROADCASTB = super::Opcode::VPBROADCASTB as u16, + VPBROADCASTD = super::Opcode::VPBROADCASTD as u16, + VPBROADCASTM = super::Opcode::VPBROADCASTM as u16, + VPBROADCASTMB2Q = super::Opcode::VPBROADCASTMB2Q as u16, + VPBROADCASTMW2D = super::Opcode::VPBROADCASTMW2D as u16, + VPBROADCASTQ = super::Opcode::VPBROADCASTQ as u16, + VPBROADCASTW = super::Opcode::VPBROADCASTW as u16, + VPCLMULQDQ = super::Opcode::VPCLMULQDQ as u16, + VPCMPB = super::Opcode::VPCMPB as u16, + VPCMPD = super::Opcode::VPCMPD as u16, + VPCMPEQB = super::Opcode::VPCMPEQB as u16, + VPCMPEQD = super::Opcode::VPCMPEQD as u16, + VPCMPEQQ = super::Opcode::VPCMPEQQ as u16, + VPCMPEQW = super::Opcode::VPCMPEQW as u16, + VPCMPESTRI = super::Opcode::VPCMPESTRI as u16, + VPCMPESTRM = super::Opcode::VPCMPESTRM as u16, + VPCMPGTB = super::Opcode::VPCMPGTB as u16, + VPCMPGTD = super::Opcode::VPCMPGTD as u16, + VPCMPGTQ = super::Opcode::VPCMPGTQ as u16, + VPCMPGTW = super::Opcode::VPCMPGTW as u16, + VPCMPISTRI = super::Opcode::VPCMPISTRI as u16, + VPCMPISTRM = super::Opcode::VPCMPISTRM as u16, + VPCMPQ = super::Opcode::VPCMPQ as u16, + VPCMPUB = super::Opcode::VPCMPUB as u16, + VPCMPUD = super::Opcode::VPCMPUD as u16, + VPCMPUQ = super::Opcode::VPCMPUQ as u16, + VPCMPUW = super::Opcode::VPCMPUW as u16, + VPCMPW = super::Opcode::VPCMPW as u16, + VPCOMPRESSB = super::Opcode::VPCOMPRESSB as u16, + VPCOMPRESSD = super::Opcode::VPCOMPRESSD as u16, + VPCOMPRESSQ = super::Opcode::VPCOMPRESSQ as u16, + VPCOMPRESSW = super::Opcode::VPCOMPRESSW as u16, + VPCONFLICTD = super::Opcode::VPCONFLICTD as u16, + VPCONFLICTQ = super::Opcode::VPCONFLICTQ as u16, + VPDPBUSD = super::Opcode::VPDPBUSD as u16, + VPDPBUSDS = super::Opcode::VPDPBUSDS as u16, + VPDPWSSD = super::Opcode::VPDPWSSD as u16, + VPDPWSSDS = super::Opcode::VPDPWSSDS as u16, + VPERM2F128 = super::Opcode::VPERM2F128 as u16, + VPERM2I128 = super::Opcode::VPERM2I128 as u16, + VPERMB = super::Opcode::VPERMB as u16, + VPERMD = super::Opcode::VPERMD as u16, + VPERMI2B = super::Opcode::VPERMI2B as u16, + VPERMI2D = super::Opcode::VPERMI2D as u16, + VPERMI2PD = super::Opcode::VPERMI2PD as u16, + VPERMI2PS = super::Opcode::VPERMI2PS as u16, + VPERMI2Q = super::Opcode::VPERMI2Q as u16, + VPERMI2W = super::Opcode::VPERMI2W as u16, + VPERMILPD = super::Opcode::VPERMILPD as u16, + VPERMILPS = super::Opcode::VPERMILPS as u16, + VPERMPD = super::Opcode::VPERMPD as u16, + VPERMPS = super::Opcode::VPERMPS as u16, + VPERMQ = super::Opcode::VPERMQ as u16, + VPERMT2B = super::Opcode::VPERMT2B as u16, + VPERMT2D = super::Opcode::VPERMT2D as u16, + VPERMT2PD = super::Opcode::VPERMT2PD as u16, + VPERMT2PS = super::Opcode::VPERMT2PS as u16, + VPERMT2Q = super::Opcode::VPERMT2Q as u16, + VPERMT2W = super::Opcode::VPERMT2W as u16, + VPERMW = super::Opcode::VPERMW as u16, + VPEXPANDB = super::Opcode::VPEXPANDB as u16, + VPEXPANDD = super::Opcode::VPEXPANDD as u16, + VPEXPANDQ = super::Opcode::VPEXPANDQ as u16, + VPEXPANDW = super::Opcode::VPEXPANDW as u16, + VPEXTRB = super::Opcode::VPEXTRB as u16, + VPEXTRD = super::Opcode::VPEXTRD as u16, + VPEXTRQ = super::Opcode::VPEXTRQ as u16, + VPEXTRW = super::Opcode::VPEXTRW as u16, + VPGATHERDD = super::Opcode::VPGATHERDD as u16, + VPGATHERDQ = super::Opcode::VPGATHERDQ as u16, + VPGATHERQD = super::Opcode::VPGATHERQD as u16, + VPGATHERQQ = super::Opcode::VPGATHERQQ as u16, + VPHADDD = super::Opcode::VPHADDD as u16, + VPHADDSW = super::Opcode::VPHADDSW as u16, + VPHADDW = super::Opcode::VPHADDW as u16, + VPHMINPOSUW = super::Opcode::VPHMINPOSUW as u16, + VPHSUBD = super::Opcode::VPHSUBD as u16, + VPHSUBSW = super::Opcode::VPHSUBSW as u16, + VPHSUBW = super::Opcode::VPHSUBW as u16, + VPINSRB = super::Opcode::VPINSRB as u16, + VPINSRD = super::Opcode::VPINSRD as u16, + VPINSRQ = super::Opcode::VPINSRQ as u16, + VPINSRW = super::Opcode::VPINSRW as u16, + VPLZCNTD = super::Opcode::VPLZCNTD as u16, + VPLZCNTQ = super::Opcode::VPLZCNTQ as u16, + VPMADD52HUQ = super::Opcode::VPMADD52HUQ as u16, + VPMADD52LUQ = super::Opcode::VPMADD52LUQ as u16, + VPMADDUBSW = super::Opcode::VPMADDUBSW as u16, + VPMADDWD = super::Opcode::VPMADDWD as u16, + VPMASKMOVD = super::Opcode::VPMASKMOVD as u16, + VPMASKMOVQ = super::Opcode::VPMASKMOVQ as u16, + VPMAXSB = super::Opcode::VPMAXSB as u16, + VPMAXSD = super::Opcode::VPMAXSD as u16, + VPMAXSQ = super::Opcode::VPMAXSQ as u16, + VPMAXSW = super::Opcode::VPMAXSW as u16, + VPMAXUB = super::Opcode::VPMAXUB as u16, + VPMAXUD = super::Opcode::VPMAXUD as u16, + VPMAXUQ = super::Opcode::VPMAXUQ as u16, + VPMAXUW = super::Opcode::VPMAXUW as u16, + VPMINSB = super::Opcode::VPMINSB as u16, + VPMINSD = super::Opcode::VPMINSD as u16, + VPMINSQ = super::Opcode::VPMINSQ as u16, + VPMINSW = super::Opcode::VPMINSW as u16, + VPMINUB = super::Opcode::VPMINUB as u16, + VPMINUD = super::Opcode::VPMINUD as u16, + VPMINUQ = super::Opcode::VPMINUQ as u16, + VPMINUW = super::Opcode::VPMINUW as u16, + VPMOVB2D = super::Opcode::VPMOVB2D as u16, + VPMOVB2M = super::Opcode::VPMOVB2M as u16, + VPMOVD2M = super::Opcode::VPMOVD2M as u16, + VPMOVDB = super::Opcode::VPMOVDB as u16, + VPMOVDW = super::Opcode::VPMOVDW as u16, + VPMOVM2B = super::Opcode::VPMOVM2B as u16, + VPMOVM2D = super::Opcode::VPMOVM2D as u16, + VPMOVM2Q = super::Opcode::VPMOVM2Q as u16, + VPMOVM2W = super::Opcode::VPMOVM2W as u16, + VPMOVMSKB = super::Opcode::VPMOVMSKB as u16, + VPMOVQ2M = super::Opcode::VPMOVQ2M as u16, + VPMOVQB = super::Opcode::VPMOVQB as u16, + VPMOVQD = super::Opcode::VPMOVQD as u16, + VPMOVQW = super::Opcode::VPMOVQW as u16, + VPMOVSDB = super::Opcode::VPMOVSDB as u16, + VPMOVSDW = super::Opcode::VPMOVSDW as u16, + VPMOVSQB = super::Opcode::VPMOVSQB as u16, + VPMOVSQD = super::Opcode::VPMOVSQD as u16, + VPMOVSQW = super::Opcode::VPMOVSQW as u16, + VPMOVSWB = super::Opcode::VPMOVSWB as u16, + VPMOVSXBD = super::Opcode::VPMOVSXBD as u16, + VPMOVSXBQ = super::Opcode::VPMOVSXBQ as u16, + VPMOVSXBW = super::Opcode::VPMOVSXBW as u16, + VPMOVSXDQ = super::Opcode::VPMOVSXDQ as u16, + VPMOVSXWD = super::Opcode::VPMOVSXWD as u16, + VPMOVSXWQ = super::Opcode::VPMOVSXWQ as u16, + VPMOVUSDB = super::Opcode::VPMOVUSDB as u16, + VPMOVUSDW = super::Opcode::VPMOVUSDW as u16, + VPMOVUSQB = super::Opcode::VPMOVUSQB as u16, + VPMOVUSQD = super::Opcode::VPMOVUSQD as u16, + VPMOVUSQW = super::Opcode::VPMOVUSQW as u16, + VPMOVUSWB = super::Opcode::VPMOVUSWB as u16, + VPMOVW2M = super::Opcode::VPMOVW2M as u16, + VPMOVWB = super::Opcode::VPMOVWB as u16, + VPMOVZXBD = super::Opcode::VPMOVZXBD as u16, + VPMOVZXBQ = super::Opcode::VPMOVZXBQ as u16, + VPMOVZXBW = super::Opcode::VPMOVZXBW as u16, + VPMOVZXDQ = super::Opcode::VPMOVZXDQ as u16, + VPMOVZXWD = super::Opcode::VPMOVZXWD as u16, + VPMOVZXWQ = super::Opcode::VPMOVZXWQ as u16, + VPMULDQ = super::Opcode::VPMULDQ as u16, + VPMULHRSW = super::Opcode::VPMULHRSW as u16, + VPMULHUW = super::Opcode::VPMULHUW as u16, + VPMULHW = super::Opcode::VPMULHW as u16, + VPMULLD = super::Opcode::VPMULLD as u16, + VPMULLQ = super::Opcode::VPMULLQ as u16, + VPMULLW = super::Opcode::VPMULLW as u16, + VPMULTISHIFTQB = super::Opcode::VPMULTISHIFTQB as u16, + VPMULUDQ = super::Opcode::VPMULUDQ as u16, + VPOPCNTB = super::Opcode::VPOPCNTB as u16, + VPOPCNTD = super::Opcode::VPOPCNTD as u16, + VPOPCNTQ = super::Opcode::VPOPCNTQ as u16, + VPOPCNTW = super::Opcode::VPOPCNTW as u16, + VPOR = super::Opcode::VPOR as u16, + VPORD = super::Opcode::VPORD as u16, + VPORQ = super::Opcode::VPORQ as u16, + VPROLD = super::Opcode::VPROLD as u16, + VPROLQ = super::Opcode::VPROLQ as u16, + VPROLVD = super::Opcode::VPROLVD as u16, + VPROLVQ = super::Opcode::VPROLVQ as u16, + VPRORD = super::Opcode::VPRORD as u16, + VPRORQ = super::Opcode::VPRORQ as u16, + VPRORRD = super::Opcode::VPRORRD as u16, + VPRORRQ = super::Opcode::VPRORRQ as u16, + VPRORVD = super::Opcode::VPRORVD as u16, + VPRORVQ = super::Opcode::VPRORVQ as u16, + VPSADBW = super::Opcode::VPSADBW as u16, + VPSCATTERDD = super::Opcode::VPSCATTERDD as u16, + VPSCATTERDQ = super::Opcode::VPSCATTERDQ as u16, + VPSCATTERQD = super::Opcode::VPSCATTERQD as u16, + VPSCATTERQQ = super::Opcode::VPSCATTERQQ as u16, + VPSHLDD = super::Opcode::VPSHLDD as u16, + VPSHLDQ = super::Opcode::VPSHLDQ as u16, + VPSHLDVD = super::Opcode::VPSHLDVD as u16, + VPSHLDVQ = super::Opcode::VPSHLDVQ as u16, + VPSHLDVW = super::Opcode::VPSHLDVW as u16, + VPSHLDW = super::Opcode::VPSHLDW as u16, + VPSHRDD = super::Opcode::VPSHRDD as u16, + VPSHRDQ = super::Opcode::VPSHRDQ as u16, + VPSHRDVD = super::Opcode::VPSHRDVD as u16, + VPSHRDVQ = super::Opcode::VPSHRDVQ as u16, + VPSHRDVW = super::Opcode::VPSHRDVW as u16, + VPSHRDW = super::Opcode::VPSHRDW as u16, + VPSHUFB = super::Opcode::VPSHUFB as u16, + VPSHUFBITQMB = super::Opcode::VPSHUFBITQMB as u16, + VPSHUFD = super::Opcode::VPSHUFD as u16, + VPSHUFHW = super::Opcode::VPSHUFHW as u16, + VPSHUFLW = super::Opcode::VPSHUFLW as u16, + VPSIGNB = super::Opcode::VPSIGNB as u16, + VPSIGND = super::Opcode::VPSIGND as u16, + VPSIGNW = super::Opcode::VPSIGNW as u16, + VPSLLD = super::Opcode::VPSLLD as u16, + VPSLLDQ = super::Opcode::VPSLLDQ as u16, + VPSLLQ = super::Opcode::VPSLLQ as u16, + VPSLLVD = super::Opcode::VPSLLVD as u16, + VPSLLVQ = super::Opcode::VPSLLVQ as u16, + VPSLLVW = super::Opcode::VPSLLVW as u16, + VPSLLW = super::Opcode::VPSLLW as u16, + VPSRAD = super::Opcode::VPSRAD as u16, + VPSRAQ = super::Opcode::VPSRAQ as u16, + VPSRAVD = super::Opcode::VPSRAVD as u16, + VPSRAVQ = super::Opcode::VPSRAVQ as u16, + VPSRAVW = super::Opcode::VPSRAVW as u16, + VPSRAW = super::Opcode::VPSRAW as u16, + VPSRLD = super::Opcode::VPSRLD as u16, + VPSRLDQ = super::Opcode::VPSRLDQ as u16, + VPSRLQ = super::Opcode::VPSRLQ as u16, + VPSRLVD = super::Opcode::VPSRLVD as u16, + VPSRLVQ = super::Opcode::VPSRLVQ as u16, + VPSRLVW = super::Opcode::VPSRLVW as u16, + VPSRLW = super::Opcode::VPSRLW as u16, + VPSUBB = super::Opcode::VPSUBB as u16, + VPSUBD = super::Opcode::VPSUBD as u16, + VPSUBQ = super::Opcode::VPSUBQ as u16, + VPSUBSB = super::Opcode::VPSUBSB as u16, + VPSUBSW = super::Opcode::VPSUBSW as u16, + VPSUBUSB = super::Opcode::VPSUBUSB as u16, + VPSUBUSW = super::Opcode::VPSUBUSW as u16, + VPSUBW = super::Opcode::VPSUBW as u16, + VPTERNLOGD = super::Opcode::VPTERNLOGD as u16, + VPTERNLOGQ = super::Opcode::VPTERNLOGQ as u16, + VPTEST = super::Opcode::VPTEST as u16, + VPTESTMB = super::Opcode::VPTESTMB as u16, + VPTESTMD = super::Opcode::VPTESTMD as u16, + VPTESTMQ = super::Opcode::VPTESTMQ as u16, + VPTESTMW = super::Opcode::VPTESTMW as u16, + VPTESTNMB = super::Opcode::VPTESTNMB as u16, + VPTESTNMD = super::Opcode::VPTESTNMD as u16, + VPTESTNMQ = super::Opcode::VPTESTNMQ as u16, + VPTESTNMW = super::Opcode::VPTESTNMW as u16, + VPUNPCKHBW = super::Opcode::VPUNPCKHBW as u16, + VPUNPCKHDQ = super::Opcode::VPUNPCKHDQ as u16, + VPUNPCKHQDQ = super::Opcode::VPUNPCKHQDQ as u16, + VPUNPCKHWD = super::Opcode::VPUNPCKHWD as u16, + VPUNPCKLBW = super::Opcode::VPUNPCKLBW as u16, + VPUNPCKLDQ = super::Opcode::VPUNPCKLDQ as u16, + VPUNPCKLQDQ = super::Opcode::VPUNPCKLQDQ as u16, + VPUNPCKLWD = super::Opcode::VPUNPCKLWD as u16, + VPXOR = super::Opcode::VPXOR as u16, + VPXORD = super::Opcode::VPXORD as u16, + VPXORQ = super::Opcode::VPXORQ as u16, + VRANGEPD = super::Opcode::VRANGEPD as u16, + VRANGEPS = super::Opcode::VRANGEPS as u16, + VRANGESD = super::Opcode::VRANGESD as u16, + VRANGESS = super::Opcode::VRANGESS as u16, + VRCP14PD = super::Opcode::VRCP14PD as u16, + VRCP14PS = super::Opcode::VRCP14PS as u16, + VRCP14SD = super::Opcode::VRCP14SD as u16, + VRCP14SS = super::Opcode::VRCP14SS as u16, + VRCP28PD = super::Opcode::VRCP28PD as u16, + VRCP28PS = super::Opcode::VRCP28PS as u16, + VRCP28SD = super::Opcode::VRCP28SD as u16, + VRCP28SS = super::Opcode::VRCP28SS as u16, + VRCPPS = super::Opcode::VRCPPS as u16, + VRCPSS = super::Opcode::VRCPSS as u16, + VREDUCEPD = super::Opcode::VREDUCEPD as u16, + VREDUCEPS = super::Opcode::VREDUCEPS as u16, + VREDUCESD = super::Opcode::VREDUCESD as u16, + VREDUCESS = super::Opcode::VREDUCESS as u16, + VRNDSCALEPD = super::Opcode::VRNDSCALEPD as u16, + VRNDSCALEPS = super::Opcode::VRNDSCALEPS as u16, + VRNDSCALESD = super::Opcode::VRNDSCALESD as u16, + VRNDSCALESS = super::Opcode::VRNDSCALESS as u16, + VROUNDPD = super::Opcode::VROUNDPD as u16, + VROUNDPS = super::Opcode::VROUNDPS as u16, + VROUNDSD = super::Opcode::VROUNDSD as u16, + VROUNDSS = super::Opcode::VROUNDSS as u16, + VRSQRT14PD = super::Opcode::VRSQRT14PD as u16, + VRSQRT14PS = super::Opcode::VRSQRT14PS as u16, + VRSQRT14SD = super::Opcode::VRSQRT14SD as u16, + VRSQRT14SS = super::Opcode::VRSQRT14SS as u16, + VRSQRT28PD = super::Opcode::VRSQRT28PD as u16, + VRSQRT28PS = super::Opcode::VRSQRT28PS as u16, + VRSQRT28SD = super::Opcode::VRSQRT28SD as u16, + VRSQRT28SS = super::Opcode::VRSQRT28SS as u16, + VRSQRTPS = super::Opcode::VRSQRTPS as u16, + VRSQRTSS = super::Opcode::VRSQRTSS as u16, + VSCALEDPD = super::Opcode::VSCALEDPD as u16, + VSCALEDPS = super::Opcode::VSCALEDPS as u16, + VSCALEDSD = super::Opcode::VSCALEDSD as u16, + VSCALEDSS = super::Opcode::VSCALEDSS as u16, + VSCALEFPD = super::Opcode::VSCALEFPD as u16, + VSCALEFPS = super::Opcode::VSCALEFPS as u16, + VSCALEFSD = super::Opcode::VSCALEFSD as u16, + VSCALEFSS = super::Opcode::VSCALEFSS as u16, + VSCATTERDD = super::Opcode::VSCATTERDD as u16, + VSCATTERDPD = super::Opcode::VSCATTERDPD as u16, + VSCATTERDPS = super::Opcode::VSCATTERDPS as u16, + VSCATTERDQ = super::Opcode::VSCATTERDQ as u16, + VSCATTERPF0DPD = super::Opcode::VSCATTERPF0DPD as u16, + VSCATTERPF0DPS = super::Opcode::VSCATTERPF0DPS as u16, + VSCATTERPF0QPD = super::Opcode::VSCATTERPF0QPD as u16, + VSCATTERPF0QPS = super::Opcode::VSCATTERPF0QPS as u16, + VSCATTERPF1DPD = super::Opcode::VSCATTERPF1DPD as u16, + VSCATTERPF1DPS = super::Opcode::VSCATTERPF1DPS as u16, + VSCATTERPF1QPD = super::Opcode::VSCATTERPF1QPD as u16, + VSCATTERPF1QPS = super::Opcode::VSCATTERPF1QPS as u16, + VSCATTERQD = super::Opcode::VSCATTERQD as u16, + VSCATTERQPD = super::Opcode::VSCATTERQPD as u16, + VSCATTERQPS = super::Opcode::VSCATTERQPS as u16, + VSCATTERQQ = super::Opcode::VSCATTERQQ as u16, + VSHUFF32X4 = super::Opcode::VSHUFF32X4 as u16, + VSHUFF64X2 = super::Opcode::VSHUFF64X2 as u16, + VSHUFI32X4 = super::Opcode::VSHUFI32X4 as u16, + VSHUFI64X2 = super::Opcode::VSHUFI64X2 as u16, + VSHUFPD = super::Opcode::VSHUFPD as u16, + VSHUFPS = super::Opcode::VSHUFPS as u16, + VSQRTPD = super::Opcode::VSQRTPD as u16, + VSQRTPS = super::Opcode::VSQRTPS as u16, + VSQRTSD = super::Opcode::VSQRTSD as u16, + VSQRTSS = super::Opcode::VSQRTSS as u16, + VSTMXCSR = super::Opcode::VSTMXCSR as u16, + VSUBPD = super::Opcode::VSUBPD as u16, + VSUBPS = super::Opcode::VSUBPS as u16, + VSUBSD = super::Opcode::VSUBSD as u16, + VSUBSS = super::Opcode::VSUBSS as u16, + VTESTPD = super::Opcode::VTESTPD as u16, + VTESTPS = super::Opcode::VTESTPS as u16, + VUCOMISD = super::Opcode::VUCOMISD as u16, + VUCOMISS = super::Opcode::VUCOMISS as u16, + VUNPCKHPD = super::Opcode::VUNPCKHPD as u16, + VUNPCKHPS = super::Opcode::VUNPCKHPS as u16, + VUNPCKLPD = super::Opcode::VUNPCKLPD as u16, + VUNPCKLPS = super::Opcode::VUNPCKLPS as u16, + VXORPD = super::Opcode::VXORPD as u16, + VXORPS = super::Opcode::VXORPS as u16, + VZEROALL = super::Opcode::VZEROALL as u16, + VZEROUPPER = super::Opcode::VZEROUPPER as u16, + WAIT = super::Opcode::WAIT as u16, + WBINVD = super::Opcode::WBINVD as u16, + WRFSBASE = super::Opcode::WRFSBASE as u16, + WRGSBASE = super::Opcode::WRGSBASE as u16, + WRMSR = super::Opcode::WRMSR as u16, + WRPKRU = super::Opcode::WRPKRU as u16, + WRSS = super::Opcode::WRSS as u16, + WRUSS = super::Opcode::WRUSS as u16, + XABORT = super::Opcode::XABORT as u16, + XADD = super::Opcode::XADD as u16, + XBEGIN = super::Opcode::XBEGIN as u16, + XCHG = super::Opcode::XCHG as u16, + XEND = super::Opcode::XEND as u16, + XGETBV = super::Opcode::XGETBV as u16, + XLAT = super::Opcode::XLAT as u16, + XOR = super::Opcode::XOR as u16, + XORPD = super::Opcode::XORPD as u16, + XORPS = super::Opcode::XORPS as u16, + XRESLDTRK = super::Opcode::XRESLDTRK as u16, + XRSTOR = super::Opcode::XRSTOR as u16, + XRSTORS = super::Opcode::XRSTORS as u16, + XRSTORS64 = super::Opcode::XRSTORS64 as u16, + XSAVE = super::Opcode::XSAVE as u16, + XSAVEC = super::Opcode::XSAVEC as u16, + XSAVEC64 = super::Opcode::XSAVEC64 as u16, + XSAVEOPT = super::Opcode::XSAVEOPT as u16, + XSAVES = super::Opcode::XSAVES as u16, + XSAVES64 = super::Opcode::XSAVES64 as u16, + XSETBV = super::Opcode::XSETBV as u16, + XSUSLDTRK = super::Opcode::XSUSLDTRK as u16, + XTEST = super::Opcode::XTEST as u16, + } +} + +pub(crate) mod long_mode { + #[allow(non_camel_case_types)] + #[derive(Copy, Clone, Debug, Eq, PartialEq)] + #[non_exhaustive] + #[repr(u16)] + pub enum Opcode { + ADC = super::Opcode::ADC as u16, + ADCX = super::Opcode::ADCX as u16, + ADD = super::Opcode::ADD as u16, + ADDPD = super::Opcode::ADDPD as u16, + ADDPS = super::Opcode::ADDPS as u16, + ADDSD = super::Opcode::ADDSD as u16, + ADDSS = super::Opcode::ADDSS as u16, + ADDSUBPD = super::Opcode::ADDSUBPD as u16, + ADDSUBPS = super::Opcode::ADDSUBPS as u16, + ADOX = super::Opcode::ADOX as u16, + AESDEC = super::Opcode::AESDEC as u16, + AESDEC128KL = super::Opcode::AESDEC128KL as u16, + AESDEC256KL = super::Opcode::AESDEC256KL as u16, + AESDECLAST = super::Opcode::AESDECLAST as u16, + AESDECWIDE128KL = super::Opcode::AESDECWIDE128KL as u16, + AESDECWIDE256KL = super::Opcode::AESDECWIDE256KL as u16, + AESENC = super::Opcode::AESENC as u16, + AESENC128KL = super::Opcode::AESENC128KL as u16, + AESENC256KL = super::Opcode::AESENC256KL as u16, + AESENCLAST = super::Opcode::AESENCLAST as u16, + AESENCWIDE128KL = super::Opcode::AESENCWIDE128KL as u16, + AESENCWIDE256KL = super::Opcode::AESENCWIDE256KL as u16, + AESIMC = super::Opcode::AESIMC as u16, + AESKEYGENASSIST = super::Opcode::AESKEYGENASSIST as u16, + AND = super::Opcode::AND as u16, + ANDN = super::Opcode::ANDN as u16, + ANDNPD = super::Opcode::ANDNPD as u16, + ANDNPS = super::Opcode::ANDNPS as u16, + ANDPD = super::Opcode::ANDPD as u16, + ANDPS = super::Opcode::ANDPS as u16, + BEXTR = super::Opcode::BEXTR as u16, + BLENDPD = super::Opcode::BLENDPD as u16, + BLENDPS = super::Opcode::BLENDPS as u16, + BLENDVPD = super::Opcode::BLENDVPD as u16, + BLENDVPS = super::Opcode::BLENDVPS as u16, + BLENDW = super::Opcode::BLENDW as u16, + BLSI = super::Opcode::BLSI as u16, + BLSMSK = super::Opcode::BLSMSK as u16, + BLSR = super::Opcode::BLSR as u16, + BNDCL = super::Opcode::BNDCL as u16, + BNDCN = super::Opcode::BNDCN as u16, + BNDCU = super::Opcode::BNDCU as u16, + BNDLDX = super::Opcode::BNDLDX as u16, + BNDMK = super::Opcode::BNDMK as u16, + BNDMOV = super::Opcode::BNDMOV as u16, + BNDSTX = super::Opcode::BNDSTX as u16, + BSF = super::Opcode::BSF as u16, + BSR = super::Opcode::BSR as u16, + BSWAP = super::Opcode::BSWAP as u16, + BT = super::Opcode::BT as u16, + BTC = super::Opcode::BTC as u16, + BTR = super::Opcode::BTR as u16, + BTS = super::Opcode::BTS as u16, + BZHI = super::Opcode::BZHI as u16, + CALL = super::Opcode::CALL as u16, + CALLF = super::Opcode::CALLF as u16, + CBW = super::Opcode::CBW as u16, + CDQ = super::Opcode::CDQ as u16, + CDQE = super::Opcode::CDQE as u16, + CLAC = super::Opcode::CLAC as u16, + CLC = super::Opcode::CLC as u16, + CLD = super::Opcode::CLD as u16, + CLFLUSH = super::Opcode::CLFLUSH as u16, + CLFLUSHOPT = super::Opcode::CLFLUSHOPT as u16, + CLGI = super::Opcode::CLGI as u16, + CLI = super::Opcode::CLI as u16, + CLRSSBSY = super::Opcode::CLRSSBSY as u16, + CLTS = super::Opcode::CLTS as u16, + CLUI = super::Opcode::CLUI as u16, + CLWB = super::Opcode::CLWB as u16, + CLZERO = super::Opcode::CLZERO as u16, + CMC = super::Opcode::CMC as u16, + CMOVA = super::Opcode::CMOVA as u16, + CMOVB = super::Opcode::CMOVB as u16, + CMOVG = super::Opcode::CMOVG as u16, + CMOVGE = super::Opcode::CMOVGE as u16, + CMOVL = super::Opcode::CMOVL as u16, + CMOVLE = super::Opcode::CMOVLE as u16, + CMOVNA = super::Opcode::CMOVNA as u16, + CMOVNB = super::Opcode::CMOVNB as u16, + CMOVNO = super::Opcode::CMOVNO as u16, + CMOVNP = super::Opcode::CMOVNP as u16, + CMOVNS = super::Opcode::CMOVNS as u16, + CMOVNZ = super::Opcode::CMOVNZ as u16, + CMOVO = super::Opcode::CMOVO as u16, + CMOVP = super::Opcode::CMOVP as u16, + CMOVS = super::Opcode::CMOVS as u16, + CMOVZ = super::Opcode::CMOVZ as u16, + CMP = super::Opcode::CMP as u16, + CMPPD = super::Opcode::CMPPD as u16, + CMPPS = super::Opcode::CMPPS as u16, + CMPS = super::Opcode::CMPS as u16, + CMPSD = super::Opcode::CMPSD as u16, + CMPSS = super::Opcode::CMPSS as u16, + CMPXCHG = super::Opcode::CMPXCHG as u16, + CMPXCHG16B = super::Opcode::CMPXCHG16B as u16, + CMPXCHG8B = super::Opcode::CMPXCHG8B as u16, + COMISD = super::Opcode::COMISD as u16, + COMISS = super::Opcode::COMISS as u16, + CPUID = super::Opcode::CPUID as u16, + CQO = super::Opcode::CQO as u16, + CRC32 = super::Opcode::CRC32 as u16, + CVTDQ2PD = super::Opcode::CVTDQ2PD as u16, + CVTDQ2PS = super::Opcode::CVTDQ2PS as u16, + CVTPD2DQ = super::Opcode::CVTPD2DQ as u16, + CVTPD2PI = super::Opcode::CVTPD2PI as u16, + CVTPD2PS = super::Opcode::CVTPD2PS as u16, + CVTPI2PD = super::Opcode::CVTPI2PD as u16, + CVTPI2PS = super::Opcode::CVTPI2PS as u16, + CVTPS2DQ = super::Opcode::CVTPS2DQ as u16, + CVTPS2PD = super::Opcode::CVTPS2PD as u16, + CVTPS2PI = super::Opcode::CVTPS2PI as u16, + CVTSD2SI = super::Opcode::CVTSD2SI as u16, + CVTSD2SS = super::Opcode::CVTSD2SS as u16, + CVTSI2SD = super::Opcode::CVTSI2SD as u16, + CVTSI2SS = super::Opcode::CVTSI2SS as u16, + CVTSS2SD = super::Opcode::CVTSS2SD as u16, + CVTSS2SI = super::Opcode::CVTSS2SI as u16, + CVTTPD2DQ = super::Opcode::CVTTPD2DQ as u16, + CVTTPD2PI = super::Opcode::CVTTPD2PI as u16, + CVTTPS2DQ = super::Opcode::CVTTPS2DQ as u16, + CVTTPS2PI = super::Opcode::CVTTPS2PI as u16, + CVTTSD2SI = super::Opcode::CVTTSD2SI as u16, + CVTTSS2SI = super::Opcode::CVTTSS2SI as u16, + CWD = super::Opcode::CWD as u16, + CWDE = super::Opcode::CWDE as u16, + DEC = super::Opcode::DEC as u16, + DIV = super::Opcode::DIV as u16, + DIVPD = super::Opcode::DIVPD as u16, + DIVPS = super::Opcode::DIVPS as u16, + DIVSD = super::Opcode::DIVSD as u16, + DIVSS = super::Opcode::DIVSS as u16, + DPPD = super::Opcode::DPPD as u16, + DPPS = super::Opcode::DPPS as u16, + EMMS = super::Opcode::EMMS as u16, + ENCLS = super::Opcode::ENCLS as u16, + ENCLU = super::Opcode::ENCLU as u16, + ENCLV = super::Opcode::ENCLV as u16, + ENCODEKEY128 = super::Opcode::ENCODEKEY128 as u16, + ENCODEKEY256 = super::Opcode::ENCODEKEY256 as u16, + ENDBR32 = super::Opcode::ENDBR32 as u16, + ENDBR64 = super::Opcode::ENDBR64 as u16, + ENQCMD = super::Opcode::ENQCMD as u16, + ENQCMDS = super::Opcode::ENQCMDS as u16, + ENTER = super::Opcode::ENTER as u16, + EXTRACTPS = super::Opcode::EXTRACTPS as u16, + EXTRQ = super::Opcode::EXTRQ as u16, + F2XM1 = super::Opcode::F2XM1 as u16, + FABS = super::Opcode::FABS as u16, + FADD = super::Opcode::FADD as u16, + FADDP = super::Opcode::FADDP as u16, + FBLD = super::Opcode::FBLD as u16, + FBSTP = super::Opcode::FBSTP as u16, + FCHS = super::Opcode::FCHS as u16, + FCMOVB = super::Opcode::FCMOVB as u16, + FCMOVBE = super::Opcode::FCMOVBE as u16, + FCMOVE = super::Opcode::FCMOVE as u16, + FCMOVNB = super::Opcode::FCMOVNB as u16, + FCMOVNBE = super::Opcode::FCMOVNBE as u16, + FCMOVNE = super::Opcode::FCMOVNE as u16, + FCMOVNU = super::Opcode::FCMOVNU as u16, + FCMOVU = super::Opcode::FCMOVU as u16, + FCOM = super::Opcode::FCOM as u16, + FCOMI = super::Opcode::FCOMI as u16, + FCOMIP = super::Opcode::FCOMIP as u16, + FCOMP = super::Opcode::FCOMP as u16, + FCOMPP = super::Opcode::FCOMPP as u16, + FCOS = super::Opcode::FCOS as u16, + FDECSTP = super::Opcode::FDECSTP as u16, + FDISI8087_NOP = super::Opcode::FDISI8087_NOP as u16, + FDIV = super::Opcode::FDIV as u16, + FDIVP = super::Opcode::FDIVP as u16, + FDIVR = super::Opcode::FDIVR as u16, + FDIVRP = super::Opcode::FDIVRP as u16, + FEMMS = super::Opcode::FEMMS as u16, + FENI8087_NOP = super::Opcode::FENI8087_NOP as u16, + FFREE = super::Opcode::FFREE as u16, + FFREEP = super::Opcode::FFREEP as u16, + FIADD = super::Opcode::FIADD as u16, + FICOM = super::Opcode::FICOM as u16, + FICOMP = super::Opcode::FICOMP as u16, + FIDIV = super::Opcode::FIDIV as u16, + FIDIVR = super::Opcode::FIDIVR as u16, + FILD = super::Opcode::FILD as u16, + FIMUL = super::Opcode::FIMUL as u16, + FINCSTP = super::Opcode::FINCSTP as u16, + FIST = super::Opcode::FIST as u16, + FISTP = super::Opcode::FISTP as u16, + FISTTP = super::Opcode::FISTTP as u16, + FISUB = super::Opcode::FISUB as u16, + FISUBR = super::Opcode::FISUBR as u16, + FLD = super::Opcode::FLD as u16, + FLD1 = super::Opcode::FLD1 as u16, + FLDCW = super::Opcode::FLDCW as u16, + FLDENV = super::Opcode::FLDENV as u16, + FLDL2E = super::Opcode::FLDL2E as u16, + FLDL2T = super::Opcode::FLDL2T as u16, + FLDLG2 = super::Opcode::FLDLG2 as u16, + FLDLN2 = super::Opcode::FLDLN2 as u16, + FLDPI = super::Opcode::FLDPI as u16, + FLDZ = super::Opcode::FLDZ as u16, + FMUL = super::Opcode::FMUL as u16, + FMULP = super::Opcode::FMULP as u16, + FNCLEX = super::Opcode::FNCLEX as u16, + FNINIT = super::Opcode::FNINIT as u16, + FNOP = super::Opcode::FNOP as u16, + FNSAVE = super::Opcode::FNSAVE as u16, + FNSTCW = super::Opcode::FNSTCW as u16, + FNSTENV = super::Opcode::FNSTENV as u16, + FNSTOR = super::Opcode::FNSTOR as u16, + FNSTSW = super::Opcode::FNSTSW as u16, + FPATAN = super::Opcode::FPATAN as u16, + FPREM = super::Opcode::FPREM as u16, + FPREM1 = super::Opcode::FPREM1 as u16, + FPTAN = super::Opcode::FPTAN as u16, + FRNDINT = super::Opcode::FRNDINT as u16, + FRSTOR = super::Opcode::FRSTOR as u16, + FSCALE = super::Opcode::FSCALE as u16, + FSETPM287_NOP = super::Opcode::FSETPM287_NOP as u16, + FSIN = super::Opcode::FSIN as u16, + FSINCOS = super::Opcode::FSINCOS as u16, + FSQRT = super::Opcode::FSQRT as u16, + FST = super::Opcode::FST as u16, + FSTP = super::Opcode::FSTP as u16, + FSTPNCE = super::Opcode::FSTPNCE as u16, + FSUB = super::Opcode::FSUB as u16, + FSUBP = super::Opcode::FSUBP as u16, + FSUBR = super::Opcode::FSUBR as u16, + FSUBRP = super::Opcode::FSUBRP as u16, + FTST = super::Opcode::FTST as u16, + FUCOM = super::Opcode::FUCOM as u16, + FUCOMI = super::Opcode::FUCOMI as u16, + FUCOMIP = super::Opcode::FUCOMIP as u16, + FUCOMP = super::Opcode::FUCOMP as u16, + FUCOMPP = super::Opcode::FUCOMPP as u16, + FXAM = super::Opcode::FXAM as u16, + FXCH = super::Opcode::FXCH as u16, + FXRSTOR = super::Opcode::FXRSTOR as u16, + FXSAVE = super::Opcode::FXSAVE as u16, + FXTRACT = super::Opcode::FXTRACT as u16, + FYL2X = super::Opcode::FYL2X as u16, + FYL2XP1 = super::Opcode::FYL2XP1 as u16, + GETSEC = super::Opcode::GETSEC as u16, + GF2P8AFFINEINVQB = super::Opcode::GF2P8AFFINEINVQB as u16, + GF2P8AFFINEQB = super::Opcode::GF2P8AFFINEQB as u16, + GF2P8MULB = super::Opcode::GF2P8MULB as u16, + HADDPD = super::Opcode::HADDPD as u16, + HADDPS = super::Opcode::HADDPS as u16, + HLT = super::Opcode::HLT as u16, + HRESET = super::Opcode::HRESET as u16, + HSUBPD = super::Opcode::HSUBPD as u16, + HSUBPS = super::Opcode::HSUBPS as u16, + IDIV = super::Opcode::IDIV as u16, + IMUL = super::Opcode::IMUL as u16, + IN = super::Opcode::IN as u16, + INC = super::Opcode::INC as u16, + INCSSP = super::Opcode::INCSSP as u16, + INS = super::Opcode::INS as u16, + INSERTPS = super::Opcode::INSERTPS as u16, + INSERTQ = super::Opcode::INSERTQ as u16, + INT = super::Opcode::INT as u16, + INTO = super::Opcode::INTO as u16, + Invalid = super::Opcode::Invalid as u16, + INVD = super::Opcode::INVD as u16, + INVEPT = super::Opcode::INVEPT as u16, + INVLPG = super::Opcode::INVLPG as u16, + INVLPGA = super::Opcode::INVLPGA as u16, + INVLPGB = super::Opcode::INVLPGB as u16, + INVPCID = super::Opcode::INVPCID as u16, + INVVPID = super::Opcode::INVVPID as u16, + IRET = super::Opcode::IRET as u16, + IRETD = super::Opcode::IRETD as u16, + IRETQ = super::Opcode::IRETQ as u16, + JA = super::Opcode::JA as u16, + JB = super::Opcode::JB as u16, + JG = super::Opcode::JG as u16, + JGE = super::Opcode::JGE as u16, + JL = super::Opcode::JL as u16, + JLE = super::Opcode::JLE as u16, + JMP = super::Opcode::JMP as u16, + JMPE = super::Opcode::JMPE as u16, + JMPF = super::Opcode::JMPF as u16, + JNA = super::Opcode::JNA as u16, + JNB = super::Opcode::JNB as u16, + JNO = super::Opcode::JNO as u16, + JNP = super::Opcode::JNP as u16, + JNS = super::Opcode::JNS as u16, + JNZ = super::Opcode::JNZ as u16, + JO = super::Opcode::JO as u16, + JP = super::Opcode::JP as u16, + JRCXZ = super::Opcode::JRCXZ as u16, + JS = super::Opcode::JS as u16, + JZ = super::Opcode::JZ as u16, + KADDB = super::Opcode::KADDB as u16, + KADDD = super::Opcode::KADDD as u16, + KADDQ = super::Opcode::KADDQ as u16, + KADDW = super::Opcode::KADDW as u16, + KANDB = super::Opcode::KANDB as u16, + KANDD = super::Opcode::KANDD as u16, + KANDNB = super::Opcode::KANDNB as u16, + KANDND = super::Opcode::KANDND as u16, + KANDNQ = super::Opcode::KANDNQ as u16, + KANDNW = super::Opcode::KANDNW as u16, + KANDQ = super::Opcode::KANDQ as u16, + KANDW = super::Opcode::KANDW as u16, + KMOVB = super::Opcode::KMOVB as u16, + KMOVD = super::Opcode::KMOVD as u16, + KMOVQ = super::Opcode::KMOVQ as u16, + KMOVW = super::Opcode::KMOVW as u16, + KNOTB = super::Opcode::KNOTB as u16, + KNOTD = super::Opcode::KNOTD as u16, + KNOTQ = super::Opcode::KNOTQ as u16, + KNOTW = super::Opcode::KNOTW as u16, + KORB = super::Opcode::KORB as u16, + KORD = super::Opcode::KORD as u16, + KORQ = super::Opcode::KORQ as u16, + KORTESTB = super::Opcode::KORTESTB as u16, + KORTESTD = super::Opcode::KORTESTD as u16, + KORTESTQ = super::Opcode::KORTESTQ as u16, + KORTESTW = super::Opcode::KORTESTW as u16, + KORW = super::Opcode::KORW as u16, + KSHIFTLB = super::Opcode::KSHIFTLB as u16, + KSHIFTLD = super::Opcode::KSHIFTLD as u16, + KSHIFTLQ = super::Opcode::KSHIFTLQ as u16, + KSHIFTLW = super::Opcode::KSHIFTLW as u16, + KSHIFTRB = super::Opcode::KSHIFTRB as u16, + KSHIFTRD = super::Opcode::KSHIFTRD as u16, + KSHIFTRQ = super::Opcode::KSHIFTRQ as u16, + KSHIFTRW = super::Opcode::KSHIFTRW as u16, + KTESTB = super::Opcode::KTESTB as u16, + KTESTD = super::Opcode::KTESTD as u16, + KTESTQ = super::Opcode::KTESTQ as u16, + KTESTW = super::Opcode::KTESTW as u16, + KUNPCKBW = super::Opcode::KUNPCKBW as u16, + KUNPCKDQ = super::Opcode::KUNPCKDQ as u16, + KUNPCKWD = super::Opcode::KUNPCKWD as u16, + KXNORB = super::Opcode::KXNORB as u16, + KXNORD = super::Opcode::KXNORD as u16, + KXNORQ = super::Opcode::KXNORQ as u16, + KXNORW = super::Opcode::KXNORW as u16, + KXORB = super::Opcode::KXORB as u16, + KXORD = super::Opcode::KXORD as u16, + KXORQ = super::Opcode::KXORQ as u16, + KXORW = super::Opcode::KXORW as u16, + LAHF = super::Opcode::LAHF as u16, + LAR = super::Opcode::LAR as u16, + LDDQU = super::Opcode::LDDQU as u16, + LDMXCSR = super::Opcode::LDMXCSR as u16, + LDS = super::Opcode::LDS as u16, + LEA = super::Opcode::LEA as u16, + LEAVE = super::Opcode::LEAVE as u16, + LES = super::Opcode::LES as u16, + LFENCE = super::Opcode::LFENCE as u16, + LFS = super::Opcode::LFS as u16, + LGDT = super::Opcode::LGDT as u16, + LGS = super::Opcode::LGS as u16, + LIDT = super::Opcode::LIDT as u16, + LLDT = super::Opcode::LLDT as u16, + LMSW = super::Opcode::LMSW as u16, + LOADIWKEY = super::Opcode::LOADIWKEY as u16, + LODS = super::Opcode::LODS as u16, + LOOP = super::Opcode::LOOP as u16, + LOOPNZ = super::Opcode::LOOPNZ as u16, + LOOPZ = super::Opcode::LOOPZ as u16, + LSL = super::Opcode::LSL as u16, + LSS = super::Opcode::LSS as u16, + LTR = super::Opcode::LTR as u16, + LZCNT = super::Opcode::LZCNT as u16, + MASKMOVDQU = super::Opcode::MASKMOVDQU as u16, + MASKMOVQ = super::Opcode::MASKMOVQ as u16, + MAXPD = super::Opcode::MAXPD as u16, + MAXPS = super::Opcode::MAXPS as u16, + MAXSD = super::Opcode::MAXSD as u16, + MAXSS = super::Opcode::MAXSS as u16, + MFENCE = super::Opcode::MFENCE as u16, + MINPD = super::Opcode::MINPD as u16, + MINPS = super::Opcode::MINPS as u16, + MINSD = super::Opcode::MINSD as u16, + MINSS = super::Opcode::MINSS as u16, + MONITOR = super::Opcode::MONITOR as u16, + MONITORX = super::Opcode::MONITORX as u16, + MOV = super::Opcode::MOV as u16, + MOVAPD = super::Opcode::MOVAPD as u16, + MOVAPS = super::Opcode::MOVAPS as u16, + MOVBE = super::Opcode::MOVBE as u16, + MOVD = super::Opcode::MOVD as u16, + MOVDDUP = super::Opcode::MOVDDUP as u16, + MOVDIR64B = super::Opcode::MOVDIR64B as u16, + MOVDIRI = super::Opcode::MOVDIRI as u16, + MOVDQ2Q = super::Opcode::MOVDQ2Q as u16, + MOVDQA = super::Opcode::MOVDQA as u16, + MOVDQU = super::Opcode::MOVDQU as u16, + MOVHLPS = super::Opcode::MOVHLPS as u16, + MOVHPD = super::Opcode::MOVHPD as u16, + MOVHPS = super::Opcode::MOVHPS as u16, + MOVLHPS = super::Opcode::MOVLHPS as u16, + MOVLPD = super::Opcode::MOVLPD as u16, + MOVLPS = super::Opcode::MOVLPS as u16, + MOVMSKPD = super::Opcode::MOVMSKPD as u16, + MOVMSKPS = super::Opcode::MOVMSKPS as u16, + MOVNTDQ = super::Opcode::MOVNTDQ as u16, + MOVNTDQA = super::Opcode::MOVNTDQA as u16, + MOVNTI = super::Opcode::MOVNTI as u16, + MOVNTPD = super::Opcode::MOVNTPD as u16, + MOVNTPS = super::Opcode::MOVNTPS as u16, + MOVNTQ = super::Opcode::MOVNTQ as u16, + MOVNTSD = super::Opcode::MOVNTSD as u16, + MOVNTSS = super::Opcode::MOVNTSS as u16, + MOVQ = super::Opcode::MOVQ as u16, + MOVQ2DQ = super::Opcode::MOVQ2DQ as u16, + MOVS = super::Opcode::MOVS as u16, + MOVSD = super::Opcode::MOVSD as u16, + MOVSHDUP = super::Opcode::MOVSHDUP as u16, + MOVSLDUP = super::Opcode::MOVSLDUP as u16, + MOVSS = super::Opcode::MOVSS as u16, + MOVSX = super::Opcode::MOVSX as u16, + MOVSXD = super::Opcode::MOVSXD as u16, + MOVUPD = super::Opcode::MOVUPD as u16, + MOVUPS = super::Opcode::MOVUPS as u16, + MOVZX = super::Opcode::MOVZX as u16, + MPSADBW = super::Opcode::MPSADBW as u16, + MUL = super::Opcode::MUL as u16, + MULPD = super::Opcode::MULPD as u16, + MULPS = super::Opcode::MULPS as u16, + MULSD = super::Opcode::MULSD as u16, + MULSS = super::Opcode::MULSS as u16, + MULX = super::Opcode::MULX as u16, + MWAIT = super::Opcode::MWAIT as u16, + MWAITX = super::Opcode::MWAITX as u16, + NEG = super::Opcode::NEG as u16, + NOP = super::Opcode::NOP as u16, + NOT = super::Opcode::NOT as u16, + OR = super::Opcode::OR as u16, + ORPD = super::Opcode::ORPD as u16, + ORPS = super::Opcode::ORPS as u16, + OUT = super::Opcode::OUT as u16, + OUTS = super::Opcode::OUTS as u16, + PABSB = super::Opcode::PABSB as u16, + PABSD = super::Opcode::PABSD as u16, + PABSW = super::Opcode::PABSW as u16, + PACKSSDW = super::Opcode::PACKSSDW as u16, + PACKSSWB = super::Opcode::PACKSSWB as u16, + PACKUSDW = super::Opcode::PACKUSDW as u16, + PACKUSWB = super::Opcode::PACKUSWB as u16, + PADDB = super::Opcode::PADDB as u16, + PADDD = super::Opcode::PADDD as u16, + PADDQ = super::Opcode::PADDQ as u16, + PADDSB = super::Opcode::PADDSB as u16, + PADDSW = super::Opcode::PADDSW as u16, + PADDUSB = super::Opcode::PADDUSB as u16, + PADDUSW = super::Opcode::PADDUSW as u16, + PADDW = super::Opcode::PADDW as u16, + PALIGNR = super::Opcode::PALIGNR as u16, + PAND = super::Opcode::PAND as u16, + PANDN = super::Opcode::PANDN as u16, + PAVGB = super::Opcode::PAVGB as u16, + PAVGUSB = super::Opcode::PAVGUSB as u16, + PAVGW = super::Opcode::PAVGW as u16, + PBLENDVB = super::Opcode::PBLENDVB as u16, + PBLENDW = super::Opcode::PBLENDW as u16, + PCLMULQDQ = super::Opcode::PCLMULQDQ as u16, + PCMPEQB = super::Opcode::PCMPEQB as u16, + PCMPEQD = super::Opcode::PCMPEQD as u16, + PCMPEQQ = super::Opcode::PCMPEQQ as u16, + PCMPEQW = super::Opcode::PCMPEQW as u16, + PCMPESTRI = super::Opcode::PCMPESTRI as u16, + PCMPESTRM = super::Opcode::PCMPESTRM as u16, + PCMPGTB = super::Opcode::PCMPGTB as u16, + PCMPGTD = super::Opcode::PCMPGTD as u16, + PCMPGTQ = super::Opcode::PCMPGTQ as u16, + PCMPGTW = super::Opcode::PCMPGTW as u16, + PCMPISTRI = super::Opcode::PCMPISTRI as u16, + PCMPISTRM = super::Opcode::PCMPISTRM as u16, + PCONFIG = super::Opcode::PCONFIG as u16, + PDEP = super::Opcode::PDEP as u16, + PEXT = super::Opcode::PEXT as u16, + PEXTRB = super::Opcode::PEXTRB as u16, + PEXTRD = super::Opcode::PEXTRD as u16, + PEXTRQ = super::Opcode::PEXTRQ as u16, + PEXTRW = super::Opcode::PEXTRW as u16, + PF2ID = super::Opcode::PF2ID as u16, + PF2IW = super::Opcode::PF2IW as u16, + PFACC = super::Opcode::PFACC as u16, + PFADD = super::Opcode::PFADD as u16, + PFCMPEQ = super::Opcode::PFCMPEQ as u16, + PFCMPGE = super::Opcode::PFCMPGE as u16, + PFCMPGT = super::Opcode::PFCMPGT as u16, + PFMAX = super::Opcode::PFMAX as u16, + PFMIN = super::Opcode::PFMIN as u16, + PFMUL = super::Opcode::PFMUL as u16, + PFMULHRW = super::Opcode::PFMULHRW as u16, + PFNACC = super::Opcode::PFNACC as u16, + PFPNACC = super::Opcode::PFPNACC as u16, + PFRCP = super::Opcode::PFRCP as u16, + PFRCPIT1 = super::Opcode::PFRCPIT1 as u16, + PFRCPIT2 = super::Opcode::PFRCPIT2 as u16, + PFRSQIT1 = super::Opcode::PFRSQIT1 as u16, + PFRSQRT = super::Opcode::PFRSQRT as u16, + PFSUB = super::Opcode::PFSUB as u16, + PFSUBR = super::Opcode::PFSUBR as u16, + PHADDD = super::Opcode::PHADDD as u16, + PHADDSW = super::Opcode::PHADDSW as u16, + PHADDW = super::Opcode::PHADDW as u16, + PHMINPOSUW = super::Opcode::PHMINPOSUW as u16, + PHSUBD = super::Opcode::PHSUBD as u16, + PHSUBSW = super::Opcode::PHSUBSW as u16, + PHSUBW = super::Opcode::PHSUBW as u16, + PI2FD = super::Opcode::PI2FD as u16, + PI2FW = super::Opcode::PI2FW as u16, + PINSRB = super::Opcode::PINSRB as u16, + PINSRD = super::Opcode::PINSRD as u16, + PINSRQ = super::Opcode::PINSRQ as u16, + PINSRW = super::Opcode::PINSRW as u16, + PMADDUBSW = super::Opcode::PMADDUBSW as u16, + PMADDWD = super::Opcode::PMADDWD as u16, + PMAXSB = super::Opcode::PMAXSB as u16, + PMAXSD = super::Opcode::PMAXSD as u16, + PMAXSW = super::Opcode::PMAXSW as u16, + PMAXUB = super::Opcode::PMAXUB as u16, + PMAXUD = super::Opcode::PMAXUD as u16, + PMAXUW = super::Opcode::PMAXUW as u16, + PMINSB = super::Opcode::PMINSB as u16, + PMINSD = super::Opcode::PMINSD as u16, + PMINSW = super::Opcode::PMINSW as u16, + PMINUB = super::Opcode::PMINUB as u16, + PMINUD = super::Opcode::PMINUD as u16, + PMINUW = super::Opcode::PMINUW as u16, + PMOVMSKB = super::Opcode::PMOVMSKB as u16, + PMOVSXBD = super::Opcode::PMOVSXBD as u16, + PMOVSXBQ = super::Opcode::PMOVSXBQ as u16, + PMOVSXBW = super::Opcode::PMOVSXBW as u16, + PMOVSXDQ = super::Opcode::PMOVSXDQ as u16, + PMOVSXWD = super::Opcode::PMOVSXWD as u16, + PMOVSXWQ = super::Opcode::PMOVSXWQ as u16, + PMOVZXBD = super::Opcode::PMOVZXBD as u16, + PMOVZXBQ = super::Opcode::PMOVZXBQ as u16, + PMOVZXBW = super::Opcode::PMOVZXBW as u16, + PMOVZXDQ = super::Opcode::PMOVZXDQ as u16, + PMOVZXWD = super::Opcode::PMOVZXWD as u16, + PMOVZXWQ = super::Opcode::PMOVZXWQ as u16, + PMULDQ = super::Opcode::PMULDQ as u16, + PMULHRSW = super::Opcode::PMULHRSW as u16, + PMULHRW = super::Opcode::PMULHRW as u16, + PMULHUW = super::Opcode::PMULHUW as u16, + PMULHW = super::Opcode::PMULHW as u16, + PMULLD = super::Opcode::PMULLD as u16, + PMULLW = super::Opcode::PMULLW as u16, + PMULUDQ = super::Opcode::PMULUDQ as u16, + POP = super::Opcode::POP as u16, + POPCNT = super::Opcode::POPCNT as u16, + POPF = super::Opcode::POPF as u16, + POR = super::Opcode::POR as u16, + PREFETCH0 = super::Opcode::PREFETCH0 as u16, + PREFETCH1 = super::Opcode::PREFETCH1 as u16, + PREFETCH2 = super::Opcode::PREFETCH2 as u16, + PREFETCHNTA = super::Opcode::PREFETCHNTA as u16, + PREFETCHW = super::Opcode::PREFETCHW as u16, + PSADBW = super::Opcode::PSADBW as u16, + PSHUFB = super::Opcode::PSHUFB as u16, + PSHUFD = super::Opcode::PSHUFD as u16, + PSHUFHW = super::Opcode::PSHUFHW as u16, + PSHUFLW = super::Opcode::PSHUFLW as u16, + PSHUFW = super::Opcode::PSHUFW as u16, + PSIGNB = super::Opcode::PSIGNB as u16, + PSIGND = super::Opcode::PSIGND as u16, + PSIGNW = super::Opcode::PSIGNW as u16, + PSLLD = super::Opcode::PSLLD as u16, + PSLLDQ = super::Opcode::PSLLDQ as u16, + PSLLQ = super::Opcode::PSLLQ as u16, + PSLLW = super::Opcode::PSLLW as u16, + PSMASH = super::Opcode::PSMASH as u16, + PSRAD = super::Opcode::PSRAD as u16, + PSRAW = super::Opcode::PSRAW as u16, + PSRLD = super::Opcode::PSRLD as u16, + PSRLDQ = super::Opcode::PSRLDQ as u16, + PSRLQ = super::Opcode::PSRLQ as u16, + PSRLW = super::Opcode::PSRLW as u16, + PSUBB = super::Opcode::PSUBB as u16, + PSUBD = super::Opcode::PSUBD as u16, + PSUBQ = super::Opcode::PSUBQ as u16, + PSUBSB = super::Opcode::PSUBSB as u16, + PSUBSW = super::Opcode::PSUBSW as u16, + PSUBUSB = super::Opcode::PSUBUSB as u16, + PSUBUSW = super::Opcode::PSUBUSW as u16, + PSUBW = super::Opcode::PSUBW as u16, + PSWAPD = super::Opcode::PSWAPD as u16, + PTEST = super::Opcode::PTEST as u16, + PTWRITE = super::Opcode::PTWRITE as u16, + PUNPCKHBW = super::Opcode::PUNPCKHBW as u16, + PUNPCKHDQ = super::Opcode::PUNPCKHDQ as u16, + PUNPCKHQDQ = super::Opcode::PUNPCKHQDQ as u16, + PUNPCKHWD = super::Opcode::PUNPCKHWD as u16, + PUNPCKLBW = super::Opcode::PUNPCKLBW as u16, + PUNPCKLDQ = super::Opcode::PUNPCKLDQ as u16, + PUNPCKLQDQ = super::Opcode::PUNPCKLQDQ as u16, + PUNPCKLWD = super::Opcode::PUNPCKLWD as u16, + PUSH = super::Opcode::PUSH as u16, + PUSHF = super::Opcode::PUSHF as u16, + PVALIDATE = super::Opcode::PVALIDATE as u16, + PXOR = super::Opcode::PXOR as u16, + RCL = super::Opcode::RCL as u16, + RCPPS = super::Opcode::RCPPS as u16, + RCPSS = super::Opcode::RCPSS as u16, + RCR = super::Opcode::RCR as u16, + RDFSBASE = super::Opcode::RDFSBASE as u16, + RDGSBASE = super::Opcode::RDGSBASE as u16, + RDMSR = super::Opcode::RDMSR as u16, + RDPID = super::Opcode::RDPID as u16, + RDPKRU = super::Opcode::RDPKRU as u16, + RDPMC = super::Opcode::RDPMC as u16, + RDPRU = super::Opcode::RDPRU as u16, + RDRAND = super::Opcode::RDRAND as u16, + RDSEED = super::Opcode::RDSEED as u16, + RDTSC = super::Opcode::RDTSC as u16, + RDTSCP = super::Opcode::RDTSCP as u16, + RETF = super::Opcode::RETF as u16, + RETURN = super::Opcode::RETURN as u16, + RMPADJUST = super::Opcode::RMPADJUST as u16, + RMPUPDATE = super::Opcode::RMPUPDATE as u16, + ROL = super::Opcode::ROL as u16, + ROR = super::Opcode::ROR as u16, + RORX = super::Opcode::RORX as u16, + ROUNDPD = super::Opcode::ROUNDPD as u16, + ROUNDPS = super::Opcode::ROUNDPS as u16, + ROUNDSD = super::Opcode::ROUNDSD as u16, + ROUNDSS = super::Opcode::ROUNDSS as u16, + RSM = super::Opcode::RSM as u16, + RSQRTPS = super::Opcode::RSQRTPS as u16, + RSQRTSS = super::Opcode::RSQRTSS as u16, + RSTORSSP = super::Opcode::RSTORSSP as u16, + SAHF = super::Opcode::SAHF as u16, + SAL = super::Opcode::SAL as u16, + SALC = super::Opcode::SALC as u16, + SAR = super::Opcode::SAR as u16, + SARX = super::Opcode::SARX as u16, + SAVEPREVSSP = super::Opcode::SAVEPREVSSP as u16, + SBB = super::Opcode::SBB as u16, + SCAS = super::Opcode::SCAS as u16, + SEAMCALL = super::Opcode::SEAMCALL as u16, + SEAMOPS = super::Opcode::SEAMOPS as u16, + SEAMRET = super::Opcode::SEAMRET as u16, + SENDUIPI = super::Opcode::SENDUIPI as u16, + SETA = super::Opcode::SETA as u16, + SETAE = super::Opcode::SETAE as u16, + SETB = super::Opcode::SETB as u16, + SETBE = super::Opcode::SETBE as u16, + SETG = super::Opcode::SETG as u16, + SETGE = super::Opcode::SETGE as u16, + SETL = super::Opcode::SETL as u16, + SETLE = super::Opcode::SETLE as u16, + SETNO = super::Opcode::SETNO as u16, + SETNP = super::Opcode::SETNP as u16, + SETNS = super::Opcode::SETNS as u16, + SETNZ = super::Opcode::SETNZ as u16, + SETO = super::Opcode::SETO as u16, + SETP = super::Opcode::SETP as u16, + SETS = super::Opcode::SETS as u16, + SETSSBSY = super::Opcode::SETSSBSY as u16, + SETZ = super::Opcode::SETZ as u16, + SFENCE = super::Opcode::SFENCE as u16, + SGDT = super::Opcode::SGDT as u16, + SHA1MSG1 = super::Opcode::SHA1MSG1 as u16, + SHA1MSG2 = super::Opcode::SHA1MSG2 as u16, + SHA1NEXTE = super::Opcode::SHA1NEXTE as u16, + SHA1RNDS4 = super::Opcode::SHA1RNDS4 as u16, + SHA256MSG1 = super::Opcode::SHA256MSG1 as u16, + SHA256MSG2 = super::Opcode::SHA256MSG2 as u16, + SHA256RNDS2 = super::Opcode::SHA256RNDS2 as u16, + SHL = super::Opcode::SHL as u16, + SHLD = super::Opcode::SHLD as u16, + SHLX = super::Opcode::SHLX as u16, + SHR = super::Opcode::SHR as u16, + SHRD = super::Opcode::SHRD as u16, + SHRX = super::Opcode::SHRX as u16, + SHUFPD = super::Opcode::SHUFPD as u16, + SHUFPS = super::Opcode::SHUFPS as u16, + SIDT = super::Opcode::SIDT as u16, + SKINIT = super::Opcode::SKINIT as u16, + SLDT = super::Opcode::SLDT as u16, + SLHD = super::Opcode::SLHD as u16, + SMSW = super::Opcode::SMSW as u16, + SQRTPD = super::Opcode::SQRTPD as u16, + SQRTPS = super::Opcode::SQRTPS as u16, + SQRTSD = super::Opcode::SQRTSD as u16, + SQRTSS = super::Opcode::SQRTSS as u16, + STAC = super::Opcode::STAC as u16, + STC = super::Opcode::STC as u16, + STD = super::Opcode::STD as u16, + STGI = super::Opcode::STGI as u16, + STI = super::Opcode::STI as u16, + STMXCSR = super::Opcode::STMXCSR as u16, + STOS = super::Opcode::STOS as u16, + STR = super::Opcode::STR as u16, + STUI = super::Opcode::STUI as u16, + SUB = super::Opcode::SUB as u16, + SUBPD = super::Opcode::SUBPD as u16, + SUBPS = super::Opcode::SUBPS as u16, + SUBSD = super::Opcode::SUBSD as u16, + SUBSS = super::Opcode::SUBSS as u16, + SWAPGS = super::Opcode::SWAPGS as u16, + SYSCALL = super::Opcode::SYSCALL as u16, + SYSENTER = super::Opcode::SYSENTER as u16, + SYSEXIT = super::Opcode::SYSEXIT as u16, + SYSRET = super::Opcode::SYSRET as u16, + TDCALL = super::Opcode::TDCALL as u16, + TEST = super::Opcode::TEST as u16, + TESTUI = super::Opcode::TESTUI as u16, + TLBSYNC = super::Opcode::TLBSYNC as u16, + TPAUSE = super::Opcode::TPAUSE as u16, + TZCNT = super::Opcode::TZCNT as u16, + UCOMISD = super::Opcode::UCOMISD as u16, + UCOMISS = super::Opcode::UCOMISS as u16, + UD0 = super::Opcode::UD0 as u16, + UD1 = super::Opcode::UD1 as u16, + UD2 = super::Opcode::UD2 as u16, + UIRET = super::Opcode::UIRET as u16, + UMONITOR = super::Opcode::UMONITOR as u16, + UMWAIT = super::Opcode::UMWAIT as u16, + UNPCKHPD = super::Opcode::UNPCKHPD as u16, + UNPCKHPS = super::Opcode::UNPCKHPS as u16, + UNPCKLPD = super::Opcode::UNPCKLPD as u16, + UNPCKLPS = super::Opcode::UNPCKLPS as u16, + V4FMADDPS = super::Opcode::V4FMADDPS as u16, + V4FMADDSS = super::Opcode::V4FMADDSS as u16, + V4FNMADDPS = super::Opcode::V4FNMADDPS as u16, + V4FNMADDSS = super::Opcode::V4FNMADDSS as u16, + VADDPD = super::Opcode::VADDPD as u16, + VADDPS = super::Opcode::VADDPS as u16, + VADDSD = super::Opcode::VADDSD as u16, + VADDSS = super::Opcode::VADDSS as u16, + VADDSUBPD = super::Opcode::VADDSUBPD as u16, + VADDSUBPS = super::Opcode::VADDSUBPS as u16, + VAESDEC = super::Opcode::VAESDEC as u16, + VAESDECLAST = super::Opcode::VAESDECLAST as u16, + VAESENC = super::Opcode::VAESENC as u16, + VAESENCLAST = super::Opcode::VAESENCLAST as u16, + VAESIMC = super::Opcode::VAESIMC as u16, + VAESKEYGENASSIST = super::Opcode::VAESKEYGENASSIST as u16, + VALIGND = super::Opcode::VALIGND as u16, + VALIGNQ = super::Opcode::VALIGNQ as u16, + VANDNPD = super::Opcode::VANDNPD as u16, + VANDNPS = super::Opcode::VANDNPS as u16, + VANDPD = super::Opcode::VANDPD as u16, + VANDPS = super::Opcode::VANDPS as u16, + VBLENDMPD = super::Opcode::VBLENDMPD as u16, + VBLENDMPS = super::Opcode::VBLENDMPS as u16, + VBLENDPD = super::Opcode::VBLENDPD as u16, + VBLENDPS = super::Opcode::VBLENDPS as u16, + VBLENDVPD = super::Opcode::VBLENDVPD as u16, + VBLENDVPS = super::Opcode::VBLENDVPS as u16, + VBROADCASTF128 = super::Opcode::VBROADCASTF128 as u16, + VBROADCASTF32X2 = super::Opcode::VBROADCASTF32X2 as u16, + VBROADCASTF32X4 = super::Opcode::VBROADCASTF32X4 as u16, + VBROADCASTF32X8 = super::Opcode::VBROADCASTF32X8 as u16, + VBROADCASTF64X2 = super::Opcode::VBROADCASTF64X2 as u16, + VBROADCASTF64X4 = super::Opcode::VBROADCASTF64X4 as u16, + VBROADCASTI128 = super::Opcode::VBROADCASTI128 as u16, + VBROADCASTI32X2 = super::Opcode::VBROADCASTI32X2 as u16, + VBROADCASTI32X4 = super::Opcode::VBROADCASTI32X4 as u16, + VBROADCASTI32X8 = super::Opcode::VBROADCASTI32X8 as u16, + VBROADCASTI64X2 = super::Opcode::VBROADCASTI64X2 as u16, + VBROADCASTI64X4 = super::Opcode::VBROADCASTI64X4 as u16, + VBROADCASTSD = super::Opcode::VBROADCASTSD as u16, + VBROADCASTSS = super::Opcode::VBROADCASTSS as u16, + VCMPPD = super::Opcode::VCMPPD as u16, + VCMPPS = super::Opcode::VCMPPS as u16, + VCMPSD = super::Opcode::VCMPSD as u16, + VCMPSS = super::Opcode::VCMPSS as u16, + VCOMISD = super::Opcode::VCOMISD as u16, + VCOMISS = super::Opcode::VCOMISS as u16, + VCOMPRESSD = super::Opcode::VCOMPRESSD as u16, + VCOMPRESSPD = super::Opcode::VCOMPRESSPD as u16, + VCOMPRESSPS = super::Opcode::VCOMPRESSPS as u16, + VCOMPRESSQ = super::Opcode::VCOMPRESSQ as u16, + VCVTDQ2PD = super::Opcode::VCVTDQ2PD as u16, + VCVTDQ2PS = super::Opcode::VCVTDQ2PS as u16, + VCVTNE2PS2BF16 = super::Opcode::VCVTNE2PS2BF16 as u16, + VCVTNEPS2BF16 = super::Opcode::VCVTNEPS2BF16 as u16, + VCVTPD2DQ = super::Opcode::VCVTPD2DQ as u16, + VCVTPD2PS = super::Opcode::VCVTPD2PS as u16, + VCVTPD2QQ = super::Opcode::VCVTPD2QQ as u16, + VCVTPD2UDQ = super::Opcode::VCVTPD2UDQ as u16, + VCVTPD2UQQ = super::Opcode::VCVTPD2UQQ as u16, + VCVTPH2PS = super::Opcode::VCVTPH2PS as u16, + VCVTPS2DQ = super::Opcode::VCVTPS2DQ as u16, + VCVTPS2PD = super::Opcode::VCVTPS2PD as u16, + VCVTPS2PH = super::Opcode::VCVTPS2PH as u16, + VCVTPS2QQ = super::Opcode::VCVTPS2QQ as u16, + VCVTPS2UDQ = super::Opcode::VCVTPS2UDQ as u16, + VCVTPS2UQQ = super::Opcode::VCVTPS2UQQ as u16, + VCVTQQ2PD = super::Opcode::VCVTQQ2PD as u16, + VCVTQQ2PS = super::Opcode::VCVTQQ2PS as u16, + VCVTSD2SI = super::Opcode::VCVTSD2SI as u16, + VCVTSD2SS = super::Opcode::VCVTSD2SS as u16, + VCVTSD2USI = super::Opcode::VCVTSD2USI as u16, + VCVTSI2SD = super::Opcode::VCVTSI2SD as u16, + VCVTSI2SS = super::Opcode::VCVTSI2SS as u16, + VCVTSS2SD = super::Opcode::VCVTSS2SD as u16, + VCVTSS2SI = super::Opcode::VCVTSS2SI as u16, + VCVTSS2USI = super::Opcode::VCVTSS2USI as u16, + VCVTTPD2DQ = super::Opcode::VCVTTPD2DQ as u16, + VCVTTPD2QQ = super::Opcode::VCVTTPD2QQ as u16, + VCVTTPD2UDQ = super::Opcode::VCVTTPD2UDQ as u16, + VCVTTPD2UQQ = super::Opcode::VCVTTPD2UQQ as u16, + VCVTTPS2DQ = super::Opcode::VCVTTPS2DQ as u16, + VCVTTPS2QQ = super::Opcode::VCVTTPS2QQ as u16, + VCVTTPS2UDQ = super::Opcode::VCVTTPS2UDQ as u16, + VCVTTPS2UQQ = super::Opcode::VCVTTPS2UQQ as u16, + VCVTTSD2SI = super::Opcode::VCVTTSD2SI as u16, + VCVTTSD2USI = super::Opcode::VCVTTSD2USI as u16, + VCVTTSS2SI = super::Opcode::VCVTTSS2SI as u16, + VCVTTSS2USI = super::Opcode::VCVTTSS2USI as u16, + VCVTUDQ2PD = super::Opcode::VCVTUDQ2PD as u16, + VCVTUDQ2PS = super::Opcode::VCVTUDQ2PS as u16, + VCVTUQQ2PD = super::Opcode::VCVTUQQ2PD as u16, + VCVTUQQ2PS = super::Opcode::VCVTUQQ2PS as u16, + VCVTUSI2SD = super::Opcode::VCVTUSI2SD as u16, + VCVTUSI2SS = super::Opcode::VCVTUSI2SS as u16, + VCVTUSI2USD = super::Opcode::VCVTUSI2USD as u16, + VCVTUSI2USS = super::Opcode::VCVTUSI2USS as u16, + VDBPSADBW = super::Opcode::VDBPSADBW as u16, + VDIVPD = super::Opcode::VDIVPD as u16, + VDIVPS = super::Opcode::VDIVPS as u16, + VDIVSD = super::Opcode::VDIVSD as u16, + VDIVSS = super::Opcode::VDIVSS as u16, + VDPBF16PS = super::Opcode::VDPBF16PS as u16, + VDPPD = super::Opcode::VDPPD as u16, + VDPPS = super::Opcode::VDPPS as u16, + VERR = super::Opcode::VERR as u16, + VERW = super::Opcode::VERW as u16, + VEXP2PD = super::Opcode::VEXP2PD as u16, + VEXP2PS = super::Opcode::VEXP2PS as u16, + VEXP2SD = super::Opcode::VEXP2SD as u16, + VEXP2SS = super::Opcode::VEXP2SS as u16, + VEXPANDPD = super::Opcode::VEXPANDPD as u16, + VEXPANDPS = super::Opcode::VEXPANDPS as u16, + VEXTRACTF128 = super::Opcode::VEXTRACTF128 as u16, + VEXTRACTF32X4 = super::Opcode::VEXTRACTF32X4 as u16, + VEXTRACTF32X8 = super::Opcode::VEXTRACTF32X8 as u16, + VEXTRACTF64X2 = super::Opcode::VEXTRACTF64X2 as u16, + VEXTRACTF64X4 = super::Opcode::VEXTRACTF64X4 as u16, + VEXTRACTI128 = super::Opcode::VEXTRACTI128 as u16, + VEXTRACTI32X4 = super::Opcode::VEXTRACTI32X4 as u16, + VEXTRACTI32X8 = super::Opcode::VEXTRACTI32X8 as u16, + VEXTRACTI64X2 = super::Opcode::VEXTRACTI64X2 as u16, + VEXTRACTI64X4 = super::Opcode::VEXTRACTI64X4 as u16, + VEXTRACTPS = super::Opcode::VEXTRACTPS as u16, + VFIXUPIMMPD = super::Opcode::VFIXUPIMMPD as u16, + VFIXUPIMMPS = super::Opcode::VFIXUPIMMPS as u16, + VFIXUPIMMSD = super::Opcode::VFIXUPIMMSD as u16, + VFIXUPIMMSS = super::Opcode::VFIXUPIMMSS as u16, + VFMADD132PD = super::Opcode::VFMADD132PD as u16, + VFMADD132PS = super::Opcode::VFMADD132PS as u16, + VFMADD132SD = super::Opcode::VFMADD132SD as u16, + VFMADD132SS = super::Opcode::VFMADD132SS as u16, + VFMADD213PD = super::Opcode::VFMADD213PD as u16, + VFMADD213PS = super::Opcode::VFMADD213PS as u16, + VFMADD213SD = super::Opcode::VFMADD213SD as u16, + VFMADD213SS = super::Opcode::VFMADD213SS as u16, + VFMADD231PD = super::Opcode::VFMADD231PD as u16, + VFMADD231PS = super::Opcode::VFMADD231PS as u16, + VFMADD231SD = super::Opcode::VFMADD231SD as u16, + VFMADD231SS = super::Opcode::VFMADD231SS as u16, + VFMADDSUB132PD = super::Opcode::VFMADDSUB132PD as u16, + VFMADDSUB132PS = super::Opcode::VFMADDSUB132PS as u16, + VFMADDSUB213PD = super::Opcode::VFMADDSUB213PD as u16, + VFMADDSUB213PS = super::Opcode::VFMADDSUB213PS as u16, + VFMADDSUB231PD = super::Opcode::VFMADDSUB231PD as u16, + VFMADDSUB231PS = super::Opcode::VFMADDSUB231PS as u16, + VFMSUB132PD = super::Opcode::VFMSUB132PD as u16, + VFMSUB132PS = super::Opcode::VFMSUB132PS as u16, + VFMSUB132SD = super::Opcode::VFMSUB132SD as u16, + VFMSUB132SS = super::Opcode::VFMSUB132SS as u16, + VFMSUB213PD = super::Opcode::VFMSUB213PD as u16, + VFMSUB213PS = super::Opcode::VFMSUB213PS as u16, + VFMSUB213SD = super::Opcode::VFMSUB213SD as u16, + VFMSUB213SS = super::Opcode::VFMSUB213SS as u16, + VFMSUB231PD = super::Opcode::VFMSUB231PD as u16, + VFMSUB231PS = super::Opcode::VFMSUB231PS as u16, + VFMSUB231SD = super::Opcode::VFMSUB231SD as u16, + VFMSUB231SS = super::Opcode::VFMSUB231SS as u16, + VFMSUBADD132PD = super::Opcode::VFMSUBADD132PD as u16, + VFMSUBADD132PS = super::Opcode::VFMSUBADD132PS as u16, + VFMSUBADD213PD = super::Opcode::VFMSUBADD213PD as u16, + VFMSUBADD213PS = super::Opcode::VFMSUBADD213PS as u16, + VFMSUBADD231PD = super::Opcode::VFMSUBADD231PD as u16, + VFMSUBADD231PS = super::Opcode::VFMSUBADD231PS as u16, + VFNMADD132PD = super::Opcode::VFNMADD132PD as u16, + VFNMADD132PS = super::Opcode::VFNMADD132PS as u16, + VFNMADD132SD = super::Opcode::VFNMADD132SD as u16, + VFNMADD132SS = super::Opcode::VFNMADD132SS as u16, + VFNMADD213PD = super::Opcode::VFNMADD213PD as u16, + VFNMADD213PS = super::Opcode::VFNMADD213PS as u16, + VFNMADD213SD = super::Opcode::VFNMADD213SD as u16, + VFNMADD213SS = super::Opcode::VFNMADD213SS as u16, + VFNMADD231PD = super::Opcode::VFNMADD231PD as u16, + VFNMADD231PS = super::Opcode::VFNMADD231PS as u16, + VFNMADD231SD = super::Opcode::VFNMADD231SD as u16, + VFNMADD231SS = super::Opcode::VFNMADD231SS as u16, + VFNMSUB132PD = super::Opcode::VFNMSUB132PD as u16, + VFNMSUB132PS = super::Opcode::VFNMSUB132PS as u16, + VFNMSUB132SD = super::Opcode::VFNMSUB132SD as u16, + VFNMSUB132SS = super::Opcode::VFNMSUB132SS as u16, + VFNMSUB213PD = super::Opcode::VFNMSUB213PD as u16, + VFNMSUB213PS = super::Opcode::VFNMSUB213PS as u16, + VFNMSUB213SD = super::Opcode::VFNMSUB213SD as u16, + VFNMSUB213SS = super::Opcode::VFNMSUB213SS as u16, + VFNMSUB231PD = super::Opcode::VFNMSUB231PD as u16, + VFNMSUB231PS = super::Opcode::VFNMSUB231PS as u16, + VFNMSUB231SD = super::Opcode::VFNMSUB231SD as u16, + VFNMSUB231SS = super::Opcode::VFNMSUB231SS as u16, + VFPCLASSPD = super::Opcode::VFPCLASSPD as u16, + VFPCLASSPS = super::Opcode::VFPCLASSPS as u16, + VFPCLASSSD = super::Opcode::VFPCLASSSD as u16, + VFPCLASSSS = super::Opcode::VFPCLASSSS as u16, + VGATHERDPD = super::Opcode::VGATHERDPD as u16, + VGATHERDPS = super::Opcode::VGATHERDPS as u16, + VGATHERPF0DPD = super::Opcode::VGATHERPF0DPD as u16, + VGATHERPF0DPS = super::Opcode::VGATHERPF0DPS as u16, + VGATHERPF0QPD = super::Opcode::VGATHERPF0QPD as u16, + VGATHERPF0QPS = super::Opcode::VGATHERPF0QPS as u16, + VGATHERPF1DPD = super::Opcode::VGATHERPF1DPD as u16, + VGATHERPF1DPS = super::Opcode::VGATHERPF1DPS as u16, + VGATHERPF1QPD = super::Opcode::VGATHERPF1QPD as u16, + VGATHERPF1QPS = super::Opcode::VGATHERPF1QPS as u16, + VGATHERQPD = super::Opcode::VGATHERQPD as u16, + VGATHERQPS = super::Opcode::VGATHERQPS as u16, + VGETEXPPD = super::Opcode::VGETEXPPD as u16, + VGETEXPPS = super::Opcode::VGETEXPPS as u16, + VGETEXPSD = super::Opcode::VGETEXPSD as u16, + VGETEXPSS = super::Opcode::VGETEXPSS as u16, + VGETMANTPD = super::Opcode::VGETMANTPD as u16, + VGETMANTPS = super::Opcode::VGETMANTPS as u16, + VGETMANTSD = super::Opcode::VGETMANTSD as u16, + VGETMANTSS = super::Opcode::VGETMANTSS as u16, + VGF2P8AFFINEINVQB = super::Opcode::VGF2P8AFFINEINVQB as u16, + VGF2P8AFFINEQB = super::Opcode::VGF2P8AFFINEQB as u16, + VGF2P8MULB = super::Opcode::VGF2P8MULB as u16, + VHADDPD = super::Opcode::VHADDPD as u16, + VHADDPS = super::Opcode::VHADDPS as u16, + VHSUBPD = super::Opcode::VHSUBPD as u16, + VHSUBPS = super::Opcode::VHSUBPS as u16, + VINSERTF128 = super::Opcode::VINSERTF128 as u16, + VINSERTF32X4 = super::Opcode::VINSERTF32X4 as u16, + VINSERTF32X8 = super::Opcode::VINSERTF32X8 as u16, + VINSERTF64X2 = super::Opcode::VINSERTF64X2 as u16, + VINSERTF64X4 = super::Opcode::VINSERTF64X4 as u16, + VINSERTI128 = super::Opcode::VINSERTI128 as u16, + VINSERTI32X4 = super::Opcode::VINSERTI32X4 as u16, + VINSERTI32X8 = super::Opcode::VINSERTI32X8 as u16, + VINSERTI64X2 = super::Opcode::VINSERTI64X2 as u16, + VINSERTI64X4 = super::Opcode::VINSERTI64X4 as u16, + VINSERTPS = super::Opcode::VINSERTPS as u16, + VLDDQU = super::Opcode::VLDDQU as u16, + VLDMXCSR = super::Opcode::VLDMXCSR as u16, + VMASKMOVDQU = super::Opcode::VMASKMOVDQU as u16, + VMASKMOVPD = super::Opcode::VMASKMOVPD as u16, + VMASKMOVPS = super::Opcode::VMASKMOVPS as u16, + VMAXPD = super::Opcode::VMAXPD as u16, + VMAXPS = super::Opcode::VMAXPS as u16, + VMAXSD = super::Opcode::VMAXSD as u16, + VMAXSS = super::Opcode::VMAXSS as u16, + VMCALL = super::Opcode::VMCALL as u16, + VMCLEAR = super::Opcode::VMCLEAR as u16, + VMFUNC = super::Opcode::VMFUNC as u16, + VMINPD = super::Opcode::VMINPD as u16, + VMINPS = super::Opcode::VMINPS as u16, + VMINSD = super::Opcode::VMINSD as u16, + VMINSS = super::Opcode::VMINSS as u16, + VMLAUNCH = super::Opcode::VMLAUNCH as u16, + VMLOAD = super::Opcode::VMLOAD as u16, + VMMCALL = super::Opcode::VMMCALL as u16, + VMOVAPD = super::Opcode::VMOVAPD as u16, + VMOVAPS = super::Opcode::VMOVAPS as u16, + VMOVD = super::Opcode::VMOVD as u16, + VMOVDDUP = super::Opcode::VMOVDDUP as u16, + VMOVDQA = super::Opcode::VMOVDQA as u16, + VMOVDQA32 = super::Opcode::VMOVDQA32 as u16, + VMOVDQA64 = super::Opcode::VMOVDQA64 as u16, + VMOVDQU = super::Opcode::VMOVDQU as u16, + VMOVDQU16 = super::Opcode::VMOVDQU16 as u16, + VMOVDQU32 = super::Opcode::VMOVDQU32 as u16, + VMOVDQU64 = super::Opcode::VMOVDQU64 as u16, + VMOVDQU8 = super::Opcode::VMOVDQU8 as u16, + VMOVHLPS = super::Opcode::VMOVHLPS as u16, + VMOVHPD = super::Opcode::VMOVHPD as u16, + VMOVHPS = super::Opcode::VMOVHPS as u16, + VMOVLHPS = super::Opcode::VMOVLHPS as u16, + VMOVLPD = super::Opcode::VMOVLPD as u16, + VMOVLPS = super::Opcode::VMOVLPS as u16, + VMOVMSKPD = super::Opcode::VMOVMSKPD as u16, + VMOVMSKPS = super::Opcode::VMOVMSKPS as u16, + VMOVNTDQ = super::Opcode::VMOVNTDQ as u16, + VMOVNTDQA = super::Opcode::VMOVNTDQA as u16, + VMOVNTPD = super::Opcode::VMOVNTPD as u16, + VMOVNTPS = super::Opcode::VMOVNTPS as u16, + VMOVQ = super::Opcode::VMOVQ as u16, + VMOVSD = super::Opcode::VMOVSD as u16, + VMOVSHDUP = super::Opcode::VMOVSHDUP as u16, + VMOVSLDUP = super::Opcode::VMOVSLDUP as u16, + VMOVSS = super::Opcode::VMOVSS as u16, + VMOVUPD = super::Opcode::VMOVUPD as u16, + VMOVUPS = super::Opcode::VMOVUPS as u16, + VMPSADBW = super::Opcode::VMPSADBW as u16, + VMPTRLD = super::Opcode::VMPTRLD as u16, + VMPTRST = super::Opcode::VMPTRST as u16, + VMREAD = super::Opcode::VMREAD as u16, + VMRESUME = super::Opcode::VMRESUME as u16, + VMRUN = super::Opcode::VMRUN as u16, + VMSAVE = super::Opcode::VMSAVE as u16, + VMULPD = super::Opcode::VMULPD as u16, + VMULPS = super::Opcode::VMULPS as u16, + VMULSD = super::Opcode::VMULSD as u16, + VMULSS = super::Opcode::VMULSS as u16, + VMWRITE = super::Opcode::VMWRITE as u16, + VMXOFF = super::Opcode::VMXOFF as u16, + VMXON = super::Opcode::VMXON as u16, + VORPD = super::Opcode::VORPD as u16, + VORPS = super::Opcode::VORPS as u16, + VP2INTERSECTD = super::Opcode::VP2INTERSECTD as u16, + VP2INTERSECTQ = super::Opcode::VP2INTERSECTQ as u16, + VP4DPWSSD = super::Opcode::VP4DPWSSD as u16, + VP4DPWSSDS = super::Opcode::VP4DPWSSDS as u16, + VPABSB = super::Opcode::VPABSB as u16, + VPABSD = super::Opcode::VPABSD as u16, + VPABSQ = super::Opcode::VPABSQ as u16, + VPABSW = super::Opcode::VPABSW as u16, + VPACKSSDW = super::Opcode::VPACKSSDW as u16, + VPACKSSWB = super::Opcode::VPACKSSWB as u16, + VPACKUSDW = super::Opcode::VPACKUSDW as u16, + VPACKUSWB = super::Opcode::VPACKUSWB as u16, + VPADDB = super::Opcode::VPADDB as u16, + VPADDD = super::Opcode::VPADDD as u16, + VPADDQ = super::Opcode::VPADDQ as u16, + VPADDSB = super::Opcode::VPADDSB as u16, + VPADDSW = super::Opcode::VPADDSW as u16, + VPADDUSB = super::Opcode::VPADDUSB as u16, + VPADDUSW = super::Opcode::VPADDUSW as u16, + VPADDW = super::Opcode::VPADDW as u16, + VPALIGNR = super::Opcode::VPALIGNR as u16, + VPAND = super::Opcode::VPAND as u16, + VPANDD = super::Opcode::VPANDD as u16, + VPANDN = super::Opcode::VPANDN as u16, + VPANDND = super::Opcode::VPANDND as u16, + VPANDNQ = super::Opcode::VPANDNQ as u16, + VPANDQ = super::Opcode::VPANDQ as u16, + VPAVGB = super::Opcode::VPAVGB as u16, + VPAVGW = super::Opcode::VPAVGW as u16, + VPBLENDD = super::Opcode::VPBLENDD as u16, + VPBLENDMB = super::Opcode::VPBLENDMB as u16, + VPBLENDMD = super::Opcode::VPBLENDMD as u16, + VPBLENDMQ = super::Opcode::VPBLENDMQ as u16, + VPBLENDMW = super::Opcode::VPBLENDMW as u16, + VPBLENDVB = super::Opcode::VPBLENDVB as u16, + VPBLENDW = super::Opcode::VPBLENDW as u16, + VPBROADCASTB = super::Opcode::VPBROADCASTB as u16, + VPBROADCASTD = super::Opcode::VPBROADCASTD as u16, + VPBROADCASTM = super::Opcode::VPBROADCASTM as u16, + VPBROADCASTMB2Q = super::Opcode::VPBROADCASTMB2Q as u16, + VPBROADCASTMW2D = super::Opcode::VPBROADCASTMW2D as u16, + VPBROADCASTQ = super::Opcode::VPBROADCASTQ as u16, + VPBROADCASTW = super::Opcode::VPBROADCASTW as u16, + VPCLMULQDQ = super::Opcode::VPCLMULQDQ as u16, + VPCMPB = super::Opcode::VPCMPB as u16, + VPCMPD = super::Opcode::VPCMPD as u16, + VPCMPEQB = super::Opcode::VPCMPEQB as u16, + VPCMPEQD = super::Opcode::VPCMPEQD as u16, + VPCMPEQQ = super::Opcode::VPCMPEQQ as u16, + VPCMPEQW = super::Opcode::VPCMPEQW as u16, + VPCMPESTRI = super::Opcode::VPCMPESTRI as u16, + VPCMPESTRM = super::Opcode::VPCMPESTRM as u16, + VPCMPGTB = super::Opcode::VPCMPGTB as u16, + VPCMPGTD = super::Opcode::VPCMPGTD as u16, + VPCMPGTQ = super::Opcode::VPCMPGTQ as u16, + VPCMPGTW = super::Opcode::VPCMPGTW as u16, + VPCMPISTRI = super::Opcode::VPCMPISTRI as u16, + VPCMPISTRM = super::Opcode::VPCMPISTRM as u16, + VPCMPQ = super::Opcode::VPCMPQ as u16, + VPCMPUB = super::Opcode::VPCMPUB as u16, + VPCMPUD = super::Opcode::VPCMPUD as u16, + VPCMPUQ = super::Opcode::VPCMPUQ as u16, + VPCMPUW = super::Opcode::VPCMPUW as u16, + VPCMPW = super::Opcode::VPCMPW as u16, + VPCOMPRESSB = super::Opcode::VPCOMPRESSB as u16, + VPCOMPRESSD = super::Opcode::VPCOMPRESSD as u16, + VPCOMPRESSQ = super::Opcode::VPCOMPRESSQ as u16, + VPCOMPRESSW = super::Opcode::VPCOMPRESSW as u16, + VPCONFLICTD = super::Opcode::VPCONFLICTD as u16, + VPCONFLICTQ = super::Opcode::VPCONFLICTQ as u16, + VPDPBUSD = super::Opcode::VPDPBUSD as u16, + VPDPBUSDS = super::Opcode::VPDPBUSDS as u16, + VPDPWSSD = super::Opcode::VPDPWSSD as u16, + VPDPWSSDS = super::Opcode::VPDPWSSDS as u16, + VPERM2F128 = super::Opcode::VPERM2F128 as u16, + VPERM2I128 = super::Opcode::VPERM2I128 as u16, + VPERMB = super::Opcode::VPERMB as u16, + VPERMD = super::Opcode::VPERMD as u16, + VPERMI2B = super::Opcode::VPERMI2B as u16, + VPERMI2D = super::Opcode::VPERMI2D as u16, + VPERMI2PD = super::Opcode::VPERMI2PD as u16, + VPERMI2PS = super::Opcode::VPERMI2PS as u16, + VPERMI2Q = super::Opcode::VPERMI2Q as u16, + VPERMI2W = super::Opcode::VPERMI2W as u16, + VPERMILPD = super::Opcode::VPERMILPD as u16, + VPERMILPS = super::Opcode::VPERMILPS as u16, + VPERMPD = super::Opcode::VPERMPD as u16, + VPERMPS = super::Opcode::VPERMPS as u16, + VPERMQ = super::Opcode::VPERMQ as u16, + VPERMT2B = super::Opcode::VPERMT2B as u16, + VPERMT2D = super::Opcode::VPERMT2D as u16, + VPERMT2PD = super::Opcode::VPERMT2PD as u16, + VPERMT2PS = super::Opcode::VPERMT2PS as u16, + VPERMT2Q = super::Opcode::VPERMT2Q as u16, + VPERMT2W = super::Opcode::VPERMT2W as u16, + VPERMW = super::Opcode::VPERMW as u16, + VPEXPANDB = super::Opcode::VPEXPANDB as u16, + VPEXPANDD = super::Opcode::VPEXPANDD as u16, + VPEXPANDQ = super::Opcode::VPEXPANDQ as u16, + VPEXPANDW = super::Opcode::VPEXPANDW as u16, + VPEXTRB = super::Opcode::VPEXTRB as u16, + VPEXTRD = super::Opcode::VPEXTRD as u16, + VPEXTRQ = super::Opcode::VPEXTRQ as u16, + VPEXTRW = super::Opcode::VPEXTRW as u16, + VPGATHERDD = super::Opcode::VPGATHERDD as u16, + VPGATHERDQ = super::Opcode::VPGATHERDQ as u16, + VPGATHERQD = super::Opcode::VPGATHERQD as u16, + VPGATHERQQ = super::Opcode::VPGATHERQQ as u16, + VPHADDD = super::Opcode::VPHADDD as u16, + VPHADDSW = super::Opcode::VPHADDSW as u16, + VPHADDW = super::Opcode::VPHADDW as u16, + VPHMINPOSUW = super::Opcode::VPHMINPOSUW as u16, + VPHSUBD = super::Opcode::VPHSUBD as u16, + VPHSUBSW = super::Opcode::VPHSUBSW as u16, + VPHSUBW = super::Opcode::VPHSUBW as u16, + VPINSRB = super::Opcode::VPINSRB as u16, + VPINSRD = super::Opcode::VPINSRD as u16, + VPINSRQ = super::Opcode::VPINSRQ as u16, + VPINSRW = super::Opcode::VPINSRW as u16, + VPLZCNTD = super::Opcode::VPLZCNTD as u16, + VPLZCNTQ = super::Opcode::VPLZCNTQ as u16, + VPMADD52HUQ = super::Opcode::VPMADD52HUQ as u16, + VPMADD52LUQ = super::Opcode::VPMADD52LUQ as u16, + VPMADDUBSW = super::Opcode::VPMADDUBSW as u16, + VPMADDWD = super::Opcode::VPMADDWD as u16, + VPMASKMOVD = super::Opcode::VPMASKMOVD as u16, + VPMASKMOVQ = super::Opcode::VPMASKMOVQ as u16, + VPMAXSB = super::Opcode::VPMAXSB as u16, + VPMAXSD = super::Opcode::VPMAXSD as u16, + VPMAXSQ = super::Opcode::VPMAXSQ as u16, + VPMAXSW = super::Opcode::VPMAXSW as u16, + VPMAXUB = super::Opcode::VPMAXUB as u16, + VPMAXUD = super::Opcode::VPMAXUD as u16, + VPMAXUQ = super::Opcode::VPMAXUQ as u16, + VPMAXUW = super::Opcode::VPMAXUW as u16, + VPMINSB = super::Opcode::VPMINSB as u16, + VPMINSD = super::Opcode::VPMINSD as u16, + VPMINSQ = super::Opcode::VPMINSQ as u16, + VPMINSW = super::Opcode::VPMINSW as u16, + VPMINUB = super::Opcode::VPMINUB as u16, + VPMINUD = super::Opcode::VPMINUD as u16, + VPMINUQ = super::Opcode::VPMINUQ as u16, + VPMINUW = super::Opcode::VPMINUW as u16, + VPMOVB2D = super::Opcode::VPMOVB2D as u16, + VPMOVB2M = super::Opcode::VPMOVB2M as u16, + VPMOVD2M = super::Opcode::VPMOVD2M as u16, + VPMOVDB = super::Opcode::VPMOVDB as u16, + VPMOVDW = super::Opcode::VPMOVDW as u16, + VPMOVM2B = super::Opcode::VPMOVM2B as u16, + VPMOVM2D = super::Opcode::VPMOVM2D as u16, + VPMOVM2Q = super::Opcode::VPMOVM2Q as u16, + VPMOVM2W = super::Opcode::VPMOVM2W as u16, + VPMOVMSKB = super::Opcode::VPMOVMSKB as u16, + VPMOVQ2M = super::Opcode::VPMOVQ2M as u16, + VPMOVQB = super::Opcode::VPMOVQB as u16, + VPMOVQD = super::Opcode::VPMOVQD as u16, + VPMOVQW = super::Opcode::VPMOVQW as u16, + VPMOVSDB = super::Opcode::VPMOVSDB as u16, + VPMOVSDW = super::Opcode::VPMOVSDW as u16, + VPMOVSQB = super::Opcode::VPMOVSQB as u16, + VPMOVSQD = super::Opcode::VPMOVSQD as u16, + VPMOVSQW = super::Opcode::VPMOVSQW as u16, + VPMOVSWB = super::Opcode::VPMOVSWB as u16, + VPMOVSXBD = super::Opcode::VPMOVSXBD as u16, + VPMOVSXBQ = super::Opcode::VPMOVSXBQ as u16, + VPMOVSXBW = super::Opcode::VPMOVSXBW as u16, + VPMOVSXDQ = super::Opcode::VPMOVSXDQ as u16, + VPMOVSXWD = super::Opcode::VPMOVSXWD as u16, + VPMOVSXWQ = super::Opcode::VPMOVSXWQ as u16, + VPMOVUSDB = super::Opcode::VPMOVUSDB as u16, + VPMOVUSDW = super::Opcode::VPMOVUSDW as u16, + VPMOVUSQB = super::Opcode::VPMOVUSQB as u16, + VPMOVUSQD = super::Opcode::VPMOVUSQD as u16, + VPMOVUSQW = super::Opcode::VPMOVUSQW as u16, + VPMOVUSWB = super::Opcode::VPMOVUSWB as u16, + VPMOVW2M = super::Opcode::VPMOVW2M as u16, + VPMOVWB = super::Opcode::VPMOVWB as u16, + VPMOVZXBD = super::Opcode::VPMOVZXBD as u16, + VPMOVZXBQ = super::Opcode::VPMOVZXBQ as u16, + VPMOVZXBW = super::Opcode::VPMOVZXBW as u16, + VPMOVZXDQ = super::Opcode::VPMOVZXDQ as u16, + VPMOVZXWD = super::Opcode::VPMOVZXWD as u16, + VPMOVZXWQ = super::Opcode::VPMOVZXWQ as u16, + VPMULDQ = super::Opcode::VPMULDQ as u16, + VPMULHRSW = super::Opcode::VPMULHRSW as u16, + VPMULHUW = super::Opcode::VPMULHUW as u16, + VPMULHW = super::Opcode::VPMULHW as u16, + VPMULLD = super::Opcode::VPMULLD as u16, + VPMULLQ = super::Opcode::VPMULLQ as u16, + VPMULLW = super::Opcode::VPMULLW as u16, + VPMULTISHIFTQB = super::Opcode::VPMULTISHIFTQB as u16, + VPMULUDQ = super::Opcode::VPMULUDQ as u16, + VPOPCNTB = super::Opcode::VPOPCNTB as u16, + VPOPCNTD = super::Opcode::VPOPCNTD as u16, + VPOPCNTQ = super::Opcode::VPOPCNTQ as u16, + VPOPCNTW = super::Opcode::VPOPCNTW as u16, + VPOR = super::Opcode::VPOR as u16, + VPORD = super::Opcode::VPORD as u16, + VPORQ = super::Opcode::VPORQ as u16, + VPROLD = super::Opcode::VPROLD as u16, + VPROLQ = super::Opcode::VPROLQ as u16, + VPROLVD = super::Opcode::VPROLVD as u16, + VPROLVQ = super::Opcode::VPROLVQ as u16, + VPRORD = super::Opcode::VPRORD as u16, + VPRORQ = super::Opcode::VPRORQ as u16, + VPRORRD = super::Opcode::VPRORRD as u16, + VPRORRQ = super::Opcode::VPRORRQ as u16, + VPRORVD = super::Opcode::VPRORVD as u16, + VPRORVQ = super::Opcode::VPRORVQ as u16, + VPSADBW = super::Opcode::VPSADBW as u16, + VPSCATTERDD = super::Opcode::VPSCATTERDD as u16, + VPSCATTERDQ = super::Opcode::VPSCATTERDQ as u16, + VPSCATTERQD = super::Opcode::VPSCATTERQD as u16, + VPSCATTERQQ = super::Opcode::VPSCATTERQQ as u16, + VPSHLDD = super::Opcode::VPSHLDD as u16, + VPSHLDQ = super::Opcode::VPSHLDQ as u16, + VPSHLDVD = super::Opcode::VPSHLDVD as u16, + VPSHLDVQ = super::Opcode::VPSHLDVQ as u16, + VPSHLDVW = super::Opcode::VPSHLDVW as u16, + VPSHLDW = super::Opcode::VPSHLDW as u16, + VPSHRDD = super::Opcode::VPSHRDD as u16, + VPSHRDQ = super::Opcode::VPSHRDQ as u16, + VPSHRDVD = super::Opcode::VPSHRDVD as u16, + VPSHRDVQ = super::Opcode::VPSHRDVQ as u16, + VPSHRDVW = super::Opcode::VPSHRDVW as u16, + VPSHRDW = super::Opcode::VPSHRDW as u16, + VPSHUFB = super::Opcode::VPSHUFB as u16, + VPSHUFBITQMB = super::Opcode::VPSHUFBITQMB as u16, + VPSHUFD = super::Opcode::VPSHUFD as u16, + VPSHUFHW = super::Opcode::VPSHUFHW as u16, + VPSHUFLW = super::Opcode::VPSHUFLW as u16, + VPSIGNB = super::Opcode::VPSIGNB as u16, + VPSIGND = super::Opcode::VPSIGND as u16, + VPSIGNW = super::Opcode::VPSIGNW as u16, + VPSLLD = super::Opcode::VPSLLD as u16, + VPSLLDQ = super::Opcode::VPSLLDQ as u16, + VPSLLQ = super::Opcode::VPSLLQ as u16, + VPSLLVD = super::Opcode::VPSLLVD as u16, + VPSLLVQ = super::Opcode::VPSLLVQ as u16, + VPSLLVW = super::Opcode::VPSLLVW as u16, + VPSLLW = super::Opcode::VPSLLW as u16, + VPSRAD = super::Opcode::VPSRAD as u16, + VPSRAQ = super::Opcode::VPSRAQ as u16, + VPSRAVD = super::Opcode::VPSRAVD as u16, + VPSRAVQ = super::Opcode::VPSRAVQ as u16, + VPSRAVW = super::Opcode::VPSRAVW as u16, + VPSRAW = super::Opcode::VPSRAW as u16, + VPSRLD = super::Opcode::VPSRLD as u16, + VPSRLDQ = super::Opcode::VPSRLDQ as u16, + VPSRLQ = super::Opcode::VPSRLQ as u16, + VPSRLVD = super::Opcode::VPSRLVD as u16, + VPSRLVQ = super::Opcode::VPSRLVQ as u16, + VPSRLVW = super::Opcode::VPSRLVW as u16, + VPSRLW = super::Opcode::VPSRLW as u16, + VPSUBB = super::Opcode::VPSUBB as u16, + VPSUBD = super::Opcode::VPSUBD as u16, + VPSUBQ = super::Opcode::VPSUBQ as u16, + VPSUBSB = super::Opcode::VPSUBSB as u16, + VPSUBSW = super::Opcode::VPSUBSW as u16, + VPSUBUSB = super::Opcode::VPSUBUSB as u16, + VPSUBUSW = super::Opcode::VPSUBUSW as u16, + VPSUBW = super::Opcode::VPSUBW as u16, + VPTERNLOGD = super::Opcode::VPTERNLOGD as u16, + VPTERNLOGQ = super::Opcode::VPTERNLOGQ as u16, + VPTEST = super::Opcode::VPTEST as u16, + VPTESTMB = super::Opcode::VPTESTMB as u16, + VPTESTMD = super::Opcode::VPTESTMD as u16, + VPTESTMQ = super::Opcode::VPTESTMQ as u16, + VPTESTMW = super::Opcode::VPTESTMW as u16, + VPTESTNMB = super::Opcode::VPTESTNMB as u16, + VPTESTNMD = super::Opcode::VPTESTNMD as u16, + VPTESTNMQ = super::Opcode::VPTESTNMQ as u16, + VPTESTNMW = super::Opcode::VPTESTNMW as u16, + VPUNPCKHBW = super::Opcode::VPUNPCKHBW as u16, + VPUNPCKHDQ = super::Opcode::VPUNPCKHDQ as u16, + VPUNPCKHQDQ = super::Opcode::VPUNPCKHQDQ as u16, + VPUNPCKHWD = super::Opcode::VPUNPCKHWD as u16, + VPUNPCKLBW = super::Opcode::VPUNPCKLBW as u16, + VPUNPCKLDQ = super::Opcode::VPUNPCKLDQ as u16, + VPUNPCKLQDQ = super::Opcode::VPUNPCKLQDQ as u16, + VPUNPCKLWD = super::Opcode::VPUNPCKLWD as u16, + VPXOR = super::Opcode::VPXOR as u16, + VPXORD = super::Opcode::VPXORD as u16, + VPXORQ = super::Opcode::VPXORQ as u16, + VRANGEPD = super::Opcode::VRANGEPD as u16, + VRANGEPS = super::Opcode::VRANGEPS as u16, + VRANGESD = super::Opcode::VRANGESD as u16, + VRANGESS = super::Opcode::VRANGESS as u16, + VRCP14PD = super::Opcode::VRCP14PD as u16, + VRCP14PS = super::Opcode::VRCP14PS as u16, + VRCP14SD = super::Opcode::VRCP14SD as u16, + VRCP14SS = super::Opcode::VRCP14SS as u16, + VRCP28PD = super::Opcode::VRCP28PD as u16, + VRCP28PS = super::Opcode::VRCP28PS as u16, + VRCP28SD = super::Opcode::VRCP28SD as u16, + VRCP28SS = super::Opcode::VRCP28SS as u16, + VRCPPS = super::Opcode::VRCPPS as u16, + VRCPSS = super::Opcode::VRCPSS as u16, + VREDUCEPD = super::Opcode::VREDUCEPD as u16, + VREDUCEPS = super::Opcode::VREDUCEPS as u16, + VREDUCESD = super::Opcode::VREDUCESD as u16, + VREDUCESS = super::Opcode::VREDUCESS as u16, + VRNDSCALEPD = super::Opcode::VRNDSCALEPD as u16, + VRNDSCALEPS = super::Opcode::VRNDSCALEPS as u16, + VRNDSCALESD = super::Opcode::VRNDSCALESD as u16, + VRNDSCALESS = super::Opcode::VRNDSCALESS as u16, + VROUNDPD = super::Opcode::VROUNDPD as u16, + VROUNDPS = super::Opcode::VROUNDPS as u16, + VROUNDSD = super::Opcode::VROUNDSD as u16, + VROUNDSS = super::Opcode::VROUNDSS as u16, + VRSQRT14PD = super::Opcode::VRSQRT14PD as u16, + VRSQRT14PS = super::Opcode::VRSQRT14PS as u16, + VRSQRT14SD = super::Opcode::VRSQRT14SD as u16, + VRSQRT14SS = super::Opcode::VRSQRT14SS as u16, + VRSQRT28PD = super::Opcode::VRSQRT28PD as u16, + VRSQRT28PS = super::Opcode::VRSQRT28PS as u16, + VRSQRT28SD = super::Opcode::VRSQRT28SD as u16, + VRSQRT28SS = super::Opcode::VRSQRT28SS as u16, + VRSQRTPS = super::Opcode::VRSQRTPS as u16, + VRSQRTSS = super::Opcode::VRSQRTSS as u16, + VSCALEDPD = super::Opcode::VSCALEDPD as u16, + VSCALEDPS = super::Opcode::VSCALEDPS as u16, + VSCALEDSD = super::Opcode::VSCALEDSD as u16, + VSCALEDSS = super::Opcode::VSCALEDSS as u16, + VSCALEFPD = super::Opcode::VSCALEFPD as u16, + VSCALEFPS = super::Opcode::VSCALEFPS as u16, + VSCALEFSD = super::Opcode::VSCALEFSD as u16, + VSCALEFSS = super::Opcode::VSCALEFSS as u16, + VSCATTERDD = super::Opcode::VSCATTERDD as u16, + VSCATTERDPD = super::Opcode::VSCATTERDPD as u16, + VSCATTERDPS = super::Opcode::VSCATTERDPS as u16, + VSCATTERDQ = super::Opcode::VSCATTERDQ as u16, + VSCATTERPF0DPD = super::Opcode::VSCATTERPF0DPD as u16, + VSCATTERPF0DPS = super::Opcode::VSCATTERPF0DPS as u16, + VSCATTERPF0QPD = super::Opcode::VSCATTERPF0QPD as u16, + VSCATTERPF0QPS = super::Opcode::VSCATTERPF0QPS as u16, + VSCATTERPF1DPD = super::Opcode::VSCATTERPF1DPD as u16, + VSCATTERPF1DPS = super::Opcode::VSCATTERPF1DPS as u16, + VSCATTERPF1QPD = super::Opcode::VSCATTERPF1QPD as u16, + VSCATTERPF1QPS = super::Opcode::VSCATTERPF1QPS as u16, + VSCATTERQD = super::Opcode::VSCATTERQD as u16, + VSCATTERQPD = super::Opcode::VSCATTERQPD as u16, + VSCATTERQPS = super::Opcode::VSCATTERQPS as u16, + VSCATTERQQ = super::Opcode::VSCATTERQQ as u16, + VSHUFF32X4 = super::Opcode::VSHUFF32X4 as u16, + VSHUFF64X2 = super::Opcode::VSHUFF64X2 as u16, + VSHUFI32X4 = super::Opcode::VSHUFI32X4 as u16, + VSHUFI64X2 = super::Opcode::VSHUFI64X2 as u16, + VSHUFPD = super::Opcode::VSHUFPD as u16, + VSHUFPS = super::Opcode::VSHUFPS as u16, + VSQRTPD = super::Opcode::VSQRTPD as u16, + VSQRTPS = super::Opcode::VSQRTPS as u16, + VSQRTSD = super::Opcode::VSQRTSD as u16, + VSQRTSS = super::Opcode::VSQRTSS as u16, + VSTMXCSR = super::Opcode::VSTMXCSR as u16, + VSUBPD = super::Opcode::VSUBPD as u16, + VSUBPS = super::Opcode::VSUBPS as u16, + VSUBSD = super::Opcode::VSUBSD as u16, + VSUBSS = super::Opcode::VSUBSS as u16, + VTESTPD = super::Opcode::VTESTPD as u16, + VTESTPS = super::Opcode::VTESTPS as u16, + VUCOMISD = super::Opcode::VUCOMISD as u16, + VUCOMISS = super::Opcode::VUCOMISS as u16, + VUNPCKHPD = super::Opcode::VUNPCKHPD as u16, + VUNPCKHPS = super::Opcode::VUNPCKHPS as u16, + VUNPCKLPD = super::Opcode::VUNPCKLPD as u16, + VUNPCKLPS = super::Opcode::VUNPCKLPS as u16, + VXORPD = super::Opcode::VXORPD as u16, + VXORPS = super::Opcode::VXORPS as u16, + VZEROALL = super::Opcode::VZEROALL as u16, + VZEROUPPER = super::Opcode::VZEROUPPER as u16, + WAIT = super::Opcode::WAIT as u16, + WBINVD = super::Opcode::WBINVD as u16, + WRFSBASE = super::Opcode::WRFSBASE as u16, + WRGSBASE = super::Opcode::WRGSBASE as u16, + WRMSR = super::Opcode::WRMSR as u16, + WRPKRU = super::Opcode::WRPKRU as u16, + WRSS = super::Opcode::WRSS as u16, + WRUSS = super::Opcode::WRUSS as u16, + XABORT = super::Opcode::XABORT as u16, + XADD = super::Opcode::XADD as u16, + XBEGIN = super::Opcode::XBEGIN as u16, + XCHG = super::Opcode::XCHG as u16, + XEND = super::Opcode::XEND as u16, + XGETBV = super::Opcode::XGETBV as u16, + XLAT = super::Opcode::XLAT as u16, + XOR = super::Opcode::XOR as u16, + XORPD = super::Opcode::XORPD as u16, + XORPS = super::Opcode::XORPS as u16, + XRESLDTRK = super::Opcode::XRESLDTRK as u16, + XRSTOR = super::Opcode::XRSTOR as u16, + XRSTORS = super::Opcode::XRSTORS as u16, + XRSTORS64 = super::Opcode::XRSTORS64 as u16, + XSAVE = super::Opcode::XSAVE as u16, + XSAVEC = super::Opcode::XSAVEC as u16, + XSAVEC64 = super::Opcode::XSAVEC64 as u16, + XSAVEOPT = super::Opcode::XSAVEOPT as u16, + XSAVES = super::Opcode::XSAVES as u16, + XSAVES64 = super::Opcode::XSAVES64 as u16, + XSETBV = super::Opcode::XSETBV as u16, + XSUSLDTRK = super::Opcode::XSUSLDTRK as u16, + XTEST = super::Opcode::XTEST as u16, + } +} + diff --git a/src/lib.rs b/src/lib.rs index 86354ca..a7fb1c3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -138,6 +138,7 @@ pub use protected_mode::Arch as x86_32; pub mod real_mode; pub use real_mode::Arch as x86_16; +mod generated; mod safer_unchecked; const MEM_SIZE_STRINGS: [&'static str; 64] = [ diff --git a/src/long_mode/display.rs b/src/long_mode/display.rs index 9ba128d..d772b7b 100644 --- a/src/long_mode/display.rs +++ b/src/long_mode/display.rs @@ -350,1468 +350,10 @@ impl fmt::Display for Opcode { } } -const MNEMONICS: &[&'static str] = &[ - "invalid", - "add", - "or", - "adc", - "sbb", - "and", - "xor", - "sub", - "cmp", - "xadd", - "bt", - "bts", - "btc", - "btr", - "bsf", - "bsr", - "tzcnt", - "movss", - "addss", - "subss", - "mulss", - "divss", - "minss", - "maxss", - "sqrtss", - "movsd", - "sqrtsd", - "addsd", - "subsd", - "mulsd", - "divsd", - "minsd", - "maxsd", - "movsldup", - "movshdup", - "movddup", - "haddps", - "hsubps", - "addsubpd", - "addsubps", - "cvtsi2ss", - "cvtsi2sd", - "cvttsd2si", - "cvttps2dq", - "cvtpd2dq", - "cvtpd2ps", - "cvtps2dq", - "cvtsd2si", - "cvtsd2ss", - "cvttss2si", - "cvtss2si", - "cvtss2sd", - "cvtdq2pd", - "lddqu", - "movzx", - "movsx", - "movsxd", - "sar", - "sal", - "shr", - "shrd", - "shl", - "rcr", - "rcl", - "ror", - "rol", - "inc", - "dec", - "hlt", - "call", - "callf", - "jmp", - "jmpf", - "push", - "pop", - "lea", - "nop", - "prefetchnta", - "prefetch0", - "prefetch1", - "prefetch2", - "xchg", - "popf", - "int", - "into", - "iret", - "iretd", - "iretq", - "retf", - "enter", - "leave", - "mov", - "ret", - "pushf", - "wait", - "cbw", - "cwde", - "cdqe", - "cwd", - "cdq", - "cqo", - "lods", - "stos", - "lahf", - "sahf", - "cmps", - "scas", - "movs", - "test", - "ins", - "in", - "outs", - "out", - "imul", - "jo", - "jno", - "jb", - "jnb", - "jz", - "jnz", - "ja", - "jna", - "js", - "jns", - "jp", - "jnp", - "jl", - "jge", - "jle", - "jg", - "cmova", - "cmovb", - "cmovg", - "cmovge", - "cmovl", - "cmovle", - "cmovna", - "cmovnb", - "cmovno", - "cmovnp", - "cmovns", - "cmovnz", - "cmovo", - "cmovp", - "cmovs", - "cmovz", - "div", - "idiv", - "mul", - "neg", - "not", - "cmpxchg", - "seto", - "setno", - "setb", - "setae", - "setz", - "setnz", - "setbe", - "seta", - "sets", - "setns", - "setp", - "setnp", - "setl", - "setge", - "setle", - "setg", - "cpuid", - "ud0", - "ud1", - "ud2", - "wbinvd", - "invd", - "sysret", - "clts", - "syscall", - "lsl", - "lar", - "sgdt", - "sidt", - "lgdt", - "lidt", - "smsw", - "lmsw", - "swapgs", - "rdtscp", - "invlpg", - "fxsave", - "fxrstor", - "ldmxcsr", - "stmxcsr", - "xsave", - "xrstor", - "xsaveopt", - "lfence", - "mfence", - "sfence", - "clflush", - "clflushopt", - "clwb", - "wrmsr", - "rdtsc", - "rdmsr", - "rdpmc", - "sldt", - "str", - "lldt", - "ltr", - "verr", - "verw", - "cmc", - "clc", - "stc", - "cli", - "sti", - "cld", - "std", - "jmpe", - "popcnt", - "movdqu", - "movdqa", - "movq", - "cmpss", - "cmpsd", - "unpcklps", - "unpcklpd", - "unpckhps", - "unpckhpd", - "pshufhw", - "pshuflw", - "movups", - "movq2dq", - "movdq2q", - "rsqrtss", - "rcpss", - "andn", - "bextr", - "blsi", - "blsmsk", - "blsr", - "vmclear", - "vmxon", - "vmcall", - "vmlaunch", - "vmresume", - "vmxoff", - "pconfig", - "monitor", - "mwait", - "monitorx", - "mwaitx", - "clac", - "stac", - "encls", - "enclv", - "xgetbv", - "xsetbv", - "vmfunc", - "xabort", - "xbegin", - "xend", - "xtest", - "enclu", - "rdpkru", - "wrpkru", - "rdpru", - "clzero", - "rdseed", - "rdrand", - "addps", - "addpd", - "andnps", - "andnpd", - "andps", - "andpd", - "bswap", - "cmppd", - "cmpps", - "comisd", - "comiss", - "cvtdq2ps", - "cvtpi2ps", - "cvtpi2pd", - "cvtps2pd", - "cvtps2pi", - "cvtpd2pi", - "cvttps2pi", - "cvttpd2pi", - "cvttpd2dq", - "divps", - "divpd", - "emms", - "getsec", - "lfs", - "lgs", - "lss", - "maskmovq", - "maskmovdqu", - "maxps", - "maxpd", - "minps", - "minpd", - "movaps", - "movapd", - "movd", - "movlps", - "movlpd", - "movhps", - "movhpd", - "movlhps", - "movhlps", - "movupd", - "movmskps", - "movmskpd", - "movnti", - "movntps", - "movntpd", - "extrq", - "insertq", - "movntss", - "movntsd", - "movntq", - "movntdq", - "mulps", - "mulpd", - "orps", - "orpd", - "packssdw", - "packsswb", - "packuswb", - "paddb", - "paddd", - "paddq", - "paddsb", - "paddsw", - "paddusb", - "paddusw", - "paddw", - "pand", - "pandn", - "pavgb", - "pavgw", - "pcmpeqb", - "pcmpeqd", - "pcmpeqw", - "pcmpgtb", - "pcmpgtd", - "pcmpgtw", - "pinsrw", - "pmaddwd", - "pmaxsw", - "pmaxub", - "pminsw", - "pminub", - "pmovmskb", - "pmulhuw", - "pmulhw", - "pmullw", - "pmuludq", - "por", - "psadbw", - "pshufw", - "pshufd", - "pslld", - "pslldq", - "psllq", - "psllw", - "psrad", - "psraw", - "psrld", - "psrldq", - "psrlq", - "psrlw", - "psubb", - "psubd", - "psubq", - "psubsb", - "psubsw", - "psubusb", - "psubusw", - "psubw", - "punpckhbw", - "punpckhdq", - "punpckhwd", - "punpcklbw", - "punpckldq", - "punpcklwd", - "punpcklqdq", - "punpckhqdq", - "pxor", - "rcpps", - "rsm", - "rsqrtps", - "shld", - "shufpd", - "shufps", - "slhd", - "sqrtps", - "sqrtpd", - "subps", - "subpd", - "sysenter", - "sysexit", - "ucomisd", - "ucomiss", - "vmread", - "vmwrite", - "xorps", - "xorpd", - "vmovddup", - "vpshuflw", - "vpshufhw", - "vhaddps", - "vhsubps", - "vaddsubps", - "vcvtpd2dq", - "vlddqu", - "vcomisd", - "vcomiss", - "vucomisd", - "vucomiss", - "vaddpd", - "vaddps", - "vaddsd", - "vaddss", - "vaddsubpd", - "vaesdec", - "vaesdeclast", - "vaesenc", - "vaesenclast", - "vaesimc", - "vaeskeygenassist", - "vblendpd", - "vblendps", - "vblendvpd", - "vblendvps", - "vbroadcastf128", - "vbroadcasti128", - "vbroadcastsd", - "vbroadcastss", - "vcmpsd", - "vcmpss", - "vcmppd", - "vcmpps", - "vcvtdq2pd", - "vcvtdq2ps", - "vcvtpd2ps", - "vcvtph2ps", - "vcvtps2dq", - "vcvtps2pd", - "vcvtss2sd", - "vcvtsi2ss", - "vcvtsi2sd", - "vcvtsd2si", - "vcvtsd2ss", - "vcvtps2ph", - "vcvtss2si", - "vcvttpd2dq", - "vcvttps2dq", - "vcvttss2si", - "vcvttsd2si", - "vdivpd", - "vdivps", - "vdivsd", - "vdivss", - "vdppd", - "vdpps", - "vextractf128", - "vextracti128", - "vextractps", - "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", - "vgatherdpd", - "vgatherdps", - "vgatherqpd", - "vgatherqps", - "vhaddpd", - "vhsubpd", - "vinsertf128", - "vinserti128", - "vinsertps", - "vmaskmovdqu", - "vmaskmovpd", - "vmaskmovps", - "vmaxpd", - "vmaxps", - "vmaxsd", - "vmaxss", - "vminpd", - "vminps", - "vminsd", - "vminss", - "vmovapd", - "vmovaps", - "vmovd", - "vmovdqa", - "vmovdqu", - "vmovhlps", - "vmovhpd", - "vmovhps", - "vmovlhps", - "vmovlpd", - "vmovlps", - "vmovmskpd", - "vmovmskps", - "vmovntdq", - "vmovntdqa", - "vmovntpd", - "vmovntps", - "vmovq", - "vmovss", - "vmovsd", - "vmovshdup", - "vmovsldup", - "vmovupd", - "vmovups", - "vmpsadbw", - "vmulpd", - "vmulps", - "vmulsd", - "vmulss", - "vpabsb", - "vpabsd", - "vpabsw", - "vpackssdw", - "vpackusdw", - "vpacksswb", - "vpackuswb", - "vpaddb", - "vpaddd", - "vpaddq", - "vpaddsb", - "vpaddsw", - "vpaddusb", - "vpaddusw", - "vpaddw", - "vpalignr", - "vandpd", - "vandps", - "vorpd", - "vorps", - "vandnpd", - "vandnps", - "vpand", - "vpandn", - "vpavgb", - "vpavgw", - "vpblendd", - "vpblendvb", - "vpblendw", - "vpbroadcastb", - "vpbroadcastd", - "vpbroadcastq", - "vpbroadcastw", - "vpclmulqdq", - "vpcmpeqb", - "vpcmpeqd", - "vpcmpeqq", - "vpcmpeqw", - "vpcmpgtb", - "vpcmpgtd", - "vpcmpgtq", - "vpcmpgtw", - "vpcmpestri", - "vpcmpestrm", - "vpcmpistri", - "vpcmpistrm", - "vperm2f128", - "vperm2i128", - "vpermd", - "vpermilpd", - "vpermilps", - "vpermpd", - "vpermps", - "vpermq", - "vpextrb", - "vpextrd", - "vpextrq", - "vpextrw", - "vpgatherdd", - "vpgatherdq", - "vpgatherqd", - "vpgatherqq", - "vphaddd", - "vphaddsw", - "vphaddw", - "vpmaddubsw", - "vphminposuw", - "vphsubd", - "vphsubsw", - "vphsubw", - "vpinsrb", - "vpinsrd", - "vpinsrq", - "vpinsrw", - "vpmaddwd", - "vpmaskmovd", - "vpmaskmovq", - "vpmaxsb", - "vpmaxsd", - "vpmaxsw", - "vpmaxub", - "vpmaxuw", - "vpmaxud", - "vpminsb", - "vpminsw", - "vpminsd", - "vpminub", - "vpminuw", - "vpminud", - "vpmovmskb", - "vpmovsxbd", - "vpmovsxbq", - "vpmovsxbw", - "vpmovsxdq", - "vpmovsxwd", - "vpmovsxwq", - "vpmovzxbd", - "vpmovzxbq", - "vpmovzxbw", - "vpmovzxdq", - "vpmovzxwd", - "vpmovzxwq", - "vpmuldq", - "vpmulhrsw", - "vpmulhuw", - "vpmulhw", - "vpmullq", - "vpmulld", - "vpmullw", - "vpmuludq", - "vpor", - "vpsadbw", - "vpshufb", - "vpshufd", - "vpsignb", - "vpsignd", - "vpsignw", - "vpslld", - "vpslldq", - "vpsllq", - "vpsllvd", - "vpsllvq", - "vpsllw", - "vpsrad", - "vpsravd", - "vpsraw", - "vpsrld", - "vpsrldq", - "vpsrlq", - "vpsrlvd", - "vpsrlvq", - "vpsrlw", - "vpsubb", - "vpsubd", - "vpsubq", - "vpsubsb", - "vpsubsw", - "vpsubusb", - "vpsubusw", - "vpsubw", - "vptest", - "vpunpckhbw", - "vpunpckhdq", - "vpunpckhqdq", - "vpunpckhwd", - "vpunpcklbw", - "vpunpckldq", - "vpunpcklqdq", - "vpunpcklwd", - "vpxor", - "vrcpps", - "vroundpd", - "vroundps", - "vroundsd", - "vroundss", - "vrsqrtps", - "vrsqrtss", - "vrcpss", - "vshufpd", - "vshufps", - "vsqrtpd", - "vsqrtps", - "vsqrtss", - "vsqrtsd", - "vsubpd", - "vsubps", - "vsubsd", - "vsubss", - "vtestpd", - "vtestps", - "vunpckhpd", - "vunpckhps", - "vunpcklpd", - "vunpcklps", - "vxorpd", - "vxorps", - "vzeroupper", - "vzeroall", - "vldmxcsr", - "vstmxcsr", - "pclmulqdq", - "aeskeygenassist", - "aesimc", - "aesenc", - "aesenclast", - "aesdec", - "aesdeclast", - "pcmpgtq", - "pcmpistrm", - "pcmpistri", - "pcmpestri", - "packusdw", - "pcmpestrm", - "pcmpeqq", - "ptest", - "phminposuw", - "dpps", - "dppd", - "mpsadbw", - "pmovzxdq", - "pmovsxdq", - "pmovzxbd", - "pmovsxbd", - "pmovzxwq", - "pmovsxwq", - "pmovzxbq", - "pmovsxbq", - "pmovsxwd", - "pmovzxwd", - "pextrq", - "pextrd", - "pextrw", - "pextrb", - "pmovsxbw", - "pmovzxbw", - "pinsrq", - "pinsrd", - "pinsrb", - "extractps", - "insertps", - "roundss", - "roundsd", - "roundps", - "roundpd", - "pmaxsb", - "pmaxsd", - "pmaxuw", - "pmaxud", - "pminsd", - "pminsb", - "pminud", - "pminuw", - "blendw", - "pblendvb", - "pblendw", - "blendvps", - "blendvpd", - "blendps", - "blendpd", - "pmuldq", - "movntdqa", - "pmulld", - "palignr", - "psignw", - "psignd", - "psignb", - "pshufb", - "pmulhrsw", - "pmaddubsw", - "pabsd", - "pabsw", - "pabsb", - "phsubsw", - "phsubw", - "phsubd", - "phaddd", - "phaddsw", - "phaddw", - "hsubpd", - "haddpd", - "sha1rnds4", - "sha1nexte", - "sha1msg1", - "sha1msg2", - "sha256rnds2", - "sha256msg1", - "sha256msg2", - "lzcnt", - "clgi", - "stgi", - "skinit", - "vmload", - "vmmcall", - "vmsave", - "vmrun", - "invlpga", - "invlpgb", - "tlbsync", - "movbe", - "adcx", - "adox", - "prefetchw", - "rdpid", - "cmpxchg8b", - "cmpxchg16b", - "vmptrld", - "vmptrst", - "bzhi", - "mulx", - "shlx", - "shrx", - "sarx", - "pdep", - "pext", - "rorx", - "xrstors", - "xrstors64", - "xsavec", - "xsavec64", - "xsaves", - "xsaves64", - "rdfsbase", - "rdgsbase", - "wrfsbase", - "wrgsbase", - "crc32", - "salc", - "xlat", - - "f2xm1", - "fabs", - "fadd", - "faddp", - "fbld", - "fbstp", - "fchs", - "fcmovb", - "fcmovbe", - "fcmove", - "fcmovnb", - "fcmovnbe", - "fcmovne", - "fcmovnu", - "fcmovu", - "fcom", - "fcomi", - "fcomip", - "fcomp", - "fcompp", - "fcos", - "fdecstp", - "fdisi8087_nop", - "fdiv", - "fdivp", - "fdivr", - "fdivrp", - "feni8087_nop", - "ffree", - "ffreep", - "fiadd", - "ficom", - "ficomp", - "fidiv", - "fidivr", - "fild", - "fimul", - "fincstp", - "fist", - "fistp", - "fisttp", - "fisub", - "fisubr", - "fld", - "fld1", - "fldcw", - "fldenv", - "fldl2e", - "fldl2t", - "fldlg2", - "fldln2", - "fldpi", - "fldz", - "fmul", - "fmulp", - "fnclex", - "fninit", - "fnop", - "fnsave", - "fnstcw", - "fnstenv", - "fnstor", - "fnstsw", - "fpatan", - "fprem", - "fprem1", - "fptan", - "frndint", - "frstor", - "fscale", - "fsetpm287_nop", - "fsin", - "fsincos", - "fsqrt", - "fst", - "fstp", - "fstpnce", - "fsub", - "fsubp", - "fsubr", - "fsubrp", - "ftst", - "fucom", - "fucomi", - "fucomip", - "fucomp", - "fucompp", - "fxam", - "fxch", - "fxtract", - "fyl2x", - "fyl2xp1", - "loopnz", - "loopz", - "loop", - "jrcxz", - "movdir64b", - "movdiri", - "aesdec128kl", - "aesdec256kl", - "aesdecwide128kl", - "aesdecwide256kl", - "aesenc128kl", - "aesenc256kl", - "aesencwide128kl", - "aesencwide256kl", - "encodekey128", - "encodekey256", - "loadiwkey", - - // unsure - "hreset", - - // 3dnow - "femms", - "pi2fw", - "pi2fd", - "pi2iw", - "pi2id", - "pmulhrw", - "pfcmpge", - "pfmin", - "pfrcp", - "pfrsqrt", - "pfsub", - "pfadd", - "pfcmpgt", - "pfmax", - "pfrcpit1", - "pfrsqit1", - "pfsubr", - "pfacc", - "pfcmpeq", - "pfmul", - "pfmulhrw", - "pfrcpit2", - "pfnacc", - "pfpnacc", - "pswapd", - "pavgusb", - - // ENQCMD - "enqcmd", - "enqcmds", - - // INVPCID, - "invept", - "invvpid", - "invpcid", - - // PTWRITE - "ptwrite", - - // GFNI - "gf2p8affineqb", - "gf2p8affineinvqb", - "gf2p8mulb", - - // CET - "wruss", - "wrss", - "incssp", - "saveprevssp", - "setssbsy", - "clrssbsy", - "rstorssp", - "endbr64", - "endbr32", - - // TDX - "tdcall", - "seamret", - "seamops", - "seamcall", - - // WAITPKG - "tpause", - "umonitor", - "umwait", - - // UINTR - "uiret", - "testui", - "clui", - "stui", - "senduipi", - - // TSXLDTRK - "xsusldtrk", - "xresldtrk", - - // AVX512F - "valignd", - "valignq", - "vblendmpd", - "vblendmps", - "vcompresspd", - "vcompressps", - "vcvtpd2udq", - "vcvttpd2udq", - "vcvtps2udq", - "vcvttps2udq", - "vcvtqq2pd", - "vcvtqq2ps", - "vcvtsd2usi", - "vcvttsd2usi", - "vcvtss2usi", - "vcvttss2usi", - "vcvtudq2pd", - "vcvtudq2ps", - "vcvtusi2usd", - "vcvtusi2uss", - "vexpandpd", - "vexpandps", - "vextractf32x4", - "vextractf64x4", - "vextracti32x4", - "vextracti64x4", - "vfixupimmpd", - "vfixupimmps", - "vfixupimmsd", - "vfixupimmss", - "vgetexppd", - "vgetexpps", - "vgetexpsd", - "vgetexpss", - "vgetmantpd", - "vgetmantps", - "vgetmantsd", - "vgetmantss", - "vinsertf32x4", - "vinsertf64x4", - "vinserti64x4", - "vmovdqa32", - "vmovdqa64", - "vmovdqu32", - "vmovdqu64", - "vpblendmd", - "vpblendmq", - "vpcmpd", - "vpcmpud", - "vpcmpq", - "vpcmpuq", - "vpcompressq", - "vpcompressd", - "vpermi2d", - "vpermi2q", - "vpermi2pd", - "vpermi2ps", - "vpermt2d", - "vpermt2q", - "vpermt2pd", - "vpermt2ps", - "vpmaxsq", - "vpmaxuq", - "vpminsq", - "vpminuq", - "vpmovsqb", - "vpmovusqb", - "vpmovsqw", - "vpmovusqw", - "vpmovsqd", - "vpmovusqd", - "vpmovsdb", - "vpmovusdb", - "vpmovsdw", - "vpmovusdw", - "vprold", - "vprolq", - "vprolvd", - "vprolvq", - "vprord", - "vprorq", - "vprorrd", - "vprorrq", - "vpscatterdd", - "vpscatterdq", - "vpscatterqd", - "vpscatterqq", - "vpsraq", - "vpsravq", - "vptestnmd", - "vptestnmq", - "vpternlogd", - "vpternlogq", - "vptestmd", - "vptestmq", - "vrcp14pd", - "vrcp14ps", - "vrcp14sd", - "vrcp14ss", - "vrndscalepd", - "vrndscaleps", - "vrndscalesd", - "vrndscaless", - "vrsqrt14pd", - "vrsqrt14ps", - "vrsqrt14sd", - "vrsqrt14ss", - "vscaledpd", - "vscaledps", - "vscaledsd", - "vscaledss", - "vscatterdd", - "vscatterdq", - "vscatterqd", - "vscatterqq", - "vshuff32x4", - "vshuff64x2", - "vshufi32x4", - "vshufi64x2", - - // AVX512DQ - "vcvttpd2qq", - "vcvtpd2qq", - "vcvttpd2uqq", - "vcvtpd2uqq", - "vcvttps2qq", - "vcvtps2qq", - "vcvttps2uqq", - "vcvtps2uqq", - "vcvtuqq2pd", - "vcvtuqq2ps", - "vextractf64x2", - "vextracti64x2", - "vfpclasspd", - "vfpclassps", - "vfpclasssd", - "vfpclassss", - "vinsertf64x2", - "vinserti64x2", - "vpmovm2d", - "vpmovm2q", - "vpmovb2d", - "vpmovq2m", - "vrangepd", - "vrangeps", - "vrangesd", - "vrangess", - "vreducepd", - "vreduceps", - "vreducesd", - "vreducess", - - // AVX512BW - "vdbpsadbw", - "vmovdqu8", - "vmovdqu16", - "vpblendmb", - "vpblendmw", - "vpcmpb", - "vpcmpub", - "vpcmpw", - "vpcmpuw", - "vpermw", - "vpermi2b", - "vpermi2w", - "vpmovm2b", - "vpmovm2w", - "vpmovb2m", - "vpmovw2m", - "vpmovswb", - "vpmovuswb", - "vpsllvw", - "vpsravw", - "vpsrlvw", - "vptestnmb", - "vptestnmw", - "vptestmb", - "vptestmw", - - // AVX512CD - "vpbroadcastm", - "vpconflictd", - "vpconflictq", - "vplzcntd", - "vplzcntq", - - "kunpckbw", - "kunpckwd", - "kunpckdq", - - "kaddb", - "kandb", - "kandnb", - "kmovb", - "knotb", - "korb", - "kortestb", - "kshiftlb", - "kshiftrb", - "ktestb", - "kxnorb", - "kxorb", - "kaddw", - "kandw", - "kandnw", - "kmovw", - "knotw", - "korw", - "kortestw", - "kshiftlw", - "kshiftrw", - "ktestw", - "kxnorw", - "kxorw", - "kaddd", - "kandd", - "kandnd", - "kmovd", - "knotd", - "kord", - "kortestd", - "kshiftld", - "kshiftrd", - "ktestd", - "kxnord", - "kxord", - "kaddq", - "kandq", - "kandnq", - "kmovq", - "knotq", - "korq", - "kortestq", - "kshiftlq", - "kshiftrq", - "ktestq", - "kxnorq", - "kxorq", - - // AVX512ER - "vexp2pd", - "vexp2ps", - "vexp2sd", - "vexp2ss", - "vrcp28pd", - "vrcp28ps", - "vrcp28sd", - "vrcp28ss", - "vrsqrt28pd", - "vrsqrt28ps", - "vrsqrt28sd", - "vrsqrt28ss", - - // AVX512PF - "vgatherpf0dpd", - "vgatherpf0dps", - "vgatherpf0qpd", - "vgatherpf0qps", - "vgatherpf1dpd", - "vgatherpf1dps", - "vgatherpf1qpd", - "vgatherpf1qps", - "vscatterpf0dpd", - "vscatterpf0dps", - "vscatterpf0qpd", - "vscatterpf0qps", - "vscatterpf1dpd", - "vscatterpf1dps", - "vscatterpf1qpd", - "vscatterpf1qps", - - // MPX - "bndmk", - "bndcl", - "bndcu", - "bndcn", - "bndmov", - "bndldx", - "bndstx", - - - - "vgf2p8affineqb", - "vgf2p8affineinvqb", - "vpshrdq", - "vpshrdd", - "vpshrdw", - "vpshldq", - "vpshldd", - "vpshldw", - "vbroadcastf32x8", - "vbroadcastf64x4", - "vbroadcastf32x4", - "vbroadcastf64x2", - "vbroadcastf32x2", - "vbroadcasti32x8", - "vbroadcasti64x4", - "vbroadcasti32x4", - "vbroadcasti64x2", - "vbroadcasti32x2", - "vextracti32x8", - "vextractf32x8", - "vinserti32x8", - "vinsertf32x8", - "vinserti32x4", - "v4fnmaddss", - "v4fnmaddps", - "vcvtneps2bf16", - "v4fmaddss", - "v4fmaddps", - "vcvtne2ps2bf16", - "vp2intersectd", - "vp2intersectq", - "vp4dpwssds", - "vp4dpwssd", - "vpdpwssds", - "vpdpwssd", - "vpdpbusds", - "vdpbf16ps", - "vpbroadcastmw2d", - "vpbroadcastmb2q", - "vpmovd2m", - "vpmovqd", - "vpmovwb", - "vpmovdb", - "vpmovdw", - "vpmovqb", - "vpmovqw", - "vgf2p8mulb", - "vpmadd52huq", - "vpmadd52luq", - "vpshufbitqmb", - "vpermb", - "vpexpandd", - "vpexpandq", - "vpabsq", - "vprorvd", - "vprorvq", - "vpmultishiftqb", - "vpermt2b", - "vpermt2w", - "vpshrdvq", - "vpshrdvd", - "vpshrdvw", - "vpshldvq", - "vpshldvd", - "vpshldvw", - "vpcompressb", - "vpcompressw", - "vpexpandb", - "vpexpandw", - "vpopcntd", - "vpopcntq", - "vpopcntb", - "vpopcntw", - "vscalefss", - "vscalefsd", - "vscalefps", - "vscalefpd", - "vpdpbusd", - "vcvtusi2sd", - "vcvtusi2ss", - "vpxord", - "vpxorq", - "vpord", - "vporq", - "vpandnd", - "vpandnq", - "vpandd", - "vpandq", - "psmash", - "pvalidate", - "rmpadjust", - "rmpupdate", -]; - impl Opcode { fn name(&self) -> &'static str { unsafe { - MNEMONICS.get_kinda_unchecked(*self as usize) + crate::generated::opcode::MNEMONICS.get_kinda_unchecked(*self as usize) } } } @@ -2508,6 +1050,10 @@ impl Colorize for Opcode { Opcode::VSCATTERDQ | Opcode::VSCATTERQD | Opcode::VSCATTERQQ | + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD | Opcode::VPSCATTERDD | Opcode::VPSCATTERDQ | Opcode::VPSCATTERQD | @@ -2696,6 +1242,8 @@ impl Colorize for Opcode { Opcode::VPINSRW | Opcode::VPMASKMOVD | Opcode::VPMASKMOVQ | + Opcode::VCOMPRESSD | + Opcode::VCOMPRESSQ | Opcode::VCOMPRESSPD | Opcode::VCOMPRESSPS | Opcode::VPCOMPRESSQ | @@ -3125,6 +1673,8 @@ impl Colorize for Opcode { Opcode::EMMS | Opcode::FEMMS | Opcode::GETSEC | + Opcode::LDS | + Opcode::LES | Opcode::LFS | Opcode::LGS | Opcode::LSS | diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs index 6412afb..56fd90f 100644 --- a/src/long_mode/mod.rs +++ b/src/long_mode/mod.rs @@ -11,6 +11,7 @@ pub use self::display::{DisplayStyle, InstructionDisplayer}; use core::cmp::PartialEq; use crate::safer_unchecked::unreachable_kinda_unchecked as unreachable_unchecked; +pub use crate::generated::opcode::long_mode::Opcode as Opcode; use yaxpeax_arch::{AddressDiff, Decoder, Reader, LengthedInstruction}; use yaxpeax_arch::annotation::{AnnotatingDecoder, DescriptionSink, NullSink}; @@ -1059,1489 +1060,6 @@ const XSAVE: [Opcode; 10] = [ Opcode::XSETBV, ]; -/// an `x86_64` opcode. there sure are a lot of these. -#[allow(non_camel_case_types)] -#[derive(Copy, Clone, Debug, Eq, PartialEq)] -#[non_exhaustive] -#[repr(u32)] -pub enum Opcode { - Invalid, - ADD, - OR, - ADC, - SBB, - AND, - XOR, - SUB, - CMP, - XADD, - BT, - BTS, - BTC, - BTR, - BSF, - BSR, - TZCNT, - MOVSS, - ADDSS, - SUBSS, - MULSS, - DIVSS, - MINSS, - MAXSS, - SQRTSS, - MOVSD, - SQRTSD, - ADDSD, - SUBSD, - MULSD, - DIVSD, - MINSD, - MAXSD, - MOVSLDUP, - MOVSHDUP, - MOVDDUP, - HADDPS, - HSUBPS, - ADDSUBPD, - ADDSUBPS, - CVTSI2SS, - CVTSI2SD, - CVTTSD2SI, - CVTTPS2DQ, - CVTPD2DQ, - CVTPD2PS, - CVTPS2DQ, - CVTSD2SI, - CVTSD2SS, - CVTTSS2SI, - CVTSS2SI, - CVTSS2SD, - CVTDQ2PD, - LDDQU, - MOVZX, - MOVSX, - MOVSXD, - SAR, - SAL, - SHR, - SHRD, - SHL, - RCR, - RCL, - ROR, - ROL, - INC, - DEC, - HLT, - CALL, - CALLF, - JMP, - JMPF, - PUSH, - POP, - LEA, - NOP, - PREFETCHNTA, - PREFETCH0, - PREFETCH1, - PREFETCH2, - XCHG, - POPF, - INT, - INTO, - IRET, - IRETD, - IRETQ, - RETF, - ENTER, - LEAVE, - MOV, - RETURN, - PUSHF, - WAIT, - CBW, - CWDE, - CDQE, - CWD, - CDQ, - CQO, - LODS, - STOS, - LAHF, - SAHF, - CMPS, - SCAS, - MOVS, - TEST, - INS, - IN, - OUTS, - OUT, - IMUL, - JO, - JNO, - JB, - JNB, - JZ, - JNZ, - JA, - JNA, - JS, - JNS, - JP, - JNP, - JL, - JGE, - JLE, - JG, - CMOVA, - CMOVB, - CMOVG, - CMOVGE, - CMOVL, - CMOVLE, - CMOVNA, - CMOVNB, - CMOVNO, - CMOVNP, - CMOVNS, - CMOVNZ, - CMOVO, - CMOVP, - CMOVS, - CMOVZ, - DIV, - IDIV, - MUL, - NEG, - NOT, - CMPXCHG, - SETO, - SETNO, - SETB, - SETAE, - SETZ, - SETNZ, - SETBE, - SETA, - SETS, - SETNS, - SETP, - SETNP, - SETL, - SETGE, - SETLE, - SETG, - CPUID, - UD0, - UD1, - UD2, - WBINVD, - INVD, - SYSRET, - CLTS, - SYSCALL, - LSL, - LAR, - SGDT, - SIDT, - LGDT, - LIDT, - SMSW, - LMSW, - SWAPGS, - RDTSCP, - INVLPG, - FXSAVE, - FXRSTOR, - LDMXCSR, - STMXCSR, - XSAVE, - XRSTOR, - XSAVEOPT, - LFENCE, - MFENCE, - SFENCE, - CLFLUSH, - CLFLUSHOPT, - CLWB, - WRMSR, - RDTSC, - RDMSR, - RDPMC, - SLDT, - STR, - LLDT, - LTR, - VERR, - VERW, - CMC, - CLC, - STC, - CLI, - STI, - CLD, - STD, - JMPE, - POPCNT, - MOVDQU, - MOVDQA, - MOVQ, - CMPSS, - CMPSD, - UNPCKLPS, - UNPCKLPD, - UNPCKHPS, - UNPCKHPD, - PSHUFHW, - PSHUFLW, - MOVUPS, - MOVQ2DQ, - MOVDQ2Q, - RSQRTSS, - RCPSS, - - ANDN, - BEXTR, - BLSI, - BLSMSK, - BLSR, - VMCLEAR, - VMXON, - VMCALL, - VMLAUNCH, - VMRESUME, - VMXOFF, - PCONFIG, - MONITOR, - MWAIT, - MONITORX, - MWAITX, - CLAC, - STAC, - ENCLS, - ENCLV, - XGETBV, - XSETBV, - VMFUNC, - XABORT, - XBEGIN, - XEND, - XTEST, - ENCLU, - RDPKRU, - WRPKRU, - - RDPRU, - CLZERO, - - RDSEED, - RDRAND, - - ADDPS, - ADDPD, - ANDNPS, - ANDNPD, - ANDPS, - ANDPD, - BSWAP, - CMPPD, - CMPPS, - COMISD, - COMISS, - CVTDQ2PS, - CVTPI2PS, - CVTPI2PD, - CVTPS2PD, - CVTPS2PI, - CVTPD2PI, - CVTTPS2PI, - CVTTPD2PI, - CVTTPD2DQ, - DIVPS, - DIVPD, - EMMS, - GETSEC, - LFS, - LGS, - LSS, - MASKMOVQ, - MASKMOVDQU, - MAXPS, - MAXPD, - MINPS, - MINPD, - MOVAPS, - MOVAPD, - MOVD, - MOVLPS, - MOVLPD, - MOVHPS, - MOVHPD, - MOVLHPS, - MOVHLPS, - MOVUPD, - MOVMSKPS, - MOVMSKPD, - MOVNTI, - MOVNTPS, - MOVNTPD, - EXTRQ, - INSERTQ, - MOVNTSS, - MOVNTSD, - MOVNTQ, - MOVNTDQ, - MULPS, - MULPD, - ORPS, - ORPD, - PACKSSDW, - PACKSSWB, - PACKUSWB, - PADDB, - PADDD, - PADDQ, - PADDSB, - PADDSW, - PADDUSB, - PADDUSW, - PADDW, - PAND, - PANDN, - PAVGB, - PAVGW, - PCMPEQB, - PCMPEQD, - PCMPEQW, - PCMPGTB, - PCMPGTD, - PCMPGTW, - PINSRW, - PMADDWD, - PMAXSW, - PMAXUB, - PMINSW, - PMINUB, - PMOVMSKB, - PMULHUW, - PMULHW, - PMULLW, - PMULUDQ, - POR, - PSADBW, - PSHUFW, - PSHUFD, - PSLLD, - PSLLDQ, - PSLLQ, - PSLLW, - PSRAD, - PSRAW, - PSRLD, - PSRLDQ, - PSRLQ, - PSRLW, - PSUBB, - PSUBD, - PSUBQ, - PSUBSB, - PSUBSW, - PSUBUSB, - PSUBUSW, - PSUBW, - PUNPCKHBW, - PUNPCKHDQ, - PUNPCKHWD, - PUNPCKLBW, - PUNPCKLDQ, - PUNPCKLWD, - PUNPCKLQDQ, - PUNPCKHQDQ, - PXOR, - RCPPS, - RSM, - RSQRTPS, - SHLD, - SHUFPD, - SHUFPS, - SLHD, - SQRTPS, - SQRTPD, - SUBPS, - SUBPD, - SYSENTER, - SYSEXIT, - UCOMISD, - UCOMISS, - VMREAD, - VMWRITE, - XORPS, - XORPD, - - VMOVDDUP, - VPSHUFLW, - VPSHUFHW, - VHADDPS, - VHSUBPS, - VADDSUBPS, - VCVTPD2DQ, - VLDDQU, - - VCOMISD, - VCOMISS, - VUCOMISD, - VUCOMISS, - VADDPD, - VADDPS, - VADDSD, - VADDSS, - VADDSUBPD, - VAESDEC, - VAESDECLAST, - VAESENC, - VAESENCLAST, - VAESIMC, - VAESKEYGENASSIST, - VBLENDPD, - VBLENDPS, - VBLENDVPD, - VBLENDVPS, - VBROADCASTF128, - VBROADCASTI128, - VBROADCASTSD, - VBROADCASTSS, - VCMPSD, - VCMPSS, - VCMPPD, - VCMPPS, - VCVTDQ2PD, - VCVTDQ2PS, - VCVTPD2PS, - VCVTPH2PS, - VCVTPS2DQ, - VCVTPS2PD, - VCVTSS2SD, - VCVTSI2SS, - VCVTSI2SD, - VCVTSD2SI, - VCVTSD2SS, - VCVTPS2PH, - VCVTSS2SI, - VCVTTPD2DQ, - VCVTTPS2DQ, - VCVTTSS2SI, - VCVTTSD2SI, - VDIVPD, - VDIVPS, - VDIVSD, - VDIVSS, - VDPPD, - VDPPS, - VEXTRACTF128, - VEXTRACTI128, - VEXTRACTPS, - 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, - VGATHERDPD, - VGATHERDPS, - VGATHERQPD, - VGATHERQPS, - VHADDPD, - VHSUBPD, - VINSERTF128, - VINSERTI128, - VINSERTPS, - VMASKMOVDQU, - VMASKMOVPD, - VMASKMOVPS, - VMAXPD, - VMAXPS, - VMAXSD, - VMAXSS, - VMINPD, - VMINPS, - VMINSD, - VMINSS, - VMOVAPD, - VMOVAPS, - VMOVD, - VMOVDQA, - VMOVDQU, - VMOVHLPS, - VMOVHPD, - VMOVHPS, - VMOVLHPS, - VMOVLPD, - VMOVLPS, - VMOVMSKPD, - VMOVMSKPS, - VMOVNTDQ, - VMOVNTDQA, - VMOVNTPD, - VMOVNTPS, - VMOVQ, - VMOVSS, - VMOVSD, - VMOVSHDUP, - VMOVSLDUP, - VMOVUPD, - VMOVUPS, - VMPSADBW, - VMULPD, - VMULPS, - VMULSD, - VMULSS, - VPABSB, - VPABSD, - VPABSW, - VPACKSSDW, - VPACKUSDW, - VPACKSSWB, - VPACKUSWB, - VPADDB, - VPADDD, - VPADDQ, - VPADDSB, - VPADDSW, - VPADDUSB, - VPADDUSW, - VPADDW, - VPALIGNR, - VANDPD, - VANDPS, - VORPD, - VORPS, - VANDNPD, - VANDNPS, - VPAND, - VPANDN, - VPAVGB, - VPAVGW, - VPBLENDD, - VPBLENDVB, - VPBLENDW, - VPBROADCASTB, - VPBROADCASTD, - VPBROADCASTQ, - VPBROADCASTW, - VPCLMULQDQ, - VPCMPEQB, - VPCMPEQD, - VPCMPEQQ, - VPCMPEQW, - VPCMPGTB, - VPCMPGTD, - VPCMPGTQ, - VPCMPGTW, - VPCMPESTRI, - VPCMPESTRM, - VPCMPISTRI, - VPCMPISTRM, - VPERM2F128, - VPERM2I128, - VPERMD, - VPERMILPD, - VPERMILPS, - VPERMPD, - VPERMPS, - VPERMQ, - VPEXTRB, - VPEXTRD, - VPEXTRQ, - VPEXTRW, - VPGATHERDD, - VPGATHERDQ, - VPGATHERQD, - VPGATHERQQ, - VPHADDD, - VPHADDSW, - VPHADDW, - VPMADDUBSW, - VPHMINPOSUW, - VPHSUBD, - VPHSUBSW, - VPHSUBW, - VPINSRB, - VPINSRD, - VPINSRQ, - VPINSRW, - VPMADDWD, - VPMASKMOVD, - VPMASKMOVQ, - VPMAXSB, - VPMAXSD, - VPMAXSW, - VPMAXUB, - VPMAXUW, - VPMAXUD, - VPMINSB, - VPMINSW, - VPMINSD, - VPMINUB, - VPMINUW, - VPMINUD, - VPMOVMSKB, - VPMOVSXBD, - VPMOVSXBQ, - VPMOVSXBW, - VPMOVSXDQ, - VPMOVSXWD, - VPMOVSXWQ, - VPMOVZXBD, - VPMOVZXBQ, - VPMOVZXBW, - VPMOVZXDQ, - VPMOVZXWD, - VPMOVZXWQ, - VPMULDQ, - VPMULHRSW, - VPMULHUW, - VPMULHW, - VPMULLQ, - VPMULLD, - VPMULLW, - VPMULUDQ, - VPOR, - VPSADBW, - VPSHUFB, - VPSHUFD, - VPSIGNB, - VPSIGND, - VPSIGNW, - VPSLLD, - VPSLLDQ, - VPSLLQ, - VPSLLVD, - VPSLLVQ, - VPSLLW, - VPSRAD, - VPSRAVD, - VPSRAW, - VPSRLD, - VPSRLDQ, - VPSRLQ, - VPSRLVD, - VPSRLVQ, - VPSRLW, - VPSUBB, - VPSUBD, - VPSUBQ, - VPSUBSB, - VPSUBSW, - VPSUBUSB, - VPSUBUSW, - VPSUBW, - VPTEST, - VPUNPCKHBW, - VPUNPCKHDQ, - VPUNPCKHQDQ, - VPUNPCKHWD, - VPUNPCKLBW, - VPUNPCKLDQ, - VPUNPCKLQDQ, - VPUNPCKLWD, - VPXOR, - VRCPPS, - VROUNDPD, - VROUNDPS, - VROUNDSD, - VROUNDSS, - VRSQRTPS, - VRSQRTSS, - VRCPSS, - VSHUFPD, - VSHUFPS, - VSQRTPD, - VSQRTPS, - VSQRTSS, - VSQRTSD, - VSUBPD, - VSUBPS, - VSUBSD, - VSUBSS, - VTESTPD, - VTESTPS, - VUNPCKHPD, - VUNPCKHPS, - VUNPCKLPD, - VUNPCKLPS, - VXORPD, - VXORPS, - VZEROUPPER, - VZEROALL, - VLDMXCSR, - VSTMXCSR, - - PCLMULQDQ, - AESKEYGENASSIST, - AESIMC, - AESENC, - AESENCLAST, - AESDEC, - AESDECLAST, - PCMPGTQ, - PCMPISTRM, - PCMPISTRI, - PCMPESTRI, - PACKUSDW, - PCMPESTRM, - PCMPEQQ, - PTEST, - PHMINPOSUW, - DPPS, - DPPD, - MPSADBW, - PMOVZXDQ, - PMOVSXDQ, - PMOVZXBD, - PMOVSXBD, - PMOVZXWQ, - PMOVSXWQ, - PMOVZXBQ, - PMOVSXBQ, - PMOVSXWD, - PMOVZXWD, - PEXTRQ, - PEXTRD, - PEXTRW, - PEXTRB, - PMOVSXBW, - PMOVZXBW, - PINSRQ, - PINSRD, - PINSRB, - EXTRACTPS, - INSERTPS, - ROUNDSS, - ROUNDSD, - ROUNDPS, - ROUNDPD, - PMAXSB, - PMAXSD, - PMAXUW, - PMAXUD, - PMINSD, - PMINSB, - PMINUD, - PMINUW, - BLENDW, - PBLENDVB, - PBLENDW, - BLENDVPS, - BLENDVPD, - BLENDPS, - BLENDPD, - PMULDQ, - MOVNTDQA, - PMULLD, - PALIGNR, - PSIGNW, - PSIGND, - PSIGNB, - PSHUFB, - PMULHRSW, - PMADDUBSW, - PABSD, - PABSW, - PABSB, - PHSUBSW, - PHSUBW, - PHSUBD, - PHADDD, - PHADDSW, - PHADDW, - HSUBPD, - HADDPD, - - SHA1RNDS4, - SHA1NEXTE, - SHA1MSG1, - SHA1MSG2, - SHA256RNDS2, - SHA256MSG1, - SHA256MSG2, - - LZCNT, - CLGI, - STGI, - SKINIT, - VMLOAD, - VMMCALL, - VMSAVE, - VMRUN, - INVLPGA, - INVLPGB, - TLBSYNC, - - MOVBE, - - ADCX, - ADOX, - - PREFETCHW, - - RDPID, - CMPXCHG8B, - CMPXCHG16B, - VMPTRLD, - VMPTRST, - - BZHI, - MULX, - SHLX, - SHRX, - SARX, - PDEP, - PEXT, - RORX, - XRSTORS, - XRSTORS64, - XSAVEC, - XSAVEC64, - XSAVES, - XSAVES64, - - RDFSBASE, - RDGSBASE, - WRFSBASE, - WRGSBASE, - - CRC32, - SALC, - XLAT, - - F2XM1, - FABS, - FADD, - FADDP, - FBLD, - FBSTP, - FCHS, - FCMOVB, - FCMOVBE, - FCMOVE, - FCMOVNB, - FCMOVNBE, - FCMOVNE, - FCMOVNU, - FCMOVU, - FCOM, - FCOMI, - FCOMIP, - FCOMP, - FCOMPP, - FCOS, - FDECSTP, - FDISI8087_NOP, - FDIV, - FDIVP, - FDIVR, - FDIVRP, - FENI8087_NOP, - FFREE, - FFREEP, - FIADD, - FICOM, - FICOMP, - FIDIV, - FIDIVR, - FILD, - FIMUL, - FINCSTP, - FIST, - FISTP, - FISTTP, - FISUB, - FISUBR, - FLD, - FLD1, - FLDCW, - FLDENV, - FLDL2E, - FLDL2T, - FLDLG2, - FLDLN2, - FLDPI, - FLDZ, - FMUL, - FMULP, - FNCLEX, - FNINIT, - FNOP, - FNSAVE, - FNSTCW, - FNSTENV, - FNSTOR, - FNSTSW, - FPATAN, - FPREM, - FPREM1, - FPTAN, - FRNDINT, - FRSTOR, - FSCALE, - FSETPM287_NOP, - FSIN, - FSINCOS, - FSQRT, - FST, - FSTP, - FSTPNCE, - FSUB, - FSUBP, - FSUBR, - FSUBRP, - FTST, - FUCOM, - FUCOMI, - FUCOMIP, - FUCOMP, - FUCOMPP, - FXAM, - FXCH, - FXTRACT, - FYL2X, - FYL2XP1, - - LOOPNZ, - LOOPZ, - LOOP, - JRCXZ, - - // started shipping in Tremont, 2020 sept 23 - MOVDIR64B, - MOVDIRI, - - // started shipping in Tiger Lake, 2020 sept 2 - AESDEC128KL, - AESDEC256KL, - AESDECWIDE128KL, - AESDECWIDE256KL, - AESENC128KL, - AESENC256KL, - AESENCWIDE128KL, - AESENCWIDE256KL, - ENCODEKEY128, - ENCODEKEY256, - LOADIWKEY, - - // unsure - HRESET, - - // 3dnow - FEMMS, - PI2FW, - PI2FD, - PF2IW, - PF2ID, - PMULHRW, - PFCMPGE, - PFMIN, - PFRCP, - PFRSQRT, - PFSUB, - PFADD, - PFCMPGT, - PFMAX, - PFRCPIT1, - PFRSQIT1, - PFSUBR, - PFACC, - PFCMPEQ, - PFMUL, - PFMULHRW, - PFRCPIT2, - PFNACC, - PFPNACC, - PSWAPD, - PAVGUSB, - - // ENQCMD - ENQCMD, - ENQCMDS, - - // INVPCID - INVEPT, - INVVPID, - INVPCID, - - // PTWRITE - PTWRITE, - - // GFNI - GF2P8AFFINEQB, - GF2P8AFFINEINVQB, - GF2P8MULB, - - // CET - WRUSS, - WRSS, - INCSSP, - SAVEPREVSSP, - SETSSBSY, - CLRSSBSY, - RSTORSSP, - ENDBR64, - ENDBR32, - - // TDX - TDCALL, - SEAMRET, - SEAMOPS, - SEAMCALL, - - // WAITPKG - TPAUSE, - UMONITOR, - UMWAIT, - - // UINTR - UIRET, - TESTUI, - CLUI, - STUI, - SENDUIPI, - - // TSXLDTRK - XSUSLDTRK, - XRESLDTRK, - - // AVX512F - VALIGND, - VALIGNQ, - VBLENDMPD, - VBLENDMPS, - VCOMPRESSPD, - VCOMPRESSPS, - VCVTPD2UDQ, - VCVTTPD2UDQ, - VCVTPS2UDQ, - VCVTTPS2UDQ, - VCVTQQ2PD, - VCVTQQ2PS, - VCVTSD2USI, - VCVTTSD2USI, - VCVTSS2USI, - VCVTTSS2USI, - VCVTUDQ2PD, - VCVTUDQ2PS, - VCVTUSI2USD, - VCVTUSI2USS, - VEXPANDPD, - VEXPANDPS, - VEXTRACTF32X4, - VEXTRACTF64X4, - VEXTRACTI32X4, - VEXTRACTI64X4, - VFIXUPIMMPD, - VFIXUPIMMPS, - VFIXUPIMMSD, - VFIXUPIMMSS, - VGETEXPPD, - VGETEXPPS, - VGETEXPSD, - VGETEXPSS, - VGETMANTPD, - VGETMANTPS, - VGETMANTSD, - VGETMANTSS, - VINSERTF32X4, - VINSERTF64X4, - VINSERTI64X4, - VMOVDQA32, - VMOVDQA64, - VMOVDQU32, - VMOVDQU64, - VPBLENDMD, - VPBLENDMQ, - VPCMPD, - VPCMPUD, - VPCMPQ, - VPCMPUQ, - VPCOMPRESSQ, - VPCOMPRESSD, - VPERMI2D, - VPERMI2Q, - VPERMI2PD, - VPERMI2PS, - VPERMT2D, - VPERMT2Q, - VPERMT2PD, - VPERMT2PS, - VPMAXSQ, - VPMAXUQ, - VPMINSQ, - VPMINUQ, - VPMOVSQB, - VPMOVUSQB, - VPMOVSQW, - VPMOVUSQW, - VPMOVSQD, - VPMOVUSQD, - VPMOVSDB, - VPMOVUSDB, - VPMOVSDW, - VPMOVUSDW, - VPROLD, - VPROLQ, - VPROLVD, - VPROLVQ, - VPRORD, - VPRORQ, - VPRORRD, - VPRORRQ, - VPSCATTERDD, - VPSCATTERDQ, - VPSCATTERQD, - VPSCATTERQQ, - VPSRAQ, - VPSRAVQ, - VPTESTNMD, - VPTESTNMQ, - VPTERNLOGD, - VPTERNLOGQ, - VPTESTMD, - VPTESTMQ, - VRCP14PD, - VRCP14PS, - VRCP14SD, - VRCP14SS, - VRNDSCALEPD, - VRNDSCALEPS, - VRNDSCALESD, - VRNDSCALESS, - VRSQRT14PD, - VRSQRT14PS, - VRSQRT14SD, - VRSQRT14SS, - VSCALEDPD, - VSCALEDPS, - VSCALEDSD, - VSCALEDSS, - VSCATTERDD, - VSCATTERDQ, - VSCATTERQD, - VSCATTERQQ, - VSHUFF32X4, - VSHUFF64X2, - VSHUFI32X4, - VSHUFI64X2, - - // AVX512DQ - VCVTTPD2QQ, - VCVTPD2QQ, - VCVTTPD2UQQ, - VCVTPD2UQQ, - VCVTTPS2QQ, - VCVTPS2QQ, - VCVTTPS2UQQ, - VCVTPS2UQQ, - VCVTUQQ2PD, - VCVTUQQ2PS, - VEXTRACTF64X2, - VEXTRACTI64X2, - VFPCLASSPD, - VFPCLASSPS, - VFPCLASSSD, - VFPCLASSSS, - VINSERTF64X2, - VINSERTI64X2, - VPMOVM2D, - VPMOVM2Q, - VPMOVB2D, - VPMOVQ2M, - VRANGEPD, - VRANGEPS, - VRANGESD, - VRANGESS, - VREDUCEPD, - VREDUCEPS, - VREDUCESD, - VREDUCESS, - - // AVX512BW - VDBPSADBW, - VMOVDQU8, - VMOVDQU16, - VPBLENDMB, - VPBLENDMW, - VPCMPB, - VPCMPUB, - VPCMPW, - VPCMPUW, - VPERMW, - VPERMI2B, - VPERMI2W, - VPMOVM2B, - VPMOVM2W, - VPMOVB2M, - VPMOVW2M, - VPMOVSWB, - VPMOVUSWB, - VPSLLVW, - VPSRAVW, - VPSRLVW, - VPTESTNMB, - VPTESTNMW, - VPTESTMB, - VPTESTMW, - - // AVX512CD - VPBROADCASTM, - VPCONFLICTD, - VPCONFLICTQ, - VPLZCNTD, - VPLZCNTQ, - - KUNPCKBW, - KUNPCKWD, - KUNPCKDQ, - - KADDB, - KANDB, - KANDNB, - KMOVB, - KNOTB, - KORB, - KORTESTB, - KSHIFTLB, - KSHIFTRB, - KTESTB, - KXNORB, - KXORB, - KADDW, - KANDW, - KANDNW, - KMOVW, - KNOTW, - KORW, - KORTESTW, - KSHIFTLW, - KSHIFTRW, - KTESTW, - KXNORW, - KXORW, - KADDD, - KANDD, - KANDND, - KMOVD, - KNOTD, - KORD, - KORTESTD, - KSHIFTLD, - KSHIFTRD, - KTESTD, - KXNORD, - KXORD, - KADDQ, - KANDQ, - KANDNQ, - KMOVQ, - KNOTQ, - KORQ, - KORTESTQ, - KSHIFTLQ, - KSHIFTRQ, - KTESTQ, - KXNORQ, - KXORQ, - - // AVX512ER - VEXP2PD, - VEXP2PS, - VEXP2SD, - VEXP2SS, - VRCP28PD, - VRCP28PS, - VRCP28SD, - VRCP28SS, - VRSQRT28PD, - VRSQRT28PS, - VRSQRT28SD, - VRSQRT28SS, - - // AVX512PF - VGATHERPF0DPD, - VGATHERPF0DPS, - VGATHERPF0QPD, - VGATHERPF0QPS, - VGATHERPF1DPD, - VGATHERPF1DPS, - VGATHERPF1QPD, - VGATHERPF1QPS, - VSCATTERPF0DPD, - VSCATTERPF0DPS, - VSCATTERPF0QPD, - VSCATTERPF0QPS, - VSCATTERPF1DPD, - VSCATTERPF1DPS, - VSCATTERPF1QPD, - VSCATTERPF1QPS, - - // MPX - BNDMK, - BNDCL, - BNDCU, - BNDCN, - BNDMOV, - BNDLDX, - BNDSTX, - - VGF2P8AFFINEQB, - VGF2P8AFFINEINVQB, - VPSHRDQ, - VPSHRDD, - VPSHRDW, - VPSHLDQ, - VPSHLDD, - VPSHLDW, - VBROADCASTF32X8, - VBROADCASTF64X4, - VBROADCASTF32X4, - VBROADCASTF64X2, - VBROADCASTF32X2, - VBROADCASTI32X8, - VBROADCASTI64X4, - VBROADCASTI32X4, - VBROADCASTI64X2, - VBROADCASTI32X2, - VEXTRACTI32X8, - VEXTRACTF32X8, - VINSERTI32X8, - VINSERTF32X8, - VINSERTI32X4, - V4FNMADDSS, - V4FNMADDPS, - VCVTNEPS2BF16, - V4FMADDSS, - V4FMADDPS, - VCVTNE2PS2BF16, - VP2INTERSECTD, - VP2INTERSECTQ, - VP4DPWSSDS, - VP4DPWSSD, - VPDPWSSDS, - VPDPWSSD, - VPDPBUSDS, - VDPBF16PS, - VPBROADCASTMW2D, - VPBROADCASTMB2Q, - VPMOVD2M, - VPMOVQD, - VPMOVWB, - VPMOVDB, - VPMOVDW, - VPMOVQB, - VPMOVQW, - VGF2P8MULB, - VPMADD52HUQ, - VPMADD52LUQ, - VPSHUFBITQMB, - VPERMB, - VPEXPANDD, - VPEXPANDQ, - VPABSQ, - VPRORVD, - VPRORVQ, - VPMULTISHIFTQB, - VPERMT2B, - VPERMT2W, - VPSHRDVQ, - VPSHRDVD, - VPSHRDVW, - VPSHLDVQ, - VPSHLDVD, - VPSHLDVW, - VPCOMPRESSB, - VPCOMPRESSW, - VPEXPANDB, - VPEXPANDW, - VPOPCNTD, - VPOPCNTQ, - VPOPCNTB, - VPOPCNTW, - VSCALEFSS, - VSCALEFSD, - VSCALEFPS, - VSCALEFPD, - VPDPBUSD, - VCVTUSI2SD, - VCVTUSI2SS, - VPXORD, - VPXORQ, - VPORD, - VPORQ, - VPANDND, - VPANDNQ, - VPANDD, - VPANDQ, - - PSMASH, - PVALIDATE, - RMPADJUST, - RMPUPDATE, -} - impl PartialEq for Instruction { fn eq(&self, other: &Self) -> bool { if self.prefixes != other.prefixes { @@ -2595,7 +1113,7 @@ pub struct Instruction { operands: [OperandSpec; 4], imm: u64, disp: u64, - opcode: Opcode, + pub(crate) opcode: Opcode, mem_size: u8, } @@ -3477,666 +1995,6 @@ impl InstDecoder { self.flags |= 1 << 63; self } - - /// optionally reject or reinterpret instruction according to the decoder's - /// declared extensions. - fn revise_instruction(&self, inst: &mut Instruction) -> Result<(), DecodeError> { - if inst.prefixes.evex().is_some() { - if !self.avx512() { - return Err(DecodeError::InvalidOpcode); - } else { - return Ok(()); - } - } - match inst.opcode { - Opcode::TZCNT => { - if !self.bmi1() { - // tzcnt is only supported if bmi1 is enabled. without bmi1, this decodes as - // bsf. - inst.opcode = Opcode::BSF; - } - } - Opcode::LDDQU | - Opcode::ADDSUBPS | - Opcode::ADDSUBPD | - Opcode::HADDPS | - Opcode::HSUBPS | - Opcode::HADDPD | - Opcode::HSUBPD | - Opcode::MOVSHDUP | - Opcode::MOVSLDUP | - Opcode::MOVDDUP | - Opcode::MONITOR | - Opcode::MWAIT => { - // via Intel section 5.7, SSE3 Instructions - if !self.sse3() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PHADDW | - Opcode::PHADDSW | - Opcode::PHADDD | - Opcode::PHSUBW | - Opcode::PHSUBSW | - Opcode::PHSUBD | - Opcode::PABSB | - Opcode::PABSW | - Opcode::PABSD | - Opcode::PMADDUBSW | - Opcode::PMULHRSW | - Opcode::PSHUFB | - Opcode::PSIGNB | - Opcode::PSIGNW | - Opcode::PSIGND | - Opcode::PALIGNR => { - // via Intel section 5.8, SSSE3 Instructions - if !self.ssse3() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PMULLD | - Opcode::PMULDQ | - Opcode::MOVNTDQA | - Opcode::BLENDPD | - Opcode::BLENDPS | - Opcode::BLENDVPD | - Opcode::BLENDVPS | - Opcode::PBLENDVB | - Opcode::BLENDW | - Opcode::PMINUW | - Opcode::PMINUD | - Opcode::PMINSB | - Opcode::PMINSD | - Opcode::PMAXUW | - Opcode::PMAXUD | - Opcode::PMAXSB | - Opcode::PMAXSD | - Opcode::ROUNDPS | - Opcode::ROUNDPD | - Opcode::ROUNDSS | - Opcode::ROUNDSD | - Opcode::PBLENDW | - Opcode::EXTRACTPS | - Opcode::INSERTPS | - Opcode::PINSRB | - Opcode::PINSRD | - Opcode::PINSRQ | - Opcode::PMOVSXBW | - Opcode::PMOVZXBW | - Opcode::PMOVSXBD | - Opcode::PMOVZXBD | - Opcode::PMOVSXWD | - Opcode::PMOVZXWD | - Opcode::PMOVSXBQ | - Opcode::PMOVZXBQ | - Opcode::PMOVSXWQ | - Opcode::PMOVZXWQ | - Opcode::PMOVSXDQ | - Opcode::PMOVZXDQ | - Opcode::DPPS | - Opcode::DPPD | - Opcode::MPSADBW | - Opcode::PHMINPOSUW | - Opcode::PTEST | - Opcode::PCMPEQQ | - Opcode::PEXTRB | - Opcode::PEXTRW | - Opcode::PEXTRD | - Opcode::PEXTRQ | - Opcode::PACKUSDW => { - // via Intel section 5.10, SSE4.1 Instructions - if !self.sse4_1() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::EXTRQ | - Opcode::INSERTQ | - Opcode::MOVNTSS | - Opcode::MOVNTSD => { - if !self.sse4a() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::CRC32 | - Opcode::PCMPESTRI | - Opcode::PCMPESTRM | - Opcode::PCMPISTRI | - Opcode::PCMPISTRM | - Opcode::PCMPGTQ => { - // via Intel section 5.11, SSE4.2 Instructions - if !self.sse4_2() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::AESDEC | - Opcode::AESDECLAST | - Opcode::AESENC | - Opcode::AESENCLAST | - Opcode::AESIMC | - Opcode::AESKEYGENASSIST => { - // via Intel section 5.12. AESNI AND PCLMULQDQ - if !self.aesni() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PCLMULQDQ => { - // via Intel section 5.12. AESNI AND PCLMULQDQ - if !self.pclmulqdq() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::XABORT | - Opcode::XBEGIN | - Opcode::XEND | - Opcode::XTEST => { - if !self.tsx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::SHA1MSG1 | - Opcode::SHA1MSG2 | - Opcode::SHA1NEXTE | - Opcode::SHA1RNDS4 | - Opcode::SHA256MSG1 | - Opcode::SHA256MSG2 | - Opcode::SHA256RNDS2 => { - if !self.sha() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::ENCLV | - Opcode::ENCLS | - Opcode::ENCLU => { - if !self.sgx() { - return Err(DecodeError::InvalidOpcode); - } - } - // AVX... - Opcode::VMOVDDUP | - Opcode::VPSHUFLW | - Opcode::VPSHUFHW | - Opcode::VHADDPS | - Opcode::VHSUBPS | - Opcode::VADDSUBPS | - Opcode::VCVTPD2DQ | - Opcode::VLDDQU | - Opcode::VCOMISD | - Opcode::VCOMISS | - Opcode::VUCOMISD | - Opcode::VUCOMISS | - Opcode::VADDPD | - Opcode::VADDPS | - Opcode::VADDSD | - Opcode::VADDSS | - Opcode::VADDSUBPD | - Opcode::VBLENDPD | - Opcode::VBLENDPS | - Opcode::VBLENDVPD | - Opcode::VBLENDVPS | - Opcode::VBROADCASTF128 | - Opcode::VBROADCASTI128 | - Opcode::VBROADCASTSD | - Opcode::VBROADCASTSS | - Opcode::VCMPSD | - Opcode::VCMPSS | - Opcode::VCMPPD | - Opcode::VCMPPS | - Opcode::VCVTDQ2PD | - Opcode::VCVTDQ2PS | - Opcode::VCVTPD2PS | - Opcode::VCVTPS2DQ | - Opcode::VCVTPS2PD | - Opcode::VCVTSS2SD | - Opcode::VCVTSI2SS | - Opcode::VCVTSI2SD | - Opcode::VCVTSD2SI | - Opcode::VCVTSD2SS | - Opcode::VCVTSS2SI | - Opcode::VCVTTPD2DQ | - Opcode::VCVTTPS2DQ | - Opcode::VCVTTSS2SI | - Opcode::VCVTTSD2SI | - Opcode::VDIVPD | - Opcode::VDIVPS | - Opcode::VDIVSD | - Opcode::VDIVSS | - Opcode::VDPPD | - Opcode::VDPPS | - Opcode::VEXTRACTF128 | - Opcode::VEXTRACTI128 | - Opcode::VEXTRACTPS | - Opcode::VFMADD132PD | - Opcode::VFMADD132PS | - Opcode::VFMADD132SD | - Opcode::VFMADD132SS | - Opcode::VFMADD213PD | - Opcode::VFMADD213PS | - Opcode::VFMADD213SD | - Opcode::VFMADD213SS | - Opcode::VFMADD231PD | - Opcode::VFMADD231PS | - Opcode::VFMADD231SD | - Opcode::VFMADD231SS | - Opcode::VFMADDSUB132PD | - Opcode::VFMADDSUB132PS | - Opcode::VFMADDSUB213PD | - Opcode::VFMADDSUB213PS | - Opcode::VFMADDSUB231PD | - Opcode::VFMADDSUB231PS | - Opcode::VFMSUB132PD | - Opcode::VFMSUB132PS | - Opcode::VFMSUB132SD | - Opcode::VFMSUB132SS | - Opcode::VFMSUB213PD | - Opcode::VFMSUB213PS | - Opcode::VFMSUB213SD | - Opcode::VFMSUB213SS | - Opcode::VFMSUB231PD | - Opcode::VFMSUB231PS | - Opcode::VFMSUB231SD | - Opcode::VFMSUB231SS | - Opcode::VFMSUBADD132PD | - Opcode::VFMSUBADD132PS | - Opcode::VFMSUBADD213PD | - Opcode::VFMSUBADD213PS | - Opcode::VFMSUBADD231PD | - Opcode::VFMSUBADD231PS | - Opcode::VFNMADD132PD | - Opcode::VFNMADD132PS | - Opcode::VFNMADD132SD | - Opcode::VFNMADD132SS | - Opcode::VFNMADD213PD | - Opcode::VFNMADD213PS | - Opcode::VFNMADD213SD | - Opcode::VFNMADD213SS | - Opcode::VFNMADD231PD | - Opcode::VFNMADD231PS | - Opcode::VFNMADD231SD | - Opcode::VFNMADD231SS | - Opcode::VFNMSUB132PD | - Opcode::VFNMSUB132PS | - Opcode::VFNMSUB132SD | - Opcode::VFNMSUB132SS | - Opcode::VFNMSUB213PD | - Opcode::VFNMSUB213PS | - Opcode::VFNMSUB213SD | - Opcode::VFNMSUB213SS | - Opcode::VFNMSUB231PD | - Opcode::VFNMSUB231PS | - Opcode::VFNMSUB231SD | - Opcode::VFNMSUB231SS | - Opcode::VGATHERDPD | - Opcode::VGATHERDPS | - Opcode::VGATHERQPD | - Opcode::VGATHERQPS | - Opcode::VHADDPD | - Opcode::VHSUBPD | - Opcode::VINSERTF128 | - Opcode::VINSERTI128 | - Opcode::VINSERTPS | - Opcode::VMASKMOVDQU | - Opcode::VMASKMOVPD | - Opcode::VMASKMOVPS | - Opcode::VMAXPD | - Opcode::VMAXPS | - Opcode::VMAXSD | - Opcode::VMAXSS | - Opcode::VMINPD | - Opcode::VMINPS | - Opcode::VMINSD | - Opcode::VMINSS | - Opcode::VMOVAPD | - Opcode::VMOVAPS | - Opcode::VMOVD | - Opcode::VMOVDQA | - Opcode::VMOVDQU | - Opcode::VMOVHLPS | - Opcode::VMOVHPD | - Opcode::VMOVHPS | - Opcode::VMOVLHPS | - Opcode::VMOVLPD | - Opcode::VMOVLPS | - Opcode::VMOVMSKPD | - Opcode::VMOVMSKPS | - Opcode::VMOVNTDQ | - Opcode::VMOVNTDQA | - Opcode::VMOVNTPD | - Opcode::VMOVNTPS | - Opcode::VMOVQ | - Opcode::VMOVSS | - Opcode::VMOVSD | - Opcode::VMOVSHDUP | - Opcode::VMOVSLDUP | - Opcode::VMOVUPD | - Opcode::VMOVUPS | - Opcode::VMPSADBW | - Opcode::VMULPD | - Opcode::VMULPS | - Opcode::VMULSD | - Opcode::VMULSS | - Opcode::VPABSB | - Opcode::VPABSD | - Opcode::VPABSW | - Opcode::VPACKSSDW | - Opcode::VPACKUSDW | - Opcode::VPACKSSWB | - Opcode::VPACKUSWB | - Opcode::VPADDB | - Opcode::VPADDD | - Opcode::VPADDQ | - Opcode::VPADDSB | - Opcode::VPADDSW | - Opcode::VPADDUSB | - Opcode::VPADDUSW | - Opcode::VPADDW | - Opcode::VPALIGNR | - Opcode::VPAND | - Opcode::VANDPD | - Opcode::VANDPS | - Opcode::VANDNPD | - Opcode::VANDNPS | - Opcode::VORPD | - Opcode::VORPS | - Opcode::VPANDN | - Opcode::VPAVGB | - Opcode::VPAVGW | - Opcode::VPBLENDD | - Opcode::VPBLENDVB | - Opcode::VPBLENDW | - Opcode::VPBROADCASTB | - Opcode::VPBROADCASTD | - Opcode::VPBROADCASTQ | - Opcode::VPBROADCASTW | - Opcode::VPCLMULQDQ | - Opcode::VPCMPEQB | - Opcode::VPCMPEQD | - Opcode::VPCMPEQQ | - Opcode::VPCMPEQW | - Opcode::VPCMPGTB | - Opcode::VPCMPGTD | - Opcode::VPCMPGTQ | - Opcode::VPCMPGTW | - Opcode::VPCMPESTRI | - Opcode::VPCMPESTRM | - Opcode::VPCMPISTRI | - Opcode::VPCMPISTRM | - Opcode::VPERM2F128 | - Opcode::VPERM2I128 | - Opcode::VPERMD | - Opcode::VPERMILPD | - Opcode::VPERMILPS | - Opcode::VPERMPD | - Opcode::VPERMPS | - Opcode::VPERMQ | - Opcode::VPEXTRB | - Opcode::VPEXTRD | - Opcode::VPEXTRQ | - Opcode::VPEXTRW | - Opcode::VPGATHERDD | - Opcode::VPGATHERDQ | - Opcode::VPGATHERQD | - Opcode::VPGATHERQQ | - Opcode::VPHADDD | - Opcode::VPHADDSW | - Opcode::VPHADDW | - Opcode::VPMADDUBSW | - Opcode::VPHMINPOSUW | - Opcode::VPHSUBD | - Opcode::VPHSUBSW | - Opcode::VPHSUBW | - Opcode::VPINSRB | - Opcode::VPINSRD | - Opcode::VPINSRQ | - Opcode::VPINSRW | - Opcode::VPMADDWD | - Opcode::VPMASKMOVD | - Opcode::VPMASKMOVQ | - Opcode::VPMAXSB | - Opcode::VPMAXSD | - Opcode::VPMAXSW | - Opcode::VPMAXUB | - Opcode::VPMAXUW | - Opcode::VPMAXUD | - Opcode::VPMINSB | - Opcode::VPMINSW | - Opcode::VPMINSD | - Opcode::VPMINUB | - Opcode::VPMINUW | - Opcode::VPMINUD | - Opcode::VPMOVMSKB | - Opcode::VPMOVSXBD | - Opcode::VPMOVSXBQ | - Opcode::VPMOVSXBW | - Opcode::VPMOVSXDQ | - Opcode::VPMOVSXWD | - Opcode::VPMOVSXWQ | - Opcode::VPMOVZXBD | - Opcode::VPMOVZXBQ | - Opcode::VPMOVZXBW | - Opcode::VPMOVZXDQ | - Opcode::VPMOVZXWD | - Opcode::VPMOVZXWQ | - Opcode::VPMULDQ | - Opcode::VPMULHRSW | - Opcode::VPMULHUW | - Opcode::VPMULHW | - Opcode::VPMULLQ | - Opcode::VPMULLD | - Opcode::VPMULLW | - Opcode::VPMULUDQ | - Opcode::VPOR | - Opcode::VPSADBW | - Opcode::VPSHUFB | - Opcode::VPSHUFD | - Opcode::VPSIGNB | - Opcode::VPSIGND | - Opcode::VPSIGNW | - Opcode::VPSLLD | - Opcode::VPSLLDQ | - Opcode::VPSLLQ | - Opcode::VPSLLVD | - Opcode::VPSLLVQ | - Opcode::VPSLLW | - Opcode::VPSRAD | - Opcode::VPSRAVD | - Opcode::VPSRAW | - Opcode::VPSRLD | - Opcode::VPSRLDQ | - Opcode::VPSRLQ | - Opcode::VPSRLVD | - Opcode::VPSRLVQ | - Opcode::VPSRLW | - Opcode::VPSUBB | - Opcode::VPSUBD | - Opcode::VPSUBQ | - Opcode::VPSUBSB | - Opcode::VPSUBSW | - Opcode::VPSUBUSB | - Opcode::VPSUBUSW | - Opcode::VPSUBW | - Opcode::VPTEST | - Opcode::VPUNPCKHBW | - Opcode::VPUNPCKHDQ | - Opcode::VPUNPCKHQDQ | - Opcode::VPUNPCKHWD | - Opcode::VPUNPCKLBW | - Opcode::VPUNPCKLDQ | - Opcode::VPUNPCKLQDQ | - Opcode::VPUNPCKLWD | - Opcode::VPXOR | - Opcode::VRCPPS | - Opcode::VROUNDPD | - Opcode::VROUNDPS | - Opcode::VROUNDSD | - Opcode::VROUNDSS | - Opcode::VRSQRTPS | - Opcode::VRSQRTSS | - Opcode::VRCPSS | - Opcode::VSHUFPD | - Opcode::VSHUFPS | - Opcode::VSQRTPD | - Opcode::VSQRTPS | - Opcode::VSQRTSS | - Opcode::VSQRTSD | - Opcode::VSUBPD | - Opcode::VSUBPS | - Opcode::VSUBSD | - Opcode::VSUBSS | - Opcode::VTESTPD | - Opcode::VTESTPS | - Opcode::VUNPCKHPD | - Opcode::VUNPCKHPS | - Opcode::VUNPCKLPD | - Opcode::VUNPCKLPS | - Opcode::VXORPD | - Opcode::VXORPS | - Opcode::VZEROUPPER | - Opcode::VZEROALL | - Opcode::VLDMXCSR | - Opcode::VSTMXCSR => { - // TODO: check a table for these - if !self.avx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VAESDEC | - Opcode::VAESDECLAST | - Opcode::VAESENC | - Opcode::VAESENCLAST | - Opcode::VAESIMC | - Opcode::VAESKEYGENASSIST => { - // TODO: check a table for these - if !self.avx() || !self.aesni() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::MOVBE => { - if !self.movbe() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::POPCNT => { - /* - * from the intel SDM: - * ``` - * Before an application attempts to use the POPCNT instruction, it must check that - * the processor supports SSE4.2 (if CPUID.01H:ECX.SSE4_2[bit 20] = 1) and POPCNT - * (if CPUID.01H:ECX.POPCNT[bit 23] = 1). - * ``` - */ - if self.intel_quirks() && (self.sse4_2() || self.popcnt()) { - return Ok(()); - } else if !self.popcnt() { - /* - * elsewhere from the amd APM: - * `Instruction Subsets and CPUID Feature Flags` on page 507 indicates that - * popcnt is present when the popcnt bit is reported by cpuid. this seems to be - * the less quirky default, so `intel_quirks` is considered the outlier, and - * before this default. - * */ - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::LZCNT => { - /* - * amd APM, `LZCNT` page 212: - * LZCNT is an Advanced Bit Manipulation (ABM) instruction. Support for the LZCNT - * instruction is indicated by CPUID Fn8000_0001_ECX[ABM] = 1. - * - * meanwhile the intel SDM simply states: - * ``` - * CPUID.EAX=80000001H:ECX.LZCNT[bit 5]: if 1 indicates the processor supports the - * LZCNT instruction. - * ``` - * - * so that's considered the less-quirky (default) case here. - * */ - if self.amd_quirks() && !self.abm() { - return Err(DecodeError::InvalidOpcode); - } else if !self.lzcnt() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::ADCX | - Opcode::ADOX => { - if !self.adx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VMRUN | - Opcode::VMLOAD | - Opcode::VMSAVE | - Opcode::CLGI | - Opcode::VMMCALL | - Opcode::INVLPGA => { - if !self.svm() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::STGI | - Opcode::SKINIT => { - if !self.svm() || !self.skinit() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::LAHF | - Opcode::SAHF => { - if !self.lahfsahf() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VCVTPS2PH | - Opcode::VCVTPH2PS => { - /* - * from intel SDM: - * ``` - * 14.4.1 Detection of F16C Instructions Application using float 16 instruction - * must follow a detection sequence similar to AVX to ensure: • The OS has - * enabled YMM state management support, • The processor support AVX as - * indicated by the CPUID feature flag, i.e. CPUID.01H:ECX.AVX[bit 28] = 1. • - * The processor support 16-bit floating-point conversion instructions via a - * CPUID feature flag (CPUID.01H:ECX.F16C[bit 29] = 1). - * ``` - * - * TODO: only the VEX-coded variant of this instruction should be gated on `f16c`. - * the EVEX-coded variant should be gated on `avx512f` or `avx512vl` if not - * EVEX.512-coded. - */ - if !self.avx() || !self.f16c() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::RDRAND => { - if !self.rdrand() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::RDSEED => { - if !self.rdseed() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::MONITORX | Opcode::MWAITX | // these are gated on the `monitorx` and `mwaitx` cpuid bits, but are AMD-only. - Opcode::CLZERO | Opcode::RDPRU => { // again, gated on specific cpuid bits, but AMD-only. - if !self.amd_quirks() { - return Err(DecodeError::InvalidOpcode); - } - } - other => { - if !self.bmi1() { - if BMI1.contains(&other) { - return Err(DecodeError::InvalidOpcode); - } - } - if !self.bmi2() { - if BMI2.contains(&other) { - return Err(DecodeError::InvalidOpcode); - } - } - } - } - Ok(()) - } } impl Default for InstDecoder { @@ -4162,7 +2020,7 @@ impl Decoder for InstDecoder { } if self != &InstDecoder::default() { - self.revise_instruction(&mut instr)?; + crate::generated::long_mode::revise_instruction(self, &mut instr)?; } Ok(instr) @@ -4189,7 +2047,7 @@ impl AnnotatingDecoder for InstDecoder { } if self != &InstDecoder::default() { - self.revise_instruction(instr)?; + crate::generated::long_mode::revise_instruction(self, instr)?; } Ok(()) diff --git a/src/protected_mode/display.rs b/src/protected_mode/display.rs index 4416141..9ef531e 100644 --- a/src/protected_mode/display.rs +++ b/src/protected_mode/display.rs @@ -345,1480 +345,10 @@ impl fmt::Display for Opcode { } } -const MNEMONICS: &[&'static str] = &[ - "invalid", - "add", - "or", - "adc", - "sbb", - "and", - "xor", - "sub", - "cmp", - "xadd", - "bt", - "bts", - "btc", - "btr", - "bsf", - "bsr", - "tzcnt", - "movss", - "addss", - "subss", - "mulss", - "divss", - "minss", - "maxss", - "sqrtss", - "movsd", - "sqrtsd", - "addsd", - "subsd", - "mulsd", - "divsd", - "minsd", - "maxsd", - "movsldup", - "movshdup", - "movddup", - "haddps", - "hsubps", - "addsubpd", - "addsubps", - "cvtsi2ss", - "cvtsi2sd", - "cvttsd2si", - "cvttps2dq", - "cvtpd2dq", - "cvtpd2ps", - "cvtps2dq", - "cvtsd2si", - "cvtsd2ss", - "cvttss2si", - "cvtss2si", - "cvtss2sd", - "cvtdq2pd", - "lddqu", - "movzx", - "movsx", - "movsxd", - "sar", - "sal", - "shr", - "shrd", - "shl", - "rcr", - "rcl", - "ror", - "rol", - "inc", - "dec", - "hlt", - "call", - "callf", - "jmp", - "jmpf", - "push", - "pop", - "lea", - "nop", - "prefetchnta", - "prefetch0", - "prefetch1", - "prefetch2", - "xchg", - "popf", - "int", - "into", - "iret", - "iretd", - "iretq", - "retf", - "enter", - "leave", - "mov", - "ret", - "pushf", - "wait", - "cbw", - "cwde", - "cdqe", - "cwd", - "cdq", - "cqo", - "lods", - "stos", - "lahf", - "sahf", - "cmps", - "scas", - "movs", - "test", - "ins", - "in", - "outs", - "out", - "imul", - "jo", - "jno", - "jb", - "jnb", - "jz", - "jnz", - "ja", - "jna", - "js", - "jns", - "jp", - "jnp", - "jl", - "jge", - "jle", - "jg", - "cmova", - "cmovb", - "cmovg", - "cmovge", - "cmovl", - "cmovle", - "cmovna", - "cmovnb", - "cmovno", - "cmovnp", - "cmovns", - "cmovnz", - "cmovo", - "cmovp", - "cmovs", - "cmovz", - "div", - "idiv", - "mul", - "neg", - "not", - "cmpxchg", - "seto", - "setno", - "setb", - "setae", - "setz", - "setnz", - "setbe", - "seta", - "sets", - "setns", - "setp", - "setnp", - "setl", - "setge", - "setle", - "setg", - "cpuid", - "ud0", - "ud1", - "ud2", - "wbinvd", - "invd", - "sysret", - "clts", - "syscall", - "lsl", - "lar", - "les", - "lds", - "sgdt", - "sidt", - "lgdt", - "lidt", - "smsw", - "lmsw", - "swapgs", - "rdtscp", - "invlpg", - "fxsave", - "fxrstor", - "ldmxcsr", - "stmxcsr", - "xsave", - "xrstor", - "xsaveopt", - "lfence", - "mfence", - "sfence", - "clflush", - "clflushopt", - "clwb", - "wrmsr", - "rdtsc", - "rdmsr", - "rdpmc", - "sldt", - "str", - "lldt", - "ltr", - "verr", - "verw", - "cmc", - "clc", - "stc", - "cli", - "sti", - "cld", - "std", - "jmpe", - "popcnt", - "movdqu", - "movdqa", - "movq", - "cmpss", - "cmpsd", - "unpcklps", - "unpcklpd", - "unpckhps", - "unpckhpd", - "pshufhw", - "pshuflw", - "movups", - "movq2dq", - "movdq2q", - "rsqrtss", - "rcpss", - "andn", - "bextr", - "blsi", - "blsmsk", - "blsr", - "vmclear", - "vmxon", - "vmcall", - "vmlaunch", - "vmresume", - "vmxoff", - "pconfig", - "monitor", - "mwait", - "monitorx", - "mwaitx", - "clac", - "stac", - "encls", - "enclv", - "xgetbv", - "xsetbv", - "vmfunc", - "xabort", - "xbegin", - "xend", - "xtest", - "enclu", - "rdpkru", - "wrpkru", - "rdpru", - "clzero", - "rdseed", - "rdrand", - "addps", - "addpd", - "andnps", - "andnpd", - "andps", - "andpd", - "bswap", - "cmppd", - "cmpps", - "comisd", - "comiss", - "cvtdq2ps", - "cvtpi2ps", - "cvtpi2pd", - "cvtps2pd", - "cvtps2pi", - "cvtpd2pi", - "cvttps2pi", - "cvttpd2pi", - "cvttpd2dq", - "divps", - "divpd", - "emms", - "getsec", - "lfs", - "lgs", - "lss", - "maskmovq", - "maskmovdqu", - "maxps", - "maxpd", - "minps", - "minpd", - "movaps", - "movapd", - "movd", - "movlps", - "movlpd", - "movhps", - "movhpd", - "movlhps", - "movhlps", - "movupd", - "movmskps", - "movmskpd", - "movnti", - "movntps", - "movntpd", - "extrq", - "insertq", - "movntss", - "movntsd", - "movntq", - "movntdq", - "mulps", - "mulpd", - "orps", - "orpd", - "packssdw", - "packsswb", - "packuswb", - "paddb", - "paddd", - "paddq", - "paddsb", - "paddsw", - "paddusb", - "paddusw", - "paddw", - "pand", - "pandn", - "pavgb", - "pavgw", - "pcmpeqb", - "pcmpeqd", - "pcmpeqw", - "pcmpgtb", - "pcmpgtd", - "pcmpgtw", - "pinsrw", - "pmaddwd", - "pmaxsw", - "pmaxub", - "pminsw", - "pminub", - "pmovmskb", - "pmulhuw", - "pmulhw", - "pmullw", - "pmuludq", - "por", - "psadbw", - "pshufw", - "pshufd", - "pslld", - "pslldq", - "psllq", - "psllw", - "psrad", - "psraw", - "psrld", - "psrldq", - "psrlq", - "psrlw", - "psubb", - "psubd", - "psubq", - "psubsb", - "psubsw", - "psubusb", - "psubusw", - "psubw", - "punpckhbw", - "punpckhdq", - "punpckhwd", - "punpcklbw", - "punpckldq", - "punpcklwd", - "punpcklqdq", - "punpckhqdq", - "pxor", - "rcpps", - "rsm", - "rsqrtps", - "shld", - "shufpd", - "shufps", - "slhd", - "sqrtps", - "sqrtpd", - "subps", - "subpd", - "sysenter", - "sysexit", - "ucomisd", - "ucomiss", - "vmread", - "vmwrite", - "xorps", - "xorpd", - "vmovddup", - "vpshuflw", - "vpshufhw", - "vhaddps", - "vhsubps", - "vaddsubps", - "vcvtpd2dq", - "vlddqu", - "vcomisd", - "vcomiss", - "vucomisd", - "vucomiss", - "vaddpd", - "vaddps", - "vaddsd", - "vaddss", - "vaddsubpd", - "vaesdec", - "vaesdeclast", - "vaesenc", - "vaesenclast", - "vaesimc", - "vaeskeygenassist", - "vblendpd", - "vblendps", - "vblendvpd", - "vblendvps", - "vbroadcastf128", - "vbroadcasti128", - "vbroadcastsd", - "vbroadcastss", - "vcmpsd", - "vcmpss", - "vcmppd", - "vcmpps", - "vcvtdq2pd", - "vcvtdq2ps", - "vcvtpd2ps", - "vcvtph2ps", - "vcvtps2dq", - "vcvtps2pd", - "vcvtss2sd", - "vcvtsi2ss", - "vcvtsi2sd", - "vcvtsd2si", - "vcvtsd2ss", - "vcvtps2ph", - "vcvtss2si", - "vcvttpd2dq", - "vcvttps2dq", - "vcvttss2si", - "vcvttsd2si", - "vdivpd", - "vdivps", - "vdivsd", - "vdivss", - "vdppd", - "vdpps", - "vextractf128", - "vextracti128", - "vextractps", - "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", - "vgatherdpd", - "vgatherdps", - "vgatherqpd", - "vgatherqps", - "vhaddpd", - "vhsubpd", - "vinsertf128", - "vinserti128", - "vinsertps", - "vmaskmovdqu", - "vmaskmovpd", - "vmaskmovps", - "vmaxpd", - "vmaxps", - "vmaxsd", - "vmaxss", - "vminpd", - "vminps", - "vminsd", - "vminss", - "vmovapd", - "vmovaps", - "vmovd", - "vmovdqa", - "vmovdqu", - "vmovhlps", - "vmovhpd", - "vmovhps", - "vmovlhps", - "vmovlpd", - "vmovlps", - "vmovmskpd", - "vmovmskps", - "vmovntdq", - "vmovntdqa", - "vmovntpd", - "vmovntps", - "vmovq", - "vmovss", - "vmovsd", - "vmovshdup", - "vmovsldup", - "vmovupd", - "vmovups", - "vmpsadbw", - "vmulpd", - "vmulps", - "vmulsd", - "vmulss", - "vpabsb", - "vpabsd", - "vpabsw", - "vpackssdw", - "vpackusdw", - "vpacksswb", - "vpackuswb", - "vpaddb", - "vpaddd", - "vpaddq", - "vpaddsb", - "vpaddsw", - "vpaddusb", - "vpaddusw", - "vpaddw", - "vpalignr", - "vandpd", - "vandps", - "vorpd", - "vorps", - "vandnpd", - "vandnps", - "vpand", - "vpandn", - "vpavgb", - "vpavgw", - "vpblendd", - "vpblendvb", - "vpblendw", - "vpbroadcastb", - "vpbroadcastd", - "vpbroadcastq", - "vpbroadcastw", - "vpclmulqdq", - "vpcmpeqb", - "vpcmpeqd", - "vpcmpeqq", - "vpcmpeqw", - "vpcmpgtb", - "vpcmpgtd", - "vpcmpgtq", - "vpcmpgtw", - "vpcmpestri", - "vpcmpestrm", - "vpcmpistri", - "vpcmpistrm", - "vperm2f128", - "vperm2i128", - "vpermd", - "vpermilpd", - "vpermilps", - "vpermpd", - "vpermps", - "vpermq", - "vpextrb", - "vpextrd", - "vpextrq", - "vpextrw", - "vpgatherdd", - "vpgatherdq", - "vpgatherqd", - "vpgatherqq", - "vphaddd", - "vphaddsw", - "vphaddw", - "vpmaddubsw", - "vphminposuw", - "vphsubd", - "vphsubsw", - "vphsubw", - "vpinsrb", - "vpinsrd", - "vpinsrq", - "vpinsrw", - "vpmaddwd", - "vpmaskmovd", - "vpmaskmovq", - "vpmaxsb", - "vpmaxsd", - "vpmaxsw", - "vpmaxub", - "vpmaxuw", - "vpmaxud", - "vpminsb", - "vpminsw", - "vpminsd", - "vpminub", - "vpminuw", - "vpminud", - "vpmovmskb", - "vpmovsxbd", - "vpmovsxbq", - "vpmovsxbw", - "vpmovsxdq", - "vpmovsxwd", - "vpmovsxwq", - "vpmovzxbd", - "vpmovzxbq", - "vpmovzxbw", - "vpmovzxdq", - "vpmovzxwd", - "vpmovzxwq", - "vpmuldq", - "vpmulhrsw", - "vpmulhuw", - "vpmulhw", - "vpmullq", - "vpmulld", - "vpmullw", - "vpmuludq", - "vpor", - "vpsadbw", - "vpshufb", - "vpshufd", - "vpsignb", - "vpsignd", - "vpsignw", - "vpslld", - "vpslldq", - "vpsllq", - "vpsllvd", - "vpsllvq", - "vpsllw", - "vpsrad", - "vpsravd", - "vpsraw", - "vpsrld", - "vpsrldq", - "vpsrlq", - "vpsrlvd", - "vpsrlvq", - "vpsrlw", - "vpsubb", - "vpsubd", - "vpsubq", - "vpsubsb", - "vpsubsw", - "vpsubusb", - "vpsubusw", - "vpsubw", - "vptest", - "vpunpckhbw", - "vpunpckhdq", - "vpunpckhqdq", - "vpunpckhwd", - "vpunpcklbw", - "vpunpckldq", - "vpunpcklqdq", - "vpunpcklwd", - "vpxor", - "vrcpps", - "vroundpd", - "vroundps", - "vroundsd", - "vroundss", - "vrsqrtps", - "vrsqrtss", - "vrcpss", - "vshufpd", - "vshufps", - "vsqrtpd", - "vsqrtps", - "vsqrtss", - "vsqrtsd", - "vsubpd", - "vsubps", - "vsubsd", - "vsubss", - "vtestpd", - "vtestps", - "vunpckhpd", - "vunpckhps", - "vunpcklpd", - "vunpcklps", - "vxorpd", - "vxorps", - "vzeroupper", - "vzeroall", - "vldmxcsr", - "vstmxcsr", - "pclmulqdq", - "aeskeygenassist", - "aesimc", - "aesenc", - "aesenclast", - "aesdec", - "aesdeclast", - "pcmpgtq", - "pcmpistrm", - "pcmpistri", - "pcmpestri", - "packusdw", - "pcmpestrm", - "pcmpeqq", - "ptest", - "phminposuw", - "dpps", - "dppd", - "mpsadbw", - "pmovzxdq", - "pmovsxdq", - "pmovzxbd", - "pmovsxbd", - "pmovzxwq", - "pmovsxwq", - "pmovzxbq", - "pmovsxbq", - "pmovsxwd", - "pmovzxwd", - "pextrq", - "pextrd", - "pextrw", - "pextrb", - "pmovsxbw", - "pmovzxbw", - "pinsrq", - "pinsrd", - "pinsrb", - "extractps", - "insertps", - "roundss", - "roundsd", - "roundps", - "roundpd", - "pmaxsb", - "pmaxsd", - "pmaxuw", - "pmaxud", - "pminsd", - "pminsb", - "pminud", - "pminuw", - "blendw", - "pblendvb", - "pblendw", - "blendvps", - "blendvpd", - "blendps", - "blendpd", - "pmuldq", - "movntdqa", - "pmulld", - "palignr", - "psignw", - "psignd", - "psignb", - "pshufb", - "pmulhrsw", - "pmaddubsw", - "pabsd", - "pabsw", - "pabsb", - "phsubsw", - "phsubw", - "phsubd", - "phaddd", - "phaddsw", - "phaddw", - "hsubpd", - "haddpd", - "sha1rnds4", - "sha1nexte", - "sha1msg1", - "sha1msg2", - "sha256rnds2", - "sha256msg1", - "sha256msg2", - "lzcnt", - "clgi", - "stgi", - "skinit", - "vmload", - "vmmcall", - "vmsave", - "vmrun", - "invlpga", - "invlpgb", - "tlbsync", - "movbe", - "adcx", - "adox", - "prefetchw", - "rdpid", - "cmpxchg8b", - "cmpxchg16b", - "vmptrld", - "vmptrst", - "bzhi", - "mulx", - "shlx", - "shrx", - "sarx", - "pdep", - "pext", - "rorx", - "xrstors", - "xrstors64", - "xsavec", - "xsavec64", - "xsaves", - "xsaves64", - "rdfsbase", - "rdgsbase", - "wrfsbase", - "wrgsbase", - "crc32", - "salc", - "xlat", - - "f2xm1", - "fabs", - "fadd", - "faddp", - "fbld", - "fbstp", - "fchs", - "fcmovb", - "fcmovbe", - "fcmove", - "fcmovnb", - "fcmovnbe", - "fcmovne", - "fcmovnu", - "fcmovu", - "fcom", - "fcomi", - "fcomip", - "fcomp", - "fcompp", - "fcos", - "fdecstp", - "fdisi8087_nop", - "fdiv", - "fdivp", - "fdivr", - "fdivrp", - "feni8087_nop", - "ffree", - "ffreep", - "fiadd", - "ficom", - "ficomp", - "fidiv", - "fidivr", - "fild", - "fimul", - "fincstp", - "fist", - "fistp", - "fisttp", - "fisub", - "fisubr", - "fld", - "fld1", - "fldcw", - "fldenv", - "fldl2e", - "fldl2t", - "fldlg2", - "fldln2", - "fldpi", - "fldz", - "fmul", - "fmulp", - "fnclex", - "fninit", - "fnop", - "fnsave", - "fnstcw", - "fnstenv", - "fnstor", - "fnstsw", - "fpatan", - "fprem", - "fprem1", - "fptan", - "frndint", - "frstor", - "fscale", - "fsetpm287_nop", - "fsin", - "fsincos", - "fsqrt", - "fst", - "fstp", - "fstpnce", - "fsub", - "fsubp", - "fsubr", - "fsubrp", - "ftst", - "fucom", - "fucomi", - "fucomip", - "fucomp", - "fucompp", - "fxam", - "fxch", - "fxtract", - "fyl2x", - "fyl2xp1", - "loopnz", - "loopz", - "loop", - "jecxz", - "pusha", - "popa", - "bound", - "arpl", - "aas", - "aaa", - "das", - "daa", - "aam", - "aad", - "movdir64b", - "movdiri", - "aesdec128kl", - "aesdec256kl", - "aesdecwide128kl", - "aesdecwide256kl", - "aesenc128kl", - "aesenc256kl", - "aesencwide128kl", - "aesencwide256kl", - "encodekey128", - "encodekey256", - "loadiwkey", - - // unsure - "hreset", - - // 3dnow - "femms", - "pi2fw", - "pi2fd", - "pi2iw", - "pi2id", - "pmulhrw", - "pfcmpge", - "pfmin", - "pfrcp", - "pfrsqrt", - "pfsub", - "pfadd", - "pfcmpgt", - "pfmax", - "pfrcpit1", - "pfrsqit1", - "pfsubr", - "pfacc", - "pfcmpeq", - "pfmul", - "pfmulhrw", - "pfrcpit2", - "pfnacc", - "pfpnacc", - "pswapd", - "pavgusb", - - // ENQCMD - "enqcmd", - "enqcmds", - - // INVPCID, - "invept", - "invvpid", - "invpcid", - - // PTWRITE - "ptwrite", - - // GFNI - "gf2p8affineqb", - "gf2p8affineinvqb", - "gf2p8mulb", - - // CET - "wruss", - "wrss", - "incssp", - "saveprevssp", - "setssbsy", - "clrssbsy", - "rstorssp", - "endbr64", - "endbr32", - - // TDX - "tdcall", - "seamret", - "seamops", - "seamcall", - - // WAITPKG - "tpause", - "umonitor", - "umwait", - - // UINTR - "uiret", - "testui", - "clui", - "stui", - "senduipi", - - // TSXLDTRK - "xsusldtrk", - "xresldtrk", - - // AVX512F - "valignd", - "valignq", - "vblendmpd", - "vblendmps", - "vcompresspd", - "vcompressps", - "vcvtpd2udq", - "vcvttpd2udq", - "vcvtps2udq", - "vcvttps2udq", - "vcvtqq2pd", - "vcvtqq2ps", - "vcvtsd2usi", - "vcvttsd2usi", - "vcvtss2usi", - "vcvttss2usi", - "vcvtudq2pd", - "vcvtudq2ps", - "vcvtusi2usd", - "vcvtusi2uss", - "vexpandpd", - "vexpandps", - "vextractf32x4", - "vextractf64x4", - "vextracti32x4", - "vextracti64x4", - "vfixupimmpd", - "vfixupimmps", - "vfixupimmsd", - "vfixupimmss", - "vgetexppd", - "vgetexpps", - "vgetexpsd", - "vgetexpss", - "vgetmantpd", - "vgetmantps", - "vgetmantsd", - "vgetmantss", - "vinsertf32x4", - "vinsertf64x4", - "vinserti64x4", - "vmovdqa32", - "vmovdqa64", - "vmovdqu32", - "vmovdqu64", - "vpblendmd", - "vpblendmq", - "vpcmpd", - "vpcmpud", - "vpcmpq", - "vpcmpuq", - "vpcompressq", - "vpcompressd", - "vpermi2d", - "vpermi2q", - "vpermi2pd", - "vpermi2ps", - "vpermt2d", - "vpermt2q", - "vpermt2pd", - "vpermt2ps", - "vpmaxsq", - "vpmaxuq", - "vpminsq", - "vpminuq", - "vpmovsqb", - "vpmovusqb", - "vpmovsqw", - "vpmovusqw", - "vpmovsqd", - "vpmovusqd", - "vpmovsdb", - "vpmovusdb", - "vpmovsdw", - "vpmovusdw", - "vprold", - "vprolq", - "vprolvd", - "vprolvq", - "vprord", - "vprorq", - "vprorrd", - "vprorrq", - "vpscatterdd", - "vpscatterdq", - "vpscatterqd", - "vpscatterqq", - "vpsraq", - "vpsravq", - "vptestnmd", - "vptestnmq", - "vpternlogd", - "vpternlogq", - "vptestmd", - "vptestmq", - "vrcp14pd", - "vrcp14ps", - "vrcp14sd", - "vrcp14ss", - "vrndscalepd", - "vrndscaleps", - "vrndscalesd", - "vrndscaless", - "vrsqrt14pd", - "vrsqrt14ps", - "vrsqrt14sd", - "vrsqrt14ss", - "vscaledpd", - "vscaledps", - "vscaledsd", - "vscaledss", - "vscatterdd", - "vscatterdq", - "vscatterqd", - "vscatterqq", - "vshuff32x4", - "vshuff64x2", - "vshufi32x4", - "vshufi64x2", - - // AVX512DQ - "vcvttpd2qq", - "vcvtpd2qq", - "vcvttpd2uqq", - "vcvtpd2uqq", - "vcvttps2qq", - "vcvtps2qq", - "vcvttps2uqq", - "vcvtps2uqq", - "vcvtuqq2pd", - "vcvtuqq2ps", - "vextractf64x2", - "vextracti64x2", - "vfpclasspd", - "vfpclassps", - "vfpclasssd", - "vfpclassss", - "vinsertf64x2", - "vinserti64x2", - "vpmovm2d", - "vpmovm2q", - "vpmovb2d", - "vpmovq2m", - "vrangepd", - "vrangeps", - "vrangesd", - "vrangess", - "vreducepd", - "vreduceps", - "vreducesd", - "vreducess", - - // AVX512BW - "vdbpsadbw", - "vmovdqu8", - "vmovdqu16", - "vpblendmb", - "vpblendmw", - "vpcmpb", - "vpcmpub", - "vpcmpw", - "vpcmpuw", - "vpermw", - "vpermi2b", - "vpermi2w", - "vpmovm2b", - "vpmovm2w", - "vpmovb2m", - "vpmovw2m", - "vpmovswb", - "vpmovuswb", - "vpsllvw", - "vpsravw", - "vpsrlvw", - "vptestnmb", - "vptestnmw", - "vptestmb", - "vptestmw", - - // AVX512CD - "vpbroadcastm", - "vpconflictd", - "vpconflictq", - "vplzcntd", - "vplzcntq", - - "kunpckbw", - "kunpckwd", - "kunpckdq", - - "kaddb", - "kandb", - "kandnb", - "kmovb", - "knotb", - "korb", - "kortestb", - "kshiftlb", - "kshiftrb", - "ktestb", - "kxnorb", - "kxorb", - "kaddw", - "kandw", - "kandnw", - "kmovw", - "knotw", - "korw", - "kortestw", - "kshiftlw", - "kshiftrw", - "ktestw", - "kxnorw", - "kxorw", - "kaddd", - "kandd", - "kandnd", - "kmovd", - "knotd", - "kord", - "kortestd", - "kshiftld", - "kshiftrd", - "ktestd", - "kxnord", - "kxord", - "kaddq", - "kandq", - "kandnq", - "kmovq", - "knotq", - "korq", - "kortestq", - "kshiftlq", - "kshiftrq", - "ktestq", - "kxnorq", - "kxorq", - - // AVX512ER - "vexp2pd", - "vexp2ps", - "vexp2sd", - "vexp2ss", - "vrcp28pd", - "vrcp28ps", - "vrcp28sd", - "vrcp28ss", - "vrsqrt28pd", - "vrsqrt28ps", - "vrsqrt28sd", - "vrsqrt28ss", - - // AVX512PF - "vgatherpf0dpd", - "vgatherpf0dps", - "vgatherpf0qpd", - "vgatherpf0qps", - "vgatherpf1dpd", - "vgatherpf1dps", - "vgatherpf1qpd", - "vgatherpf1qps", - "vscatterpf0dpd", - "vscatterpf0dps", - "vscatterpf0qpd", - "vscatterpf0qps", - "vscatterpf1dpd", - "vscatterpf1dps", - "vscatterpf1qpd", - "vscatterpf1qps", - - // MPX - "bndmk", - "bndcl", - "bndcu", - "bndcn", - "bndmov", - "bndldx", - "bndstx", - - - - "vgf2p8affineqb", - "vgf2p8affineinvqb", - "vpshrdq", - "vpshrdd", - "vpshrdw", - "vpshldq", - "vpshldd", - "vpshldw", - "vbroadcastf32x8", - "vbroadcastf64x4", - "vbroadcastf32x4", - "vbroadcastf64x2", - "vbroadcastf32x2", - "vbroadcasti32x8", - "vbroadcasti64x4", - "vbroadcasti32x4", - "vbroadcasti64x2", - "vbroadcasti32x2", - "vextracti32x8", - "vextractf32x8", - "vinserti32x8", - "vinsertf32x8", - "vinserti32x4", - "v4fnmaddss", - "v4fnmaddps", - "vcvtneps2bf16", - "v4fmaddss", - "v4fmaddps", - "vcvtne2ps2bf16", - "vp2intersectd", - "vp2intersectq", - "vp4dpwssds", - "vp4dpwssd", - "vpdpwssds", - "vpdpwssd", - "vpdpbusds", - "vdpbf16ps", - "vpbroadcastmw2d", - "vpbroadcastmb2q", - "vpmovd2m", - "vpmovqd", - "vpmovwb", - "vpmovdb", - "vpmovdw", - "vpmovqb", - "vpmovqw", - "vgf2p8mulb", - "vpmadd52huq", - "vpmadd52luq", - "vpshufbitqmb", - "vpermb", - "vpexpandd", - "vpexpandq", - "vpabsq", - "vprorvd", - "vprorvq", - "vpmultishiftqb", - "vpermt2b", - "vpermt2w", - "vpshrdvq", - "vpshrdvd", - "vpshrdvw", - "vpshldvq", - "vpshldvd", - "vpshldvw", - "vpcompressb", - "vpcompressw", - "vpexpandb", - "vpexpandw", - "vpopcntd", - "vpopcntq", - "vpopcntb", - "vpopcntw", - "vscalefss", - "vscalefsd", - "vscalefps", - "vscalefpd", - "vpdpbusd", - "vcvtusi2sd", - "vcvtusi2ss", - "vpxord", - "vpxorq", - "vpord", - "vporq", - "vpandnd", - "vpandnq", - "vpandd", - "vpandq", - "psmash", - "pvalidate", - "rmpadjust", - "rmpupdate", -]; - impl Opcode { fn name(&self) -> &'static str { unsafe { - MNEMONICS.get_kinda_unchecked(*self as usize) + crate::generated::opcode::MNEMONICS.get_kinda_unchecked(*self as usize) } } } @@ -2523,6 +1053,10 @@ impl Colorize for Opcode { Opcode::VSCATTERDQ | Opcode::VSCATTERQD | Opcode::VSCATTERQQ | + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD | Opcode::VPSCATTERDD | Opcode::VPSCATTERDQ | Opcode::VPSCATTERQD | @@ -2711,6 +1245,8 @@ impl Colorize for Opcode { Opcode::VPINSRW | Opcode::VPMASKMOVD | Opcode::VPMASKMOVQ | + Opcode::VCOMPRESSD | + Opcode::VCOMPRESSQ | Opcode::VCOMPRESSPD | Opcode::VCOMPRESSPS | Opcode::VPCOMPRESSQ | diff --git a/src/protected_mode/mod.rs b/src/protected_mode/mod.rs index 2993968..2adf0c8 100644 --- a/src/protected_mode/mod.rs +++ b/src/protected_mode/mod.rs @@ -11,6 +11,7 @@ pub use self::display::{DisplayStyle, InstructionDisplayer}; use core::cmp::PartialEq; use crate::safer_unchecked::unreachable_kinda_unchecked as unreachable_unchecked; +pub use crate::generated::opcode::protected_mode::Opcode as Opcode; use yaxpeax_arch::{AddressDiff, Decoder, Reader, LengthedInstruction}; use yaxpeax_arch::annotation::{AnnotatingDecoder, DescriptionSink, NullSink}; @@ -997,1500 +998,6 @@ const XSAVE: [Opcode; 10] = [ Opcode::XSETBV, ]; -#[allow(non_camel_case_types)] -#[derive(Copy, Clone, Debug, Eq, PartialEq)] -#[non_exhaustive] -pub enum Opcode { - Invalid, - ADD, - OR, - ADC, - SBB, - AND, - XOR, - SUB, - CMP, - XADD, - BT, - BTS, - BTC, - BTR, - BSF, - BSR, - TZCNT, - MOVSS, - ADDSS, - SUBSS, - MULSS, - DIVSS, - MINSS, - MAXSS, - SQRTSS, - MOVSD, - SQRTSD, - ADDSD, - SUBSD, - MULSD, - DIVSD, - MINSD, - MAXSD, - MOVSLDUP, - MOVSHDUP, - MOVDDUP, - HADDPS, - HSUBPS, - ADDSUBPD, - ADDSUBPS, - CVTSI2SS, - CVTSI2SD, - CVTTSD2SI, - CVTTPS2DQ, - CVTPD2DQ, - CVTPD2PS, - CVTPS2DQ, - CVTSD2SI, - CVTSD2SS, - CVTTSS2SI, - CVTSS2SI, - CVTSS2SD, - CVTDQ2PD, - LDDQU, - MOVZX, - MOVSX, - MOVSXD, - SAR, - SAL, - SHR, - SHRD, - SHL, - RCR, - RCL, - ROR, - ROL, - INC, - DEC, - HLT, - CALL, - CALLF, - JMP, - JMPF, - PUSH, - POP, - LEA, - NOP, - PREFETCHNTA, - PREFETCH0, - PREFETCH1, - PREFETCH2, - XCHG, - POPF, - INT, - INTO, - IRET, - IRETD, - IRETQ, - RETF, - ENTER, - LEAVE, - MOV, - RETURN, - PUSHF, - WAIT, - CBW, - CWDE, - CDQE, - CWD, - CDQ, - CQO, - LODS, - STOS, - LAHF, - SAHF, - CMPS, - SCAS, - MOVS, - TEST, - INS, - IN, - OUTS, - OUT, - IMUL, - JO, - JNO, - JB, - JNB, - JZ, - JNZ, - JA, - JNA, - JS, - JNS, - JP, - JNP, - JL, - JGE, - JLE, - JG, - CMOVA, - CMOVB, - CMOVG, - CMOVGE, - CMOVL, - CMOVLE, - CMOVNA, - CMOVNB, - CMOVNO, - CMOVNP, - CMOVNS, - CMOVNZ, - CMOVO, - CMOVP, - CMOVS, - CMOVZ, - DIV, - IDIV, - MUL, - NEG, - NOT, - CMPXCHG, - SETO, - SETNO, - SETB, - SETAE, - SETZ, - SETNZ, - SETBE, - SETA, - SETS, - SETNS, - SETP, - SETNP, - SETL, - SETGE, - SETLE, - SETG, - CPUID, - UD0, - UD1, - UD2, - WBINVD, - INVD, - SYSRET, - CLTS, - SYSCALL, - LSL, - LAR, - LES, - LDS, - SGDT, - SIDT, - LGDT, - LIDT, - SMSW, - LMSW, - SWAPGS, - RDTSCP, - INVLPG, - FXSAVE, - FXRSTOR, - LDMXCSR, - STMXCSR, - XSAVE, - XRSTOR, - XSAVEOPT, - LFENCE, - MFENCE, - SFENCE, - CLFLUSH, - CLFLUSHOPT, - CLWB, - WRMSR, - RDTSC, - RDMSR, - RDPMC, - SLDT, - STR, - LLDT, - LTR, - VERR, - VERW, - CMC, - CLC, - STC, - CLI, - STI, - CLD, - STD, - JMPE, - POPCNT, - MOVDQU, - MOVDQA, - MOVQ, - CMPSS, - CMPSD, - UNPCKLPS, - UNPCKLPD, - UNPCKHPS, - UNPCKHPD, - PSHUFHW, - PSHUFLW, - MOVUPS, - MOVQ2DQ, - MOVDQ2Q, - RSQRTSS, - RCPSS, - - ANDN, - BEXTR, - BLSI, - BLSMSK, - BLSR, - VMCLEAR, - VMXON, - VMCALL, - VMLAUNCH, - VMRESUME, - VMXOFF, - PCONFIG, - MONITOR, - MWAIT, - MONITORX, - MWAITX, - CLAC, - STAC, - ENCLS, - ENCLV, - XGETBV, - XSETBV, - VMFUNC, - XABORT, - XBEGIN, - XEND, - XTEST, - ENCLU, - RDPKRU, - WRPKRU, - - RDPRU, - CLZERO, - - RDSEED, - RDRAND, - - ADDPS, - ADDPD, - ANDNPS, - ANDNPD, - ANDPS, - ANDPD, - BSWAP, - CMPPD, - CMPPS, - COMISD, - COMISS, - CVTDQ2PS, - CVTPI2PS, - CVTPI2PD, - CVTPS2PD, - CVTPS2PI, - CVTPD2PI, - CVTTPS2PI, - CVTTPD2PI, - CVTTPD2DQ, - DIVPS, - DIVPD, - EMMS, - GETSEC, - LFS, - LGS, - LSS, - MASKMOVQ, - MASKMOVDQU, - MAXPS, - MAXPD, - MINPS, - MINPD, - MOVAPS, - MOVAPD, - MOVD, - MOVLPS, - MOVLPD, - MOVHPS, - MOVHPD, - MOVLHPS, - MOVHLPS, - MOVUPD, - MOVMSKPS, - MOVMSKPD, - MOVNTI, - MOVNTPS, - MOVNTPD, - EXTRQ, - INSERTQ, - MOVNTSS, - MOVNTSD, - MOVNTQ, - MOVNTDQ, - MULPS, - MULPD, - ORPS, - ORPD, - PACKSSDW, - PACKSSWB, - PACKUSWB, - PADDB, - PADDD, - PADDQ, - PADDSB, - PADDSW, - PADDUSB, - PADDUSW, - PADDW, - PAND, - PANDN, - PAVGB, - PAVGW, - PCMPEQB, - PCMPEQD, - PCMPEQW, - PCMPGTB, - PCMPGTD, - PCMPGTW, - PINSRW, - PMADDWD, - PMAXSW, - PMAXUB, - PMINSW, - PMINUB, - PMOVMSKB, - PMULHUW, - PMULHW, - PMULLW, - PMULUDQ, - POR, - PSADBW, - PSHUFW, - PSHUFD, - PSLLD, - PSLLDQ, - PSLLQ, - PSLLW, - PSRAD, - PSRAW, - PSRLD, - PSRLDQ, - PSRLQ, - PSRLW, - PSUBB, - PSUBD, - PSUBQ, - PSUBSB, - PSUBSW, - PSUBUSB, - PSUBUSW, - PSUBW, - PUNPCKHBW, - PUNPCKHDQ, - PUNPCKHWD, - PUNPCKLBW, - PUNPCKLDQ, - PUNPCKLWD, - PUNPCKLQDQ, - PUNPCKHQDQ, - PXOR, - RCPPS, - RSM, - RSQRTPS, - SHLD, - SHUFPD, - SHUFPS, - SLHD, - SQRTPS, - SQRTPD, - SUBPS, - SUBPD, - SYSENTER, - SYSEXIT, - UCOMISD, - UCOMISS, - VMREAD, - VMWRITE, - XORPS, - XORPD, - - VMOVDDUP, - VPSHUFLW, - VPSHUFHW, - VHADDPS, - VHSUBPS, - VADDSUBPS, - VCVTPD2DQ, - VLDDQU, - - VCOMISD, - VCOMISS, - VUCOMISD, - VUCOMISS, - VADDPD, - VADDPS, - VADDSD, - VADDSS, - VADDSUBPD, - VAESDEC, - VAESDECLAST, - VAESENC, - VAESENCLAST, - VAESIMC, - VAESKEYGENASSIST, - VBLENDPD, - VBLENDPS, - VBLENDVPD, - VBLENDVPS, - VBROADCASTF128, - VBROADCASTI128, - VBROADCASTSD, - VBROADCASTSS, - VCMPSD, - VCMPSS, - VCMPPD, - VCMPPS, - VCVTDQ2PD, - VCVTDQ2PS, - VCVTPD2PS, - VCVTPH2PS, - VCVTPS2DQ, - VCVTPS2PD, - VCVTSS2SD, - VCVTSI2SS, - VCVTSI2SD, - VCVTSD2SI, - VCVTSD2SS, - VCVTPS2PH, - VCVTSS2SI, - VCVTTPD2DQ, - VCVTTPS2DQ, - VCVTTSS2SI, - VCVTTSD2SI, - VDIVPD, - VDIVPS, - VDIVSD, - VDIVSS, - VDPPD, - VDPPS, - VEXTRACTF128, - VEXTRACTI128, - VEXTRACTPS, - 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, - VGATHERDPD, - VGATHERDPS, - VGATHERQPD, - VGATHERQPS, - VHADDPD, - VHSUBPD, - VINSERTF128, - VINSERTI128, - VINSERTPS, - VMASKMOVDQU, - VMASKMOVPD, - VMASKMOVPS, - VMAXPD, - VMAXPS, - VMAXSD, - VMAXSS, - VMINPD, - VMINPS, - VMINSD, - VMINSS, - VMOVAPD, - VMOVAPS, - VMOVD, - VMOVDQA, - VMOVDQU, - VMOVHLPS, - VMOVHPD, - VMOVHPS, - VMOVLHPS, - VMOVLPD, - VMOVLPS, - VMOVMSKPD, - VMOVMSKPS, - VMOVNTDQ, - VMOVNTDQA, - VMOVNTPD, - VMOVNTPS, - VMOVQ, - VMOVSS, - VMOVSD, - VMOVSHDUP, - VMOVSLDUP, - VMOVUPD, - VMOVUPS, - VMPSADBW, - VMULPD, - VMULPS, - VMULSD, - VMULSS, - VPABSB, - VPABSD, - VPABSW, - VPACKSSDW, - VPACKUSDW, - VPACKSSWB, - VPACKUSWB, - VPADDB, - VPADDD, - VPADDQ, - VPADDSB, - VPADDSW, - VPADDUSB, - VPADDUSW, - VPADDW, - VPALIGNR, - VANDPD, - VANDPS, - VORPD, - VORPS, - VANDNPD, - VANDNPS, - VPAND, - VPANDN, - VPAVGB, - VPAVGW, - VPBLENDD, - VPBLENDVB, - VPBLENDW, - VPBROADCASTB, - VPBROADCASTD, - VPBROADCASTQ, - VPBROADCASTW, - VPCLMULQDQ, - VPCMPEQB, - VPCMPEQD, - VPCMPEQQ, - VPCMPEQW, - VPCMPGTB, - VPCMPGTD, - VPCMPGTQ, - VPCMPGTW, - VPCMPESTRI, - VPCMPESTRM, - VPCMPISTRI, - VPCMPISTRM, - VPERM2F128, - VPERM2I128, - VPERMD, - VPERMILPD, - VPERMILPS, - VPERMPD, - VPERMPS, - VPERMQ, - VPEXTRB, - VPEXTRD, - VPEXTRQ, - VPEXTRW, - VPGATHERDD, - VPGATHERDQ, - VPGATHERQD, - VPGATHERQQ, - VPHADDD, - VPHADDSW, - VPHADDW, - VPMADDUBSW, - VPHMINPOSUW, - VPHSUBD, - VPHSUBSW, - VPHSUBW, - VPINSRB, - VPINSRD, - VPINSRQ, - VPINSRW, - VPMADDWD, - VPMASKMOVD, - VPMASKMOVQ, - VPMAXSB, - VPMAXSD, - VPMAXSW, - VPMAXUB, - VPMAXUW, - VPMAXUD, - VPMINSB, - VPMINSW, - VPMINSD, - VPMINUB, - VPMINUW, - VPMINUD, - VPMOVMSKB, - VPMOVSXBD, - VPMOVSXBQ, - VPMOVSXBW, - VPMOVSXDQ, - VPMOVSXWD, - VPMOVSXWQ, - VPMOVZXBD, - VPMOVZXBQ, - VPMOVZXBW, - VPMOVZXDQ, - VPMOVZXWD, - VPMOVZXWQ, - VPMULDQ, - VPMULHRSW, - VPMULHUW, - VPMULHW, - VPMULLQ, - VPMULLD, - VPMULLW, - VPMULUDQ, - VPOR, - VPSADBW, - VPSHUFB, - VPSHUFD, - VPSIGNB, - VPSIGND, - VPSIGNW, - VPSLLD, - VPSLLDQ, - VPSLLQ, - VPSLLVD, - VPSLLVQ, - VPSLLW, - VPSRAD, - VPSRAVD, - VPSRAW, - VPSRLD, - VPSRLDQ, - VPSRLQ, - VPSRLVD, - VPSRLVQ, - VPSRLW, - VPSUBB, - VPSUBD, - VPSUBQ, - VPSUBSB, - VPSUBSW, - VPSUBUSB, - VPSUBUSW, - VPSUBW, - VPTEST, - VPUNPCKHBW, - VPUNPCKHDQ, - VPUNPCKHQDQ, - VPUNPCKHWD, - VPUNPCKLBW, - VPUNPCKLDQ, - VPUNPCKLQDQ, - VPUNPCKLWD, - VPXOR, - VRCPPS, - VROUNDPD, - VROUNDPS, - VROUNDSD, - VROUNDSS, - VRSQRTPS, - VRSQRTSS, - VRCPSS, - VSHUFPD, - VSHUFPS, - VSQRTPD, - VSQRTPS, - VSQRTSS, - VSQRTSD, - VSUBPD, - VSUBPS, - VSUBSD, - VSUBSS, - VTESTPD, - VTESTPS, - VUNPCKHPD, - VUNPCKHPS, - VUNPCKLPD, - VUNPCKLPS, - VXORPD, - VXORPS, - VZEROUPPER, - VZEROALL, - VLDMXCSR, - VSTMXCSR, - - PCLMULQDQ, - AESKEYGENASSIST, - AESIMC, - AESENC, - AESENCLAST, - AESDEC, - AESDECLAST, - PCMPGTQ, - PCMPISTRM, - PCMPISTRI, - PCMPESTRI, - PACKUSDW, - PCMPESTRM, - PCMPEQQ, - PTEST, - PHMINPOSUW, - DPPS, - DPPD, - MPSADBW, - PMOVZXDQ, - PMOVSXDQ, - PMOVZXBD, - PMOVSXBD, - PMOVZXWQ, - PMOVSXWQ, - PMOVZXBQ, - PMOVSXBQ, - PMOVSXWD, - PMOVZXWD, - PEXTRQ, - PEXTRD, - PEXTRW, - PEXTRB, - PMOVSXBW, - PMOVZXBW, - PINSRQ, - PINSRD, - PINSRB, - EXTRACTPS, - INSERTPS, - ROUNDSS, - ROUNDSD, - ROUNDPS, - ROUNDPD, - PMAXSB, - PMAXSD, - PMAXUW, - PMAXUD, - PMINSD, - PMINSB, - PMINUD, - PMINUW, - BLENDW, - PBLENDVB, - PBLENDW, - BLENDVPS, - BLENDVPD, - BLENDPS, - BLENDPD, - PMULDQ, - MOVNTDQA, - PMULLD, - PALIGNR, - PSIGNW, - PSIGND, - PSIGNB, - PSHUFB, - PMULHRSW, - PMADDUBSW, - PABSD, - PABSW, - PABSB, - PHSUBSW, - PHSUBW, - PHSUBD, - PHADDD, - PHADDSW, - PHADDW, - HSUBPD, - HADDPD, - - SHA1RNDS4, - SHA1NEXTE, - SHA1MSG1, - SHA1MSG2, - SHA256RNDS2, - SHA256MSG1, - SHA256MSG2, - - LZCNT, - CLGI, - STGI, - SKINIT, - VMLOAD, - VMMCALL, - VMSAVE, - VMRUN, - INVLPGA, - INVLPGB, - TLBSYNC, - - MOVBE, - - ADCX, - ADOX, - - PREFETCHW, - - RDPID, - CMPXCHG8B, - CMPXCHG16B, - VMPTRLD, - VMPTRST, - - BZHI, - MULX, - SHLX, - SHRX, - SARX, - PDEP, - PEXT, - RORX, - XRSTORS, - XRSTORS64, - XSAVEC, - XSAVEC64, - XSAVES, - XSAVES64, - - RDFSBASE, - RDGSBASE, - WRFSBASE, - WRGSBASE, - - CRC32, - SALC, - XLAT, - - F2XM1, - FABS, - FADD, - FADDP, - FBLD, - FBSTP, - FCHS, - FCMOVB, - FCMOVBE, - FCMOVE, - FCMOVNB, - FCMOVNBE, - FCMOVNE, - FCMOVNU, - FCMOVU, - FCOM, - FCOMI, - FCOMIP, - FCOMP, - FCOMPP, - FCOS, - FDECSTP, - FDISI8087_NOP, - FDIV, - FDIVP, - FDIVR, - FDIVRP, - FENI8087_NOP, - FFREE, - FFREEP, - FIADD, - FICOM, - FICOMP, - FIDIV, - FIDIVR, - FILD, - FIMUL, - FINCSTP, - FIST, - FISTP, - FISTTP, - FISUB, - FISUBR, - FLD, - FLD1, - FLDCW, - FLDENV, - FLDL2E, - FLDL2T, - FLDLG2, - FLDLN2, - FLDPI, - FLDZ, - FMUL, - FMULP, - FNCLEX, - FNINIT, - FNOP, - FNSAVE, - FNSTCW, - FNSTENV, - FNSTOR, - FNSTSW, - FPATAN, - FPREM, - FPREM1, - FPTAN, - FRNDINT, - FRSTOR, - FSCALE, - FSETPM287_NOP, - FSIN, - FSINCOS, - FSQRT, - FST, - FSTP, - FSTPNCE, - FSUB, - FSUBP, - FSUBR, - FSUBRP, - FTST, - FUCOM, - FUCOMI, - FUCOMIP, - FUCOMP, - FUCOMPP, - FXAM, - FXCH, - FXTRACT, - FYL2X, - FYL2XP1, - - LOOPNZ, - LOOPZ, - LOOP, - JECXZ, - - PUSHA, - POPA, - BOUND, - ARPL, - AAS, - AAA, - DAS, - DAA, - AAM, - AAD, - - // started shipping in Tremont, 2020 sept 23 - MOVDIR64B, - MOVDIRI, - - // started shipping in Tiger Lake, 2020 sept 2 - AESDEC128KL, - AESDEC256KL, - AESDECWIDE128KL, - AESDECWIDE256KL, - AESENC128KL, - AESENC256KL, - AESENCWIDE128KL, - AESENCWIDE256KL, - ENCODEKEY128, - ENCODEKEY256, - LOADIWKEY, - - // unsure - HRESET, - - // 3dnow - FEMMS, - PI2FW, - PI2FD, - PF2IW, - PF2ID, - PMULHRW, - PFCMPGE, - PFMIN, - PFRCP, - PFRSQRT, - PFSUB, - PFADD, - PFCMPGT, - PFMAX, - PFRCPIT1, - PFRSQIT1, - PFSUBR, - PFACC, - PFCMPEQ, - PFMUL, - PFMULHRW, - PFRCPIT2, - PFNACC, - PFPNACC, - PSWAPD, - PAVGUSB, - - // ENQCMD - ENQCMD, - ENQCMDS, - - // INVPCID - INVEPT, - INVVPID, - INVPCID, - - // PTWRITE - PTWRITE, - - // GFNI - GF2P8AFFINEQB, - GF2P8AFFINEINVQB, - GF2P8MULB, - - // CET - WRUSS, - WRSS, - INCSSP, - SAVEPREVSSP, - SETSSBSY, - CLRSSBSY, - RSTORSSP, - ENDBR64, - ENDBR32, - - // TDX - TDCALL, - SEAMRET, - SEAMOPS, - SEAMCALL, - - // WAITPKG - TPAUSE, - UMONITOR, - UMWAIT, - - // UINTR - UIRET, - TESTUI, - CLUI, - STUI, - SENDUIPI, - - // TSXLDTRK - XSUSLDTRK, - XRESLDTRK, - - // AVX512F - VALIGND, - VALIGNQ, - VBLENDMPD, - VBLENDMPS, - VCOMPRESSPD, - VCOMPRESSPS, - VCVTPD2UDQ, - VCVTTPD2UDQ, - VCVTPS2UDQ, - VCVTTPS2UDQ, - VCVTQQ2PD, - VCVTQQ2PS, - VCVTSD2USI, - VCVTTSD2USI, - VCVTSS2USI, - VCVTTSS2USI, - VCVTUDQ2PD, - VCVTUDQ2PS, - VCVTUSI2USD, - VCVTUSI2USS, - VEXPANDPD, - VEXPANDPS, - VEXTRACTF32X4, - VEXTRACTF64X4, - VEXTRACTI32X4, - VEXTRACTI64X4, - VFIXUPIMMPD, - VFIXUPIMMPS, - VFIXUPIMMSD, - VFIXUPIMMSS, - VGETEXPPD, - VGETEXPPS, - VGETEXPSD, - VGETEXPSS, - VGETMANTPD, - VGETMANTPS, - VGETMANTSD, - VGETMANTSS, - VINSERTF32X4, - VINSERTF64X4, - VINSERTI64X4, - VMOVDQA32, - VMOVDQA64, - VMOVDQU32, - VMOVDQU64, - VPBLENDMD, - VPBLENDMQ, - VPCMPD, - VPCMPUD, - VPCMPQ, - VPCMPUQ, - VPCOMPRESSQ, - VPCOMPRESSD, - VPERMI2D, - VPERMI2Q, - VPERMI2PD, - VPERMI2PS, - VPERMT2D, - VPERMT2Q, - VPERMT2PD, - VPERMT2PS, - VPMAXSQ, - VPMAXUQ, - VPMINSQ, - VPMINUQ, - VPMOVSQB, - VPMOVUSQB, - VPMOVSQW, - VPMOVUSQW, - VPMOVSQD, - VPMOVUSQD, - VPMOVSDB, - VPMOVUSDB, - VPMOVSDW, - VPMOVUSDW, - VPROLD, - VPROLQ, - VPROLVD, - VPROLVQ, - VPRORD, - VPRORQ, - VPRORRD, - VPRORRQ, - VPSCATTERDD, - VPSCATTERDQ, - VPSCATTERQD, - VPSCATTERQQ, - VPSRAQ, - VPSRAVQ, - VPTESTNMD, - VPTESTNMQ, - VPTERNLOGD, - VPTERNLOGQ, - VPTESTMD, - VPTESTMQ, - VRCP14PD, - VRCP14PS, - VRCP14SD, - VRCP14SS, - VRNDSCALEPD, - VRNDSCALEPS, - VRNDSCALESD, - VRNDSCALESS, - VRSQRT14PD, - VRSQRT14PS, - VRSQRT14SD, - VRSQRT14SS, - VSCALEDPD, - VSCALEDPS, - VSCALEDSD, - VSCALEDSS, - VSCATTERDD, - VSCATTERDQ, - VSCATTERQD, - VSCATTERQQ, - VSHUFF32X4, - VSHUFF64X2, - VSHUFI32X4, - VSHUFI64X2, - - // AVX512DQ - VCVTTPD2QQ, - VCVTPD2QQ, - VCVTTPD2UQQ, - VCVTPD2UQQ, - VCVTTPS2QQ, - VCVTPS2QQ, - VCVTTPS2UQQ, - VCVTPS2UQQ, - VCVTUQQ2PD, - VCVTUQQ2PS, - VEXTRACTF64X2, - VEXTRACTI64X2, - VFPCLASSPD, - VFPCLASSPS, - VFPCLASSSD, - VFPCLASSSS, - VINSERTF64X2, - VINSERTI64X2, - VPMOVM2D, - VPMOVM2Q, - VPMOVB2D, - VPMOVQ2M, - VRANGEPD, - VRANGEPS, - VRANGESD, - VRANGESS, - VREDUCEPD, - VREDUCEPS, - VREDUCESD, - VREDUCESS, - - // AVX512BW - VDBPSADBW, - VMOVDQU8, - VMOVDQU16, - VPBLENDMB, - VPBLENDMW, - VPCMPB, - VPCMPUB, - VPCMPW, - VPCMPUW, - VPERMW, - VPERMI2B, - VPERMI2W, - VPMOVM2B, - VPMOVM2W, - VPMOVB2M, - VPMOVW2M, - VPMOVSWB, - VPMOVUSWB, - VPSLLVW, - VPSRAVW, - VPSRLVW, - VPTESTNMB, - VPTESTNMW, - VPTESTMB, - VPTESTMW, - - // AVX512CD - VPBROADCASTM, - VPCONFLICTD, - VPCONFLICTQ, - VPLZCNTD, - VPLZCNTQ, - - KUNPCKBW, - KUNPCKWD, - KUNPCKDQ, - - KADDB, - KANDB, - KANDNB, - KMOVB, - KNOTB, - KORB, - KORTESTB, - KSHIFTLB, - KSHIFTRB, - KTESTB, - KXNORB, - KXORB, - KADDW, - KANDW, - KANDNW, - KMOVW, - KNOTW, - KORW, - KORTESTW, - KSHIFTLW, - KSHIFTRW, - KTESTW, - KXNORW, - KXORW, - KADDD, - KANDD, - KANDND, - KMOVD, - KNOTD, - KORD, - KORTESTD, - KSHIFTLD, - KSHIFTRD, - KTESTD, - KXNORD, - KXORD, - KADDQ, - KANDQ, - KANDNQ, - KMOVQ, - KNOTQ, - KORQ, - KORTESTQ, - KSHIFTLQ, - KSHIFTRQ, - KTESTQ, - KXNORQ, - KXORQ, - - // AVX512ER - VEXP2PD, - VEXP2PS, - VEXP2SD, - VEXP2SS, - VRCP28PD, - VRCP28PS, - VRCP28SD, - VRCP28SS, - VRSQRT28PD, - VRSQRT28PS, - VRSQRT28SD, - VRSQRT28SS, - - // AVX512PF - VGATHERPF0DPD, - VGATHERPF0DPS, - VGATHERPF0QPD, - VGATHERPF0QPS, - VGATHERPF1DPD, - VGATHERPF1DPS, - VGATHERPF1QPD, - VGATHERPF1QPS, - VSCATTERPF0DPD, - VSCATTERPF0DPS, - VSCATTERPF0QPD, - VSCATTERPF0QPS, - VSCATTERPF1DPD, - VSCATTERPF1DPS, - VSCATTERPF1QPD, - VSCATTERPF1QPS, - - // MPX - BNDMK, - BNDCL, - BNDCU, - BNDCN, - BNDMOV, - BNDLDX, - BNDSTX, - - VGF2P8AFFINEQB, - VGF2P8AFFINEINVQB, - VPSHRDQ, - VPSHRDD, - VPSHRDW, - VPSHLDQ, - VPSHLDD, - VPSHLDW, - VBROADCASTF32X8, - VBROADCASTF64X4, - VBROADCASTF32X4, - VBROADCASTF64X2, - VBROADCASTF32X2, - VBROADCASTI32X8, - VBROADCASTI64X4, - VBROADCASTI32X4, - VBROADCASTI64X2, - VBROADCASTI32X2, - VEXTRACTI32X8, - VEXTRACTF32X8, - VINSERTI32X8, - VINSERTF32X8, - VINSERTI32X4, - V4FNMADDSS, - V4FNMADDPS, - VCVTNEPS2BF16, - V4FMADDSS, - V4FMADDPS, - VCVTNE2PS2BF16, - VP2INTERSECTD, - VP2INTERSECTQ, - VP4DPWSSDS, - VP4DPWSSD, - VPDPWSSDS, - VPDPWSSD, - VPDPBUSDS, - VDPBF16PS, - VPBROADCASTMW2D, - VPBROADCASTMB2Q, - VPMOVD2M, - VPMOVQD, - VPMOVWB, - VPMOVDB, - VPMOVDW, - VPMOVQB, - VPMOVQW, - VGF2P8MULB, - VPMADD52HUQ, - VPMADD52LUQ, - VPSHUFBITQMB, - VPERMB, - VPEXPANDD, - VPEXPANDQ, - VPABSQ, - VPRORVD, - VPRORVQ, - VPMULTISHIFTQB, - VPERMT2B, - VPERMT2W, - VPSHRDVQ, - VPSHRDVD, - VPSHRDVW, - VPSHLDVQ, - VPSHLDVD, - VPSHLDVW, - VPCOMPRESSB, - VPCOMPRESSW, - VPEXPANDB, - VPEXPANDW, - VPOPCNTD, - VPOPCNTQ, - VPOPCNTB, - VPOPCNTW, - VSCALEFSS, - VSCALEFSD, - VSCALEFPS, - VSCALEFPD, - VPDPBUSD, - VCVTUSI2SD, - VCVTUSI2SS, - VPXORD, - VPXORQ, - VPORD, - VPORQ, - VPANDND, - VPANDNQ, - VPANDD, - VPANDQ, - - PSMASH, - PVALIDATE, - RMPADJUST, - RMPUPDATE, -} - impl PartialEq for Instruction { fn eq(&self, other: &Self) -> bool { if self.prefixes != other.prefixes { @@ -2544,7 +1051,7 @@ pub struct Instruction { operands: [OperandSpec; 4], imm: u32, disp: u32, - opcode: Opcode, + pub(crate) opcode: Opcode, mem_size: u8, } @@ -3431,666 +1938,6 @@ impl InstDecoder { self.flags |= 1 << 63; self } - - /// Optionally reject or reinterpret instruction according to the decoder's - /// declared extensions. - fn revise_instruction(&self, inst: &mut Instruction) -> Result<(), DecodeError> { - if inst.prefixes.evex().is_some() { - if !self.avx512() { - return Err(DecodeError::InvalidOpcode); - } else { - return Ok(()); - } - } - match inst.opcode { - Opcode::TZCNT => { - if !self.bmi1() { - // tzcnt is only supported if bmi1 is enabled. without bmi1, this decodes as - // bsf. - inst.opcode = Opcode::BSF; - } - } - Opcode::LDDQU | - Opcode::ADDSUBPS | - Opcode::ADDSUBPD | - Opcode::HADDPS | - Opcode::HSUBPS | - Opcode::HADDPD | - Opcode::HSUBPD | - Opcode::MOVSHDUP | - Opcode::MOVSLDUP | - Opcode::MOVDDUP | - Opcode::MONITOR | - Opcode::MWAIT => { - // via Intel section 5.7, SSE3 Instructions - if !self.sse3() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PHADDW | - Opcode::PHADDSW | - Opcode::PHADDD | - Opcode::PHSUBW | - Opcode::PHSUBSW | - Opcode::PHSUBD | - Opcode::PABSB | - Opcode::PABSW | - Opcode::PABSD | - Opcode::PMADDUBSW | - Opcode::PMULHRSW | - Opcode::PSHUFB | - Opcode::PSIGNB | - Opcode::PSIGNW | - Opcode::PSIGND | - Opcode::PALIGNR => { - // via Intel section 5.8, SSSE3 Instructions - if !self.ssse3() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PMULLD | - Opcode::PMULDQ | - Opcode::MOVNTDQA | - Opcode::BLENDPD | - Opcode::BLENDPS | - Opcode::BLENDVPD | - Opcode::BLENDVPS | - Opcode::PBLENDVB | - Opcode::BLENDW | - Opcode::PMINUW | - Opcode::PMINUD | - Opcode::PMINSB | - Opcode::PMINSD | - Opcode::PMAXUW | - Opcode::PMAXUD | - Opcode::PMAXSB | - Opcode::PMAXSD | - Opcode::ROUNDPS | - Opcode::ROUNDPD | - Opcode::ROUNDSS | - Opcode::ROUNDSD | - Opcode::PBLENDW | - Opcode::EXTRACTPS | - Opcode::INSERTPS | - Opcode::PINSRB | - Opcode::PINSRD | - Opcode::PINSRQ | - Opcode::PMOVSXBW | - Opcode::PMOVZXBW | - Opcode::PMOVSXBD | - Opcode::PMOVZXBD | - Opcode::PMOVSXWD | - Opcode::PMOVZXWD | - Opcode::PMOVSXBQ | - Opcode::PMOVZXBQ | - Opcode::PMOVSXWQ | - Opcode::PMOVZXWQ | - Opcode::PMOVSXDQ | - Opcode::PMOVZXDQ | - Opcode::DPPS | - Opcode::DPPD | - Opcode::MPSADBW | - Opcode::PHMINPOSUW | - Opcode::PTEST | - Opcode::PCMPEQQ | - Opcode::PEXTRB | - Opcode::PEXTRW | - Opcode::PEXTRD | - Opcode::PEXTRQ | - Opcode::PACKUSDW => { - // via Intel section 5.10, SSE4.1 Instructions - if !self.sse4_1() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::EXTRQ | - Opcode::INSERTQ | - Opcode::MOVNTSS | - Opcode::MOVNTSD => { - if !self.sse4a() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::CRC32 | - Opcode::PCMPESTRI | - Opcode::PCMPESTRM | - Opcode::PCMPISTRI | - Opcode::PCMPISTRM | - Opcode::PCMPGTQ => { - // via Intel section 5.11, SSE4.2 Instructions - if !self.sse4_2() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::AESDEC | - Opcode::AESDECLAST | - Opcode::AESENC | - Opcode::AESENCLAST | - Opcode::AESIMC | - Opcode::AESKEYGENASSIST => { - // via Intel section 5.12. AESNI AND PCLMULQDQ - if !self.aesni() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PCLMULQDQ => { - // via Intel section 5.12. AESNI AND PCLMULQDQ - if !self.pclmulqdq() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::XABORT | - Opcode::XBEGIN | - Opcode::XEND | - Opcode::XTEST => { - if !self.tsx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::SHA1MSG1 | - Opcode::SHA1MSG2 | - Opcode::SHA1NEXTE | - Opcode::SHA1RNDS4 | - Opcode::SHA256MSG1 | - Opcode::SHA256MSG2 | - Opcode::SHA256RNDS2 => { - if !self.sha() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::ENCLV | - Opcode::ENCLS | - Opcode::ENCLU => { - if !self.sgx() { - return Err(DecodeError::InvalidOpcode); - } - } - // AVX... - Opcode::VMOVDDUP | - Opcode::VPSHUFLW | - Opcode::VPSHUFHW | - Opcode::VHADDPS | - Opcode::VHSUBPS | - Opcode::VADDSUBPS | - Opcode::VCVTPD2DQ | - Opcode::VLDDQU | - Opcode::VCOMISD | - Opcode::VCOMISS | - Opcode::VUCOMISD | - Opcode::VUCOMISS | - Opcode::VADDPD | - Opcode::VADDPS | - Opcode::VADDSD | - Opcode::VADDSS | - Opcode::VADDSUBPD | - Opcode::VBLENDPD | - Opcode::VBLENDPS | - Opcode::VBLENDVPD | - Opcode::VBLENDVPS | - Opcode::VBROADCASTF128 | - Opcode::VBROADCASTI128 | - Opcode::VBROADCASTSD | - Opcode::VBROADCASTSS | - Opcode::VCMPSD | - Opcode::VCMPSS | - Opcode::VCMPPD | - Opcode::VCMPPS | - Opcode::VCVTDQ2PD | - Opcode::VCVTDQ2PS | - Opcode::VCVTPD2PS | - Opcode::VCVTPS2DQ | - Opcode::VCVTPS2PD | - Opcode::VCVTSS2SD | - Opcode::VCVTSI2SS | - Opcode::VCVTSI2SD | - Opcode::VCVTSD2SI | - Opcode::VCVTSD2SS | - Opcode::VCVTSS2SI | - Opcode::VCVTTPD2DQ | - Opcode::VCVTTPS2DQ | - Opcode::VCVTTSS2SI | - Opcode::VCVTTSD2SI | - Opcode::VDIVPD | - Opcode::VDIVPS | - Opcode::VDIVSD | - Opcode::VDIVSS | - Opcode::VDPPD | - Opcode::VDPPS | - Opcode::VEXTRACTF128 | - Opcode::VEXTRACTI128 | - Opcode::VEXTRACTPS | - Opcode::VFMADD132PD | - Opcode::VFMADD132PS | - Opcode::VFMADD132SD | - Opcode::VFMADD132SS | - Opcode::VFMADD213PD | - Opcode::VFMADD213PS | - Opcode::VFMADD213SD | - Opcode::VFMADD213SS | - Opcode::VFMADD231PD | - Opcode::VFMADD231PS | - Opcode::VFMADD231SD | - Opcode::VFMADD231SS | - Opcode::VFMADDSUB132PD | - Opcode::VFMADDSUB132PS | - Opcode::VFMADDSUB213PD | - Opcode::VFMADDSUB213PS | - Opcode::VFMADDSUB231PD | - Opcode::VFMADDSUB231PS | - Opcode::VFMSUB132PD | - Opcode::VFMSUB132PS | - Opcode::VFMSUB132SD | - Opcode::VFMSUB132SS | - Opcode::VFMSUB213PD | - Opcode::VFMSUB213PS | - Opcode::VFMSUB213SD | - Opcode::VFMSUB213SS | - Opcode::VFMSUB231PD | - Opcode::VFMSUB231PS | - Opcode::VFMSUB231SD | - Opcode::VFMSUB231SS | - Opcode::VFMSUBADD132PD | - Opcode::VFMSUBADD132PS | - Opcode::VFMSUBADD213PD | - Opcode::VFMSUBADD213PS | - Opcode::VFMSUBADD231PD | - Opcode::VFMSUBADD231PS | - Opcode::VFNMADD132PD | - Opcode::VFNMADD132PS | - Opcode::VFNMADD132SD | - Opcode::VFNMADD132SS | - Opcode::VFNMADD213PD | - Opcode::VFNMADD213PS | - Opcode::VFNMADD213SD | - Opcode::VFNMADD213SS | - Opcode::VFNMADD231PD | - Opcode::VFNMADD231PS | - Opcode::VFNMADD231SD | - Opcode::VFNMADD231SS | - Opcode::VFNMSUB132PD | - Opcode::VFNMSUB132PS | - Opcode::VFNMSUB132SD | - Opcode::VFNMSUB132SS | - Opcode::VFNMSUB213PD | - Opcode::VFNMSUB213PS | - Opcode::VFNMSUB213SD | - Opcode::VFNMSUB213SS | - Opcode::VFNMSUB231PD | - Opcode::VFNMSUB231PS | - Opcode::VFNMSUB231SD | - Opcode::VFNMSUB231SS | - Opcode::VGATHERDPD | - Opcode::VGATHERDPS | - Opcode::VGATHERQPD | - Opcode::VGATHERQPS | - Opcode::VHADDPD | - Opcode::VHSUBPD | - Opcode::VINSERTF128 | - Opcode::VINSERTI128 | - Opcode::VINSERTPS | - Opcode::VMASKMOVDQU | - Opcode::VMASKMOVPD | - Opcode::VMASKMOVPS | - Opcode::VMAXPD | - Opcode::VMAXPS | - Opcode::VMAXSD | - Opcode::VMAXSS | - Opcode::VMINPD | - Opcode::VMINPS | - Opcode::VMINSD | - Opcode::VMINSS | - Opcode::VMOVAPD | - Opcode::VMOVAPS | - Opcode::VMOVD | - Opcode::VMOVDQA | - Opcode::VMOVDQU | - Opcode::VMOVHLPS | - Opcode::VMOVHPD | - Opcode::VMOVHPS | - Opcode::VMOVLHPS | - Opcode::VMOVLPD | - Opcode::VMOVLPS | - Opcode::VMOVMSKPD | - Opcode::VMOVMSKPS | - Opcode::VMOVNTDQ | - Opcode::VMOVNTDQA | - Opcode::VMOVNTPD | - Opcode::VMOVNTPS | - Opcode::VMOVQ | - Opcode::VMOVSS | - Opcode::VMOVSD | - Opcode::VMOVSHDUP | - Opcode::VMOVSLDUP | - Opcode::VMOVUPD | - Opcode::VMOVUPS | - Opcode::VMPSADBW | - Opcode::VMULPD | - Opcode::VMULPS | - Opcode::VMULSD | - Opcode::VMULSS | - Opcode::VPABSB | - Opcode::VPABSD | - Opcode::VPABSW | - Opcode::VPACKSSDW | - Opcode::VPACKUSDW | - Opcode::VPACKSSWB | - Opcode::VPACKUSWB | - Opcode::VPADDB | - Opcode::VPADDD | - Opcode::VPADDQ | - Opcode::VPADDSB | - Opcode::VPADDSW | - Opcode::VPADDUSB | - Opcode::VPADDUSW | - Opcode::VPADDW | - Opcode::VPALIGNR | - Opcode::VPAND | - Opcode::VANDPD | - Opcode::VANDPS | - Opcode::VANDNPD | - Opcode::VANDNPS | - Opcode::VORPD | - Opcode::VORPS | - Opcode::VPANDN | - Opcode::VPAVGB | - Opcode::VPAVGW | - Opcode::VPBLENDD | - Opcode::VPBLENDVB | - Opcode::VPBLENDW | - Opcode::VPBROADCASTB | - Opcode::VPBROADCASTD | - Opcode::VPBROADCASTQ | - Opcode::VPBROADCASTW | - Opcode::VPCLMULQDQ | - Opcode::VPCMPEQB | - Opcode::VPCMPEQD | - Opcode::VPCMPEQQ | - Opcode::VPCMPEQW | - Opcode::VPCMPGTB | - Opcode::VPCMPGTD | - Opcode::VPCMPGTQ | - Opcode::VPCMPGTW | - Opcode::VPCMPESTRI | - Opcode::VPCMPESTRM | - Opcode::VPCMPISTRI | - Opcode::VPCMPISTRM | - Opcode::VPERM2F128 | - Opcode::VPERM2I128 | - Opcode::VPERMD | - Opcode::VPERMILPD | - Opcode::VPERMILPS | - Opcode::VPERMPD | - Opcode::VPERMPS | - Opcode::VPERMQ | - Opcode::VPEXTRB | - Opcode::VPEXTRD | - Opcode::VPEXTRQ | - Opcode::VPEXTRW | - Opcode::VPGATHERDD | - Opcode::VPGATHERDQ | - Opcode::VPGATHERQD | - Opcode::VPGATHERQQ | - Opcode::VPHADDD | - Opcode::VPHADDSW | - Opcode::VPHADDW | - Opcode::VPMADDUBSW | - Opcode::VPHMINPOSUW | - Opcode::VPHSUBD | - Opcode::VPHSUBSW | - Opcode::VPHSUBW | - Opcode::VPINSRB | - Opcode::VPINSRD | - Opcode::VPINSRQ | - Opcode::VPINSRW | - Opcode::VPMADDWD | - Opcode::VPMASKMOVD | - Opcode::VPMASKMOVQ | - Opcode::VPMAXSB | - Opcode::VPMAXSD | - Opcode::VPMAXSW | - Opcode::VPMAXUB | - Opcode::VPMAXUW | - Opcode::VPMAXUD | - Opcode::VPMINSB | - Opcode::VPMINSW | - Opcode::VPMINSD | - Opcode::VPMINUB | - Opcode::VPMINUW | - Opcode::VPMINUD | - Opcode::VPMOVMSKB | - Opcode::VPMOVSXBD | - Opcode::VPMOVSXBQ | - Opcode::VPMOVSXBW | - Opcode::VPMOVSXDQ | - Opcode::VPMOVSXWD | - Opcode::VPMOVSXWQ | - Opcode::VPMOVZXBD | - Opcode::VPMOVZXBQ | - Opcode::VPMOVZXBW | - Opcode::VPMOVZXDQ | - Opcode::VPMOVZXWD | - Opcode::VPMOVZXWQ | - Opcode::VPMULDQ | - Opcode::VPMULHRSW | - Opcode::VPMULHUW | - Opcode::VPMULHW | - Opcode::VPMULLQ | - Opcode::VPMULLD | - Opcode::VPMULLW | - Opcode::VPMULUDQ | - Opcode::VPOR | - Opcode::VPSADBW | - Opcode::VPSHUFB | - Opcode::VPSHUFD | - Opcode::VPSIGNB | - Opcode::VPSIGND | - Opcode::VPSIGNW | - Opcode::VPSLLD | - Opcode::VPSLLDQ | - Opcode::VPSLLQ | - Opcode::VPSLLVD | - Opcode::VPSLLVQ | - Opcode::VPSLLW | - Opcode::VPSRAD | - Opcode::VPSRAVD | - Opcode::VPSRAW | - Opcode::VPSRLD | - Opcode::VPSRLDQ | - Opcode::VPSRLQ | - Opcode::VPSRLVD | - Opcode::VPSRLVQ | - Opcode::VPSRLW | - Opcode::VPSUBB | - Opcode::VPSUBD | - Opcode::VPSUBQ | - Opcode::VPSUBSB | - Opcode::VPSUBSW | - Opcode::VPSUBUSB | - Opcode::VPSUBUSW | - Opcode::VPSUBW | - Opcode::VPTEST | - Opcode::VPUNPCKHBW | - Opcode::VPUNPCKHDQ | - Opcode::VPUNPCKHQDQ | - Opcode::VPUNPCKHWD | - Opcode::VPUNPCKLBW | - Opcode::VPUNPCKLDQ | - Opcode::VPUNPCKLQDQ | - Opcode::VPUNPCKLWD | - Opcode::VPXOR | - Opcode::VRCPPS | - Opcode::VROUNDPD | - Opcode::VROUNDPS | - Opcode::VROUNDSD | - Opcode::VROUNDSS | - Opcode::VRSQRTPS | - Opcode::VRSQRTSS | - Opcode::VRCPSS | - Opcode::VSHUFPD | - Opcode::VSHUFPS | - Opcode::VSQRTPD | - Opcode::VSQRTPS | - Opcode::VSQRTSS | - Opcode::VSQRTSD | - Opcode::VSUBPD | - Opcode::VSUBPS | - Opcode::VSUBSD | - Opcode::VSUBSS | - Opcode::VTESTPD | - Opcode::VTESTPS | - Opcode::VUNPCKHPD | - Opcode::VUNPCKHPS | - Opcode::VUNPCKLPD | - Opcode::VUNPCKLPS | - Opcode::VXORPD | - Opcode::VXORPS | - Opcode::VZEROUPPER | - Opcode::VZEROALL | - Opcode::VLDMXCSR | - Opcode::VSTMXCSR => { - // TODO: check a table for these - if !self.avx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VAESDEC | - Opcode::VAESDECLAST | - Opcode::VAESENC | - Opcode::VAESENCLAST | - Opcode::VAESIMC | - Opcode::VAESKEYGENASSIST => { - // TODO: check a table for these - if !self.avx() || !self.aesni() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::MOVBE => { - if !self.movbe() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::POPCNT => { - /* - * from the intel SDM: - * ``` - * Before an application attempts to use the POPCNT instruction, it must check that - * the processor supports SSE4.2 (if CPUID.01H:ECX.SSE4_2[bit 20] = 1) and POPCNT - * (if CPUID.01H:ECX.POPCNT[bit 23] = 1). - * ``` - */ - if self.intel_quirks() && (self.sse4_2() || self.popcnt()) { - return Ok(()); - } else if !self.popcnt() { - /* - * elsewhere from the amd APM: - * `Instruction Subsets and CPUID Feature Flags` on page 507 indicates that - * popcnt is present when the popcnt bit is reported by cpuid. this seems to be - * the less quirky default, so `intel_quirks` is considered the outlier, and - * before this default. - * */ - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::LZCNT => { - /* - * amd APM, `LZCNT` page 212: - * LZCNT is an Advanced Bit Manipulation (ABM) instruction. Support for the LZCNT - * instruction is indicated by CPUID Fn8000_0001_ECX[ABM] = 1. - * - * meanwhile the intel SDM simply states: - * ``` - * CPUID.EAX=80000001H:ECX.LZCNT[bit 5]: if 1 indicates the processor supports the - * LZCNT instruction. - * ``` - * - * so that's considered the less-quirky (default) case here. - * */ - if self.amd_quirks() && !self.abm() { - return Err(DecodeError::InvalidOpcode); - } else if !self.lzcnt() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::ADCX | - Opcode::ADOX => { - if !self.adx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VMRUN | - Opcode::VMLOAD | - Opcode::VMSAVE | - Opcode::CLGI | - Opcode::VMMCALL | - Opcode::INVLPGA => { - if !self.svm() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::STGI | - Opcode::SKINIT => { - if !self.svm() || !self.skinit() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::LAHF | - Opcode::SAHF => { - if !self.lahfsahf() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VCVTPS2PH | - Opcode::VCVTPH2PS => { - /* - * from intel SDM: - * ``` - * 14.4.1 Detection of F16C Instructions Application using float 16 instruction - * must follow a detection sequence similar to AVX to ensure: • The OS has - * enabled YMM state management support, • The processor support AVX as - * indicated by the CPUID feature flag, i.e. CPUID.01H:ECX.AVX[bit 28] = 1. • - * The processor support 16-bit floating-point conversion instructions via a - * CPUID feature flag (CPUID.01H:ECX.F16C[bit 29] = 1). - * ``` - * - * TODO: only the VEX-coded variant of this instruction should be gated on `f16c`. - * the EVEX-coded variant should be gated on `avx512f` or `avx512vl` if not - * EVEX.512-coded. - */ - if !self.avx() || !self.f16c() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::RDRAND => { - if !self.rdrand() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::RDSEED => { - if !self.rdseed() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::MONITORX | Opcode::MWAITX | // these are gated on the `monitorx` and `mwaitx` cpuid bits, but are AMD-only. - Opcode::CLZERO | Opcode::RDPRU => { // again, gated on specific cpuid bits, but AMD-only. - if !self.amd_quirks() { - return Err(DecodeError::InvalidOpcode); - } - } - other => { - if !self.bmi1() { - if BMI1.contains(&other) { - return Err(DecodeError::InvalidOpcode); - } - } - if !self.bmi2() { - if BMI2.contains(&other) { - return Err(DecodeError::InvalidOpcode); - } - } - } - } - Ok(()) - } } impl Default for InstDecoder { @@ -4116,7 +1963,7 @@ impl Decoder for InstDecoder { } if self != &InstDecoder::default() { - self.revise_instruction(&mut instr)?; + crate::generated::protected_mode::revise_instruction(self, &mut instr)?; } Ok(instr) @@ -4141,7 +1988,7 @@ impl AnnotatingDecoder for InstDecoder { } if self != &InstDecoder::default() { - self.revise_instruction(instr)?; + crate::generated::protected_mode::revise_instruction(self, instr)?; } Ok(()) @@ -7677,7 +5524,7 @@ fn unlikely_operands< vex::three_byte_vex(words, modrm, instruction, sink)?; if decoder != &InstDecoder::default() { - decoder.revise_instruction(instruction)?; + crate::generated::protected_mode::revise_instruction(decoder, instruction)?; } return Ok(()); } @@ -7710,7 +5557,7 @@ fn unlikely_operands< vex::two_byte_vex(words, modrm, instruction, sink)?; if decoder != &InstDecoder::default() { - decoder.revise_instruction(instruction)?; + crate::generated::protected_mode::revise_instruction(decoder, instruction)?; } return Ok(()); } diff --git a/src/real_mode/display.rs b/src/real_mode/display.rs index 6f6eb74..5783d1a 100644 --- a/src/real_mode/display.rs +++ b/src/real_mode/display.rs @@ -345,1480 +345,10 @@ impl fmt::Display for Opcode { } } -const MNEMONICS: &[&'static str] = &[ - "invalid", - "add", - "or", - "adc", - "sbb", - "and", - "xor", - "sub", - "cmp", - "xadd", - "bt", - "bts", - "btc", - "btr", - "bsf", - "bsr", - "tzcnt", - "movss", - "addss", - "subss", - "mulss", - "divss", - "minss", - "maxss", - "sqrtss", - "movsd", - "sqrtsd", - "addsd", - "subsd", - "mulsd", - "divsd", - "minsd", - "maxsd", - "movsldup", - "movshdup", - "movddup", - "haddps", - "hsubps", - "addsubpd", - "addsubps", - "cvtsi2ss", - "cvtsi2sd", - "cvttsd2si", - "cvttps2dq", - "cvtpd2dq", - "cvtpd2ps", - "cvtps2dq", - "cvtsd2si", - "cvtsd2ss", - "cvttss2si", - "cvtss2si", - "cvtss2sd", - "cvtdq2pd", - "lddqu", - "movzx", - "movsx", - "movsxd", - "sar", - "sal", - "shr", - "shrd", - "shl", - "rcr", - "rcl", - "ror", - "rol", - "inc", - "dec", - "hlt", - "call", - "callf", - "jmp", - "jmpf", - "push", - "pop", - "lea", - "nop", - "prefetchnta", - "prefetch0", - "prefetch1", - "prefetch2", - "xchg", - "popf", - "int", - "into", - "iret", - "iretd", - "iretq", - "retf", - "enter", - "leave", - "mov", - "ret", - "pushf", - "wait", - "cbw", - "cwde", - "cdqe", - "cwd", - "cdq", - "cqo", - "lods", - "stos", - "lahf", - "sahf", - "cmps", - "scas", - "movs", - "test", - "ins", - "in", - "outs", - "out", - "imul", - "jo", - "jno", - "jb", - "jnb", - "jz", - "jnz", - "ja", - "jna", - "js", - "jns", - "jp", - "jnp", - "jl", - "jge", - "jle", - "jg", - "cmova", - "cmovb", - "cmovg", - "cmovge", - "cmovl", - "cmovle", - "cmovna", - "cmovnb", - "cmovno", - "cmovnp", - "cmovns", - "cmovnz", - "cmovo", - "cmovp", - "cmovs", - "cmovz", - "div", - "idiv", - "mul", - "neg", - "not", - "cmpxchg", - "seto", - "setno", - "setb", - "setae", - "setz", - "setnz", - "setbe", - "seta", - "sets", - "setns", - "setp", - "setnp", - "setl", - "setge", - "setle", - "setg", - "cpuid", - "ud0", - "ud1", - "ud2", - "wbinvd", - "invd", - "sysret", - "clts", - "syscall", - "lsl", - "lar", - "les", - "lds", - "sgdt", - "sidt", - "lgdt", - "lidt", - "smsw", - "lmsw", - "swapgs", - "rdtscp", - "invlpg", - "fxsave", - "fxrstor", - "ldmxcsr", - "stmxcsr", - "xsave", - "xrstor", - "xsaveopt", - "lfence", - "mfence", - "sfence", - "clflush", - "clflushopt", - "clwb", - "wrmsr", - "rdtsc", - "rdmsr", - "rdpmc", - "sldt", - "str", - "lldt", - "ltr", - "verr", - "verw", - "cmc", - "clc", - "stc", - "cli", - "sti", - "cld", - "std", - "jmpe", - "popcnt", - "movdqu", - "movdqa", - "movq", - "cmpss", - "cmpsd", - "unpcklps", - "unpcklpd", - "unpckhps", - "unpckhpd", - "pshufhw", - "pshuflw", - "movups", - "movq2dq", - "movdq2q", - "rsqrtss", - "rcpss", - "andn", - "bextr", - "blsi", - "blsmsk", - "blsr", - "vmclear", - "vmxon", - "vmcall", - "vmlaunch", - "vmresume", - "vmxoff", - "pconfig", - "monitor", - "mwait", - "monitorx", - "mwaitx", - "clac", - "stac", - "encls", - "enclv", - "xgetbv", - "xsetbv", - "vmfunc", - "xabort", - "xbegin", - "xend", - "xtest", - "enclu", - "rdpkru", - "wrpkru", - "rdpru", - "clzero", - "rdseed", - "rdrand", - "addps", - "addpd", - "andnps", - "andnpd", - "andps", - "andpd", - "bswap", - "cmppd", - "cmpps", - "comisd", - "comiss", - "cvtdq2ps", - "cvtpi2ps", - "cvtpi2pd", - "cvtps2pd", - "cvtps2pi", - "cvtpd2pi", - "cvttps2pi", - "cvttpd2pi", - "cvttpd2dq", - "divps", - "divpd", - "emms", - "getsec", - "lfs", - "lgs", - "lss", - "maskmovq", - "maskmovdqu", - "maxps", - "maxpd", - "minps", - "minpd", - "movaps", - "movapd", - "movd", - "movlps", - "movlpd", - "movhps", - "movhpd", - "movlhps", - "movhlps", - "movupd", - "movmskps", - "movmskpd", - "movnti", - "movntps", - "movntpd", - "extrq", - "insertq", - "movntss", - "movntsd", - "movntq", - "movntdq", - "mulps", - "mulpd", - "orps", - "orpd", - "packssdw", - "packsswb", - "packuswb", - "paddb", - "paddd", - "paddq", - "paddsb", - "paddsw", - "paddusb", - "paddusw", - "paddw", - "pand", - "pandn", - "pavgb", - "pavgw", - "pcmpeqb", - "pcmpeqd", - "pcmpeqw", - "pcmpgtb", - "pcmpgtd", - "pcmpgtw", - "pinsrw", - "pmaddwd", - "pmaxsw", - "pmaxub", - "pminsw", - "pminub", - "pmovmskb", - "pmulhuw", - "pmulhw", - "pmullw", - "pmuludq", - "por", - "psadbw", - "pshufw", - "pshufd", - "pslld", - "pslldq", - "psllq", - "psllw", - "psrad", - "psraw", - "psrld", - "psrldq", - "psrlq", - "psrlw", - "psubb", - "psubd", - "psubq", - "psubsb", - "psubsw", - "psubusb", - "psubusw", - "psubw", - "punpckhbw", - "punpckhdq", - "punpckhwd", - "punpcklbw", - "punpckldq", - "punpcklwd", - "punpcklqdq", - "punpckhqdq", - "pxor", - "rcpps", - "rsm", - "rsqrtps", - "shld", - "shufpd", - "shufps", - "slhd", - "sqrtps", - "sqrtpd", - "subps", - "subpd", - "sysenter", - "sysexit", - "ucomisd", - "ucomiss", - "vmread", - "vmwrite", - "xorps", - "xorpd", - "vmovddup", - "vpshuflw", - "vpshufhw", - "vhaddps", - "vhsubps", - "vaddsubps", - "vcvtpd2dq", - "vlddqu", - "vcomisd", - "vcomiss", - "vucomisd", - "vucomiss", - "vaddpd", - "vaddps", - "vaddsd", - "vaddss", - "vaddsubpd", - "vaesdec", - "vaesdeclast", - "vaesenc", - "vaesenclast", - "vaesimc", - "vaeskeygenassist", - "vblendpd", - "vblendps", - "vblendvpd", - "vblendvps", - "vbroadcastf128", - "vbroadcasti128", - "vbroadcastsd", - "vbroadcastss", - "vcmpsd", - "vcmpss", - "vcmppd", - "vcmpps", - "vcvtdq2pd", - "vcvtdq2ps", - "vcvtpd2ps", - "vcvtph2ps", - "vcvtps2dq", - "vcvtps2pd", - "vcvtss2sd", - "vcvtsi2ss", - "vcvtsi2sd", - "vcvtsd2si", - "vcvtsd2ss", - "vcvtps2ph", - "vcvtss2si", - "vcvttpd2dq", - "vcvttps2dq", - "vcvttss2si", - "vcvttsd2si", - "vdivpd", - "vdivps", - "vdivsd", - "vdivss", - "vdppd", - "vdpps", - "vextractf128", - "vextracti128", - "vextractps", - "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", - "vgatherdpd", - "vgatherdps", - "vgatherqpd", - "vgatherqps", - "vhaddpd", - "vhsubpd", - "vinsertf128", - "vinserti128", - "vinsertps", - "vmaskmovdqu", - "vmaskmovpd", - "vmaskmovps", - "vmaxpd", - "vmaxps", - "vmaxsd", - "vmaxss", - "vminpd", - "vminps", - "vminsd", - "vminss", - "vmovapd", - "vmovaps", - "vmovd", - "vmovdqa", - "vmovdqu", - "vmovhlps", - "vmovhpd", - "vmovhps", - "vmovlhps", - "vmovlpd", - "vmovlps", - "vmovmskpd", - "vmovmskps", - "vmovntdq", - "vmovntdqa", - "vmovntpd", - "vmovntps", - "vmovq", - "vmovss", - "vmovsd", - "vmovshdup", - "vmovsldup", - "vmovupd", - "vmovups", - "vmpsadbw", - "vmulpd", - "vmulps", - "vmulsd", - "vmulss", - "vpabsb", - "vpabsd", - "vpabsw", - "vpackssdw", - "vpackusdw", - "vpacksswb", - "vpackuswb", - "vpaddb", - "vpaddd", - "vpaddq", - "vpaddsb", - "vpaddsw", - "vpaddusb", - "vpaddusw", - "vpaddw", - "vpalignr", - "vandpd", - "vandps", - "vorpd", - "vorps", - "vandnpd", - "vandnps", - "vpand", - "vpandn", - "vpavgb", - "vpavgw", - "vpblendd", - "vpblendvb", - "vpblendw", - "vpbroadcastb", - "vpbroadcastd", - "vpbroadcastq", - "vpbroadcastw", - "vpclmulqdq", - "vpcmpeqb", - "vpcmpeqd", - "vpcmpeqq", - "vpcmpeqw", - "vpcmpgtb", - "vpcmpgtd", - "vpcmpgtq", - "vpcmpgtw", - "vpcmpestri", - "vpcmpestrm", - "vpcmpistri", - "vpcmpistrm", - "vperm2f128", - "vperm2i128", - "vpermd", - "vpermilpd", - "vpermilps", - "vpermpd", - "vpermps", - "vpermq", - "vpextrb", - "vpextrd", - "vpextrq", - "vpextrw", - "vpgatherdd", - "vpgatherdq", - "vpgatherqd", - "vpgatherqq", - "vphaddd", - "vphaddsw", - "vphaddw", - "vpmaddubsw", - "vphminposuw", - "vphsubd", - "vphsubsw", - "vphsubw", - "vpinsrb", - "vpinsrd", - "vpinsrq", - "vpinsrw", - "vpmaddwd", - "vpmaskmovd", - "vpmaskmovq", - "vpmaxsb", - "vpmaxsd", - "vpmaxsw", - "vpmaxub", - "vpmaxuw", - "vpmaxud", - "vpminsb", - "vpminsw", - "vpminsd", - "vpminub", - "vpminuw", - "vpminud", - "vpmovmskb", - "vpmovsxbd", - "vpmovsxbq", - "vpmovsxbw", - "vpmovsxdq", - "vpmovsxwd", - "vpmovsxwq", - "vpmovzxbd", - "vpmovzxbq", - "vpmovzxbw", - "vpmovzxdq", - "vpmovzxwd", - "vpmovzxwq", - "vpmuldq", - "vpmulhrsw", - "vpmulhuw", - "vpmulhw", - "vpmullq", - "vpmulld", - "vpmullw", - "vpmuludq", - "vpor", - "vpsadbw", - "vpshufb", - "vpshufd", - "vpsignb", - "vpsignd", - "vpsignw", - "vpslld", - "vpslldq", - "vpsllq", - "vpsllvd", - "vpsllvq", - "vpsllw", - "vpsrad", - "vpsravd", - "vpsraw", - "vpsrld", - "vpsrldq", - "vpsrlq", - "vpsrlvd", - "vpsrlvq", - "vpsrlw", - "vpsubb", - "vpsubd", - "vpsubq", - "vpsubsb", - "vpsubsw", - "vpsubusb", - "vpsubusw", - "vpsubw", - "vptest", - "vpunpckhbw", - "vpunpckhdq", - "vpunpckhqdq", - "vpunpckhwd", - "vpunpcklbw", - "vpunpckldq", - "vpunpcklqdq", - "vpunpcklwd", - "vpxor", - "vrcpps", - "vroundpd", - "vroundps", - "vroundsd", - "vroundss", - "vrsqrtps", - "vrsqrtss", - "vrcpss", - "vshufpd", - "vshufps", - "vsqrtpd", - "vsqrtps", - "vsqrtss", - "vsqrtsd", - "vsubpd", - "vsubps", - "vsubsd", - "vsubss", - "vtestpd", - "vtestps", - "vunpckhpd", - "vunpckhps", - "vunpcklpd", - "vunpcklps", - "vxorpd", - "vxorps", - "vzeroupper", - "vzeroall", - "vldmxcsr", - "vstmxcsr", - "pclmulqdq", - "aeskeygenassist", - "aesimc", - "aesenc", - "aesenclast", - "aesdec", - "aesdeclast", - "pcmpgtq", - "pcmpistrm", - "pcmpistri", - "pcmpestri", - "packusdw", - "pcmpestrm", - "pcmpeqq", - "ptest", - "phminposuw", - "dpps", - "dppd", - "mpsadbw", - "pmovzxdq", - "pmovsxdq", - "pmovzxbd", - "pmovsxbd", - "pmovzxwq", - "pmovsxwq", - "pmovzxbq", - "pmovsxbq", - "pmovsxwd", - "pmovzxwd", - "pextrq", - "pextrd", - "pextrw", - "pextrb", - "pmovsxbw", - "pmovzxbw", - "pinsrq", - "pinsrd", - "pinsrb", - "extractps", - "insertps", - "roundss", - "roundsd", - "roundps", - "roundpd", - "pmaxsb", - "pmaxsd", - "pmaxuw", - "pmaxud", - "pminsd", - "pminsb", - "pminud", - "pminuw", - "blendw", - "pblendvb", - "pblendw", - "blendvps", - "blendvpd", - "blendps", - "blendpd", - "pmuldq", - "movntdqa", - "pmulld", - "palignr", - "psignw", - "psignd", - "psignb", - "pshufb", - "pmulhrsw", - "pmaddubsw", - "pabsd", - "pabsw", - "pabsb", - "phsubsw", - "phsubw", - "phsubd", - "phaddd", - "phaddsw", - "phaddw", - "hsubpd", - "haddpd", - "sha1rnds4", - "sha1nexte", - "sha1msg1", - "sha1msg2", - "sha256rnds2", - "sha256msg1", - "sha256msg2", - "lzcnt", - "clgi", - "stgi", - "skinit", - "vmload", - "vmmcall", - "vmsave", - "vmrun", - "invlpga", - "invlpgb", - "tlbsync", - "movbe", - "adcx", - "adox", - "prefetchw", - "rdpid", - "cmpxchg8b", - "cmpxchg16b", - "vmptrld", - "vmptrst", - "bzhi", - "mulx", - "shlx", - "shrx", - "sarx", - "pdep", - "pext", - "rorx", - "xrstors", - "xrstors64", - "xsavec", - "xsavec64", - "xsaves", - "xsaves64", - "rdfsbase", - "rdgsbase", - "wrfsbase", - "wrgsbase", - "crc32", - "salc", - "xlat", - - "f2xm1", - "fabs", - "fadd", - "faddp", - "fbld", - "fbstp", - "fchs", - "fcmovb", - "fcmovbe", - "fcmove", - "fcmovnb", - "fcmovnbe", - "fcmovne", - "fcmovnu", - "fcmovu", - "fcom", - "fcomi", - "fcomip", - "fcomp", - "fcompp", - "fcos", - "fdecstp", - "fdisi8087_nop", - "fdiv", - "fdivp", - "fdivr", - "fdivrp", - "feni8087_nop", - "ffree", - "ffreep", - "fiadd", - "ficom", - "ficomp", - "fidiv", - "fidivr", - "fild", - "fimul", - "fincstp", - "fist", - "fistp", - "fisttp", - "fisub", - "fisubr", - "fld", - "fld1", - "fldcw", - "fldenv", - "fldl2e", - "fldl2t", - "fldlg2", - "fldln2", - "fldpi", - "fldz", - "fmul", - "fmulp", - "fnclex", - "fninit", - "fnop", - "fnsave", - "fnstcw", - "fnstenv", - "fnstor", - "fnstsw", - "fpatan", - "fprem", - "fprem1", - "fptan", - "frndint", - "frstor", - "fscale", - "fsetpm287_nop", - "fsin", - "fsincos", - "fsqrt", - "fst", - "fstp", - "fstpnce", - "fsub", - "fsubp", - "fsubr", - "fsubrp", - "ftst", - "fucom", - "fucomi", - "fucomip", - "fucomp", - "fucompp", - "fxam", - "fxch", - "fxtract", - "fyl2x", - "fyl2xp1", - "loopnz", - "loopz", - "loop", - "jcxz", - "pusha", - "popa", - "bound", - "arpl", - "aas", - "aaa", - "das", - "daa", - "aam", - "aad", - "movdir64b", - "movdiri", - "aesdec128kl", - "aesdec256kl", - "aesdecwide128kl", - "aesdecwide256kl", - "aesenc128kl", - "aesenc256kl", - "aesencwide128kl", - "aesencwide256kl", - "encodekey128", - "encodekey256", - "loadiwkey", - - // unsure - "hreset", - - // 3dnow - "femms", - "pi2fw", - "pi2fd", - "pi2iw", - "pi2id", - "pmulhrw", - "pfcmpge", - "pfmin", - "pfrcp", - "pfrsqrt", - "pfsub", - "pfadd", - "pfcmpgt", - "pfmax", - "pfrcpit1", - "pfrsqit1", - "pfsubr", - "pfacc", - "pfcmpeq", - "pfmul", - "pfmulhrw", - "pfrcpit2", - "pfnacc", - "pfpnacc", - "pswapd", - "pavgusb", - - // ENQCMD - "enqcmd", - "enqcmds", - - // INVPCID, - "invept", - "invvpid", - "invpcid", - - // PTWRITE - "ptwrite", - - // GFNI - "gf2p8affineqb", - "gf2p8affineinvqb", - "gf2p8mulb", - - // CET - "wruss", - "wrss", - "incssp", - "saveprevssp", - "setssbsy", - "clrssbsy", - "rstorssp", - "endbr64", - "endbr32", - - // TDX - "tdcall", - "seamret", - "seamops", - "seamcall", - - // WAITPKG - "tpause", - "umonitor", - "umwait", - - // UINTR - "uiret", - "testui", - "clui", - "stui", - "senduipi", - - // TSXLDTRK - "xsusldtrk", - "xresldtrk", - - // AVX512F - "valignd", - "valignq", - "vblendmpd", - "vblendmps", - "vcompresspd", - "vcompressps", - "vcvtpd2udq", - "vcvttpd2udq", - "vcvtps2udq", - "vcvttps2udq", - "vcvtqq2pd", - "vcvtqq2ps", - "vcvtsd2usi", - "vcvttsd2usi", - "vcvtss2usi", - "vcvttss2usi", - "vcvtudq2pd", - "vcvtudq2ps", - "vcvtusi2usd", - "vcvtusi2uss", - "vexpandpd", - "vexpandps", - "vextractf32x4", - "vextractf64x4", - "vextracti32x4", - "vextracti64x4", - "vfixupimmpd", - "vfixupimmps", - "vfixupimmsd", - "vfixupimmss", - "vgetexppd", - "vgetexpps", - "vgetexpsd", - "vgetexpss", - "vgetmantpd", - "vgetmantps", - "vgetmantsd", - "vgetmantss", - "vinsertf32x4", - "vinsertf64x4", - "vinserti64x4", - "vmovdqa32", - "vmovdqa64", - "vmovdqu32", - "vmovdqu64", - "vpblendmd", - "vpblendmq", - "vpcmpd", - "vpcmpud", - "vpcmpq", - "vpcmpuq", - "vpcompressq", - "vpcompressd", - "vpermi2d", - "vpermi2q", - "vpermi2pd", - "vpermi2ps", - "vpermt2d", - "vpermt2q", - "vpermt2pd", - "vpermt2ps", - "vpmaxsq", - "vpmaxuq", - "vpminsq", - "vpminuq", - "vpmovsqb", - "vpmovusqb", - "vpmovsqw", - "vpmovusqw", - "vpmovsqd", - "vpmovusqd", - "vpmovsdb", - "vpmovusdb", - "vpmovsdw", - "vpmovusdw", - "vprold", - "vprolq", - "vprolvd", - "vprolvq", - "vprord", - "vprorq", - "vprorrd", - "vprorrq", - "vpscatterdd", - "vpscatterdq", - "vpscatterqd", - "vpscatterqq", - "vpsraq", - "vpsravq", - "vptestnmd", - "vptestnmq", - "vpternlogd", - "vpternlogq", - "vptestmd", - "vptestmq", - "vrcp14pd", - "vrcp14ps", - "vrcp14sd", - "vrcp14ss", - "vrndscalepd", - "vrndscaleps", - "vrndscalesd", - "vrndscaless", - "vrsqrt14pd", - "vrsqrt14ps", - "vrsqrt14sd", - "vrsqrt14ss", - "vscaledpd", - "vscaledps", - "vscaledsd", - "vscaledss", - "vscatterdd", - "vscatterdq", - "vscatterqd", - "vscatterqq", - "vshuff32x4", - "vshuff64x2", - "vshufi32x4", - "vshufi64x2", - - // AVX512DQ - "vcvttpd2qq", - "vcvtpd2qq", - "vcvttpd2uqq", - "vcvtpd2uqq", - "vcvttps2qq", - "vcvtps2qq", - "vcvttps2uqq", - "vcvtps2uqq", - "vcvtuqq2pd", - "vcvtuqq2ps", - "vextractf64x2", - "vextracti64x2", - "vfpclasspd", - "vfpclassps", - "vfpclasssd", - "vfpclassss", - "vinsertf64x2", - "vinserti64x2", - "vpmovm2d", - "vpmovm2q", - "vpmovb2d", - "vpmovq2m", - "vrangepd", - "vrangeps", - "vrangesd", - "vrangess", - "vreducepd", - "vreduceps", - "vreducesd", - "vreducess", - - // AVX512BW - "vdbpsadbw", - "vmovdqu8", - "vmovdqu16", - "vpblendmb", - "vpblendmw", - "vpcmpb", - "vpcmpub", - "vpcmpw", - "vpcmpuw", - "vpermw", - "vpermi2b", - "vpermi2w", - "vpmovm2b", - "vpmovm2w", - "vpmovb2m", - "vpmovw2m", - "vpmovswb", - "vpmovuswb", - "vpsllvw", - "vpsravw", - "vpsrlvw", - "vptestnmb", - "vptestnmw", - "vptestmb", - "vptestmw", - - // AVX512CD - "vpbroadcastm", - "vpconflictd", - "vpconflictq", - "vplzcntd", - "vplzcntq", - - "kunpckbw", - "kunpckwd", - "kunpckdq", - - "kaddb", - "kandb", - "kandnb", - "kmovb", - "knotb", - "korb", - "kortestb", - "kshiftlb", - "kshiftrb", - "ktestb", - "kxnorb", - "kxorb", - "kaddw", - "kandw", - "kandnw", - "kmovw", - "knotw", - "korw", - "kortestw", - "kshiftlw", - "kshiftrw", - "ktestw", - "kxnorw", - "kxorw", - "kaddd", - "kandd", - "kandnd", - "kmovd", - "knotd", - "kord", - "kortestd", - "kshiftld", - "kshiftrd", - "ktestd", - "kxnord", - "kxord", - "kaddq", - "kandq", - "kandnq", - "kmovq", - "knotq", - "korq", - "kortestq", - "kshiftlq", - "kshiftrq", - "ktestq", - "kxnorq", - "kxorq", - - // AVX512ER - "vexp2pd", - "vexp2ps", - "vexp2sd", - "vexp2ss", - "vrcp28pd", - "vrcp28ps", - "vrcp28sd", - "vrcp28ss", - "vrsqrt28pd", - "vrsqrt28ps", - "vrsqrt28sd", - "vrsqrt28ss", - - // AVX512PF - "vgatherpf0dpd", - "vgatherpf0dps", - "vgatherpf0qpd", - "vgatherpf0qps", - "vgatherpf1dpd", - "vgatherpf1dps", - "vgatherpf1qpd", - "vgatherpf1qps", - "vscatterpf0dpd", - "vscatterpf0dps", - "vscatterpf0qpd", - "vscatterpf0qps", - "vscatterpf1dpd", - "vscatterpf1dps", - "vscatterpf1qpd", - "vscatterpf1qps", - - // MPX - "bndmk", - "bndcl", - "bndcu", - "bndcn", - "bndmov", - "bndldx", - "bndstx", - - - - "vgf2p8affineqb", - "vgf2p8affineinvqb", - "vpshrdq", - "vpshrdd", - "vpshrdw", - "vpshldq", - "vpshldd", - "vpshldw", - "vbroadcastf32x8", - "vbroadcastf64x4", - "vbroadcastf32x4", - "vbroadcastf64x2", - "vbroadcastf32x2", - "vbroadcasti32x8", - "vbroadcasti64x4", - "vbroadcasti32x4", - "vbroadcasti64x2", - "vbroadcasti32x2", - "vextracti32x8", - "vextractf32x8", - "vinserti32x8", - "vinsertf32x8", - "vinserti32x4", - "v4fnmaddss", - "v4fnmaddps", - "vcvtneps2bf16", - "v4fmaddss", - "v4fmaddps", - "vcvtne2ps2bf16", - "vp2intersectd", - "vp2intersectq", - "vp4dpwssds", - "vp4dpwssd", - "vpdpwssds", - "vpdpwssd", - "vpdpbusds", - "vdpbf16ps", - "vpbroadcastmw2d", - "vpbroadcastmb2q", - "vpmovd2m", - "vpmovqd", - "vpmovwb", - "vpmovdb", - "vpmovdw", - "vpmovqb", - "vpmovqw", - "vgf2p8mulb", - "vpmadd52huq", - "vpmadd52luq", - "vpshufbitqmb", - "vpermb", - "vpexpandd", - "vpexpandq", - "vpabsq", - "vprorvd", - "vprorvq", - "vpmultishiftqb", - "vpermt2b", - "vpermt2w", - "vpshrdvq", - "vpshrdvd", - "vpshrdvw", - "vpshldvq", - "vpshldvd", - "vpshldvw", - "vpcompressb", - "vpcompressw", - "vpexpandb", - "vpexpandw", - "vpopcntd", - "vpopcntq", - "vpopcntb", - "vpopcntw", - "vscalefss", - "vscalefsd", - "vscalefps", - "vscalefpd", - "vpdpbusd", - "vcvtusi2sd", - "vcvtusi2ss", - "vpxord", - "vpxorq", - "vpord", - "vporq", - "vpandnd", - "vpandnq", - "vpandd", - "vpandq", - "psmash", - "pvalidate", - "rmpadjust", - "rmpupdate", -]; - impl Opcode { fn name(&self) -> &'static str { unsafe { - MNEMONICS.get_kinda_unchecked(*self as usize) + crate::generated::opcode::MNEMONICS.get_kinda_unchecked(*self as usize) } } } @@ -2523,6 +1053,10 @@ impl Colorize for Opcode { Opcode::VSCATTERDQ | Opcode::VSCATTERQD | Opcode::VSCATTERQQ | + Opcode::VSCATTERDPS | + Opcode::VSCATTERDPD | + Opcode::VSCATTERQPS | + Opcode::VSCATTERQPD | Opcode::VPSCATTERDD | Opcode::VPSCATTERDQ | Opcode::VPSCATTERQD | @@ -2711,6 +1245,8 @@ impl Colorize for Opcode { Opcode::VPINSRW | Opcode::VPMASKMOVD | Opcode::VPMASKMOVQ | + Opcode::VCOMPRESSD | + Opcode::VCOMPRESSQ | Opcode::VCOMPRESSPD | Opcode::VCOMPRESSPS | Opcode::VPCOMPRESSQ | diff --git a/src/real_mode/mod.rs b/src/real_mode/mod.rs index cad9499..3181197 100644 --- a/src/real_mode/mod.rs +++ b/src/real_mode/mod.rs @@ -11,6 +11,7 @@ pub use self::display::{DisplayStyle, InstructionDisplayer}; use core::cmp::PartialEq; use crate::safer_unchecked::unreachable_kinda_unchecked as unreachable_unchecked; +pub use crate::generated::opcode::real_mode::Opcode as Opcode; use yaxpeax_arch::{AddressDiff, Decoder, Reader, LengthedInstruction}; use yaxpeax_arch::annotation::{AnnotatingDecoder, DescriptionSink, NullSink}; @@ -997,1500 +998,6 @@ const XSAVE: [Opcode; 10] = [ Opcode::XSETBV, ]; -#[allow(non_camel_case_types)] -#[derive(Copy, Clone, Debug, Eq, PartialEq)] -#[non_exhaustive] -pub enum Opcode { - Invalid, - ADD, - OR, - ADC, - SBB, - AND, - XOR, - SUB, - CMP, - XADD, - BT, - BTS, - BTC, - BTR, - BSF, - BSR, - TZCNT, - MOVSS, - ADDSS, - SUBSS, - MULSS, - DIVSS, - MINSS, - MAXSS, - SQRTSS, - MOVSD, - SQRTSD, - ADDSD, - SUBSD, - MULSD, - DIVSD, - MINSD, - MAXSD, - MOVSLDUP, - MOVSHDUP, - MOVDDUP, - HADDPS, - HSUBPS, - ADDSUBPD, - ADDSUBPS, - CVTSI2SS, - CVTSI2SD, - CVTTSD2SI, - CVTTPS2DQ, - CVTPD2DQ, - CVTPD2PS, - CVTPS2DQ, - CVTSD2SI, - CVTSD2SS, - CVTTSS2SI, - CVTSS2SI, - CVTSS2SD, - CVTDQ2PD, - LDDQU, - MOVZX, - MOVSX, - MOVSXD, - SAR, - SAL, - SHR, - SHRD, - SHL, - RCR, - RCL, - ROR, - ROL, - INC, - DEC, - HLT, - CALL, - CALLF, - JMP, - JMPF, - PUSH, - POP, - LEA, - NOP, - PREFETCHNTA, - PREFETCH0, - PREFETCH1, - PREFETCH2, - XCHG, - POPF, - INT, - INTO, - IRET, - IRETD, - IRETQ, - RETF, - ENTER, - LEAVE, - MOV, - RETURN, - PUSHF, - WAIT, - CBW, - CWDE, - CDQE, - CWD, - CDQ, - CQO, - LODS, - STOS, - LAHF, - SAHF, - CMPS, - SCAS, - MOVS, - TEST, - INS, - IN, - OUTS, - OUT, - IMUL, - JO, - JNO, - JB, - JNB, - JZ, - JNZ, - JA, - JNA, - JS, - JNS, - JP, - JNP, - JL, - JGE, - JLE, - JG, - CMOVA, - CMOVB, - CMOVG, - CMOVGE, - CMOVL, - CMOVLE, - CMOVNA, - CMOVNB, - CMOVNO, - CMOVNP, - CMOVNS, - CMOVNZ, - CMOVO, - CMOVP, - CMOVS, - CMOVZ, - DIV, - IDIV, - MUL, - NEG, - NOT, - CMPXCHG, - SETO, - SETNO, - SETB, - SETAE, - SETZ, - SETNZ, - SETBE, - SETA, - SETS, - SETNS, - SETP, - SETNP, - SETL, - SETGE, - SETLE, - SETG, - CPUID, - UD0, - UD1, - UD2, - WBINVD, - INVD, - SYSRET, - CLTS, - SYSCALL, - LSL, - LAR, - LES, - LDS, - SGDT, - SIDT, - LGDT, - LIDT, - SMSW, - LMSW, - SWAPGS, - RDTSCP, - INVLPG, - FXSAVE, - FXRSTOR, - LDMXCSR, - STMXCSR, - XSAVE, - XRSTOR, - XSAVEOPT, - LFENCE, - MFENCE, - SFENCE, - CLFLUSH, - CLFLUSHOPT, - CLWB, - WRMSR, - RDTSC, - RDMSR, - RDPMC, - SLDT, - STR, - LLDT, - LTR, - VERR, - VERW, - CMC, - CLC, - STC, - CLI, - STI, - CLD, - STD, - JMPE, - POPCNT, - MOVDQU, - MOVDQA, - MOVQ, - CMPSS, - CMPSD, - UNPCKLPS, - UNPCKLPD, - UNPCKHPS, - UNPCKHPD, - PSHUFHW, - PSHUFLW, - MOVUPS, - MOVQ2DQ, - MOVDQ2Q, - RSQRTSS, - RCPSS, - - ANDN, - BEXTR, - BLSI, - BLSMSK, - BLSR, - VMCLEAR, - VMXON, - VMCALL, - VMLAUNCH, - VMRESUME, - VMXOFF, - PCONFIG, - MONITOR, - MWAIT, - MONITORX, - MWAITX, - CLAC, - STAC, - ENCLS, - ENCLV, - XGETBV, - XSETBV, - VMFUNC, - XABORT, - XBEGIN, - XEND, - XTEST, - ENCLU, - RDPKRU, - WRPKRU, - - RDPRU, - CLZERO, - - RDSEED, - RDRAND, - - ADDPS, - ADDPD, - ANDNPS, - ANDNPD, - ANDPS, - ANDPD, - BSWAP, - CMPPD, - CMPPS, - COMISD, - COMISS, - CVTDQ2PS, - CVTPI2PS, - CVTPI2PD, - CVTPS2PD, - CVTPS2PI, - CVTPD2PI, - CVTTPS2PI, - CVTTPD2PI, - CVTTPD2DQ, - DIVPS, - DIVPD, - EMMS, - GETSEC, - LFS, - LGS, - LSS, - MASKMOVQ, - MASKMOVDQU, - MAXPS, - MAXPD, - MINPS, - MINPD, - MOVAPS, - MOVAPD, - MOVD, - MOVLPS, - MOVLPD, - MOVHPS, - MOVHPD, - MOVLHPS, - MOVHLPS, - MOVUPD, - MOVMSKPS, - MOVMSKPD, - MOVNTI, - MOVNTPS, - MOVNTPD, - EXTRQ, - INSERTQ, - MOVNTSS, - MOVNTSD, - MOVNTQ, - MOVNTDQ, - MULPS, - MULPD, - ORPS, - ORPD, - PACKSSDW, - PACKSSWB, - PACKUSWB, - PADDB, - PADDD, - PADDQ, - PADDSB, - PADDSW, - PADDUSB, - PADDUSW, - PADDW, - PAND, - PANDN, - PAVGB, - PAVGW, - PCMPEQB, - PCMPEQD, - PCMPEQW, - PCMPGTB, - PCMPGTD, - PCMPGTW, - PINSRW, - PMADDWD, - PMAXSW, - PMAXUB, - PMINSW, - PMINUB, - PMOVMSKB, - PMULHUW, - PMULHW, - PMULLW, - PMULUDQ, - POR, - PSADBW, - PSHUFW, - PSHUFD, - PSLLD, - PSLLDQ, - PSLLQ, - PSLLW, - PSRAD, - PSRAW, - PSRLD, - PSRLDQ, - PSRLQ, - PSRLW, - PSUBB, - PSUBD, - PSUBQ, - PSUBSB, - PSUBSW, - PSUBUSB, - PSUBUSW, - PSUBW, - PUNPCKHBW, - PUNPCKHDQ, - PUNPCKHWD, - PUNPCKLBW, - PUNPCKLDQ, - PUNPCKLWD, - PUNPCKLQDQ, - PUNPCKHQDQ, - PXOR, - RCPPS, - RSM, - RSQRTPS, - SHLD, - SHUFPD, - SHUFPS, - SLHD, - SQRTPS, - SQRTPD, - SUBPS, - SUBPD, - SYSENTER, - SYSEXIT, - UCOMISD, - UCOMISS, - VMREAD, - VMWRITE, - XORPS, - XORPD, - - VMOVDDUP, - VPSHUFLW, - VPSHUFHW, - VHADDPS, - VHSUBPS, - VADDSUBPS, - VCVTPD2DQ, - VLDDQU, - - VCOMISD, - VCOMISS, - VUCOMISD, - VUCOMISS, - VADDPD, - VADDPS, - VADDSD, - VADDSS, - VADDSUBPD, - VAESDEC, - VAESDECLAST, - VAESENC, - VAESENCLAST, - VAESIMC, - VAESKEYGENASSIST, - VBLENDPD, - VBLENDPS, - VBLENDVPD, - VBLENDVPS, - VBROADCASTF128, - VBROADCASTI128, - VBROADCASTSD, - VBROADCASTSS, - VCMPSD, - VCMPSS, - VCMPPD, - VCMPPS, - VCVTDQ2PD, - VCVTDQ2PS, - VCVTPD2PS, - VCVTPH2PS, - VCVTPS2DQ, - VCVTPS2PD, - VCVTSS2SD, - VCVTSI2SS, - VCVTSI2SD, - VCVTSD2SI, - VCVTSD2SS, - VCVTPS2PH, - VCVTSS2SI, - VCVTTPD2DQ, - VCVTTPS2DQ, - VCVTTSS2SI, - VCVTTSD2SI, - VDIVPD, - VDIVPS, - VDIVSD, - VDIVSS, - VDPPD, - VDPPS, - VEXTRACTF128, - VEXTRACTI128, - VEXTRACTPS, - 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, - VGATHERDPD, - VGATHERDPS, - VGATHERQPD, - VGATHERQPS, - VHADDPD, - VHSUBPD, - VINSERTF128, - VINSERTI128, - VINSERTPS, - VMASKMOVDQU, - VMASKMOVPD, - VMASKMOVPS, - VMAXPD, - VMAXPS, - VMAXSD, - VMAXSS, - VMINPD, - VMINPS, - VMINSD, - VMINSS, - VMOVAPD, - VMOVAPS, - VMOVD, - VMOVDQA, - VMOVDQU, - VMOVHLPS, - VMOVHPD, - VMOVHPS, - VMOVLHPS, - VMOVLPD, - VMOVLPS, - VMOVMSKPD, - VMOVMSKPS, - VMOVNTDQ, - VMOVNTDQA, - VMOVNTPD, - VMOVNTPS, - VMOVQ, - VMOVSS, - VMOVSD, - VMOVSHDUP, - VMOVSLDUP, - VMOVUPD, - VMOVUPS, - VMPSADBW, - VMULPD, - VMULPS, - VMULSD, - VMULSS, - VPABSB, - VPABSD, - VPABSW, - VPACKSSDW, - VPACKUSDW, - VPACKSSWB, - VPACKUSWB, - VPADDB, - VPADDD, - VPADDQ, - VPADDSB, - VPADDSW, - VPADDUSB, - VPADDUSW, - VPADDW, - VPALIGNR, - VANDPD, - VANDPS, - VORPD, - VORPS, - VANDNPD, - VANDNPS, - VPAND, - VPANDN, - VPAVGB, - VPAVGW, - VPBLENDD, - VPBLENDVB, - VPBLENDW, - VPBROADCASTB, - VPBROADCASTD, - VPBROADCASTQ, - VPBROADCASTW, - VPCLMULQDQ, - VPCMPEQB, - VPCMPEQD, - VPCMPEQQ, - VPCMPEQW, - VPCMPGTB, - VPCMPGTD, - VPCMPGTQ, - VPCMPGTW, - VPCMPESTRI, - VPCMPESTRM, - VPCMPISTRI, - VPCMPISTRM, - VPERM2F128, - VPERM2I128, - VPERMD, - VPERMILPD, - VPERMILPS, - VPERMPD, - VPERMPS, - VPERMQ, - VPEXTRB, - VPEXTRD, - VPEXTRQ, - VPEXTRW, - VPGATHERDD, - VPGATHERDQ, - VPGATHERQD, - VPGATHERQQ, - VPHADDD, - VPHADDSW, - VPHADDW, - VPMADDUBSW, - VPHMINPOSUW, - VPHSUBD, - VPHSUBSW, - VPHSUBW, - VPINSRB, - VPINSRD, - VPINSRQ, - VPINSRW, - VPMADDWD, - VPMASKMOVD, - VPMASKMOVQ, - VPMAXSB, - VPMAXSD, - VPMAXSW, - VPMAXUB, - VPMAXUW, - VPMAXUD, - VPMINSB, - VPMINSW, - VPMINSD, - VPMINUB, - VPMINUW, - VPMINUD, - VPMOVMSKB, - VPMOVSXBD, - VPMOVSXBQ, - VPMOVSXBW, - VPMOVSXDQ, - VPMOVSXWD, - VPMOVSXWQ, - VPMOVZXBD, - VPMOVZXBQ, - VPMOVZXBW, - VPMOVZXDQ, - VPMOVZXWD, - VPMOVZXWQ, - VPMULDQ, - VPMULHRSW, - VPMULHUW, - VPMULHW, - VPMULLQ, - VPMULLD, - VPMULLW, - VPMULUDQ, - VPOR, - VPSADBW, - VPSHUFB, - VPSHUFD, - VPSIGNB, - VPSIGND, - VPSIGNW, - VPSLLD, - VPSLLDQ, - VPSLLQ, - VPSLLVD, - VPSLLVQ, - VPSLLW, - VPSRAD, - VPSRAVD, - VPSRAW, - VPSRLD, - VPSRLDQ, - VPSRLQ, - VPSRLVD, - VPSRLVQ, - VPSRLW, - VPSUBB, - VPSUBD, - VPSUBQ, - VPSUBSB, - VPSUBSW, - VPSUBUSB, - VPSUBUSW, - VPSUBW, - VPTEST, - VPUNPCKHBW, - VPUNPCKHDQ, - VPUNPCKHQDQ, - VPUNPCKHWD, - VPUNPCKLBW, - VPUNPCKLDQ, - VPUNPCKLQDQ, - VPUNPCKLWD, - VPXOR, - VRCPPS, - VROUNDPD, - VROUNDPS, - VROUNDSD, - VROUNDSS, - VRSQRTPS, - VRSQRTSS, - VRCPSS, - VSHUFPD, - VSHUFPS, - VSQRTPD, - VSQRTPS, - VSQRTSS, - VSQRTSD, - VSUBPD, - VSUBPS, - VSUBSD, - VSUBSS, - VTESTPD, - VTESTPS, - VUNPCKHPD, - VUNPCKHPS, - VUNPCKLPD, - VUNPCKLPS, - VXORPD, - VXORPS, - VZEROUPPER, - VZEROALL, - VLDMXCSR, - VSTMXCSR, - - PCLMULQDQ, - AESKEYGENASSIST, - AESIMC, - AESENC, - AESENCLAST, - AESDEC, - AESDECLAST, - PCMPGTQ, - PCMPISTRM, - PCMPISTRI, - PCMPESTRI, - PACKUSDW, - PCMPESTRM, - PCMPEQQ, - PTEST, - PHMINPOSUW, - DPPS, - DPPD, - MPSADBW, - PMOVZXDQ, - PMOVSXDQ, - PMOVZXBD, - PMOVSXBD, - PMOVZXWQ, - PMOVSXWQ, - PMOVZXBQ, - PMOVSXBQ, - PMOVSXWD, - PMOVZXWD, - PEXTRQ, - PEXTRD, - PEXTRW, - PEXTRB, - PMOVSXBW, - PMOVZXBW, - PINSRQ, - PINSRD, - PINSRB, - EXTRACTPS, - INSERTPS, - ROUNDSS, - ROUNDSD, - ROUNDPS, - ROUNDPD, - PMAXSB, - PMAXSD, - PMAXUW, - PMAXUD, - PMINSD, - PMINSB, - PMINUD, - PMINUW, - BLENDW, - PBLENDVB, - PBLENDW, - BLENDVPS, - BLENDVPD, - BLENDPS, - BLENDPD, - PMULDQ, - MOVNTDQA, - PMULLD, - PALIGNR, - PSIGNW, - PSIGND, - PSIGNB, - PSHUFB, - PMULHRSW, - PMADDUBSW, - PABSD, - PABSW, - PABSB, - PHSUBSW, - PHSUBW, - PHSUBD, - PHADDD, - PHADDSW, - PHADDW, - HSUBPD, - HADDPD, - - SHA1RNDS4, - SHA1NEXTE, - SHA1MSG1, - SHA1MSG2, - SHA256RNDS2, - SHA256MSG1, - SHA256MSG2, - - LZCNT, - CLGI, - STGI, - SKINIT, - VMLOAD, - VMMCALL, - VMSAVE, - VMRUN, - INVLPGA, - INVLPGB, - TLBSYNC, - - MOVBE, - - ADCX, - ADOX, - - PREFETCHW, - - RDPID, - CMPXCHG8B, - CMPXCHG16B, - VMPTRLD, - VMPTRST, - - BZHI, - MULX, - SHLX, - SHRX, - SARX, - PDEP, - PEXT, - RORX, - XRSTORS, - XRSTORS64, - XSAVEC, - XSAVEC64, - XSAVES, - XSAVES64, - - RDFSBASE, - RDGSBASE, - WRFSBASE, - WRGSBASE, - - CRC32, - SALC, - XLAT, - - F2XM1, - FABS, - FADD, - FADDP, - FBLD, - FBSTP, - FCHS, - FCMOVB, - FCMOVBE, - FCMOVE, - FCMOVNB, - FCMOVNBE, - FCMOVNE, - FCMOVNU, - FCMOVU, - FCOM, - FCOMI, - FCOMIP, - FCOMP, - FCOMPP, - FCOS, - FDECSTP, - FDISI8087_NOP, - FDIV, - FDIVP, - FDIVR, - FDIVRP, - FENI8087_NOP, - FFREE, - FFREEP, - FIADD, - FICOM, - FICOMP, - FIDIV, - FIDIVR, - FILD, - FIMUL, - FINCSTP, - FIST, - FISTP, - FISTTP, - FISUB, - FISUBR, - FLD, - FLD1, - FLDCW, - FLDENV, - FLDL2E, - FLDL2T, - FLDLG2, - FLDLN2, - FLDPI, - FLDZ, - FMUL, - FMULP, - FNCLEX, - FNINIT, - FNOP, - FNSAVE, - FNSTCW, - FNSTENV, - FNSTOR, - FNSTSW, - FPATAN, - FPREM, - FPREM1, - FPTAN, - FRNDINT, - FRSTOR, - FSCALE, - FSETPM287_NOP, - FSIN, - FSINCOS, - FSQRT, - FST, - FSTP, - FSTPNCE, - FSUB, - FSUBP, - FSUBR, - FSUBRP, - FTST, - FUCOM, - FUCOMI, - FUCOMIP, - FUCOMP, - FUCOMPP, - FXAM, - FXCH, - FXTRACT, - FYL2X, - FYL2XP1, - - LOOPNZ, - LOOPZ, - LOOP, - JCXZ, - - PUSHA, - POPA, - BOUND, - ARPL, - AAS, - AAA, - DAS, - DAA, - AAM, - AAD, - - // started shipping in Tremont, 2020 sept 23 - MOVDIR64B, - MOVDIRI, - - // started shipping in Tiger Lake, 2020 sept 2 - AESDEC128KL, - AESDEC256KL, - AESDECWIDE128KL, - AESDECWIDE256KL, - AESENC128KL, - AESENC256KL, - AESENCWIDE128KL, - AESENCWIDE256KL, - ENCODEKEY128, - ENCODEKEY256, - LOADIWKEY, - - // unsure - HRESET, - - // 3dnow - FEMMS, - PI2FW, - PI2FD, - PF2IW, - PF2ID, - PMULHRW, - PFCMPGE, - PFMIN, - PFRCP, - PFRSQRT, - PFSUB, - PFADD, - PFCMPGT, - PFMAX, - PFRCPIT1, - PFRSQIT1, - PFSUBR, - PFACC, - PFCMPEQ, - PFMUL, - PFMULHRW, - PFRCPIT2, - PFNACC, - PFPNACC, - PSWAPD, - PAVGUSB, - - // ENQCMD - ENQCMD, - ENQCMDS, - - // INVPCID - INVEPT, - INVVPID, - INVPCID, - - // PTWRITE - PTWRITE, - - // GFNI - GF2P8AFFINEQB, - GF2P8AFFINEINVQB, - GF2P8MULB, - - // CET - WRUSS, - WRSS, - INCSSP, - SAVEPREVSSP, - SETSSBSY, - CLRSSBSY, - RSTORSSP, - ENDBR64, - ENDBR32, - - // TDX - TDCALL, - SEAMRET, - SEAMOPS, - SEAMCALL, - - // WAITPKG - TPAUSE, - UMONITOR, - UMWAIT, - - // UINTR - UIRET, - TESTUI, - CLUI, - STUI, - SENDUIPI, - - // TSXLDTRK - XSUSLDTRK, - XRESLDTRK, - - // AVX512F - VALIGND, - VALIGNQ, - VBLENDMPD, - VBLENDMPS, - VCOMPRESSPD, - VCOMPRESSPS, - VCVTPD2UDQ, - VCVTTPD2UDQ, - VCVTPS2UDQ, - VCVTTPS2UDQ, - VCVTQQ2PD, - VCVTQQ2PS, - VCVTSD2USI, - VCVTTSD2USI, - VCVTSS2USI, - VCVTTSS2USI, - VCVTUDQ2PD, - VCVTUDQ2PS, - VCVTUSI2USD, - VCVTUSI2USS, - VEXPANDPD, - VEXPANDPS, - VEXTRACTF32X4, - VEXTRACTF64X4, - VEXTRACTI32X4, - VEXTRACTI64X4, - VFIXUPIMMPD, - VFIXUPIMMPS, - VFIXUPIMMSD, - VFIXUPIMMSS, - VGETEXPPD, - VGETEXPPS, - VGETEXPSD, - VGETEXPSS, - VGETMANTPD, - VGETMANTPS, - VGETMANTSD, - VGETMANTSS, - VINSERTF32X4, - VINSERTF64X4, - VINSERTI64X4, - VMOVDQA32, - VMOVDQA64, - VMOVDQU32, - VMOVDQU64, - VPBLENDMD, - VPBLENDMQ, - VPCMPD, - VPCMPUD, - VPCMPQ, - VPCMPUQ, - VPCOMPRESSQ, - VPCOMPRESSD, - VPERMI2D, - VPERMI2Q, - VPERMI2PD, - VPERMI2PS, - VPERMT2D, - VPERMT2Q, - VPERMT2PD, - VPERMT2PS, - VPMAXSQ, - VPMAXUQ, - VPMINSQ, - VPMINUQ, - VPMOVSQB, - VPMOVUSQB, - VPMOVSQW, - VPMOVUSQW, - VPMOVSQD, - VPMOVUSQD, - VPMOVSDB, - VPMOVUSDB, - VPMOVSDW, - VPMOVUSDW, - VPROLD, - VPROLQ, - VPROLVD, - VPROLVQ, - VPRORD, - VPRORQ, - VPRORRD, - VPRORRQ, - VPSCATTERDD, - VPSCATTERDQ, - VPSCATTERQD, - VPSCATTERQQ, - VPSRAQ, - VPSRAVQ, - VPTESTNMD, - VPTESTNMQ, - VPTERNLOGD, - VPTERNLOGQ, - VPTESTMD, - VPTESTMQ, - VRCP14PD, - VRCP14PS, - VRCP14SD, - VRCP14SS, - VRNDSCALEPD, - VRNDSCALEPS, - VRNDSCALESD, - VRNDSCALESS, - VRSQRT14PD, - VRSQRT14PS, - VRSQRT14SD, - VRSQRT14SS, - VSCALEDPD, - VSCALEDPS, - VSCALEDSD, - VSCALEDSS, - VSCATTERDD, - VSCATTERDQ, - VSCATTERQD, - VSCATTERQQ, - VSHUFF32X4, - VSHUFF64X2, - VSHUFI32X4, - VSHUFI64X2, - - // AVX512DQ - VCVTTPD2QQ, - VCVTPD2QQ, - VCVTTPD2UQQ, - VCVTPD2UQQ, - VCVTTPS2QQ, - VCVTPS2QQ, - VCVTTPS2UQQ, - VCVTPS2UQQ, - VCVTUQQ2PD, - VCVTUQQ2PS, - VEXTRACTF64X2, - VEXTRACTI64X2, - VFPCLASSPD, - VFPCLASSPS, - VFPCLASSSD, - VFPCLASSSS, - VINSERTF64X2, - VINSERTI64X2, - VPMOVM2D, - VPMOVM2Q, - VPMOVB2D, - VPMOVQ2M, - VRANGEPD, - VRANGEPS, - VRANGESD, - VRANGESS, - VREDUCEPD, - VREDUCEPS, - VREDUCESD, - VREDUCESS, - - // AVX512BW - VDBPSADBW, - VMOVDQU8, - VMOVDQU16, - VPBLENDMB, - VPBLENDMW, - VPCMPB, - VPCMPUB, - VPCMPW, - VPCMPUW, - VPERMW, - VPERMI2B, - VPERMI2W, - VPMOVM2B, - VPMOVM2W, - VPMOVB2M, - VPMOVW2M, - VPMOVSWB, - VPMOVUSWB, - VPSLLVW, - VPSRAVW, - VPSRLVW, - VPTESTNMB, - VPTESTNMW, - VPTESTMB, - VPTESTMW, - - // AVX512CD - VPBROADCASTM, - VPCONFLICTD, - VPCONFLICTQ, - VPLZCNTD, - VPLZCNTQ, - - KUNPCKBW, - KUNPCKWD, - KUNPCKDQ, - - KADDB, - KANDB, - KANDNB, - KMOVB, - KNOTB, - KORB, - KORTESTB, - KSHIFTLB, - KSHIFTRB, - KTESTB, - KXNORB, - KXORB, - KADDW, - KANDW, - KANDNW, - KMOVW, - KNOTW, - KORW, - KORTESTW, - KSHIFTLW, - KSHIFTRW, - KTESTW, - KXNORW, - KXORW, - KADDD, - KANDD, - KANDND, - KMOVD, - KNOTD, - KORD, - KORTESTD, - KSHIFTLD, - KSHIFTRD, - KTESTD, - KXNORD, - KXORD, - KADDQ, - KANDQ, - KANDNQ, - KMOVQ, - KNOTQ, - KORQ, - KORTESTQ, - KSHIFTLQ, - KSHIFTRQ, - KTESTQ, - KXNORQ, - KXORQ, - - // AVX512ER - VEXP2PD, - VEXP2PS, - VEXP2SD, - VEXP2SS, - VRCP28PD, - VRCP28PS, - VRCP28SD, - VRCP28SS, - VRSQRT28PD, - VRSQRT28PS, - VRSQRT28SD, - VRSQRT28SS, - - // AVX512PF - VGATHERPF0DPD, - VGATHERPF0DPS, - VGATHERPF0QPD, - VGATHERPF0QPS, - VGATHERPF1DPD, - VGATHERPF1DPS, - VGATHERPF1QPD, - VGATHERPF1QPS, - VSCATTERPF0DPD, - VSCATTERPF0DPS, - VSCATTERPF0QPD, - VSCATTERPF0QPS, - VSCATTERPF1DPD, - VSCATTERPF1DPS, - VSCATTERPF1QPD, - VSCATTERPF1QPS, - - // MPX - BNDMK, - BNDCL, - BNDCU, - BNDCN, - BNDMOV, - BNDLDX, - BNDSTX, - - VGF2P8AFFINEQB, - VGF2P8AFFINEINVQB, - VPSHRDQ, - VPSHRDD, - VPSHRDW, - VPSHLDQ, - VPSHLDD, - VPSHLDW, - VBROADCASTF32X8, - VBROADCASTF64X4, - VBROADCASTF32X4, - VBROADCASTF64X2, - VBROADCASTF32X2, - VBROADCASTI32X8, - VBROADCASTI64X4, - VBROADCASTI32X4, - VBROADCASTI64X2, - VBROADCASTI32X2, - VEXTRACTI32X8, - VEXTRACTF32X8, - VINSERTI32X8, - VINSERTF32X8, - VINSERTI32X4, - V4FNMADDSS, - V4FNMADDPS, - VCVTNEPS2BF16, - V4FMADDSS, - V4FMADDPS, - VCVTNE2PS2BF16, - VP2INTERSECTD, - VP2INTERSECTQ, - VP4DPWSSDS, - VP4DPWSSD, - VPDPWSSDS, - VPDPWSSD, - VPDPBUSDS, - VDPBF16PS, - VPBROADCASTMW2D, - VPBROADCASTMB2Q, - VPMOVD2M, - VPMOVQD, - VPMOVWB, - VPMOVDB, - VPMOVDW, - VPMOVQB, - VPMOVQW, - VGF2P8MULB, - VPMADD52HUQ, - VPMADD52LUQ, - VPSHUFBITQMB, - VPERMB, - VPEXPANDD, - VPEXPANDQ, - VPABSQ, - VPRORVD, - VPRORVQ, - VPMULTISHIFTQB, - VPERMT2B, - VPERMT2W, - VPSHRDVQ, - VPSHRDVD, - VPSHRDVW, - VPSHLDVQ, - VPSHLDVD, - VPSHLDVW, - VPCOMPRESSB, - VPCOMPRESSW, - VPEXPANDB, - VPEXPANDW, - VPOPCNTD, - VPOPCNTQ, - VPOPCNTB, - VPOPCNTW, - VSCALEFSS, - VSCALEFSD, - VSCALEFPS, - VSCALEFPD, - VPDPBUSD, - VCVTUSI2SD, - VCVTUSI2SS, - VPXORD, - VPXORQ, - VPORD, - VPORQ, - VPANDND, - VPANDNQ, - VPANDD, - VPANDQ, - - PSMASH, - PVALIDATE, - RMPADJUST, - RMPUPDATE, -} - impl PartialEq for Instruction { fn eq(&self, other: &Self) -> bool { if self.prefixes != other.prefixes { @@ -2544,7 +1051,7 @@ pub struct Instruction { operands: [OperandSpec; 4], imm: u32, disp: u32, - opcode: Opcode, + pub(crate) opcode: Opcode, mem_size: u8, } @@ -3431,666 +1938,6 @@ impl InstDecoder { self.flags |= 1 << 63; self } - - /// Optionally reject or reinterpret instruction according to the decoder's - /// declared extensions. - fn revise_instruction(&self, inst: &mut Instruction) -> Result<(), DecodeError> { - if inst.prefixes.evex().is_some() { - if !self.avx512() { - return Err(DecodeError::InvalidOpcode); - } else { - return Ok(()); - } - } - match inst.opcode { - Opcode::TZCNT => { - if !self.bmi1() { - // tzcnt is only supported if bmi1 is enabled. without bmi1, this decodes as - // bsf. - inst.opcode = Opcode::BSF; - } - } - Opcode::LDDQU | - Opcode::ADDSUBPS | - Opcode::ADDSUBPD | - Opcode::HADDPS | - Opcode::HSUBPS | - Opcode::HADDPD | - Opcode::HSUBPD | - Opcode::MOVSHDUP | - Opcode::MOVSLDUP | - Opcode::MOVDDUP | - Opcode::MONITOR | - Opcode::MWAIT => { - // via Intel section 5.7, SSE3 Instructions - if !self.sse3() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PHADDW | - Opcode::PHADDSW | - Opcode::PHADDD | - Opcode::PHSUBW | - Opcode::PHSUBSW | - Opcode::PHSUBD | - Opcode::PABSB | - Opcode::PABSW | - Opcode::PABSD | - Opcode::PMADDUBSW | - Opcode::PMULHRSW | - Opcode::PSHUFB | - Opcode::PSIGNB | - Opcode::PSIGNW | - Opcode::PSIGND | - Opcode::PALIGNR => { - // via Intel section 5.8, SSSE3 Instructions - if !self.ssse3() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PMULLD | - Opcode::PMULDQ | - Opcode::MOVNTDQA | - Opcode::BLENDPD | - Opcode::BLENDPS | - Opcode::BLENDVPD | - Opcode::BLENDVPS | - Opcode::PBLENDVB | - Opcode::BLENDW | - Opcode::PMINUW | - Opcode::PMINUD | - Opcode::PMINSB | - Opcode::PMINSD | - Opcode::PMAXUW | - Opcode::PMAXUD | - Opcode::PMAXSB | - Opcode::PMAXSD | - Opcode::ROUNDPS | - Opcode::ROUNDPD | - Opcode::ROUNDSS | - Opcode::ROUNDSD | - Opcode::PBLENDW | - Opcode::EXTRACTPS | - Opcode::INSERTPS | - Opcode::PINSRB | - Opcode::PINSRD | - Opcode::PINSRQ | - Opcode::PMOVSXBW | - Opcode::PMOVZXBW | - Opcode::PMOVSXBD | - Opcode::PMOVZXBD | - Opcode::PMOVSXWD | - Opcode::PMOVZXWD | - Opcode::PMOVSXBQ | - Opcode::PMOVZXBQ | - Opcode::PMOVSXWQ | - Opcode::PMOVZXWQ | - Opcode::PMOVSXDQ | - Opcode::PMOVZXDQ | - Opcode::DPPS | - Opcode::DPPD | - Opcode::MPSADBW | - Opcode::PHMINPOSUW | - Opcode::PTEST | - Opcode::PCMPEQQ | - Opcode::PEXTRB | - Opcode::PEXTRW | - Opcode::PEXTRD | - Opcode::PEXTRQ | - Opcode::PACKUSDW => { - // via Intel section 5.10, SSE4.1 Instructions - if !self.sse4_1() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::EXTRQ | - Opcode::INSERTQ | - Opcode::MOVNTSS | - Opcode::MOVNTSD => { - if !self.sse4a() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::CRC32 | - Opcode::PCMPESTRI | - Opcode::PCMPESTRM | - Opcode::PCMPISTRI | - Opcode::PCMPISTRM | - Opcode::PCMPGTQ => { - // via Intel section 5.11, SSE4.2 Instructions - if !self.sse4_2() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::AESDEC | - Opcode::AESDECLAST | - Opcode::AESENC | - Opcode::AESENCLAST | - Opcode::AESIMC | - Opcode::AESKEYGENASSIST => { - // via Intel section 5.12. AESNI AND PCLMULQDQ - if !self.aesni() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::PCLMULQDQ => { - // via Intel section 5.12. AESNI AND PCLMULQDQ - if !self.pclmulqdq() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::XABORT | - Opcode::XBEGIN | - Opcode::XEND | - Opcode::XTEST => { - if !self.tsx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::SHA1MSG1 | - Opcode::SHA1MSG2 | - Opcode::SHA1NEXTE | - Opcode::SHA1RNDS4 | - Opcode::SHA256MSG1 | - Opcode::SHA256MSG2 | - Opcode::SHA256RNDS2 => { - if !self.sha() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::ENCLV | - Opcode::ENCLS | - Opcode::ENCLU => { - if !self.sgx() { - return Err(DecodeError::InvalidOpcode); - } - } - // AVX... - Opcode::VMOVDDUP | - Opcode::VPSHUFLW | - Opcode::VPSHUFHW | - Opcode::VHADDPS | - Opcode::VHSUBPS | - Opcode::VADDSUBPS | - Opcode::VCVTPD2DQ | - Opcode::VLDDQU | - Opcode::VCOMISD | - Opcode::VCOMISS | - Opcode::VUCOMISD | - Opcode::VUCOMISS | - Opcode::VADDPD | - Opcode::VADDPS | - Opcode::VADDSD | - Opcode::VADDSS | - Opcode::VADDSUBPD | - Opcode::VBLENDPD | - Opcode::VBLENDPS | - Opcode::VBLENDVPD | - Opcode::VBLENDVPS | - Opcode::VBROADCASTF128 | - Opcode::VBROADCASTI128 | - Opcode::VBROADCASTSD | - Opcode::VBROADCASTSS | - Opcode::VCMPSD | - Opcode::VCMPSS | - Opcode::VCMPPD | - Opcode::VCMPPS | - Opcode::VCVTDQ2PD | - Opcode::VCVTDQ2PS | - Opcode::VCVTPD2PS | - Opcode::VCVTPS2DQ | - Opcode::VCVTPS2PD | - Opcode::VCVTSS2SD | - Opcode::VCVTSI2SS | - Opcode::VCVTSI2SD | - Opcode::VCVTSD2SI | - Opcode::VCVTSD2SS | - Opcode::VCVTSS2SI | - Opcode::VCVTTPD2DQ | - Opcode::VCVTTPS2DQ | - Opcode::VCVTTSS2SI | - Opcode::VCVTTSD2SI | - Opcode::VDIVPD | - Opcode::VDIVPS | - Opcode::VDIVSD | - Opcode::VDIVSS | - Opcode::VDPPD | - Opcode::VDPPS | - Opcode::VEXTRACTF128 | - Opcode::VEXTRACTI128 | - Opcode::VEXTRACTPS | - Opcode::VFMADD132PD | - Opcode::VFMADD132PS | - Opcode::VFMADD132SD | - Opcode::VFMADD132SS | - Opcode::VFMADD213PD | - Opcode::VFMADD213PS | - Opcode::VFMADD213SD | - Opcode::VFMADD213SS | - Opcode::VFMADD231PD | - Opcode::VFMADD231PS | - Opcode::VFMADD231SD | - Opcode::VFMADD231SS | - Opcode::VFMADDSUB132PD | - Opcode::VFMADDSUB132PS | - Opcode::VFMADDSUB213PD | - Opcode::VFMADDSUB213PS | - Opcode::VFMADDSUB231PD | - Opcode::VFMADDSUB231PS | - Opcode::VFMSUB132PD | - Opcode::VFMSUB132PS | - Opcode::VFMSUB132SD | - Opcode::VFMSUB132SS | - Opcode::VFMSUB213PD | - Opcode::VFMSUB213PS | - Opcode::VFMSUB213SD | - Opcode::VFMSUB213SS | - Opcode::VFMSUB231PD | - Opcode::VFMSUB231PS | - Opcode::VFMSUB231SD | - Opcode::VFMSUB231SS | - Opcode::VFMSUBADD132PD | - Opcode::VFMSUBADD132PS | - Opcode::VFMSUBADD213PD | - Opcode::VFMSUBADD213PS | - Opcode::VFMSUBADD231PD | - Opcode::VFMSUBADD231PS | - Opcode::VFNMADD132PD | - Opcode::VFNMADD132PS | - Opcode::VFNMADD132SD | - Opcode::VFNMADD132SS | - Opcode::VFNMADD213PD | - Opcode::VFNMADD213PS | - Opcode::VFNMADD213SD | - Opcode::VFNMADD213SS | - Opcode::VFNMADD231PD | - Opcode::VFNMADD231PS | - Opcode::VFNMADD231SD | - Opcode::VFNMADD231SS | - Opcode::VFNMSUB132PD | - Opcode::VFNMSUB132PS | - Opcode::VFNMSUB132SD | - Opcode::VFNMSUB132SS | - Opcode::VFNMSUB213PD | - Opcode::VFNMSUB213PS | - Opcode::VFNMSUB213SD | - Opcode::VFNMSUB213SS | - Opcode::VFNMSUB231PD | - Opcode::VFNMSUB231PS | - Opcode::VFNMSUB231SD | - Opcode::VFNMSUB231SS | - Opcode::VGATHERDPD | - Opcode::VGATHERDPS | - Opcode::VGATHERQPD | - Opcode::VGATHERQPS | - Opcode::VHADDPD | - Opcode::VHSUBPD | - Opcode::VINSERTF128 | - Opcode::VINSERTI128 | - Opcode::VINSERTPS | - Opcode::VMASKMOVDQU | - Opcode::VMASKMOVPD | - Opcode::VMASKMOVPS | - Opcode::VMAXPD | - Opcode::VMAXPS | - Opcode::VMAXSD | - Opcode::VMAXSS | - Opcode::VMINPD | - Opcode::VMINPS | - Opcode::VMINSD | - Opcode::VMINSS | - Opcode::VMOVAPD | - Opcode::VMOVAPS | - Opcode::VMOVD | - Opcode::VMOVDQA | - Opcode::VMOVDQU | - Opcode::VMOVHLPS | - Opcode::VMOVHPD | - Opcode::VMOVHPS | - Opcode::VMOVLHPS | - Opcode::VMOVLPD | - Opcode::VMOVLPS | - Opcode::VMOVMSKPD | - Opcode::VMOVMSKPS | - Opcode::VMOVNTDQ | - Opcode::VMOVNTDQA | - Opcode::VMOVNTPD | - Opcode::VMOVNTPS | - Opcode::VMOVQ | - Opcode::VMOVSS | - Opcode::VMOVSD | - Opcode::VMOVSHDUP | - Opcode::VMOVSLDUP | - Opcode::VMOVUPD | - Opcode::VMOVUPS | - Opcode::VMPSADBW | - Opcode::VMULPD | - Opcode::VMULPS | - Opcode::VMULSD | - Opcode::VMULSS | - Opcode::VPABSB | - Opcode::VPABSD | - Opcode::VPABSW | - Opcode::VPACKSSDW | - Opcode::VPACKUSDW | - Opcode::VPACKSSWB | - Opcode::VPACKUSWB | - Opcode::VPADDB | - Opcode::VPADDD | - Opcode::VPADDQ | - Opcode::VPADDSB | - Opcode::VPADDSW | - Opcode::VPADDUSB | - Opcode::VPADDUSW | - Opcode::VPADDW | - Opcode::VPALIGNR | - Opcode::VPAND | - Opcode::VANDPD | - Opcode::VANDPS | - Opcode::VANDNPD | - Opcode::VANDNPS | - Opcode::VORPD | - Opcode::VORPS | - Opcode::VPANDN | - Opcode::VPAVGB | - Opcode::VPAVGW | - Opcode::VPBLENDD | - Opcode::VPBLENDVB | - Opcode::VPBLENDW | - Opcode::VPBROADCASTB | - Opcode::VPBROADCASTD | - Opcode::VPBROADCASTQ | - Opcode::VPBROADCASTW | - Opcode::VPCLMULQDQ | - Opcode::VPCMPEQB | - Opcode::VPCMPEQD | - Opcode::VPCMPEQQ | - Opcode::VPCMPEQW | - Opcode::VPCMPGTB | - Opcode::VPCMPGTD | - Opcode::VPCMPGTQ | - Opcode::VPCMPGTW | - Opcode::VPCMPESTRI | - Opcode::VPCMPESTRM | - Opcode::VPCMPISTRI | - Opcode::VPCMPISTRM | - Opcode::VPERM2F128 | - Opcode::VPERM2I128 | - Opcode::VPERMD | - Opcode::VPERMILPD | - Opcode::VPERMILPS | - Opcode::VPERMPD | - Opcode::VPERMPS | - Opcode::VPERMQ | - Opcode::VPEXTRB | - Opcode::VPEXTRD | - Opcode::VPEXTRQ | - Opcode::VPEXTRW | - Opcode::VPGATHERDD | - Opcode::VPGATHERDQ | - Opcode::VPGATHERQD | - Opcode::VPGATHERQQ | - Opcode::VPHADDD | - Opcode::VPHADDSW | - Opcode::VPHADDW | - Opcode::VPMADDUBSW | - Opcode::VPHMINPOSUW | - Opcode::VPHSUBD | - Opcode::VPHSUBSW | - Opcode::VPHSUBW | - Opcode::VPINSRB | - Opcode::VPINSRD | - Opcode::VPINSRQ | - Opcode::VPINSRW | - Opcode::VPMADDWD | - Opcode::VPMASKMOVD | - Opcode::VPMASKMOVQ | - Opcode::VPMAXSB | - Opcode::VPMAXSD | - Opcode::VPMAXSW | - Opcode::VPMAXUB | - Opcode::VPMAXUW | - Opcode::VPMAXUD | - Opcode::VPMINSB | - Opcode::VPMINSW | - Opcode::VPMINSD | - Opcode::VPMINUB | - Opcode::VPMINUW | - Opcode::VPMINUD | - Opcode::VPMOVMSKB | - Opcode::VPMOVSXBD | - Opcode::VPMOVSXBQ | - Opcode::VPMOVSXBW | - Opcode::VPMOVSXDQ | - Opcode::VPMOVSXWD | - Opcode::VPMOVSXWQ | - Opcode::VPMOVZXBD | - Opcode::VPMOVZXBQ | - Opcode::VPMOVZXBW | - Opcode::VPMOVZXDQ | - Opcode::VPMOVZXWD | - Opcode::VPMOVZXWQ | - Opcode::VPMULDQ | - Opcode::VPMULHRSW | - Opcode::VPMULHUW | - Opcode::VPMULHW | - Opcode::VPMULLQ | - Opcode::VPMULLD | - Opcode::VPMULLW | - Opcode::VPMULUDQ | - Opcode::VPOR | - Opcode::VPSADBW | - Opcode::VPSHUFB | - Opcode::VPSHUFD | - Opcode::VPSIGNB | - Opcode::VPSIGND | - Opcode::VPSIGNW | - Opcode::VPSLLD | - Opcode::VPSLLDQ | - Opcode::VPSLLQ | - Opcode::VPSLLVD | - Opcode::VPSLLVQ | - Opcode::VPSLLW | - Opcode::VPSRAD | - Opcode::VPSRAVD | - Opcode::VPSRAW | - Opcode::VPSRLD | - Opcode::VPSRLDQ | - Opcode::VPSRLQ | - Opcode::VPSRLVD | - Opcode::VPSRLVQ | - Opcode::VPSRLW | - Opcode::VPSUBB | - Opcode::VPSUBD | - Opcode::VPSUBQ | - Opcode::VPSUBSB | - Opcode::VPSUBSW | - Opcode::VPSUBUSB | - Opcode::VPSUBUSW | - Opcode::VPSUBW | - Opcode::VPTEST | - Opcode::VPUNPCKHBW | - Opcode::VPUNPCKHDQ | - Opcode::VPUNPCKHQDQ | - Opcode::VPUNPCKHWD | - Opcode::VPUNPCKLBW | - Opcode::VPUNPCKLDQ | - Opcode::VPUNPCKLQDQ | - Opcode::VPUNPCKLWD | - Opcode::VPXOR | - Opcode::VRCPPS | - Opcode::VROUNDPD | - Opcode::VROUNDPS | - Opcode::VROUNDSD | - Opcode::VROUNDSS | - Opcode::VRSQRTPS | - Opcode::VRSQRTSS | - Opcode::VRCPSS | - Opcode::VSHUFPD | - Opcode::VSHUFPS | - Opcode::VSQRTPD | - Opcode::VSQRTPS | - Opcode::VSQRTSS | - Opcode::VSQRTSD | - Opcode::VSUBPD | - Opcode::VSUBPS | - Opcode::VSUBSD | - Opcode::VSUBSS | - Opcode::VTESTPD | - Opcode::VTESTPS | - Opcode::VUNPCKHPD | - Opcode::VUNPCKHPS | - Opcode::VUNPCKLPD | - Opcode::VUNPCKLPS | - Opcode::VXORPD | - Opcode::VXORPS | - Opcode::VZEROUPPER | - Opcode::VZEROALL | - Opcode::VLDMXCSR | - Opcode::VSTMXCSR => { - // TODO: check a table for these - if !self.avx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VAESDEC | - Opcode::VAESDECLAST | - Opcode::VAESENC | - Opcode::VAESENCLAST | - Opcode::VAESIMC | - Opcode::VAESKEYGENASSIST => { - // TODO: check a table for these - if !self.avx() || !self.aesni() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::MOVBE => { - if !self.movbe() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::POPCNT => { - /* - * from the intel SDM: - * ``` - * Before an application attempts to use the POPCNT instruction, it must check that - * the processor supports SSE4.2 (if CPUID.01H:ECX.SSE4_2[bit 20] = 1) and POPCNT - * (if CPUID.01H:ECX.POPCNT[bit 23] = 1). - * ``` - */ - if self.intel_quirks() && (self.sse4_2() || self.popcnt()) { - return Ok(()); - } else if !self.popcnt() { - /* - * elsewhere from the amd APM: - * `Instruction Subsets and CPUID Feature Flags` on page 507 indicates that - * popcnt is present when the popcnt bit is reported by cpuid. this seems to be - * the less quirky default, so `intel_quirks` is considered the outlier, and - * before this default. - * */ - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::LZCNT => { - /* - * amd APM, `LZCNT` page 212: - * LZCNT is an Advanced Bit Manipulation (ABM) instruction. Support for the LZCNT - * instruction is indicated by CPUID Fn8000_0001_ECX[ABM] = 1. - * - * meanwhile the intel SDM simply states: - * ``` - * CPUID.EAX=80000001H:ECX.LZCNT[bit 5]: if 1 indicates the processor supports the - * LZCNT instruction. - * ``` - * - * so that's considered the less-quirky (default) case here. - * */ - if self.amd_quirks() && !self.abm() { - return Err(DecodeError::InvalidOpcode); - } else if !self.lzcnt() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::ADCX | - Opcode::ADOX => { - if !self.adx() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VMRUN | - Opcode::VMLOAD | - Opcode::VMSAVE | - Opcode::CLGI | - Opcode::VMMCALL | - Opcode::INVLPGA => { - if !self.svm() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::STGI | - Opcode::SKINIT => { - if !self.svm() || !self.skinit() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::LAHF | - Opcode::SAHF => { - if !self.lahfsahf() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::VCVTPS2PH | - Opcode::VCVTPH2PS => { - /* - * from intel SDM: - * ``` - * 14.4.1 Detection of F16C Instructions Application using float 16 instruction - * must follow a detection sequence similar to AVX to ensure: • The OS has - * enabled YMM state management support, • The processor support AVX as - * indicated by the CPUID feature flag, i.e. CPUID.01H:ECX.AVX[bit 28] = 1. • - * The processor support 16-bit floating-point conversion instructions via a - * CPUID feature flag (CPUID.01H:ECX.F16C[bit 29] = 1). - * ``` - * - * TODO: only the VEX-coded variant of this instruction should be gated on `f16c`. - * the EVEX-coded variant should be gated on `avx512f` or `avx512vl` if not - * EVEX.512-coded. - */ - if !self.avx() || !self.f16c() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::RDRAND => { - if !self.rdrand() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::RDSEED => { - if !self.rdseed() { - return Err(DecodeError::InvalidOpcode); - } - } - Opcode::MONITORX | Opcode::MWAITX | // these are gated on the `monitorx` and `mwaitx` cpuid bits, but are AMD-only. - Opcode::CLZERO | Opcode::RDPRU => { // again, gated on specific cpuid bits, but AMD-only. - if !self.amd_quirks() { - return Err(DecodeError::InvalidOpcode); - } - } - other => { - if !self.bmi1() { - if BMI1.contains(&other) { - return Err(DecodeError::InvalidOpcode); - } - } - if !self.bmi2() { - if BMI2.contains(&other) { - return Err(DecodeError::InvalidOpcode); - } - } - } - } - Ok(()) - } } impl Default for InstDecoder { @@ -4116,7 +1963,7 @@ impl Decoder for InstDecoder { } if self != &InstDecoder::default() { - self.revise_instruction(&mut instr)?; + crate::generated::real_mode::revise_instruction(self, &mut instr)?; } Ok(instr) @@ -4141,7 +1988,7 @@ impl AnnotatingDecoder for InstDecoder { } if self != &InstDecoder::default() { - self.revise_instruction(instr)?; + crate::generated::real_mode::revise_instruction(self, instr)?; } Ok(()) @@ -7680,7 +5527,7 @@ fn unlikely_operands< vex::three_byte_vex(words, modrm, instruction, sink)?; if decoder != &InstDecoder::default() { - decoder.revise_instruction(instruction)?; + crate::generated::real_mode::revise_instruction(decoder, instruction)?; } return Ok(()); } @@ -7713,7 +5560,7 @@ fn unlikely_operands< vex::two_byte_vex(words, modrm, instruction, sink)?; if decoder != &InstDecoder::default() { - decoder.revise_instruction(instruction)?; + crate::generated::real_mode::revise_instruction(decoder, instruction)?; } return Ok(()); } -- cgit v1.1