diff options
-rw-r--r-- | data/generate_opcode.py | 318 | ||||
-rw-r--r-- | data/x86_64.json | 3426 | ||||
-rw-r--r-- | src/generated/imp.rs | 7234 | ||||
-rw-r--r-- | src/generated/mod.rs | 15 | ||||
-rw-r--r-- | src/generated/opcode.rs | 7186 | ||||
-rw-r--r-- | src/lib.rs | 1 | ||||
-rw-r--r-- | src/long_mode/display.rs | 1468 | ||||
-rw-r--r-- | src/long_mode/mod.rs | 2150 | ||||
-rw-r--r-- | src/protected_mode/display.rs | 1478 | ||||
-rw-r--r-- | src/protected_mode/mod.rs | 2165 | ||||
-rw-r--r-- | src/real_mode/display.rs | 1478 | ||||
-rw-r--r-- | src/real_mode/mod.rs | 2165 |
12 files changed, 18219 insertions, 10865 deletions
diff --git a/data/generate_opcode.py b/data/generate_opcode.py new file mode 100644 index 0000000..e02785d --- /dev/null +++ b/data/generate_opcode.py @@ -0,0 +1,318 @@ +import json + +isa_data = json.loads(open("./x86_64.json").read()) + +class IsaData: + def __init__(self, data): + isa_extensions = isa_data['sets'] + microarchitectures = isa_data['uarch'] + + loaded_exts = {} + for ext in isa_extensions: + loaded_exts[ext['name']] = ext + + loaded_uarches = {} + for arch in microarchitectures: + loaded_uarches[arch['name']] = arch + + self.exts = loaded_exts + self.uarches = loaded_uarches + self.referenced_sets = set([]) + + def compile_uarch(self, arch): + uarch = self.uarches[arch] + sets = self.uarch_sets(arch) + + out = { + "name": uarch['name'], + "vendor": uarch['vendor'], + "extensions": list(sets), + "instructions": list(self.sets2instructions(sets)) + } + + return out + + def uarch_sets(self, arch): + sets = set([]) + uarch = self.uarches[arch] + + for item in uarch['sets']: + if item[0] == '/': + continue + elif item[0] == '+': + sets |= self.uarch_sets(item[1:]) + else: + sets.add(item) + + sets = self.resolve_sets(sets) + + self.referenced_sets |= sets + return sets + + def unused_extensions(self): + all_sets = set(self.exts.keys()) + return all_sets - self.referenced_sets + + def used_extensions(self): + return self.referenced_sets + + def sets2instructions(self, sets): + instructions = set([]) + for ext in sets: + ext = self.exts[ext] + for item in ext['new']: + if item[0] != '+': + instructions.add(item) + return instructions + + def resolve_sets(self, sets): + resolved_sets = set(list(sets)) + self.referenced_sets |= resolved_sets + + for ext in sets: + ext = self.exts[ext] + for item in ext['new']: + if item[0] == '/': + continue + elif item[0] == '+': + new_sets = self.resolve_sets(set([item[1:]])) + self.referenced_sets |= new_sets + resolved_sets |= new_sets + + return resolved_sets + +isa_data = IsaData(isa_data) + +for (arch, data) in isa_data.uarches.items(): + arch = isa_data.compile_uarch(arch) +# print("x: {}".format(json.dumps(arch))) + +print("unused sets: {}".format(json.dumps(list(isa_data.unused_extensions())))) +print("used sets: {}".format(json.dumps(list(isa_data.used_extensions())))) + +ROOTS = ["real_mode", "protected_mode", "long_mode", "x86_generic"] + +ALL_INSTRUCTIONS = set([]) +INSTRUCTION_NUMS = {} + +for root in ROOTS: + arch = isa_data.compile_uarch(root) + print("name: {}, {} instructions".format(arch['name'], len(arch['instructions']))) + ALL_INSTRUCTIONS |= set(arch['instructions']) + +print("opcode enum to follow...") + +class Output: + def __init__(self, f): + self.indentation = 0 + self.out = f + self.should_indent = False + + def begin_block(self, content): + self.write(content) + self.write(" {") + self.newline() + self.indent() + + def end_block(self): + self.outdent() + self.write("}") + self.newline() + + def indent(self): + self.indentation += 1 + + def outdent(self): + self.indentation -= 1 + + def write(self, content): + if self.should_indent: + self.out.write(" " * self.indentation) + self.should_indent = False + self.out.write(content) + + def newline(self): + self.out.write("\n") + self.should_indent = True + + def comment(self, content): + if not self.should_indent: + # we've written something on this line. add a space to be reader-friendly. + self.out.write(" ") + self.write("// ") + self.writeline(content) + + def writeline(self, content): + self.write(content) + self.newline() + + def close(self): + self.out.close() + +OPCODE_REPR = "u16" +OPCODE_ANNOTATIONS = [ + "#[allow(non_camel_case_types)]", + "#[derive(Copy, Clone, Debug, Eq, PartialEq)]", + "#[non_exhaustive]", + "#[repr({})]".format(OPCODE_REPR) +] + +f = open("../src/generated/mod.rs", "w") +f = Output(f) +f.writeline("pub(crate) mod opcode;") +f.writeline("pub(crate) mod imp;") +f.newline() + +for root in ROOTS: + if root == "x86_generic": + continue + f.begin_block("pub(crate) mod {}".format(root)) + f.writeline("pub(crate) use super::opcode::{}::Opcode as Opcode;".format(root)) + f.writeline("pub(crate) use super::imp::{}::revise_instruction as revise_instruction;".format(root)) + f.end_block() + +f = open("../src/generated/opcode.rs", "w") +f = Output(f) +for annotation in OPCODE_ANNOTATIONS: + f.writeline(annotation) +f.begin_block("pub enum Opcode") + +insts = list(ALL_INSTRUCTIONS) +insts.sort() +for (i, inst) in enumerate(insts): + INSTRUCTION_NUMS[inst] = i + if inst == "invalid": + f.writeline("Invalid,") + else: + f.writeline("{},".format(str(inst).upper())) +f.end_block() + +f.newline() + +f.writeline("pub(crate) const MNEMONICS: &'static [&'static str] = &[") +f.indent() +for (_i, inst) in enumerate(insts): + f.writeline('"{}",'.format(inst.lower())) +f.outdent() +f.writeline("];") +f.newline() + +for root in ROOTS: + if root == "x86_generic": + continue + f.begin_block("pub(crate) mod {}".format(root)) + + for annotation in OPCODE_ANNOTATIONS: + f.writeline(annotation) + f.begin_block("pub enum Opcode") + arch = isa_data.compile_uarch(root) + insts = arch['instructions'] + insts.sort() + for inst in insts: + if inst == "invalid": + f.writeline("Invalid = super::Opcode::Invalid as {},".format(OPCODE_REPR)) + else: + f.writeline("{} = super::Opcode::{} as {},".format(str(inst).upper(), str(inst).upper(), OPCODE_REPR)) + f.end_block() + f.end_block() + + f.newline() + +f = open("../src/generated/imp.rs", "w") +f = Output(f) + +# f.writeline("fn main() {}\n") + +# f.comment("should be `{}::DecodeError` but i want to compile this on its own while bootstrapping") + +# f.writeline('#[path="/toy/yaxpeax/arch/x86/src/{}/mod.rs"]'.format(root)) +# f.writeline("mod structs;") +# f.writeline("use structs::{InstDecoder, Instruction};") + +# f.begin_block("enum DecodeError") +# f.writeline("InvalidOpcode,") +# f.end_block() + +# f.newline() + + +for root in ROOTS: + if root == "x86_generic": + continue + arch = isa_data.compile_uarch(root) + + f.begin_block("pub(crate) mod {}".format(root)) + f.writeline("use crate::generated::{}::Opcode;".format(root)) + f.writeline("use crate::{}::{{InstDecoder, Instruction, DecodeError}};".format(root)) + + f.begin_block("impl InstDecoder") + for ext in arch['extensions']: + f.begin_block("fn feature_{}(&self) -> bool".format(ext)) + f.writeline("true") + f.end_block() + f.end_block() + + f.begin_block("pub(crate) fn revise_instruction(decoder: &InstDecoder, inst: &mut Instruction) -> Result<(), DecodeError>") + + f.begin_block("if inst.prefixes.evex().is_some()") + f.begin_block("if !decoder.avx512()") + f.writeline("return Err(DecodeError::InvalidOpcode);") + f.outdent() + f.writeline("} else {") + f.indent() + f.writeline("return Ok(());") + f.end_block() + f.end_block() + + f.newline() + + f.comment("for some instructions (tzcnt), not having an extension means the instruction is") + f.comment("interpreted as another, rather than being simply rejected.") + f.comment("we might still reject the alternate instruction later, if the extension adding *it*") + f.comment("is also not supported.") + f.begin_block("if inst.opcode == Opcode::TZCNT") + f.begin_block("if !decoder.bmi1()") + f.comment("tzcnt is only supported if bmi1 is enabled. without bmi1, this decodes as bsf.") + f.writeline("inst.opcode = Opcode::BSF;") + f.end_block() + f.end_block() + + f.newline() + + f.begin_block("match inst.opcode") + f.comment("we'll never be rejecting the instruction `Invalid`") + f.writeline("Opcode::Invalid => {}") + for ext in arch['extensions']: + ext_data = isa_data.exts[ext]['new'] + suffix_needed = False + any_entries = False + for (i, inst) in enumerate(ext_data): + if inst[0] == '+': + continue + + # special-cased `invalid` above; it's always present. + if inst == "invalid": + continue + + if suffix_needed: + f.writeline("|") + + f.write("Opcode::{} ".format(inst.upper())) + suffix_needed = True + any_entries = True + if not any_entries: + print("no entries for ext {}".format(ext)) + continue + f.begin_block("=>") + f.begin_block("if !decoder.feature_{}()".format(ext)) + f.writeline("return Err(DecodeError::InvalidOpcode);\n") + f.end_block() + f.end_block() + f.end_block() + f.writeline("Ok(())") + f.end_block() + f.end_block() + f.newline() + +f.close() + diff --git a/data/x86_64.json b/data/x86_64.json new file mode 100644 index 0000000..f11a297 --- /dev/null +++ b/data/x86_64.json @@ -0,0 +1,3426 @@ +{ + "sets": [ + { + "name": "8086_bcd", + "new": [ + "aaa", + "aad", + "aam", + "aas", + "daa", + "das" + ], + "extended": [ + ] + }, + { + "name": "8086", + "new": [ + "invalid", + "cmc", + "clc", + "stc", + "cli", + "sti", + "cld", + "std", + "add", + "or", + "adc", + "sbb", + "and", + "xor", + "sub", + "cmp", + "sar", + "sal", + "shr", + "shl", + "rcr", + "rcl", + "ror", + "rol", + "inc", + "dec", + "hlt", + "call", + "callf", + "jmp", + "jmpf", + "push", + "pop", + "lea", + "nop", + "xchg", + "popf", + "int", + "into", + "iret", + "iretd", + "iretq", + "retf", + "enter", + "leave", + "mov", + "return", + "pushf", + "wait", + "cbw", + "cwd", + "cqo", + "lods", + "stos", + "cmps", + "scas", + "movs", + "test", + "in", + "out", + "imul", + "jo", + "jno", + "jb", + "jnb", + "jz", + "jnz", + "ja", + "jna", + "js", + "jns", + "jp", + "jnp", + "jl", + "jge", + "jle", + "jg", + "ud0", + "ud1", + "ud2", + "div", + "idiv", + "mul", + "neg", + "not", + "xlat", + + "loopnz", + "loopz", + "loop", + + "salc" + ], + "extended": [ + ] + }, + { + "name": "80186_pusha", + "new": [ + "pusha", + "popa" + ], + "extended": [ + ] + }, + { + "name": "80186_bound", + "remark": "not included in the base 80186 because that set is reused to extend into 64bit, where bound is not", + "new": [ + "bound" + ], + "extended": [ + ] + }, + { + "name": "80286_arpl", + "remark": "not included in the base 80286 because that set is reused to extend into 64bit, where arpl is not", + "new": [ + "arpl" + ], + "extended": [ + ] + }, + { + "name": "80186", + "new": [ + "enter", + "leave", + "ins", + "outs" + ], + "extended": [ + "push", + "imul", + "shl", + "shr", + "sal", + "sar", + "rol", + "ror", + "rcl", + "rcr" + ] + }, + { + "name": "80286", + "new": [ + "clts", + "lar", + "lgdt", + "lidt", + "lldt", + "lmsw", + "lsl", + "sgdt", + "sidt", + "sldt", + "smsw", + "str", + "ltr", + "verr", + "verw" + ], + "extended": [ + ] + }, + { + "name": "80386", + "new": [ + "bsf", + "bsr", + "bt", + "bts", + "btc", + "btr", + "cdq", + "cwde", + "lds", + "les", + "lfs", + "lgs", + "lss", + "movzx", + "movsx", + "seto", + "setno", + "setb", + "setae", + "setz", + "setnz", + "setbe", + "seta", + "sets", + "setns", + "setp", + "setnp", + "setl", + "setge", + "setle", + "setg", + "shld", + "shrd" + ] + }, + { + "name": "jcxz", + "remark": "for 16-bit modes, jcxz is treated as jcxz (e.g. 16-bit ecx test)", + "new": [ + "jcxz" + ] + }, + { + "name": "jecxz", + "remark": "for 32-bit modes, jcxz is treated as jecxz (e.g. 32-bit ecx test)", + "new": [ + "jecxz" + ] + }, + { + "name": "80486", + "new": [ + "bswap", + "cmpxchg", + "invd", + "wbinvd", + "invlpg", + "xadd" + ] + }, + { + "name": "pentium", + "new": [ + "cpuid", + "wrmsr", + "rdtsc", + "rdmsr", + "rsm", + "cmpxchg8b" + ] + }, + { + "name": "pentium_pro", + "new": [ + "+pentium", + "+cmov", + "ud2" + ] + }, + { + "name": "64bit", + "new": [ + "+8086", + "+80186", + "+80286", + "+80386", + "+80486", + "+3dnow", + "+3dnowprefetch", + "+x87", + "+mmx", + "+sse", + "+sse2", + "+pentium_pro", + "+cmpxchg16b", + + "jrcxz", + "cdqe", + "movzx", + "swapgs", + "movsxd", + "+syscall", + "+fsgsbase" + ], + "extended": [ + ] + }, + { + "name": "extra_instructions", + "remark": "real_mode and long_mode had these instructions in their Opcode enums, but these variants could never be constructed. they were included by accident, and so are ''redundant'' with the extension that added them, but are explicitly noted as an error here.", + "new": [ + "swapgs", + "slhd", + "cdqe", + "movsxd", + "cmpxchg16b" + ] + }, + { + "name": "typo_instructions", + "remark": "these instructions never existed, are just transcription errors.", + "new": [ + "+avx512_f_typo", + "slhd" + ] + }, + { + "name": "x86_64_baseline", + "new": [ + "+80386", + "+cmov", + "+x87", + "+mmx", + "+sse", + "+sse2", + "+sse3", + "+fxsr", + "+64bit", + "+typo_instructions" + ], + "extended": [ + ] + }, + { + "name": "mmx", + "new": [ + "rdpmc", + "punpcklbw", + "punpcklwd", + "punpckldq", + "packsswb", + "pcmpgtb", + "pcmpgtd", + "pcmpgtw", + "packuswb", + "punpckhbw", + "punpckhwd", + "punpckhdq", + "packssdw", + "movd", + "movq", + "pcmpeqb", + "pcmpeqd", + "pcmpeqw", + "psrlw", + "psrld", + "psrlq", + "pmullw", + "psubusb", + "psubusw", + "pand", + "paddusb", + "paddusw", + "pandn", + "psraw", + "psrad", + "pmulhw", + "psubsb", + "psubsw", + "por", + "paddsb", + "paddsw", + "pxor", + "psllw", + "pslld", + "psllq", + "pmaddwd", + "psubb", + "psubw", + "psubd", + "paddb", + "paddw", + "paddd", + "emms" + ], + "extended": [ + ] + }, + { + "name": "sse", + "new": [ + "movss", + "addss", + "subss", + "mulss", + "divss", + "minss", + "maxss", + "sqrtss", + "movups", + "movhlps", + "movlps", + "movhps", + "movlhps", + "unpcklps", + "unpckhps", + "prefetchnta", + "prefetch0", + "prefetch1", + "prefetch2", + "movaps", + "cvtpi2ps", + "cvtsi2ss", + "movntps", + "cvttss2si", + "cvttps2pi", + "cvtss2si", + "cvtps2pi", + "ucomiss", + "comiss", + "sqrtps", + "movmskps", + "rsqrtss", + "rsqrtps", + "rcpps", + "rcpss", + "andps", + "andnps", + "xorps", + "orps", + "addps", + "mulps", + "subps", + "minps", + "divps", + "maxps", + "pshufw", + "ldmxcsr", + "stmxcsr", + "sfence", + "cmpps", + "cmpss", + "pinsrw", + "pextrw", + "shufps", + "pmovmskb", + "pminub", + "pmaxub", + "pavgb", + "pavgw", + "pmulhuw", + "movntq", + "pminsw", + "pmaxsw", + "psadbw", + "maskmovq", + "ldmxcsr", + "stmxcsr" + ], + "extended": [ + ] + }, + { + "name": "sse2", + "new": [ + "movupd", + "psrldq", + "pslldq", + "movsd", + "movlpd", + "unpcklpd", + "unpckhpd", + "movhpd", + "movapd", + "movmskpd", + "cvtpi2pd", + "cvtsi2sd", + "movntpd", + "movnti", + "movntdq", + "cvttpd2pi", + "cvttsd2si", + "cvtpd2pi", + "cvtsd2si", + "ucomisd", + "comisd", + "sqrtpd", + "sqrtsd", + "andpd", + "andnpd", + "orpd", + "xorpd", + "addpd", + "addsd", + "mulsd", + "mulpd", + "cvtps2pd", + "cvtpd2ps", + "cvtss2sd", + "cvtsd2ss", + "cvtps2dq", + "cvtdq2ps", + "cvttps2dq", + "subsd", + "subpd", + "minpd", + "minsd", + "divpd", + "divsd", + "maxpd", + "maxsd", + "punpcklqdq", + "punpckhqdq", + "movdqa", + "movdqu", + "pshufhw", + "pshuflw", + "pshufd", + "lfence", + "mfence", + "clflush", + "cmppd", + "cmpps", + "cmpsd", + "shufpd", + "paddq", + "movq2dq", + "movdq2q", + "cvtpd2dq", + "cvttpd2dq", + "cvtdq2pd", + "pmuludq", + "maskmovdqu", + "psubq" + ], + "extended": [ + "punpcklbw", + "punpcklwd", + "punpckldq", + "packsswb", + "pcmpgtb", + "pcmpgtd", + "pcmpgtw", + "packuswb", + "punpckhbw", + "punpckhwd", + "punpckhdq", + "packssdw", + "movd", + "movq", + "pcmpeqb", + "pcmpeqd", + "pcmpeqw", + "psrlw", + "psrld", + "psrlq", + "pmullw", + "psubusb", + "psubusw", + "pand", + "paddusb", + "paddusw", + "pandn", + "psraw", + "psrad", + "pmulhw", + "psubsb", + "psubsw", + "por", + "paddsb", + "paddsw", + "pxor", + "psllw", + "pslld", + "psllq", + "pmaddwd", + "psubb", + "psubw", + "psubd", + "paddb", + "paddw", + "paddd" + ] + }, + { + "name": "sse3", + "new": [ + "addsubpd", + "addsubps", + "hsubpd", + "haddpd", + "movsldup", + "movshdup", + "movddup", + "haddps", + "hsubps", + "lddqu", + "+monitor" + ], + "extended": [ + ] + }, + { + "name": "ssse3", + "new": [ + "palignr", + "psignw", + "psignd", + "psignb", + "pshufb", + "pmulhrsw", + "pmaddubsw", + "pabsd", + "pabsw", + "pabsb", + "phsubsw", + "phsubw", + "phsubd", + "phaddd", + "phaddsw", + "phaddw" + ], + "extended": [ + ] + }, + { + "name": "monitor", + "new": [ + "monitor", + "mwait" + ], + "extended": [ + ] + }, + { + "name": "vmx", + "new": [ + "vmptrld", + "vmptrst", + "vmclear", + "vmread", + "vmwrite", + "vmcall", + "vmlaunch", + "vmresume", + "vmxoff", + "vmxon", + "invept", + "invvpid", + "vmfunc" + ], + "extended": [ + ] + }, + { + "name": "fma3", + "new": [ + "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" + ], + "extended": [ + ] + }, + { + "name": "cmpxchg16b", + "remark": "appears to be present in all x86-64 machines, though it's hard to find data to confirm", + "new": [ + "cmpxchg16b" + ], + "extended": [ + ] + }, + { + "name": "sse4_1", + "new": [ + "phminposuw", + "pmuldq", + "pmulld", + "dpps", + "dppd", + "packusdw", + "pcmpeqq", + "ptest", + "movntdqa", + "roundss", + "roundsd", + "roundps", + "roundpd", + "pmaxsb", + "pmaxsd", + "pmaxuw", + "pmaxud", + "pminsd", + "pminsb", + "pminud", + "pminuw", + "blendw", + "pblendw", + "blendvps", + "blendvpd", + "pblendvb", + "blendps", + "blendpd", + "mpsadbw", + "pmovzxdq", + "pmovsxdq", + "pmovzxbd", + "pmovsxbd", + "pmovzxwq", + "pmovsxwq", + "pmovzxbq", + "pmovsxbq", + "pmovsxwd", + "pmovzxwd", + "pextrq", + "pextrd", + "pextrb", + "pmovsxbw", + "pmovzxbw", + "pinsrq", + "pinsrd", + "pinsrb", + "extractps", + "insertps" + ], + "extended": [ + ] + }, + { + "name": "sse4_2", + "new": [ + "crc32", + "pcmpestri", + "pcmpestrm", + "pcmpistri", + "pcmpistrm", + "pcmpgtq" + ], + "extended": [ + ] + }, + { + "name": "movbe", + "new": [ + "movbe" + ], + "extended": [ + ] + }, + { + "name": "popcnt", + "new": [ + "popcnt" + ], + "extended": [ + ] + }, + { + "name": "aesni", + "new": [ + "aeskeygenassist", + "aesimc", + "aesenc", + "aesenclast", + "aesdec", + "aesdeclast" + ], + "extended": [ + ] + }, + { + "name": "sgx", + "new": [ + "encls", + "enclu", + "enclv" + ], + "extended": [ + ] + }, + { + "name": "bmi1", + "new": [ + "andn", + "bextr", + "blsi", + "blsmsk", + "blsr", + "tzcnt" + ], + "extended": [ + ] + }, + { + "name": "bmi2", + "new": [ + "bzhi", + "mulx", + "pdep", + "pext", + "rorx", + "sarx", + "shrx", + "shlx" + ], + "extended": [ + ] + }, + { + "name": "avx", + "new": [ + "vlddqu", + "vpaddb", + "vpaddd", + "vpaddq", + "vpaddw", + "vpabsb", + "vpabsw", + "vpabsd", + "vmaxsd", + "vmaxss", + "vminsd", + "vminss", + "vmulsd", + "vmulss", + "vrcpss", + "vpsubusb", + "vpsubusw", + "vxorpd", + "vxorps", + "vpavgb", + "vpavgw", + "vandnpd", + "vandnps", + "vphaddd", + "vphaddsw", + "vphaddw", + "vandpd", + "vandps", + "vpaddsb", + "vpaddsw", + "vpaddusb", + "vpaddusw", + "vphsubd", + "vphsubsw", + "vphsubw", + "vhaddpd", + "vhaddps", + "vhsubpd", + "vhsubps", + "vorpd", + "vorps", + "vpblendvb", + "vpblendw", + "vaddsubpd", + "vaddsubps", + "vrsqrtps", + "vrsqrtss", + "vpalignr", + "vpsubsb", + "vpsubsw", + "vpmulhuw", + "vpmulhw", + "vpmullw", + "vpshufb", + "vpshufhw", + "vpshuflw", + "vphminposuw", + "vrcpps", + "vmpsadbw", + "vpmaddubsw", + "vpmaddwd", + "vmaskmovdqu", + "vpmovmskb", + "vpsadbw", + + "vpslldq", + "vpsrldq", + + "vdppd", + "vdpps", + + "vldmxcsr", + "vstmxcsr", + + "vmovmskpd", + "vmovmskps", + + "vptest", + "vtestpd", + "vtestps", + "vpextrb", + "vpextrw", + "vpextrd", + "vpextrq", + "vpackssdw", + "vpackusdw", + "vpacksswb", + "vpackuswb", + "vblendpd", + "vblendps", + "vblendvpd", + "vblendvps", + "vpmulhrsw", + + "vpand", + "vpandn", + "vpor", + + "vpcmpeqb", + "vpcmpeqd", + "vpcmpeqq", + "vpcmpeqw", + "vpcmpgtb", + "vpcmpgtd", + "vpcmpgtq", + "vpcmpgtw", + + "vpmaxsb", + "vpmaxsd", + "vpmaxsw", + "vpmaxub", + "vpmaxuw", + "vpminsb", + "vpminsw", + "vpminub", + "vpminuw", + "vpmaxud", + "vpminsd", + "vpsignb", + "vpsignw", + "vpsignd", + "vpinsrb", + "vpinsrw", + "vpinsrd", + "vpinsrq", + + "vpmovsxbd", + "vpmovsxbq", + "vpmovsxbw", + "vpmovsxdq", + "vpmovsxwd", + "vpmovsxwq", + "vpmovzxbd", + "vpmovzxbq", + "vpmovzxbw", + "vpmovzxdq", + "vpmovzxwd", + "vpmovzxwq", + + "vpmuldq", + "vpmullq", + "vpmulld", + "vpmuludq", + "vpshufd", + "vshufpd", + "vshufps", + "vsqrtpd", + "vsqrtps", + "vsqrtss", + "vsqrtsd", + "vsubpd", + "vsubps", + "vsubsd", + "vsubss", + "vucomisd", + "vucomiss", + "vroundpd", + "vroundps", + "vroundsd", + "vroundss", + + "vpslld", + "vpsllq", + "vpsllw", + "vpsrad", + "vpsraw", + "vpsrld", + "vpsrlq", + "vpsrlw", + "vpsubb", + "vpsubw", + "vpsubd", + "vpsubq", + "vpxor", + + "vpunpckhbw", + "vpunpckhwd", + "vpunpckhdq", + "vpunpckhqdq", + "vpunpcklbw", + "vpunpcklwd", + "vpunpckldq", + "vpunpcklqdq", + "vunpckhpd", + "vunpckhps", + "vunpcklpd", + "vunpcklps", + "vpcmpestri", + "vpcmpestrm", + "vpcmpistri", + "vpcmpistrm", + + "vbroadcastss", + "vbroadcastsd", + "vbroadcastf128", + "vbroadcastsd", + "vbroadcastss", + "vinsertf128", + "vextractf128", + "vmaskmovpd", + "vmaskmovps", + "vpermilpd", + "vpermilps", + "vperm2f128", + "vzeroupper", + "vzeroall" + ], + "extended": [ + ] + }, + { + "name": "avx2", + "new": [ + "vbroadcasti128", + "vpbroadcastb", + "vpbroadcastw", + "vpbroadcastd", + "vpbroadcastq", + "vinserti128", + "vextracti128", + "vpmaskmovd", + "vpmaskmovq", + "vpermps", + "vpermd", + "vpermpd", + "vpermq", + "vperm2i128", + "vpblendd", + "vpsllvd", + "vpsllvq", + "vpsrlvd", + "vpsrlvq", + "vpsravd" + ], + "extended": [ + "vpaddb", + "vpaddd", + "vpaddq", + "vpaddw", + "vpabsb", + "vpabsw", + "vpabsd", + "vpand", + "vpandn", + "vpor", + "vpavgb", + "vpavgw", + "vphaddd", + "vphaddsw", + "vphaddw", + "vpmulhrsw", + "vpaddsb", + "vpaddsw", + "vpaddusb", + "vpaddusw", + "vphsubd", + "vphsubsw", + "vphsubw", + "vpblendvb", + "vpblendw", + "vpalignr", + "vpsubsb", + "vpsubsw", + "vpmulhuw", + "vpmulhw", + "vpmullw", + "vpshufb", + "vpshufhw", + "vpshuflw", + "vmpsadbw", + "vpmaddubsw", + "vpmaddwd", + "vpmovmskb", + "vpsadbw", + + "vpslldq", + "vpsrldq", + + "vpcmpeqb", + "vpcmpeqd", + "vpcmpeqq", + "vpcmpeqw", + "vpcmpgtb", + "vpcmpgtd", + "vpcmpgtq", + "vpcmpgtw", + "vpmaxsb", + "vpmaxsd", + "vpmaxsw", + "vpmaxud", + "vpminsd", + "vpminud", + + "vpmovsxbd", + "vpmovsxbq", + "vpmovsxbw", + "vpmovsxdq", + "vpmovsxwd", + "vpmovsxwq", + "vpmovzxbd", + "vpmovzxbq", + "vpmovzxbw", + "vpmovzxdq", + "vpmovzxwd", + "vpmovzxwq", + "vpackssdw", + "vpackusdw", + "vpacksswb", + "vpackuswb", + + "vpmuldq", + "vpmullq", + "vpmulld", + "vpmuludq", + "vpshufd", + "vshufpd", + "vshufps", + "vsqrtpd", + "vsqrtps", + "vsubps", + "vsubpd", + + "vpslld", + "vpsllq", + "vpsllw", + "vpsrad", + "vpsraw", + "vpsrld", + "vpsrlq", + "vpsrlw", + "vpsubb", + "vpsubw", + "vpsubd", + "vpsubq", + "vpxor", + "vpsignb", + "vpsignd", + "vpsignw", + + "vpunpckhbw", + "vpunpckhwd", + "vpunpckhdq", + "vpunpckhqdq", + "vpunpcklbw", + "vpunpcklwd", + "vpunpckldq", + "vpunpcklqdq", + "vunpckhpd", + "vunpckhps", + "vunpcklpd", + "vunpcklps", + + "vbroadcastss", + "vbroadcastsd", + "vbroadcastsd", + "vbroadcastss" + ] + }, + { + "name": "invpcid", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "invlpgb", + "new": [ + "invlpgb", + "tlbsync" + ], + "extended": [ + ] + }, + { + "name": "mpx", + "new": [ + "bndmk", + "bndcl", + "bndcu", + "bndcn", + "bndmov", + "bndldx", + "bndstx" + ], + "extended": [ + ] + }, + { + "name": "avx512_f_typo", + "remark": "these instructions never existed, are just transcription errors.", + "new": [ + "vprorrd", + "vprorrq" + ] + }, + { + "name": "vpclmulqdq", + "new": [ + "vpclmulqdq" + ] + }, + { + "name": "avx_unimplemented", + "remark": "these avx instructions were missed when implementing the various avx* extensions", + "new": [ + "vpmaxub", + "vpmaxub" + ] + }, + { + "name": "avx512_f__vl_unimplemented", + "remark": "these avx512f instructions were missed when implementing avx512", + "new": [ + "vscatterdps", + "vscatterdpd", + "vscatterqps", + "vscatterqpd" + ] + }, + { + "name": "avx512bw_unimplemented", + "remark": "these avx512bw instructions were missed when implementing avx512", + "new": [ + "vpmovq2m" + ] + }, + { + "name": "invpcid_unimplemented", + "new": [ + "invvpid" + ] + }, + + { + "name": "avx512_f_typo", + "new": [ + "vprorrd", + "vprorrq" + ] + }, + + { + "name": "avx512_f", + "new": [ + "+avx512_f__vl_unimplemented", + "vcvtqq2pd", + "vcvtqq2ps", + "vcvtusi2usd", + "vcvtusi2uss", + "vextractf32x4", + "vextractf64x4", + "vextracti32x4", + "vextracti64x4", + "vfixupimmsd", + "vfixupimmss", + "vinserti64x4", + "vmovdqa32", + "vmovdqa64", + "vmovdqu32", + "vmovdqu64", + "vpcompressq", + "vpcompressd", + "vscaledpd", + "vscaledps", + "vscaledsd", + "vscaledss", + "vscatterdd", + "vscatterdq", + "vscatterqd", + "vscatterqq", + + "vaddpd", + "vaddps", + "vcmppd", + "vcmpps", + "vcvtdq2pd", + "vcvtdq2ps", + "vcvtpd2dq", + "vcvtpd2ps", + "vcvtps2dq", + "vcvtps2pd", + "vcvttpd2dq", + "vcvttps2dq", + "vdivpd", + "vdivps", + "vmaxpd", + "vmaxps", + "vminpd", + "vminps", + "vmovapd", + "vmovaps", + "vmovddup", + "vmovdqa", + "vmovdqu", + "vmovntdqa", + "vmovntdq", + "vmovntpd", + "vmovntps", + "vmovshdup", + "vmovsldup", + "vmovupd", + "vmovups", + "vmulpd", + "vmulps", + "vpandd", + "vpandq", + "vpandnd", + "vpandnq", + "vpcmpeqd", + "vpcmpeqq", + "vpcmpgtd", + "vpcmpgtq", + "vpmaxsd", + "vpmaxsq", + "vpmaxud", + "vpmaxuq", + "vpminsd", + "vpminsq", + "vpminud", + "vpminuq", + "vpcmpd", + "vpcmpq", + "vpcmpud", + "vpcmpuq", + + "vpord", + "vporq", + "vpxord", + "vpxorq", + + "vpslld", + "vpsllq", + "vpsllw", + "vpsrad", + "vpsraq", + "valignd", + "valignq", + "vblendmpd", + "vblendmps", + "vprold", + "vprolq", + "vprolvd", + "vprolvq", + "vprord", + "vprorq", + "vprorvd", + "vprorvq", + + "vpunpckhdq", + "vpunpckhqdq", + "vpunpckldq", + "vpunpcklqdq", + "vunpckhpd", + "vunpckhps", + "vunpcklpd", + "vunpcklps", + + "vbroadcastf32x4", + "vbroadcastf64x4", + "vbroadcasti64x4", + "vbroadcasti32x4", + "vinsertf32x4", + "vinserti32x4", + "vshuff32x4", + "vshuff64x2", + "vshufi32x4", + "vshufi64x2", + "vcompressd", + "vcompressq", + "vcompresspd", + "vcompressps", + "vexpandpd", + "vexpandps", + "vcvtpd2udq", + "vcvtps2udq", + "vcvtudq2pd", + "vcvtudq2ps", + "vcvttpd2udq", + "vcvttps2udq", + "vfixupimmpd", + "vfixupimmps", + "vcvtph2ps", + "vcvtps2ph", + + "vfmadd132pd", + "vfmadd132ps", + "vfmadd213pd", + "vfmadd213ps", + "vfmadd231pd", + "vfmadd231ps", + "vfmaddsub132pd", + "vfmaddsub132ps", + "vfmaddsub213pd", + "vfmaddsub213ps", + "vfmaddsub231pd", + "vfmaddsub231ps", + "vfmsub132pd", + "vfmsub132ps", + "vfmsub213pd", + "vfmsub213ps", + "vfmsub231pd", + "vfmsub231ps", + "vfmsubadd132pd", + "vfmsubadd132ps", + "vfmsubadd213pd", + "vfmsubadd213ps", + "vfmsubadd231pd", + "vfmsubadd231ps", + "vfnmadd132pd", + "vfnmadd132ps", + "vfnmadd213pd", + "vfnmadd213ps", + "vfnmadd231pd", + "vfnmadd231ps", + "vfnmsub132pd", + "vfnmsub132ps", + "vfnmsub213pd", + "vfnmsub213ps", + "vfnmsub231pd", + "vfnmsub231ps", + + "vscatterdps", + "vscatterdpd", + "vscatterqps", + "vscatterqpd", + "vgatherdpd", + "vgatherdps", + "vgatherqpd", + "vgatherqps", + "vgetexppd", + "vgetexpps", + "vgetmantpd", + "vgetmantps", + "vpblendmd", + "vpblendmq", + + "vpermd", + "vpermq", + "vpermi2d", + "vpermi2q", + "vpermi2pd", + "vpermi2ps", + "vpermt2d", + "vpermt2q", + "vpermt2pd", + "vpermt2ps", + "vpexpandd", + "vpexpandq", + "vpgatherdd", + "vpgatherdq", + "vpgatherqd", + "vpgatherqq", + "vpscatterdd", + "vpscatterdq", + "vpscatterqd", + "vpscatterqq", + "vpmovdb", + "vpmovsdb", + "vpmovusdb", + "vpmovdw", + "vpmovsdw", + "vpmovusdw", + "vpmovqb", + "vpmovsqb", + "vpmovusqb", + "vpmovqd", + "vpmovsqd", + "vpmovusqd", + "vpmovqw", + "vpmovsqw", + "vpmovusqw", + + "vpsravq", + "vpternlogd", + "vpternlogq", + "vptestmd", + "vptestmq", + "vptestnmd", + "vptestnmq", + "vrcp14pd", + "vrcp14ps", + "vrndscalepd", + "vrndscaleps", + "vrsqrt14pd", + "vrsqrt14ps", + "vscalefps", + "vscalefpd", + "vpabsq", + + "vaddsd", + "vaddss", + "vcmpsd", + "vcmpss", + "vcomisd", + "vcomiss", + "vcvtsd2si", + "vcvtsd2ss", + "vcvtsi2ss", + "vcvtsi2sd", + "vcvtss2sd", + "vcvtss2si", + "vcvttss2si", + "vcvttsd2si", + "vdivsd", + "vdivss", + "vextractps", + "vinsertps", + "vgetmantsd", + "vgetmantss", + + "vmovd", + "vmovq", + "vmovhlps", + "vmovhpd", + "vmovhps", + "vmovlhps", + "vmovlpd", + "vmovlps", + "vmovss", + "vmovsd", + "vsqrtss", + "vsqrtsd", + "vsubsd", + "vsubss", + "vucomisd", + "vucomiss", + "vrcp14sd", + "vrcp14ss", + "vrndscalesd", + "vrndscaless", + "vrsqrt14sd", + "vrsqrt14ss", + "vscalefss", + "vscalefsd", + + "vinsertf64x4", + + "vcvtusi2sd", + "vcvtusi2ss", + "vcvtsd2usi", + "vcvtss2usi", + "vcvttsd2usi", + "vcvttss2usi", + + "kandw", + "kandnw", + "kmovw", + "knotw", + "korw", + "kortestw", + "kshiftlw", + "kshiftrw", + "kunpckbw", + "kxnorw", + "kxorw" + ], + "extended": [ + "vpabsd", + "vpaddd", + "vmaxsd", + "vmaxss", + "vminsd", + "vminss", + "vmulsd", + "vmulss", + + "vfmadd213sd", + "vfmadd213ss", + "vfmadd132sd", + "vfmadd132ss", + "vfmadd231sd", + "vfmadd231ss", + "vfmsub132sd", + "vfmsub132ss", + "vfmsub213sd", + "vfmsub213ss", + "vfmsub231sd", + "vfmsub231ss", + "vfnmsub132sd", + "vfnmsub132ss", + "vfnmsub213sd", + "vfnmsub213ss", + "vfnmsub231sd", + "vfnmsub231ss", + "vfnmadd132sd", + "vfnmadd132ss", + "vfnmadd213sd", + "vfnmadd213ss", + "vfnmadd231sd", + "vfnmadd231ss", + + "vpmovsxbd", + "vpmovsxbq", + "vpmovsxdq", + "vpmovsxwd", + "vpmovsxwq", + "vpmovzxbd", + "vpmovzxbq", + "vpmovzxdq", + "vpmovzxwd", + "vpmovzxwq", + + "vpmuldq", + "vpmulld", + "vpmuludq", + "vpshufd", + "vshufpd", + "vshufps", + "vsqrtpd", + "vsqrtps", + + "vpslld", + "vpsllq", + "vpsrad", + "vpsrld", + "vpsrlq", + "vpsubd", + "vpsubq", + "vsubpd", + "vsubps", + + "vpbroadcastd", + "vpbroadcastq", + "vpermilpd", + "vpermilps", + "vpermpd", + "vpermps", + "vpsllvd", + "vpsllvq", + "vpsravd", + "vpsrlvd", + "vpsrlvq" + ] + }, + { + "name": "avx512_dq", + "new": [ + "kandb", + "kandnb", + "kaddb", + "ktestb", + "kaddw", + "ktestw", + "kmovb", + "knotb", + "korb", + "kortestb", + "kshiftlb", + "kshiftrb", + "kxnorb", + "kxorb", + "vbroadcastf32x2", + "vbroadcastf64x2", + "vbroadcastf32x8", + "vbroadcasti32x8", + "vbroadcasti64x2", + "vbroadcasti32x2", + "vextractf32x8", + "vextracti32x8", + "vgetexpsd", + "vgetexpss", + "vxorpd", + "vxorps", + "vpextrd", + "vpextrq", + "vpinsrd", + "vpinsrq", + "vandnpd", + "vandnps", + "vandpd", + "vandps", + "vorpd", + "vorps", + "vcvttpd2qq", + "vcvtpd2qq", + "vcvttpd2uqq", + "vcvtpd2uqq", + "vcvttps2qq", + "vcvtps2qq", + "vcvttps2uqq", + "vcvtps2uqq", + "vcvtuqq2pd", + "vcvtuqq2ps", + "vextractf64x2", + "vextracti64x2", + "vfpclasspd", + "vfpclassps", + "vfpclasssd", + "vfpclassss", + "vinsertf64x2", + "vinsertf32x8", + "vinserti32x8", + "vinserti64x2", + "vpmovm2d", + "vpmovm2q", + "vpmovb2d", + "vpmovq2m", + "vrangepd", + "vrangeps", + "vrangesd", + "vrangess", + "vreducepd", + "vreduceps", + "vreducesd", + "vreducess" + ], + "extended": [ + "vpaddq", + "vpmullq" + ] + }, + { + "name": "rdseed", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "adx", + "new": [ + "adcx", + "adox" + ], + "extended": [ + ] + }, + { + "name": "avx512_ifma", + "new": [ + "vpmadd52huq", + "vpmadd52luq" + ], + "extended": [ + ] + }, + { + "name": "pcommit", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "avx512_pf", + "new": [ + "vgatherpf0dpd", + "vgatherpf0dps", + "vgatherpf0qpd", + "vgatherpf0qps", + "vgatherpf1dpd", + "vgatherpf1dps", + "vgatherpf1qpd", + "vgatherpf1qps", + "vscatterpf0dpd", + "vscatterpf0dps", + "vscatterpf0qpd", + "vscatterpf0qps", + "vscatterpf1dpd", + "vscatterpf1dps", + "vscatterpf1qpd", + "vscatterpf1qps" + ], + "extended": [ + ] + }, + { + "name": "avx512_er", + "new": [ + "vexp2pd", + "vexp2ps", + "vexp2sd", + "vexp2ss", + "vrcp28pd", + "vrcp28ps", + "vrcp28sd", + "vrcp28ss", + "vrsqrt28pd", + "vrsqrt28ps", + "vrsqrt28sd", + "vrsqrt28ss" + ], + "extended": [ + ] + }, + { + "name": "avx512_cd", + "new": [ + "vpbroadcastmw2d", + "vpbroadcastmb2q", + "vpbroadcastm", + "vpconflictd", + "vpconflictq", + "vplzcntd", + "vplzcntq" + ], + "extended": [ + ] + }, + { + "name": "sha", + "new": [ + "sha1rnds4", + "sha1nexte", + "sha1msg1", + "sha1msg2", + "sha256rnds2", + "sha256msg1", + "sha256msg2" + ], + "extended": [ + ] + }, + { + "name": "avx512_bw", + "new": [ + "+avx512bw_unimplemented", + "kandq", + "kandd", + "kandnq", + "kandnd", + "kmovd", + "kmovq", + "knotd", + "knotq", + "kord", + "korq", + "kaddd", + "ktestd", + "kaddq", + "ktestq", + "kortestd", + "kortestq", + "kshiftld", + "kshiftrd", + "kshiftlq", + "kshiftrq", + "kunpckwd", + "kunpckdq", + "kxnord", + "kxnorq", + "kxord", + "kxorq", + "vpcmpeqb", + "vpcmpeqw", + "vpcmpgtb", + "vpcmpgtw", + "vpsubusb", + "vpsubusw", + "vpermw", + "vpermi2w", + "vpermt2w", + "vpsllvw", + "vpsravw", + "vpsrlvw", + "vpextrb", + "vpextrw", + "vpinsrb", + "vpinsrw", + "vpmulhuw", + "vpmulhrsw", + "vpaddsb", + "vpaddsw", + "vpaddusb", + "vpaddusw", + "vpalignr", + "vpmovd2m", + "vpmovq2m", + "vpmovwb", + "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" + ], + "extended": [ + "vpabsb", + "vpabsw", + + "vpaddb", + "vpaddw", + "vpsubsb", + "vpsubsw", + "vpmaxsb", + "vpmaxsw", + "vpminsb", + "vpminsw", + "vpminub", + "vpminuw", + "vpmaddubsw", + "vpmaddwd", + "vpsadbw", + + "vpslldq", + "vpsrldq", + + "vpmovsxbw", + "vpmovzxbw", + "vpsllw", + "vpsraw", + "vpsrlw", + "vpsubb", + "vpsubw", + + "vpunpckhbw", + "vpunpckhwd", + "vpunpcklbw", + "vpunpcklwd", + "vpbroadcastb", + "vpbroadcastw", + "vpermt2w", + "vpackssdw", + "vpackusdw", + "vpacksswb", + "vpackuswb", + "vpavgb", + "vpavgw", + "vpmulhw", + "vpmullw", + "vpshufb", + "vpshufhw", + "vpshuflw" + ] + }, + { + "name": "avx512_vl", + "remark": "not used for opcode generation, since this only adds new modes to existing instructions", + "new": [ + ], + "extended": [ + "vaddpd", + "vaddps", + "vcmppd", + "vcmpps", + "vcvtdq2pd", + "vcvtdq2ps", + "vcvtpd2dq", + "vcvtpd2ps", + "vcvtps2dq", + "vcvtps2pd", + "vcvttpd2dq", + "vcvttps2dq", + "vdivpd", + "vdivps", + "vmaxpd", + "vmaxps", + "vminpd", + "vminps", + "vmovapd", + "vmovaps", + "vmovddup", + "vmovdqa", + "vmovdqu", + "vmovntdqa", + "vmovntdq", + "vmovntpd", + "vmovntps", + "vmovshdup", + "vmovsldup", + "vmovupd", + "vmovups", + "vmulpd", + "vmulps", + "vpandd", + "vpandq", + "vpandnd", + "vpandnq", + "vpcmpeqd", + "vpcmpeqq", + "vpcmpgtd", + "vpcmpgtq", + "vpmaxsd", + "vpmaxsq", + "vpmaxud", + "vpmaxud", + "vpminsd", + "vpminsq", + "vpminud", + "vpminuq", + "vpcmpd", + "vpcmpq", + "vpcmpud", + "vpcmpuq", + + "vpord", + "vporq", + "vpxord", + "vpxorq", + + "vpslld", + "vpsllq", + "vpsllw", + "vpsrad", + "vpsraq", + "valignd", + "valignq", + "vblendmpd", + "vblendmps", + "vprold", + "vprolq", + "vprolvd", + "vprolvq", + "vprord", + "vprorq", + "vprorvd", + "vprorvq", + + "vpunpckhdq", + "vpunpckhqdq", + "vpunpckldq", + "vpunpcklqdq", + "vunpckhpd", + "vunpckhps", + "vunpcklpd", + "vunpcklps", + + "vbroadcastf32x4", + "vbroadcastf64x4", + "vbroadcasti64x4", + "vbroadcasti32x4", + "vinsertf32x4", + "vinserti32x4", + "vshuff32x4", + "vshuff64x2", + "vshufi32x4", + "vshufi64x2", + "vcompressd", + "vcompressq", + "vcompresspd", + "vcompressps", + "vexpandpd", + "vexpandps", + "vcvtpd2udq", + "vcvtps2udq", + "vcvtudq2pd", + "vcvtudq2ps", + "vcvttpd2udq", + "vcvttps2udq", + "vfixupimmpd", + "vfixupimmps", + "vcvtph2ps", + "vcvtps2ph", + + "vfmadd132pd", + "vfmadd132ps", + "vfmadd213pd", + "vfmadd213ps", + "vfmadd231pd", + "vfmadd231ps", + "vfmaddsub132pd", + "vfmaddsub132ps", + "vfmaddsub213pd", + "vfmaddsub213ps", + "vfmaddsub231pd", + "vfmaddsub231ps", + "vfmsub132pd", + "vfmsub132ps", + "vfmsub213pd", + "vfmsub213ps", + "vfmsub231pd", + "vfmsub231ps", + "vfmsubadd132pd", + "vfmsubadd132ps", + "vfmsubadd213pd", + "vfmsubadd213ps", + "vfmsubadd231pd", + "vfmsubadd231ps", + "vfnmadd132pd", + "vfnmadd132ps", + "vfnmadd213pd", + "vfnmadd213ps", + "vfnmadd231pd", + "vfnmadd231ps", + "vfnmsub132pd", + "vfnmsub132ps", + "vfnmsub213pd", + "vfnmsub213ps", + "vfnmsub231pd", + "vfnmsub231ps", + + "vscatterdps", + "vscatterdpd", + "vscatterqps", + "vscatterqpd", + "vgatherdpd", + "vgatherdps", + "vgatherqpd", + "vgatherqps", + "vgetexppd", + "vgetexpps", + "vgetmantpd", + "vgetmantps", + "vpblendmd", + "vpblendmq", + + "vpermd", + "vpermq", + "vpermi2d", + "vpermi2q", + "vpermi2pd", + "vpermi2ps", + "vpermt2d", + "vpermt2q", + "vpermt2pd", + "vpermt2ps", + "vpexpandd", + "vpexpandq", + "vpgatherdd", + "vpgatherdq", + "vpgatherqd", + "vpgatherqq", + "vpscatterdd", + "vpscatterdq", + "vpscatterqd", + "vpscatterqq", + "vpmovdb", + "vpmovsdb", + "vpmovusdb", + "vpmovdw", + "vpmovsdw", + "vpmovusdw", + "vpmovqb", + "vpmovsqb", + "vpmovusqb", + "vpmovqd", + "vpmovsqd", + "vpmovusqd", + "vpmovqw", + "vpmovsqw", + "vpmovusqw", + + "vpsravq", + "vpternlogd", + "vpternlogq", + "vptestmd", + "vptestmq", + "vptestnmd", + "vptestnmq", + "vrcp14pd", + "vrcp14ps", + "vrndscalepd", + "vrndscaleps", + "vrsqrt14pd", + "vrsqrt14ps", + "vscalefps", + "vscalefpd", + "vpabsq" + ] + }, + { + "name": "prefetchwt1", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "avx512_vbmi", + "new": [ + "vpermt2b", + "vpermb" + ], + "extended": [ + ] + }, + { + "name": "avx512_vbmi2", + "new": [ + "vpcompressb", + "vpcompressw", + "vpshldvw", + "vpshldw", + "vpexpandb", + "vpexpandw", + "vpshrdvw", + "vpshrdw", + "vpshldvq", + "vpshldvd", + "vpshldq", + "vpshldd", + "vpshrdq", + "vpshrdd", + "vpshrdvq", + "vpshrdvd" + ], + "extended": [ + ] + }, + { + "name": "gfni", + "new": [ + "gf2p8affineqb", + "gf2p8affineinvqb", + "gf2p8mulb" + ], + "extended": [ + ] + }, + { + "name": "avx512_gfni", + "new": [ + "vgf2p8affineqb", + "vgf2p8affineinvqb", + "vgf2p8mulb" + ], + "extended": [ + ] + }, + { + "name": "vaes", + "new": [ + "vaesdec", + "vaesdeclast", + "vaesenc", + "vaesenclast", + "vaesimc", + "vaeskeygenassist" + ], + "extended": [ + ] + }, + { + "name": "clmul", + "remark": "this extension is pclmulqdq in a few forms", + "new": [ + "+pclmulqdq" + ], + "extended": [ + ] + }, + { + "name": "pclmulqdq", + "new": [ + "pclmulqdq" + ], + "extended": [ + ] + }, + { + "name": "avx512_vp2intersect", + "new": [ + "vp2intersectd", + "vp2intersectq" + ], + "extended": [ + ] + }, + { + "name": "avx512_vnni", + "new": [ + "vpdpbusds", + "vpdpbusd", + "vpdpwssds", + "vpdpwssd" + ], + "extended": [ + ] + }, + { + "name": "avx512_bitalg", + "new": [ + "vpopcntd", + "vpopcntq", + "vpopcntb", + "vpopcntw", + "vpshufbitqmb", + "vpmultishiftqb" + ], + "extended": [ + ] + }, + { + "name": "avx512_vpopcntdq", + "new": [ + "vpopcntd", + "vpopcntq" + ], + "extended": [ + ] + }, + { + "name": "avx512_4vnniw", + "new": [ + "vp4dpwssds", + "vp4dpwssd" + ], + "extended": [ + ] + }, + { + "name": "avx512_4fmaps", + "new": [ + "v4fnmaddss", + "v4fnmaddps", + "v4fmaddss", + "v4fmaddps" + ], + "extended": [ + ] + }, + { + "name": "avx512_bf16", + "new": [ + "vcvtne2ps2bf16", + "vcvtneps2bf16", + "vdpbf16ps" + ], + "extended": [ + ] + }, + { + "name": "cx8", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "sysenter", + "new": [ + "sysenter", + "sysexit" + ], + "extended": [ + ] + }, + { + "name": "syscall", + "new": [ + "syscall", + "sysret" + ], + "extended": [ + ] + }, + { + "name": "rdtscp", + "new": [ + "rdtscp" + ], + "extended": [ + ] + }, + { + "name": "abm", + "new": [ + "popcnt", + "lzcnt" + ], + "extended": [ + ] + }, + { + "name": "sse4a", + "new": [ + "extrq", + "insertq", + "movntsd", + "movntss" + ], + "extended": [ + ] + }, + { + "name": "3dnowprefetch", + "new": [ + "prefetchw" + ], + "extended": [ + ] + }, + { + "name": "xop", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "skinit", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "tbm", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "svm", + "new": [ + "clgi", + "stgi", + "skinit", + "vmload", + "vmmcall", + "vmsave", + "vmrun", + "invlpga" + ], + "extended": [ + ] + }, + { + "name": "lahfsahf", + "new": [ + "lahf", + "sahf" + ], + "extended": [ + ] + }, + { + "name": "cmov", + "new": [ + "cmova", + "cmovb", + "cmovg", + "cmovge", + "cmovl", + "cmovle", + "cmovna", + "cmovnb", + "cmovno", + "cmovnp", + "cmovns", + "cmovnz", + "cmovo", + "cmovp", + "cmovs", + "cmovz" + ], + "extended": [ + ] + }, + { + "name": "f16c", + "new": [ + "vcvtph2ps", + "vcvtps2ph" + ], + "extended": [ + ] + }, + { + "name": "fma4", + "new": [ + ], + "extended": [ + ] + }, + { + "name": "prefetchw", + "new": [ + "+3dnowprefetch" + ], + "extended": [ + ] + }, + { + "name": "tsx", + "new": [ + "xabort", + "xbegin", + "xend", + "xtest" + ], + "extended": [ + ] + }, + { + "name": "lzcnt", + "new": [ + "lzcnt" + ], + "extended": [ + ] + }, + { + "name": "keylocker", + "new": [ + "aesdec128kl", + "aesdec256kl", + "aesdecwide128kl", + "aesdecwide256kl", + "aesenc128kl", + "aesenc256kl", + "aesencwide128kl", + "aesencwide256kl", + "encodekey128", + "encodekey256", + "loadiwkey" + ], + "extended": [ + ] + }, + { + "name": "cet", + "new": [ + "wruss", + "wrss", + "incssp", + "saveprevssp", + "setssbsy", + "clrssbsy", + "rstorssp", + "endbr64", + "endbr32" + ], + "extended": [ + ] + }, + { + "name": "tdx", + "new": [ + "tdcall", + "seamret", + "seamops", + "seamcall" + ], + "extended": [ + ] + }, + { + "name": "waitpkg", + "new": [ + "tpause", + "umonitor", + "umwait" + ], + "extended": [ + ] + }, + { + "name": "uintr", + "new": [ + "uiret", + "testui", + "clui", + "stui", + "senduipi" + ], + "extended": [ + ] + }, + { + "name": "tsxldtrk", + "new": [ + "xsusldtrk", + "xresldtrk" + ], + "extended": [ + ] + }, + { + "name": "3dnow", + "new": [ + "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", + "+3dnowprefetch" + ], + "extended": [ + ] + }, + { + "name": "enqcmd", + "new": [ + "enqcmd", + "enqcmds" + ], + "extended": [ + ] + }, + { + "name": "invpcid", + "new": [ + "invept", + "invvpid", + "invpcid" + ], + "extended": [ + ] + }, + { + "name": "ptwrite", + "new": [ + "ptwrite" + ], + "extended": [ + ] + }, + { + "name": "x87", + "new": [ + "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" + ], + "extended": [ + ] + }, + { + "name": "snp", + "new": [ + "psmash", + "pvalidate", + "rmpadjust", + "rmpupdate" + ], + "extended": [ + ] + }, + { + "name": "fxsr", + "new": [ + "fxsave", + "fxrstor" + ], + "extended": [ + ] + }, + { + "name": "xsave", + "new": [ + "+xsaveopt", + "xgetbv", + "xrstor", + "xrstors", + "xsave", + "xsavec", + "xsaves", + "xsetbv", + "+xsave64" + ], + "extended": [ + ] + }, + { + "name": "xsave64", + "new": [ + "xrstors64", + "xsavec64", + "xsaves64" + ], + "extended": [ + ] + }, + { + "name": "rdrand", + "new": [ + "rdrand" + ], + "extended": [ + ] + }, + { + "name": "rdseed", + "new": [ + "rdseed" + ], + "extended": [ + ] + }, + { + "name": "xsaveopt", + "new": [ + "xsaveopt" + ], + "extended": [ + ] + }, + { + "name": "smap", + "new": [ + "clac", + "stac" + ], + "extended": [ + ] + }, + { + "name": "rdpid", + "new": [ + "rdpid" + ], + "extended": [ + ] + }, + { + "name": "salc", + "new": [ + "salc" + ], + "extended": [ + ] + }, + { + "name": "clwb", + "new": [ + "clwb" + ], + "extended": [ + ] + }, + { + "name": "clzero", + "new": [ + "clzero" + ], + "extended": [ + ] + }, + { + "name": "pconfig", + "new": [ + "pconfig" + ], + "extended": [ + ] + }, + { + "name": "hreset", + "new": [ + "hreset" + ], + "extended": [ + ] + }, + { + "name": "clflushopt", + "new": [ + "clflushopt" + ], + "extended": [ + ] + }, + { + "name": "pmem", + "new": [ + "+clflushopt", + "+clwb" + ], + "extended": [ + ] + }, + { + "name": "emx", + "new": [ + "monitorx", + "mwaitx", + "+monitor" + ], + "extended": [ + ] + }, + { + "name": "mpk", + "new": [ + "rdpkru", + "wrpkru" + ], + "extended": [ + ] + }, + { + "name": "rdpru", + "new": [ + "rdpru" + ], + "extended": [ + ] + }, + { + "name": "itanium", + "new": [ + "jmpe" + ], + "extended": [ + ] + }, + { + "name": "smx", + "new": [ + "getsec" + ], + "extended": [ + ] + }, + { + "name": "fsgsbase", + "new": [ + "rdfsbase", + "rdgsbase", + "wrfsbase", + "wrgsbase" + ], + "extended": [ + ] + }, + { + "name": "movdir", + "new": [ + "movdiri", + "movdir64b" + ], + "extended": [ + ] + }, + { + "name": "new", + "vendor": "yax", + "remark": "misc instruction sets implementing newer features of x86, such as `syscall`, `skinit`, `svm`, `tsx`, `mpx`, and others", + "new": [ + "+invpcid_unimplemented", + "+invpcid", + "+pconfig", + "+abm", + "+smap", + "+smx", + "+rdpid", + "+rdpru", + "+tsxldtrk", + "+waitpkg", + "+clwb", + "+uintr", + "+mpk", + "+emx", + "+snp", + "+invlpgb", + "+enqcmd", + "+cet", + "+tdx", + "+clflushopt", + "+fxsr", + "+sgx", + "+keylocker", + "+vmx", + "+svm", + "+rdrand", + "+rdseed", + "+ptwrite", + "+clzero", + "+popcnt", + "+movbe", + "+xsave", + "+xsave64", + "+mpx", + "+tsx", + "+movdir", + "+sysenter", + "+syscall", + "+hreset", + "+rdtscp" + ] + }, + { + "name": "simd", + "vendor": "yax", + "remark": "SIMD extensions for x86-family architectures", + "new": [ + "+3dnow", + "+sha", + "+mmx", + "+sse", + "+sse2", + "+sse3", + "+ssse3", + "+sse4a", + "+sse4_1", + "+sse4_2", + "+pclmulqdq", + "+avx", + "+avx2", + "+gfni", + "+fma3", + "+fma4", + "+bmi1", + "+bmi2", + "+aesni", + "+avx_unimplemented", + "+avx512_f", + "+avx512_f_typo", + "+avx512_vnni", + "+avx512_dq", + "+avx512_er", + "+avx512_ifma", + "+avx512_pf", + "+avx512_cd", + "+avx512_bw", + "+avx512_vbmi", + "+avx512_vbmi2", + "+avx512_gfni", + "+avx512_bitalg", + "+avx512_vpopcntdq", + "+avx512_4vnniw", + "+avx512_4fmaps", + "+avx512_bf16", + "+avx512_vp2intersect", + "+vpclmulqdq", + "+vaes" + ] + } + ], + "uarch": [ + { + "name": "k8", + "vendor": "amd", + "sets": [ + "64bit" + ] + }, + { + "name": "k10", + "vendor": "amd", + "sets": [ + "+k8", + "cmov", + "cmpxchg16b", + "svm", + "abm", + "lahfsahf", + "sse3", + "ssse3", + "sse4_1", + "sse4_2", + "sse4a" + ] + }, + { + "name": "bulldozer", + "vendor": "amd", + "sets": [ + "+k10", + "bmi1", + "aesni", + "pclmulqdq", + "f16c", + "avx", + "fma4", + "xop" + ] + }, + { + "name": "piledriver", + "vendor": "amd", + "sets": [ + "+bulldozer", + "tbm", + "fma3", + "fma4" + ] + }, + { + "name": "steamroller", + "vendor": "amd", + "sets": [ + "+bulldozer" + ] + }, + { + "name": "excavator", + "vendor": "amd", + "sets": [ + "+steamroller", + "movbe", + "bmi2", + "rdrand", + "avx", + "xop", + "sha", + "avx2" + ] + }, + { + "name": "zen", + "vendor": "amd", + "sets": [ + "+k10", + "avx", + "avx2", + "bmi1", + "bmi2", + "aesni", + "pclmulqdq", + "f16c", + "movbe", + "rdrand", + "adx", + "sha", + "rdseed", + "fma3", + "xsave", + "clflushopt", + "clzero" + ] + }, + { + "name": "netburst", + "vendor": "intel", + "sets": [ + "64bit", + "cmov", + "cmpxchg16b", + "sse3" + ] + }, + { + "name": "core", + "vendor": "intel", + "sets": [ + "+netburst", + "ssse3" + ] + }, + { + "name": "penryn", + "vendor": "intel", + "sets": [ + "+core", + "sse4_1" + ] + }, + { + "name": "nehalem", + "vendor": "intel", + "sets": [ + "+penryn", + "sse4_2", + "popcnt" + ] + }, + { + "name": "westmere", + "vendor": "intel", + "sets": [ + "+nehalem", + "aesni", + "pclmulqdq" + ] + }, + { + "name": "sandybridge", + "vendor": "intel", + "sets": [ + "+westmere", + "avx" + ] + }, + { + "name": "ivybridge", + "vendor": "intel", + "sets": [ + "+sandybridge", + "f16c", + "rdrand" + ] + }, + { + "name": "haswell", + "vendor": "intel", + "sets": [ + "+ivybridge", + "bmi1", + "bmi2", + "abm", + "fma3", + "avx2" + ] + }, + { + "name": "haswell_ex", + "vendor": "intel", + "sets": [ + "+haswell", + "tsx" + ] + }, + { + "name": "broadwell", + "vendor": "intel", + "sets": [ + "+haswell_ex", + "rdseed", + "prefetchw" + ] + }, + { + "name": "skylake", + "vendor": "intel", + "sets": [ + "+broadwell", + "mpx", + "sgx" + ] + }, + { + "name": "kabylake", + "vendor": "intel", + "sets": [ + "+skylake" + ] + }, + { + "name": "tigerlake", + "vendor": "intel", + "sets": [ + "keylocker" + ] + }, + { + "name": "goldencove", + "vendor": "intel", + "sets": [ + "/cldemote", + "ptwrite", + "hreset", + "avx512_vnni", + "avx512_f", + "/avx512_fp16" + ] + }, + { + "name": "long_mode", + "vendor": "yax", + "remark": "pseudo-architecture describing the sum of all x86_64 instructions on various processors and architectures", + "sets": [ + "+goldencove", + "+tigerlake", + "+kabylake", + "+skylake", + "+broadwell", + "+haswell_ex", + "+haswell", + "+ivybridge", + "+sandybridge", + "+westmere", + "+nehalem", + "+penryn", + "+core", + "+netburst", + "+zen", + "+excavator", + "+steamroller", + "+piledriver", + "+bulldozer", + "+k10", + "+k8", + "x86_64_baseline", + "simd", + "new", + "itanium", + "avx_unimplemented", + "avx512bw_unimplemented", + "invpcid_unimplemented", + "avx512_f__vl_unimplemented", + "typo_instructions" + ] + }, + { + "name": "protected_mode", + "vendor": "yax", + "remark": "pseudo-architecture describing the sum of all x86_32 instructions on various processors and architectures", + "sets": [ + "80186_bound", + "jecxz", + "fsgsbase", + "extra_instructions", + "pentium_pro", + "8086_bcd", + "80186_pusha", + "8086", + "x87", + "80186", + "80286", + "80286_arpl", + "80386", + "80486", + "itanium", + "lahfsahf", + "adx", + "simd", + "new" + ] + }, + { + "name": "real_mode", + "vendor": "yax", + "remark": "pseudo-architecture describing the sum of all x86_16 instructions on various processors and architectures", + "sets": [ + "80186_bound", + "jcxz", + "fsgsbase", + "extra_instructions", + "pentium_pro", + "8086_bcd", + "80186_pusha", + "8086", + "x87", + "80186", + "80286", + "80286_arpl", + "80386", + "80486", + "itanium", + "lahfsahf", + "adx", + "simd", + "new" + ] + }, + { + "name": "x86_generic", + "vendor": "yax", + "remark": "the union of all instructions in any x86 operation mode. processor can execute all these instructions in a single execution mode, but the generalization can be useful for f.ex generic program disassembly", + "sets": [ + "+real_mode", + "+protected_mode", + "+long_mode" + ] + } + ] +} 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, + } +} + @@ -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 <T: fmt::Write, Y: YaxColors> Colorize<T, Y> 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 <T: fmt::Write, Y: YaxColors> Colorize<T, Y> for Opcode { Opcode::VPINSRW | Opcode::VPMASKMOVD | Opcode::VPMASKMOVQ | + Opcode::VCOMPRESSD | + Opcode::VCOMPRESSQ | Opcode::VCOMPRESSPD | Opcode::VCOMPRESSPS | Opcode::VPCOMPRESSQ | @@ -3125,6 +1673,8 @@ impl <T: fmt::Write, Y: YaxColors> Colorize<T, Y> 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<Arch> 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<Arch> 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 <T: fmt::Write, Y: YaxColors> Colorize<T, Y> 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 <T: fmt::Write, Y: YaxColors> Colorize<T, Y> 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<Arch> 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<Arch> 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 <T: fmt::Write, Y: YaxColors> Colorize<T, Y> 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 <T: fmt::Write, Y: YaxColors> Colorize<T, Y> 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<Arch> 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<Arch> 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(()); } |