disasm-x86 0.5.1

disasm x86 library
Documentation
#![allow(dead_code)]
#![allow(unused_variables)]
#![allow(non_camel_case_types)]

use disasm_core::{insn::Insn, utils::zextract};

pub mod opcode {
    use disasm_core::{insn::Opcode, macros::define_opcodes};

    pub const INVALID: Opcode = Opcode::INVALID;

    pub(super) const BASE_OPCODE: u32 = 4096;

    define_opcodes! {
        CMPEQPS             = "cmpeqps",
        CMPLTPS             = "cmpltps",
        CMPLEPS             = "cmpleps",
        CMPUNORDPS          = "cmpunordps",
        CMPNEQPS            = "cmpneqps",
        CMPNLTPS            = "cmpnltps",
        CMPNLEPS            = "cmpnleps",
        CMPORDPS            = "cmpordps",
        CMPEQSS             = "cmpeqss",
        CMPLTSS             = "cmpltss",
        CMPLESS             = "cmpless",
        CMPUNORDSS          = "cmpunordss",
        CMPNEQSS            = "cmpneqss",
        CMPNLTSS            = "cmpnltss",
        CMPNLESS            = "cmpnless",
        CMPORDSS            = "cmpordss",
        CMPEQPD             = "cmpeqpd",
        CMPLTPD             = "cmpltpd",
        CMPLEPD             = "cmplepd",
        CMPUNORDPD          = "cmpunordpd",
        CMPNEQPD            = "cmpneqpd",
        CMPNLTPD            = "cmpnltpd",
        CMPNLEPD            = "cmpnlepd",
        CMPORDPD            = "cmpordpd",
        CMPEQSD             = "cmpeqsd",
        CMPLTSD             = "cmpltsd",
        CMPLESD             = "cmplesd",
        CMPUNORDSD          = "cmpunordsd",
        CMPNEQSD            = "cmpneqsd",
        CMPNLTSD            = "cmpnltsd",
        CMPNLESD            = "cmpnlesd",
        CMPORDSD            = "cmpordsd",

        PCLMULLQLQDQ        = "pclmullqlqdq",
        PCLMULHQLQDQ        = "pclmulhqlqdq",
        PCLMULLQHQDQ        = "pclmullqhqdq",
        PCLMULHQHQDQ        = "pclmulhqhqdq",
        VPCLMULLQLQDQ       = "vpclmullqlqdq",
        VPCLMULHQLQDQ       = "vpclmulhqlqdq",
        VPCLMULLQHQDQ       = "vpclmullqhqdq",
        VPCLMULHQHQDQ       = "vpclmulhqhqdq",

        VCMPEQSS            = "vcmpeqss",
        VCMPLTSS            = "vcmpltss",
        VCMPLESS            = "vcmpless",
        VCMPUNORDSS         = "vcmpunordss",
        VCMPNEQSS           = "vcmpneqss",
        VCMPNLTSS           = "vcmpnltss",
        VCMPNLESS           = "vcmpnless",
        VCMPORDSS           = "vcmpordss",
        VCMPEQ_UQSS         = "vcmpeq_uqss",
        VCMPNGESS           = "vcmpngess",
        VCMPNGTSS           = "vcmpngtss",
        VCMPFALSESS         = "vcmpfalsess",
        VCMPNEQ_OQSS        = "vcmpneq_oqss",
        VCMPGESS            = "vcmpgess",
        VCMPGTSS            = "vcmpgtss",
        VCMPTRUESS          = "vcmptruess",
        VCMPEQ_OSSS         = "vcmpeq_osss",
        VCMPLT_OQSS         = "vcmplt_oqss",
        VCMPLE_OQSS         = "vcmple_oqss",
        VCMPUNORD_SSS       = "vcmpunord_sss",
        VCMPNEQ_USSS        = "vcmpneq_usss",
        VCMPNLT_UQSS        = "vcmpnlt_uqss",
        VCMPNLE_UQSS        = "vcmpnle_uqss",
        VCMPORD_SSS         = "vcmpord_sss",
        VCMPEQ_USSS         = "vcmpeq_usss",
        VCMPNGE_UQSS        = "vcmpnge_uqss",
        VCMPNGT_UQSS        = "vcmpngt_uqss",
        VCMPFALSE_OSSS      = "vcmpfalse_osss",
        VCMPNEQ_OSSS        = "vcmpneq_osss",
        VCMPGE_OQSS         = "vcmpge_oqss",
        VCMPGT_OQSS         = "vcmpgt_oqss",
        VCMPTRUE_USSS       = "vcmptrue_usss",
        VCMPEQSD            = "vcmpeqsd",
        VCMPLTSD            = "vcmpltsd",
        VCMPLESD            = "vcmplesd",
        VCMPUNORDSD         = "vcmpunordsd",
        VCMPNEQSD           = "vcmpneqsd",
        VCMPNLTSD           = "vcmpnltsd",
        VCMPNLESD           = "vcmpnlesd",
        VCMPORDSD           = "vcmpordsd",
        VCMPEQ_UQSD         = "vcmpeq_uqsd",
        VCMPNGESD           = "vcmpngesd",
        VCMPNGTSD           = "vcmpngtsd",
        VCMPFALSESD         = "vcmpfalsesd",
        VCMPNEQ_OQSD        = "vcmpneq_oqsd",
        VCMPGESD            = "vcmpgesd",
        VCMPGTSD            = "vcmpgtsd",
        VCMPTRUESD          = "vcmptruesd",
        VCMPEQ_OSSD         = "vcmpeq_ossd",
        VCMPLT_OQSD         = "vcmplt_oqsd",
        VCMPLE_OQSD         = "vcmple_oqsd",
        VCMPUNORD_SSD       = "vcmpunord_ssd",
        VCMPNEQ_USSD        = "vcmpneq_ussd",
        VCMPNLT_UQSD        = "vcmpnlt_uqsd",
        VCMPNLE_UQSD        = "vcmpnle_uqsd",
        VCMPORD_SSD         = "vcmpord_ssd",
        VCMPEQ_USSD         = "vcmpeq_ussd",
        VCMPNGE_UQSD        = "vcmpnge_uqsd",
        VCMPNGT_UQSD        = "vcmpngt_uqsd",
        VCMPFALSE_OSSD      = "vcmpfalse_ossd",
        VCMPNEQ_OSSD        = "vcmpneq_ossd",
        VCMPGE_OQSD         = "vcmpge_oqsd",
        VCMPGT_OQSD         = "vcmpgt_oqsd",
        VCMPTRUE_USSD       = "vcmptrue_ussd",
        VCMPEQPS            = "vcmpeqps",
        VCMPLTPS            = "vcmpltps",
        VCMPLEPS            = "vcmpleps",
        VCMPUNORDPS         = "vcmpunordps",
        VCMPNEQPS           = "vcmpneqps",
        VCMPNLTPS           = "vcmpnltps",
        VCMPNLEPS           = "vcmpnleps",
        VCMPORDPS           = "vcmpordps",
        VCMPEQ_UQPS         = "vcmpeq_uqps",
        VCMPNGEPS           = "vcmpngeps",
        VCMPNGTPS           = "vcmpngtps",
        VCMPFALSEPS         = "vcmpfalseps",
        VCMPNEQ_OQPS        = "vcmpneq_oqps",
        VCMPGEPS            = "vcmpgeps",
        VCMPGTPS            = "vcmpgtps",
        VCMPTRUEPS          = "vcmptrueps",
        VCMPEQ_OSPS         = "vcmpeq_osps",
        VCMPLT_OQPS         = "vcmplt_oqps",
        VCMPLE_OQPS         = "vcmple_oqps",
        VCMPUNORD_SPS       = "vcmpunord_sps",
        VCMPNEQ_USPS        = "vcmpneq_usps",
        VCMPNLT_UQPS        = "vcmpnlt_uqps",
        VCMPNLE_UQPS        = "vcmpnle_uqps",
        VCMPORD_SPS         = "vcmpord_sps",
        VCMPEQ_USPS         = "vcmpeq_usps",
        VCMPNGE_UQPS        = "vcmpnge_uqps",
        VCMPNGT_UQPS        = "vcmpngt_uqps",
        VCMPFALSE_OSPS      = "vcmpfalse_osps",
        VCMPNEQ_OSPS        = "vcmpneq_osps",
        VCMPGE_OQPS         = "vcmpge_oqps",
        VCMPGT_OQPS         = "vcmpgt_oqps",
        VCMPTRUE_USPS       = "vcmptrue_usps",
        VCMPEQPD            = "vcmpeqpd",
        VCMPLTPD            = "vcmpltpd",
        VCMPLEPD            = "vcmplepd",
        VCMPUNORDPD         = "vcmpunordpd",
        VCMPNEQPD           = "vcmpneqpd",
        VCMPNLTPD           = "vcmpnltpd",
        VCMPNLEPD           = "vcmpnlepd",
        VCMPORDPD           = "vcmpordpd",
        VCMPEQ_UQPD         = "vcmpeq_uqpd",
        VCMPNGEPD           = "vcmpngepd",
        VCMPNGTPD           = "vcmpngtpd",
        VCMPFALSEPD         = "vcmpfalsepd",
        VCMPNEQ_OQPD        = "vcmpneq_oqpd",
        VCMPGEPD            = "vcmpgepd",
        VCMPGTPD            = "vcmpgtpd",
        VCMPTRUEPD          = "vcmptruepd",
        VCMPEQ_OSPD         = "vcmpeq_ospd",
        VCMPLT_OQPD         = "vcmplt_oqpd",
        VCMPLE_OQPD         = "vcmple_oqpd",
        VCMPUNORD_SPD       = "vcmpunord_spd",
        VCMPNEQ_USPD        = "vcmpneq_uspd",
        VCMPNLT_UQPD        = "vcmpnlt_uqpd",
        VCMPNLE_UQPD        = "vcmpnle_uqpd",
        VCMPORD_SPD         = "vcmpord_spd",
        VCMPEQ_USPD         = "vcmpeq_uspd",
        VCMPNGE_UQPD        = "vcmpnge_uqpd",
        VCMPNGT_UQPD        = "vcmpngt_uqpd",
        VCMPFALSE_OSPD      = "vcmpfalse_ospd",
        VCMPNEQ_OSPD        = "vcmpneq_ospd",
        VCMPGE_OQPD         = "vcmpge_oqpd",
        VCMPGT_OQPD         = "vcmpgt_oqpd",
        VCMPTRUE_USPD       = "vcmptrue_uspd",

        VPCMPEQUD           = "vpcmpequd",
        VPCMPLTUD           = "vpcmpltud",
        VPCMPLEUD           = "vpcmpleud",
        VPCMPNEQUD          = "vpcmpnequd",
        VPCMPNLTUD          = "vpcmpnltud",
        VPCMPNLEUD          = "vpcmpnleud",
        VPCMPLTD            = "vpcmpltd",
        VPCMPLED            = "vpcmpled",
        VPCMPNEQD           = "vpcmpneqd",
        VPCMPNLTD           = "vpcmpnltd",
        VPCMPNLED           = "vpcmpnled",
        VPCMPEQUB           = "vpcmpequb",
        VPCMPLTUB           = "vpcmpltub",
        VPCMPLEUB           = "vpcmpleub",
        VPCMPNEQUB          = "vpcmpnequb",
        VPCMPNLTUB          = "vpcmpnltub",
        VPCMPNLEUB          = "vpcmpnleub",
        VPCMPLTB            = "vpcmpltb",
        VPCMPLEB            = "vpcmpleb",
        VPCMPNEQB           = "vpcmpneqb",
        VPCMPNLTB           = "vpcmpnltb",
        VPCMPNLEB           = "vpcmpnleb",
        VPCMPEQUQ           = "vpcmpequq",
        VPCMPLTUQ           = "vpcmpltuq",
        VPCMPLEUQ           = "vpcmpleuq",
        VPCMPNEQUQ          = "vpcmpnequq",
        VPCMPNLTUQ          = "vpcmpnltuq",
        VPCMPNLEUQ          = "vpcmpnleuq",
        VPCMPLTQ            = "vpcmpltq",
        VPCMPLEQ            = "vpcmpleq",
        VPCMPNEQQ           = "vpcmpneqq",
        VPCMPNLTQ           = "vpcmpnltq",
        VPCMPNLEQ           = "vpcmpnleq",
        VPCMPEQUW           = "vpcmpequw",
        VPCMPLTUW           = "vpcmpltuw",
        VPCMPLEUW           = "vpcmpleuw",
        VPCMPNEQUW          = "vpcmpnequw",
        VPCMPNLTUW          = "vpcmpnltuw",
        VPCMPNLEUW          = "vpcmpnleuw",
        VPCMPLTW            = "vpcmpltw",
        VPCMPLEW            = "vpcmplew",
        VPCMPNEQW           = "vpcmpneqw",
        VPCMPNLTW           = "vpcmpnltw",
        VPCMPNLEW           = "vpcmpnlew",
        VCMPEQPH            = "vcmpeqph",
        VCMPLTPH            = "vcmpltph",
        VCMPLEPH            = "vcmpleph",
        VCMPUNORDPH         = "vcmpunordph",
        VCMPNEQPH           = "vcmpneqph",
        VCMPNLTPH           = "vcmpnltph",
        VCMPNLEPH           = "vcmpnleph",
        VCMPORDPH           = "vcmpordph",
        VCMPEQ_UQPH         = "vcmpeq_uqph",
        VCMPNGEPH           = "vcmpngeph",
        VCMPNGTPH           = "vcmpngtph",
        VCMPFALSEPH         = "vcmpfalseph",
        VCMPNEQ_OQPH        = "vcmpneq_oqph",
        VCMPGEPH            = "vcmpgeph",
        VCMPGTPH            = "vcmpgtph",
        VCMPTRUEPH          = "vcmptrueph",
        VCMPEQ_OSPH         = "vcmpeq_osph",
        VCMPLT_OQPH         = "vcmplt_oqph",
        VCMPLE_OQPH         = "vcmple_oqph",
        VCMPUNORD_SPH       = "vcmpunord_sph",
        VCMPNEQ_USPH        = "vcmpneq_usph",
        VCMPNLT_UQPH        = "vcmpnlt_uqph",
        VCMPNLE_UQPH        = "vcmpnle_uqph",
        VCMPORD_SPH         = "vcmpord_sph",
        VCMPEQ_USPH         = "vcmpeq_usph",
        VCMPNGE_UQPH        = "vcmpnge_uqph",
        VCMPNGT_UQPH        = "vcmpngt_uqph",
        VCMPFALSE_OSPH      = "vcmpfalse_osph",
        VCMPNEQ_OSPH        = "vcmpneq_osph",
        VCMPGE_OQPH         = "vcmpge_oqph",
        VCMPGT_OQPH         = "vcmpgt_oqph",
        VCMPTRUE_USPH       = "vcmptrue_usph",
        VCMPEQSH            = "vcmpeqsh",
        VCMPLTSH            = "vcmpltsh",
        VCMPLESH            = "vcmplesh",
        VCMPUNORDSH         = "vcmpunordsh",
        VCMPNEQSH           = "vcmpneqsh",
        VCMPNLTSH           = "vcmpnltsh",
        VCMPNLESH           = "vcmpnlesh",
        VCMPORDSH           = "vcmpordsh",
        VCMPEQ_UQSH         = "vcmpeq_uqsh",
        VCMPNGESH           = "vcmpngesh",
        VCMPNGTSH           = "vcmpngtsh",
        VCMPFALSESH         = "vcmpfalsesh",
        VCMPNEQ_OQSH        = "vcmpneq_oqsh",
        VCMPGESH            = "vcmpgesh",
        VCMPGTSH            = "vcmpgtsh",
        VCMPTRUESH          = "vcmptruesh",
        VCMPEQ_OSSH         = "vcmpeq_ossh",
        VCMPLT_OQSH         = "vcmplt_oqsh",
        VCMPLE_OQSH         = "vcmple_oqsh",
        VCMPUNORD_SSH       = "vcmpunord_ssh",
        VCMPNEQ_USSH        = "vcmpneq_ussh",
        VCMPNLT_UQSH        = "vcmpnlt_uqsh",
        VCMPNLE_UQSH        = "vcmpnle_uqsh",
        VCMPORD_SSH         = "vcmpord_ssh",
        VCMPEQ_USSH         = "vcmpeq_ussh",
        VCMPNGE_UQSH        = "vcmpnge_uqsh",
        VCMPNGT_UQSH        = "vcmpngt_uqsh",
        VCMPFALSE_OSSH      = "vcmpfalse_ossh",
        VCMPNEQ_OSSH        = "vcmpneq_ossh",
        VCMPGE_OQSH         = "vcmpge_oqsh",
        VCMPGT_OQSH         = "vcmpgt_oqsh",
        VCMPTRUE_USSH       = "vcmptrue_ussh",
    }

    include!(concat!(env!("OUT_DIR"), "/generated_opcodes.rs"));

    #[cfg(feature = "mnemonic")]
    #[inline(always)]
    pub(crate) fn mnemonic(opcode: Opcode) -> Option<&'static str> {
        defined_mnemonic(opcode).or_else(|| generated_mnemonic(opcode))
    }
}

include!(concat!(env!("OUT_DIR"), "/generated_set.rs"));
include!(concat!(env!("OUT_DIR"), "/generated_decode.rs"));
include!(concat!(env!("OUT_DIR"), "/generated_decode_0f.rs"));
include!(concat!(env!("OUT_DIR"), "/generated_decode_0f_38.rs"));
include!(concat!(env!("OUT_DIR"), "/generated_decode_0f_3a.rs"));
include!(concat!(env!("OUT_DIR"), "/generated_decode_vex.rs"));
include!(concat!(env!("OUT_DIR"), "/generated_decode_evex.rs"));