use crate::*;
use core::fmt;
#[rustfmt::skip]
pub(super) static OP_ACCESS_1: [OpAccess; 7] = [
OpAccess::None,
OpAccess::CondRead,
OpAccess::NoMemAccess,
OpAccess::Read,
OpAccess::Read,
OpAccess::ReadWrite,
OpAccess::Write,
];
#[rustfmt::skip]
pub(super) static OP_ACCESS_2: [OpAccess; 3] = [
OpAccess::None,
OpAccess::Read,
OpAccess::ReadWrite,
];
pub(crate) struct InstrInfoConstants;
#[allow(dead_code)]
impl InstrInfoConstants {
pub(crate) const OP_INFO0_COUNT: usize = 13;
pub(crate) const OP_INFO1_COUNT: usize = 7;
pub(crate) const OP_INFO2_COUNT: usize = 3;
pub(crate) const OP_INFO3_COUNT: usize = 2;
pub(crate) const OP_INFO4_COUNT: usize = 2;
pub(crate) const RFLAGS_INFO_COUNT: usize = 79;
pub(crate) const DEFAULT_USED_REGISTER_COLL_CAPACITY: usize = 10;
pub(crate) const DEFAULT_USED_MEMORY_COLL_CAPACITY: usize = 8;
}
#[cfg(feature = "instr_info")]
pub(crate) struct InfoFlags1;
#[cfg(feature = "instr_info")]
#[allow(dead_code)]
impl InfoFlags1 {
pub(crate) const OP_INFO0_SHIFT: u32 = 0x0000_0000;
pub(crate) const OP_INFO0_MASK: u32 = 0x0000_000F;
pub(crate) const OP_INFO1_SHIFT: u32 = 0x0000_0004;
pub(crate) const OP_INFO1_MASK: u32 = 0x0000_0007;
pub(crate) const OP_INFO2_SHIFT: u32 = 0x0000_0007;
pub(crate) const OP_INFO2_MASK: u32 = 0x0000_0003;
pub(crate) const OP_INFO3_SHIFT: u32 = 0x0000_0009;
pub(crate) const OP_INFO3_MASK: u32 = 0x0000_0001;
pub(crate) const OP_INFO4_SHIFT: u32 = 0x0000_000A;
pub(crate) const OP_INFO4_MASK: u32 = 0x0000_0001;
pub(crate) const RFLAGS_INFO_SHIFT: u32 = 0x0000_000D;
pub(crate) const RFLAGS_INFO_MASK: u32 = 0x0000_007F;
pub(crate) const IMPLIED_ACCESS_SHIFT: u32 = 0x0000_0014;
pub(crate) const IMPLIED_ACCESS_MASK: u32 = 0x0000_00FF;
pub(crate) const IGNORES_INDEX_VA: u32 = 0x2000_0000;
pub(crate) const OP_MASK_READ_WRITE: u32 = 0x4000_0000;
pub(crate) const IGNORES_SEGMENT: u32 = 0x8000_0000;
}
#[cfg(feature = "instr_info")]
pub(crate) struct InfoFlags2;
#[cfg(feature = "instr_info")]
#[allow(dead_code)]
impl InfoFlags2 {
pub(crate) const ENCODING_SHIFT: u32 = 0x0000_0000;
pub(crate) const ENCODING_MASK: u32 = 0x0000_0007;
pub(crate) const SAVE_RESTORE: u32 = 0x0002_0000;
pub(crate) const STACK_INSTRUCTION: u32 = 0x0004_0000;
pub(crate) const PRIVILEGED: u32 = 0x0008_0000;
pub(crate) const FLOW_CONTROL_SHIFT: u32 = 0x0000_0014;
pub(crate) const FLOW_CONTROL_MASK: u32 = 0x0000_000F;
pub(crate) const CPUID_FEATURE_INTERNAL_SHIFT: u32 = 0x0000_0018;
pub(crate) const CPUID_FEATURE_INTERNAL_MASK: u32 = 0x0000_00FF;
}
#[derive(Copy, Clone, Eq, PartialEq)]
#[cfg(feature = "instr_info")]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub(crate) enum OpInfo0 {
None,
CondWrite,
CondWrite32_ReadWrite64,
NoMemAccess,
Read,
ReadCondWrite,
ReadWrite,
Write,
WriteVmm,
ReadWriteVmm,
WriteForce,
WriteMem_ReadWriteReg,
WriteForceP1,
}
#[cfg(feature = "instr_info")]
#[rustfmt::skip]
static GEN_DEBUG_OP_INFO0: [&str; 13] = [
"None",
"CondWrite",
"CondWrite32_ReadWrite64",
"NoMemAccess",
"Read",
"ReadCondWrite",
"ReadWrite",
"Write",
"WriteVmm",
"ReadWriteVmm",
"WriteForce",
"WriteMem_ReadWriteReg",
"WriteForceP1",
];
#[cfg(feature = "instr_info")]
impl fmt::Debug for OpInfo0 {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", GEN_DEBUG_OP_INFO0[*self as usize])
}
}
#[cfg(feature = "instr_info")]
impl Default for OpInfo0 {
#[must_use]
#[inline]
fn default() -> Self {
OpInfo0::None
}
}
#[derive(Copy, Clone, Eq, PartialEq)]
#[cfg(feature = "instr_info")]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub(crate) enum OpInfo1 {
None,
CondRead,
NoMemAccess,
Read,
ReadP3,
ReadWrite,
Write,
}
#[cfg(feature = "instr_info")]
#[rustfmt::skip]
static GEN_DEBUG_OP_INFO1: [&str; 7] = [
"None",
"CondRead",
"NoMemAccess",
"Read",
"ReadP3",
"ReadWrite",
"Write",
];
#[cfg(feature = "instr_info")]
impl fmt::Debug for OpInfo1 {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", GEN_DEBUG_OP_INFO1[*self as usize])
}
}
#[cfg(feature = "instr_info")]
impl Default for OpInfo1 {
#[must_use]
#[inline]
fn default() -> Self {
OpInfo1::None
}
}
#[derive(Copy, Clone, Eq, PartialEq)]
#[cfg(feature = "instr_info")]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub(crate) enum OpInfo2 {
None,
Read,
ReadWrite,
}
#[cfg(feature = "instr_info")]
#[rustfmt::skip]
static GEN_DEBUG_OP_INFO2: [&str; 3] = [
"None",
"Read",
"ReadWrite",
];
#[cfg(feature = "instr_info")]
impl fmt::Debug for OpInfo2 {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", GEN_DEBUG_OP_INFO2[*self as usize])
}
}
#[cfg(feature = "instr_info")]
impl Default for OpInfo2 {
#[must_use]
#[inline]
fn default() -> Self {
OpInfo2::None
}
}
#[derive(Copy, Clone, Eq, PartialEq)]
#[cfg(feature = "instr_info")]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub(crate) enum OpInfo3 {
None,
Read,
}
#[cfg(feature = "instr_info")]
#[rustfmt::skip]
static GEN_DEBUG_OP_INFO3: [&str; 2] = [
"None",
"Read",
];
#[cfg(feature = "instr_info")]
impl fmt::Debug for OpInfo3 {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", GEN_DEBUG_OP_INFO3[*self as usize])
}
}
#[cfg(feature = "instr_info")]
impl Default for OpInfo3 {
#[must_use]
#[inline]
fn default() -> Self {
OpInfo3::None
}
}
#[derive(Copy, Clone, Eq, PartialEq)]
#[cfg(feature = "instr_info")]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub(crate) enum OpInfo4 {
None,
Read,
}
#[cfg(feature = "instr_info")]
#[rustfmt::skip]
static GEN_DEBUG_OP_INFO4: [&str; 2] = [
"None",
"Read",
];
#[cfg(feature = "instr_info")]
impl fmt::Debug for OpInfo4 {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", GEN_DEBUG_OP_INFO4[*self as usize])
}
}
#[cfg(feature = "instr_info")]
impl Default for OpInfo4 {
#[must_use]
#[inline]
fn default() -> Self {
OpInfo4::None
}
}
#[derive(Copy, Clone, Eq, PartialEq)]
#[cfg(feature = "instr_info")]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub(crate) enum ImpliedAccess {
None,
Shift_Ib_MASK1FMOD9,
Shift_Ib_MASK1FMOD11,
Shift_Ib_MASK1F,
Shift_Ib_MASK3F,
Clear_rflags,
t_push1x2,
t_push1x4,
t_pop1x2,
t_pop1x4,
t_RWal,
t_RWax,
t_push1x8,
t_pop1x8,
t_pusha2,
t_pusha4,
t_popa2,
t_popa4,
t_arpl,
t_ins,
t_outs,
t_lea,
t_gpr16,
t_poprm2,
t_poprm4,
t_poprm8,
t_Ral_Wah,
t_Rax_Weax,
t_RWeax,
t_Rax_Wdx,
t_Reax_Wedx,
t_Rrax_Wrdx,
t_push2x2,
t_push2x4,
t_Rah,
t_Wah,
t_movs,
t_cmps,
t_stos,
t_lods,
t_scas,
t_Wes,
t_Wds,
t_CWeax,
t_enter2,
t_enter4,
t_enter8,
t_leave2,
t_leave4,
t_leave8,
t_pop2x2,
t_pop2x4,
t_pop2x8,
b64_t_Wss_pop5x2_f_pop3x2,
b64_t_Wss_pop5x4_f_pop3x4,
t_Wss_pop5x8,
t_Ral_Wax,
t_Wal,
t_RWst0,
t_Rst0,
t_Rst0_RWst1,
t_RCWst0,
t_Rst1_RWst0,
t_Rst0_Rst1,
t_Wst0TOst7_Wmm0TOmm7,
t_Rst0TOst7_Rmm0TOmm7,
t_RWcx,
t_RWecx,
t_RWrcx,
t_Rcx,
t_Recx,
t_Rrcx,
t_Wdx_RWax,
t_Wedx_RWeax,
t_Wrdx_RWrax,
t_RWax_RWdx,
t_RWeax_RWedx,
t_RWrax_RWrdx,
t_push2x8,
t_Rcr0,
t_RWcr0,
t_gpr16_RWcr0,
t_RCWeax_b64_t_CRrcx_CRrdx_CRrbx_CWrcx_CWrdx_CWrbx_f_CRecx_CRedx_CRebx_CRds_CWecx_CWedx_CWebx,
t_CWecx_CWedx_CWebx_RWeax_b64_t_CRrcx_CRrdx_CRrbx_f_CRecx_CRedx_CRebx_CRds,
t_Rax_Recx_Redx_Rseg,
t_Reax_Recx_Redx_Rseg,
t_Recx_Redx_Rrax_Rseg,
t_Reax_Recx,
t_Recx_Weax_Wedx,
t_Reax_Recx_Redx,
t_Rax,
t_Reax,
t_Rrax,
t_Rax_Wfs_Wgs,
t_Reax_Wfs_Wgs,
t_Rrax_Wfs_Wgs,
t_Rax_Rfs_Rgs,
t_Reax_Rfs_Rgs,
t_Rrax_Rfs_Rgs,
t_Reax_Wcr0_Wdr6_Wdr7_WesTOgs_Wcr2TOcr4_Wdr0TOdr3_b64_t_WraxTOr15_f_WeaxTOedi,
t_Rax_Recx,
t_Recx_Rrax,
t_Weax_Wecx_Wedx,
t_Reax_Recx_CRebx,
t_Rax_Rseg,
t_Reax_Rseg,
t_Rrax_Rseg,
t_Wecx_b64_t_Wr11,
t_Redi_Res,
t_Recx_Wcs_Wss_b64_t_Rr11d,
t_Rr11d_Rrcx_Wcs_Wss,
t_Weax_Wedx,
t_Wesp,
t_Recx_Redx_Wesp_Wcs_Wss,
t_Rrcx_Rrdx_Wrsp_Wcs_Wss,
t_zrrm,
t_zrrrm,
b64_t_RWxmm0TOxmm15_f_RWxmm0TOxmm7,
b64_t_Wzmm0TOzmm15_f_Wzmm0TOzmm7,
t_CRecx_Wecx_Wedx_Webx_RWeax,
t_CRmem_CRsi_CReax_CRes_CWeax_CWedx_RCWecx,
t_CRmem_CReax_CResi_CRes_CWeax_CWedx_RCWecx,
t_CRmem_CReax_CRrsi_CRes_CWeax_CWedx_RCWrcx,
t_CRmem_CRmem_CWmem_CRsi_CRdi_CRes_CWsi_RCWax_RCWcx,
t_CRmem_CRmem_CWmem_CResi_CRedi_CRes_CWesi_RCWeax_RCWecx,
t_CRmem_CRmem_CWmem_CRrsi_CRrdi_CRes_CWrsi_RCWrax_RCWrcx,
t_Rcl_Rax,
t_Rcl_Reax,
t_xstore2,
t_xstore4,
t_xstore8,
t_CRmem_CRmem_CRmem_CWmem_CRdx_CRbx_CRsi_CRdi_CRes_CWsi_CWdi_RCWcx,
t_CRmem_CRmem_CRmem_CWmem_CRedx_CRebx_CResi_CRedi_CRes_CWesi_CWedi_RCWecx,
t_CRmem_CRmem_CRmem_CWmem_CRrdx_CRrbx_CRrsi_CRrdi_CRes_CWrsi_CWrdi_RCWrcx,
t_CRmem_CRmem_CRmem_CRmem_CWmem_CWmem_CRax_CRdx_CRbx_CRsi_CRdi_CRes_CWsi_CWdi_RCWcx,
t_CRmem_CRmem_CRmem_CRmem_CWmem_CWmem_CReax_CRedx_CRebx_CResi_CRedi_CRes_CWesi_CWedi_RCWecx,
t_CRmem_CRmem_CRmem_CRmem_CWmem_CWmem_CRrax_CRrdx_CRrbx_CRrsi_CRrdi_CRes_CWrsi_CWrdi_RCWrcx,
t_RCWal,
t_RCWax,
t_RCWeax,
t_Reax_Redx,
t_gpr8,
t_gpr32_Reax_Redx,
t_Rmem_Rseg,
t_RCWrax,
t_Wss,
t_Wfs,
t_Wgs,
t_CRecx_CRebx_RCWeax_RCWedx,
t_CRrcx_CRrbx_RCWrax_RCWrdx,
t_Wmem_RarDI_Rseg,
t_Rxmm0,
t_Redx,
t_Rrdx,
t_Wmem_Res,
t_Reax_Redx_Wxmm0,
t_Rrax_Rrdx_Wxmm0,
t_Reax_Redx_Wecx,
t_Rrax_Rrdx_Wecx,
t_Wxmm0,
t_Wecx,
t_Rmem_Rds,
t_Rrcx_Rrdx_RWrax,
t_Rmem_Rrcx_Rseg_RWrax,
t_RWrax,
t_Rax_Recx_Redx_Weax,
t_Recx_Redx_RWeax,
t_Recx_Redx_RWrax,
t_Rax_Recx_Redx,
t_Recx_Redx_Rrax,
t_Wtmm0TOtmm7,
t_Reax_Rebx,
t_Rebx_Weax,
t_emmiW,
t_emmiRW,
t_emmiR,
t_CRrcx_CRrdx_CRr8_CRr9_RWrax,
t_RWxmm0TOxmm7,
t_Reax_Rxmm0,
t_Wxmm1_Wxmm2_RWxmm0_Wxmm4TOxmm6,
t_RWxmm0_RWxmm1_Wxmm2TOxmm6,
t_pop3x8,
t_CRmem_CRmem_CWmem_CRbx_CRsi_CRdi_CRes_CWsi_RCWax_RCWcx,
t_CRmem_CRmem_CWmem_CRebx_CResi_CRedi_CRes_CWesi_RCWeax_RCWecx,
t_CRmem_CRmem_CWmem_CRrbx_CRrsi_CRrdi_CRes_CWrsi_RCWrax_RCWrcx,
t_CRmem_CRmem_CRmem_CWmem_CRax_CRdx_CRbx_CRsi_CRdi_CRes_CWsi_CWdi_RCWcx,
t_CRmem_CRmem_CRmem_CWmem_CReax_CRedx_CRebx_CResi_CRedi_CRes_CWesi_CWedi_RCWecx,
t_CRmem_CRmem_CRmem_CWmem_CRrax_CRrdx_CRrbx_CRrsi_CRrdi_CRes_CWrsi_CWrdi_RCWrcx,
t_gpr16_Wgs,
t_Wrsp_Wcs_Wss_pop6x8,
t_Rcs_Rss_Wrsp_pop6x8,
t_Reax_Recx_Wedx_Webx,
t_Reax_Recx_Redx_CRebx_CWedx_CWebx,
t_memdisplm64,
t_CRmem_CRmem_CWmem_CRsi_CRdi_CRes_CWsi_RCWcx,
t_CRmem_CRmem_CWmem_CResi_CRedi_CRes_CWesi_RCWecx,
t_CRmem_CRmem_CWmem_CRrsi_CRrdi_CRes_CWrsi_RCWrcx,
t_CRmem_CRmem_Rrcx_CRrsi_CRrdi_CRes_CRds_CWrcx,
t_CRmem_CWmem_Rrcx_CRrsi_CRrdi_CRes_CRds_CWrcx,
t_Rdl_Rrax_Weax_Wrcx_Wrdx,
t_Rmem_Wmem_Rrcx_Rrbx_Rds_Weax,
}
#[cfg(feature = "instr_info")]
#[rustfmt::skip]
static GEN_DEBUG_IMPLIED_ACCESS: [&str; 201] = [
"None",
"Shift_Ib_MASK1FMOD9",
"Shift_Ib_MASK1FMOD11",
"Shift_Ib_MASK1F",
"Shift_Ib_MASK3F",
"Clear_rflags",
"t_push1x2",
"t_push1x4",
"t_pop1x2",
"t_pop1x4",
"t_RWal",
"t_RWax",
"t_push1x8",
"t_pop1x8",
"t_pusha2",
"t_pusha4",
"t_popa2",
"t_popa4",
"t_arpl",
"t_ins",
"t_outs",
"t_lea",
"t_gpr16",
"t_poprm2",
"t_poprm4",
"t_poprm8",
"t_Ral_Wah",
"t_Rax_Weax",
"t_RWeax",
"t_Rax_Wdx",
"t_Reax_Wedx",
"t_Rrax_Wrdx",
"t_push2x2",
"t_push2x4",
"t_Rah",
"t_Wah",
"t_movs",
"t_cmps",
"t_stos",
"t_lods",
"t_scas",
"t_Wes",
"t_Wds",
"t_CWeax",
"t_enter2",
"t_enter4",
"t_enter8",
"t_leave2",
"t_leave4",
"t_leave8",
"t_pop2x2",
"t_pop2x4",
"t_pop2x8",
"b64_t_Wss_pop5x2_f_pop3x2",
"b64_t_Wss_pop5x4_f_pop3x4",
"t_Wss_pop5x8",
"t_Ral_Wax",
"t_Wal",
"t_RWst0",
"t_Rst0",
"t_Rst0_RWst1",
"t_RCWst0",
"t_Rst1_RWst0",
"t_Rst0_Rst1",
"t_Wst0TOst7_Wmm0TOmm7",
"t_Rst0TOst7_Rmm0TOmm7",
"t_RWcx",
"t_RWecx",
"t_RWrcx",
"t_Rcx",
"t_Recx",
"t_Rrcx",
"t_Wdx_RWax",
"t_Wedx_RWeax",
"t_Wrdx_RWrax",
"t_RWax_RWdx",
"t_RWeax_RWedx",
"t_RWrax_RWrdx",
"t_push2x8",
"t_Rcr0",
"t_RWcr0",
"t_gpr16_RWcr0",
"t_RCWeax_b64_t_CRrcx_CRrdx_CRrbx_CWrcx_CWrdx_CWrbx_f_CRecx_CRedx_CRebx_CRds_CWecx_CWedx_CWebx",
"t_CWecx_CWedx_CWebx_RWeax_b64_t_CRrcx_CRrdx_CRrbx_f_CRecx_CRedx_CRebx_CRds",
"t_Rax_Recx_Redx_Rseg",
"t_Reax_Recx_Redx_Rseg",
"t_Recx_Redx_Rrax_Rseg",
"t_Reax_Recx",
"t_Recx_Weax_Wedx",
"t_Reax_Recx_Redx",
"t_Rax",
"t_Reax",
"t_Rrax",
"t_Rax_Wfs_Wgs",
"t_Reax_Wfs_Wgs",
"t_Rrax_Wfs_Wgs",
"t_Rax_Rfs_Rgs",
"t_Reax_Rfs_Rgs",
"t_Rrax_Rfs_Rgs",
"t_Reax_Wcr0_Wdr6_Wdr7_WesTOgs_Wcr2TOcr4_Wdr0TOdr3_b64_t_WraxTOr15_f_WeaxTOedi",
"t_Rax_Recx",
"t_Recx_Rrax",
"t_Weax_Wecx_Wedx",
"t_Reax_Recx_CRebx",
"t_Rax_Rseg",
"t_Reax_Rseg",
"t_Rrax_Rseg",
"t_Wecx_b64_t_Wr11",
"t_Redi_Res",
"t_Recx_Wcs_Wss_b64_t_Rr11d",
"t_Rr11d_Rrcx_Wcs_Wss",
"t_Weax_Wedx",
"t_Wesp",
"t_Recx_Redx_Wesp_Wcs_Wss",
"t_Rrcx_Rrdx_Wrsp_Wcs_Wss",
"t_zrrm",
"t_zrrrm",
"b64_t_RWxmm0TOxmm15_f_RWxmm0TOxmm7",
"b64_t_Wzmm0TOzmm15_f_Wzmm0TOzmm7",
"t_CRecx_Wecx_Wedx_Webx_RWeax",
"t_CRmem_CRsi_CReax_CRes_CWeax_CWedx_RCWecx",
"t_CRmem_CReax_CResi_CRes_CWeax_CWedx_RCWecx",
"t_CRmem_CReax_CRrsi_CRes_CWeax_CWedx_RCWrcx",
"t_CRmem_CRmem_CWmem_CRsi_CRdi_CRes_CWsi_RCWax_RCWcx",
"t_CRmem_CRmem_CWmem_CResi_CRedi_CRes_CWesi_RCWeax_RCWecx",
"t_CRmem_CRmem_CWmem_CRrsi_CRrdi_CRes_CWrsi_RCWrax_RCWrcx",
"t_Rcl_Rax",
"t_Rcl_Reax",
"t_xstore2",
"t_xstore4",
"t_xstore8",
"t_CRmem_CRmem_CRmem_CWmem_CRdx_CRbx_CRsi_CRdi_CRes_CWsi_CWdi_RCWcx",
"t_CRmem_CRmem_CRmem_CWmem_CRedx_CRebx_CResi_CRedi_CRes_CWesi_CWedi_RCWecx",
"t_CRmem_CRmem_CRmem_CWmem_CRrdx_CRrbx_CRrsi_CRrdi_CRes_CWrsi_CWrdi_RCWrcx",
"t_CRmem_CRmem_CRmem_CRmem_CWmem_CWmem_CRax_CRdx_CRbx_CRsi_CRdi_CRes_CWsi_CWdi_RCWcx",
"t_CRmem_CRmem_CRmem_CRmem_CWmem_CWmem_CReax_CRedx_CRebx_CResi_CRedi_CRes_CWesi_CWedi_RCWecx",
"t_CRmem_CRmem_CRmem_CRmem_CWmem_CWmem_CRrax_CRrdx_CRrbx_CRrsi_CRrdi_CRes_CWrsi_CWrdi_RCWrcx",
"t_RCWal",
"t_RCWax",
"t_RCWeax",
"t_Reax_Redx",
"t_gpr8",
"t_gpr32_Reax_Redx",
"t_Rmem_Rseg",
"t_RCWrax",
"t_Wss",
"t_Wfs",
"t_Wgs",
"t_CRecx_CRebx_RCWeax_RCWedx",
"t_CRrcx_CRrbx_RCWrax_RCWrdx",
"t_Wmem_RarDI_Rseg",
"t_Rxmm0",
"t_Redx",
"t_Rrdx",
"t_Wmem_Res",
"t_Reax_Redx_Wxmm0",
"t_Rrax_Rrdx_Wxmm0",
"t_Reax_Redx_Wecx",
"t_Rrax_Rrdx_Wecx",
"t_Wxmm0",
"t_Wecx",
"t_Rmem_Rds",
"t_Rrcx_Rrdx_RWrax",
"t_Rmem_Rrcx_Rseg_RWrax",
"t_RWrax",
"t_Rax_Recx_Redx_Weax",
"t_Recx_Redx_RWeax",
"t_Recx_Redx_RWrax",
"t_Rax_Recx_Redx",
"t_Recx_Redx_Rrax",
"t_Wtmm0TOtmm7",
"t_Reax_Rebx",
"t_Rebx_Weax",
"t_emmiW",
"t_emmiRW",
"t_emmiR",
"t_CRrcx_CRrdx_CRr8_CRr9_RWrax",
"t_RWxmm0TOxmm7",
"t_Reax_Rxmm0",
"t_Wxmm1_Wxmm2_RWxmm0_Wxmm4TOxmm6",
"t_RWxmm0_RWxmm1_Wxmm2TOxmm6",
"t_pop3x8",
"t_CRmem_CRmem_CWmem_CRbx_CRsi_CRdi_CRes_CWsi_RCWax_RCWcx",
"t_CRmem_CRmem_CWmem_CRebx_CResi_CRedi_CRes_CWesi_RCWeax_RCWecx",
"t_CRmem_CRmem_CWmem_CRrbx_CRrsi_CRrdi_CRes_CWrsi_RCWrax_RCWrcx",
"t_CRmem_CRmem_CRmem_CWmem_CRax_CRdx_CRbx_CRsi_CRdi_CRes_CWsi_CWdi_RCWcx",
"t_CRmem_CRmem_CRmem_CWmem_CReax_CRedx_CRebx_CResi_CRedi_CRes_CWesi_CWedi_RCWecx",
"t_CRmem_CRmem_CRmem_CWmem_CRrax_CRrdx_CRrbx_CRrsi_CRrdi_CRes_CWrsi_CWrdi_RCWrcx",
"t_gpr16_Wgs",
"t_Wrsp_Wcs_Wss_pop6x8",
"t_Rcs_Rss_Wrsp_pop6x8",
"t_Reax_Recx_Wedx_Webx",
"t_Reax_Recx_Redx_CRebx_CWedx_CWebx",
"t_memdisplm64",
"t_CRmem_CRmem_CWmem_CRsi_CRdi_CRes_CWsi_RCWcx",
"t_CRmem_CRmem_CWmem_CResi_CRedi_CRes_CWesi_RCWecx",
"t_CRmem_CRmem_CWmem_CRrsi_CRrdi_CRes_CWrsi_RCWrcx",
"t_CRmem_CRmem_Rrcx_CRrsi_CRrdi_CRes_CRds_CWrcx",
"t_CRmem_CWmem_Rrcx_CRrsi_CRrdi_CRes_CRds_CWrcx",
"t_Rdl_Rrax_Weax_Wrcx_Wrdx",
"t_Rmem_Wmem_Rrcx_Rrbx_Rds_Weax",
];
#[cfg(feature = "instr_info")]
impl fmt::Debug for ImpliedAccess {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", GEN_DEBUG_IMPLIED_ACCESS[*self as usize])
}
}
#[cfg(feature = "instr_info")]
impl Default for ImpliedAccess {
#[must_use]
#[inline]
fn default() -> Self {
ImpliedAccess::None
}
}
#[derive(Copy, Clone, Eq, PartialEq)]
#[cfg(feature = "instr_info")]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub(crate) enum RflagsInfo {
None,
C_0123,
C_1_U_023,
C_A,
C_acopsz,
C_acopszidA,
C_acos_S_pz,
C_c,
C_cos_S_pz_U_a,
C_d,
C_i,
C_u,
R_0123_C_0123,
R_0123_U_0123,
R_a_W_ac_U_opsz,
R_ac_W_acpsz_U_o,
R_acopszid,
R_acopszidA,
R_acopszidA_W_acopszidA,
R_acpsz,
R_c,
R_c_C_1_U_023,
R_c_W_acopsz,
R_c_W_c,
R_c_W_c_U_o,
R_c_W_co,
R_cz,
R_cz_C_1_U_023,
R_d,
R_d_W_acopsz,
R_o,
R_o_W_o,
R_os,
R_osz,
R_p,
R_p_C_1_U_023,
R_s,
R_u_W_c_C_aopsz,
R_z,
R_z_C_1_U_023,
S_A,
S_c,
S_d,
S_i,
S_u,
U_0123,
U_acopsz,
W_0123,
W_023_C_1,
W_12_U_03,
W_1_U_023,
W_acopsz,
W_acopszdA_S_u,
W_acopszid,
W_acopszidA,
W_acpsz,
W_aopsz,
W_c,
W_c_C_aopsz,
W_c_U_aops,
W_c_U_o,
W_co,
W_co_U_apsz,
W_copsz_U_a,
W_cosz_C_ap,
W_cpsz_U_ao,
W_cpz_C_aos,
W_cpz_C_aos1,
W_cs_C_oz_U_ap,
W_csz_C_o_U_ap,
W_cz_C_aops,
W_cz_U_aops,
W_psz_C_co_U_a,
W_psz_U_aco,
W_sz_C_co_U_ap,
W_z,
W_z_C_acops,
W_z_C_co_U_aps,
W_z_U_acops,
}
#[cfg(feature = "instr_info")]
#[rustfmt::skip]
static GEN_DEBUG_RFLAGS_INFO: [&str; 79] = [
"None",
"C_0123",
"C_1_U_023",
"C_A",
"C_acopsz",
"C_acopszidA",
"C_acos_S_pz",
"C_c",
"C_cos_S_pz_U_a",
"C_d",
"C_i",
"C_u",
"R_0123_C_0123",
"R_0123_U_0123",
"R_a_W_ac_U_opsz",
"R_ac_W_acpsz_U_o",
"R_acopszid",
"R_acopszidA",
"R_acopszidA_W_acopszidA",
"R_acpsz",
"R_c",
"R_c_C_1_U_023",
"R_c_W_acopsz",
"R_c_W_c",
"R_c_W_c_U_o",
"R_c_W_co",
"R_cz",
"R_cz_C_1_U_023",
"R_d",
"R_d_W_acopsz",
"R_o",
"R_o_W_o",
"R_os",
"R_osz",
"R_p",
"R_p_C_1_U_023",
"R_s",
"R_u_W_c_C_aopsz",
"R_z",
"R_z_C_1_U_023",
"S_A",
"S_c",
"S_d",
"S_i",
"S_u",
"U_0123",
"U_acopsz",
"W_0123",
"W_023_C_1",
"W_12_U_03",
"W_1_U_023",
"W_acopsz",
"W_acopszdA_S_u",
"W_acopszid",
"W_acopszidA",
"W_acpsz",
"W_aopsz",
"W_c",
"W_c_C_aopsz",
"W_c_U_aops",
"W_c_U_o",
"W_co",
"W_co_U_apsz",
"W_copsz_U_a",
"W_cosz_C_ap",
"W_cpsz_U_ao",
"W_cpz_C_aos",
"W_cpz_C_aos1",
"W_cs_C_oz_U_ap",
"W_csz_C_o_U_ap",
"W_cz_C_aops",
"W_cz_U_aops",
"W_psz_C_co_U_a",
"W_psz_U_aco",
"W_sz_C_co_U_ap",
"W_z",
"W_z_C_acops",
"W_z_C_co_U_aps",
"W_z_U_acops",
];
#[cfg(feature = "instr_info")]
impl fmt::Debug for RflagsInfo {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", GEN_DEBUG_RFLAGS_INFO[*self as usize])
}
}
#[cfg(feature = "instr_info")]
impl Default for RflagsInfo {
#[must_use]
#[inline]
fn default() -> Self {
RflagsInfo::None
}
}
#[derive(Copy, Clone, Eq, PartialEq)]
#[cfg(feature = "instr_info")]
#[allow(non_camel_case_types)]
#[allow(dead_code)]
pub(crate) enum CpuidFeatureInternal {
INTEL8086,
INTEL8086_ONLY,
INTEL186,
INTEL286,
INTEL286_ONLY,
INTEL386,
INTEL386_ONLY,
INTEL386_A0_ONLY,
INTEL486,
INTEL486_A_ONLY,
UMOV,
IA64,
X64,
ADX,
AES,
AVX,
AES_and_AVX,
AVX2,
AVX512_4FMAPS,
AVX512_4VNNIW,
AVX512_BITALG,
AVX512_IFMA,
AVX512_VBMI,
AVX512_VBMI2,
AVX512_VNNI,
AVX512_VPOPCNTDQ,
AVX512BW,
AVX512CD,
AVX512DQ,
AVX512ER,
AVX512F,
AVX512F_and_AVX512_BF16,
AVX512F_and_AVX512_VP2INTERSECT,
AVX512PF,
AVX512VL_and_AVX512_BF16,
AVX512VL_and_AVX512_BITALG,
AVX512VL_and_AVX512_IFMA,
AVX512VL_and_AVX512_VBMI,
AVX512VL_and_AVX512_VBMI2,
AVX512VL_and_AVX512_VNNI,
AVX512VL_and_AVX512_VP2INTERSECT,
AVX512VL_and_AVX512_VPOPCNTDQ,
AVX512VL_and_AVX512BW,
AVX512VL_and_AVX512CD,
AVX512VL_and_AVX512DQ,
AVX512VL_and_AVX512F,
BMI1,
BMI2,
CET_IBT,
CET_SS,
CL1INVMB,
CLDEMOTE,
CLFLUSHOPT,
CLFSH,
CLWB,
CLZERO,
CMOV,
CMPXCHG16B,
CPUID,
CX8,
D3NOW,
D3NOWEXT,
OSS,
ENQCMD,
F16C,
FMA,
FMA4,
FPU,
FPU_and_CMOV,
FPU287,
FPU287XL_ONLY,
FPU387,
FPU387SL_ONLY,
FSGSBASE,
FXSR,
CYRIX_D3NOW,
GFNI,
AVX_and_GFNI,
AVX512F_and_GFNI,
AVX512VL_and_GFNI,
HLE_or_RTM,
INVPCID,
LWP,
LZCNT,
MCOMMIT,
MMX,
MONITOR,
MONITORX,
MOVBE,
MOVDIR64B,
MOVDIRI,
MPX,
MSR,
MULTIBYTENOP,
PADLOCK_ACE,
PADLOCK_PHE,
PADLOCK_PMM,
PADLOCK_RNG,
PAUSE,
PCLMULQDQ,
PCLMULQDQ_and_AVX,
PCOMMIT,
PCONFIG,
PKU,
POPCNT,
PREFETCHW,
PREFETCHWT1,
PTWRITE,
RDPID,
RDPMC,
RDPRU,
RDRAND,
RDSEED,
RDTSCP,
RTM,
SEP,
SGX1,
SHA,
SKINIT_or_SVM,
SMAP,
SMX,
SSE,
SSE2,
SSE3,
FPU_and_SSE3,
SSE4_1,
SSE4_2,
SSE4A,
SSSE3,
SVM,
SEV_ES,
SYSCALL,
TBM,
TSC,
VAES,
AVX512F_and_VAES,
AVX512VL_and_VAES,
VMX,
VMX_and_INVEPT,
VMX_and_INVVPID,
VPCLMULQDQ,
AVX512F_and_VPCLMULQDQ,
AVX512VL_and_VPCLMULQDQ,
WAITPKG,
WBNOINVD,
XOP,
XSAVE,
XSAVEC,
XSAVEOPT,
XSAVES,
SEV_SNP,
SERIALIZE,
TSXLDTRK,
INVLPGB,
AMX_BF16,
AMX_TILE,
AMX_INT8,
CYRIX_FPU,
CYRIX_SMM,
CYRIX_SMINT,
CYRIX_SMINT_0F7E,
CYRIX_SHR,
CYRIX_DDI,
CYRIX_EMMI,
CYRIX_DMI,
CENTAUR_AIS,
MOV_TR,
SMM,
TDX,
KL,
AESKLE,
AESKLE_and_WIDE_KL,
UINTR,
HRESET,
AVX_VNNI,
PADLOCK_GMI,
FRED,
LKGS,
AVX512_FP16,
AVX512VL_and_AVX512_FP16,
UDBG,
KNC,
PADLOCK_UNDOC,
RMPQUERY,
RAO_INT,
PREFETCHITI,
AMX_FP16,
CMPCCXADD,
AVX_IFMA,
AVX_NE_CONVERT,
AVX_VNNI_INT8,
MSRLIST,
WRMSRNS,
AMX_COMPLEX,
AVX_and_SHA512,
AVX_and_SM3,
AVX_and_SM4,
TSE,
AVX_VNNI_INT16,
}
#[cfg(feature = "instr_info")]
#[rustfmt::skip]
static GEN_DEBUG_CPUID_FEATURE_INTERNAL: [&str; 199] = [
"INTEL8086",
"INTEL8086_ONLY",
"INTEL186",
"INTEL286",
"INTEL286_ONLY",
"INTEL386",
"INTEL386_ONLY",
"INTEL386_A0_ONLY",
"INTEL486",
"INTEL486_A_ONLY",
"UMOV",
"IA64",
"X64",
"ADX",
"AES",
"AVX",
"AES_and_AVX",
"AVX2",
"AVX512_4FMAPS",
"AVX512_4VNNIW",
"AVX512_BITALG",
"AVX512_IFMA",
"AVX512_VBMI",
"AVX512_VBMI2",
"AVX512_VNNI",
"AVX512_VPOPCNTDQ",
"AVX512BW",
"AVX512CD",
"AVX512DQ",
"AVX512ER",
"AVX512F",
"AVX512F_and_AVX512_BF16",
"AVX512F_and_AVX512_VP2INTERSECT",
"AVX512PF",
"AVX512VL_and_AVX512_BF16",
"AVX512VL_and_AVX512_BITALG",
"AVX512VL_and_AVX512_IFMA",
"AVX512VL_and_AVX512_VBMI",
"AVX512VL_and_AVX512_VBMI2",
"AVX512VL_and_AVX512_VNNI",
"AVX512VL_and_AVX512_VP2INTERSECT",
"AVX512VL_and_AVX512_VPOPCNTDQ",
"AVX512VL_and_AVX512BW",
"AVX512VL_and_AVX512CD",
"AVX512VL_and_AVX512DQ",
"AVX512VL_and_AVX512F",
"BMI1",
"BMI2",
"CET_IBT",
"CET_SS",
"CL1INVMB",
"CLDEMOTE",
"CLFLUSHOPT",
"CLFSH",
"CLWB",
"CLZERO",
"CMOV",
"CMPXCHG16B",
"CPUID",
"CX8",
"D3NOW",
"D3NOWEXT",
"OSS",
"ENQCMD",
"F16C",
"FMA",
"FMA4",
"FPU",
"FPU_and_CMOV",
"FPU287",
"FPU287XL_ONLY",
"FPU387",
"FPU387SL_ONLY",
"FSGSBASE",
"FXSR",
"CYRIX_D3NOW",
"GFNI",
"AVX_and_GFNI",
"AVX512F_and_GFNI",
"AVX512VL_and_GFNI",
"HLE_or_RTM",
"INVPCID",
"LWP",
"LZCNT",
"MCOMMIT",
"MMX",
"MONITOR",
"MONITORX",
"MOVBE",
"MOVDIR64B",
"MOVDIRI",
"MPX",
"MSR",
"MULTIBYTENOP",
"PADLOCK_ACE",
"PADLOCK_PHE",
"PADLOCK_PMM",
"PADLOCK_RNG",
"PAUSE",
"PCLMULQDQ",
"PCLMULQDQ_and_AVX",
"PCOMMIT",
"PCONFIG",
"PKU",
"POPCNT",
"PREFETCHW",
"PREFETCHWT1",
"PTWRITE",
"RDPID",
"RDPMC",
"RDPRU",
"RDRAND",
"RDSEED",
"RDTSCP",
"RTM",
"SEP",
"SGX1",
"SHA",
"SKINIT_or_SVM",
"SMAP",
"SMX",
"SSE",
"SSE2",
"SSE3",
"FPU_and_SSE3",
"SSE4_1",
"SSE4_2",
"SSE4A",
"SSSE3",
"SVM",
"SEV_ES",
"SYSCALL",
"TBM",
"TSC",
"VAES",
"AVX512F_and_VAES",
"AVX512VL_and_VAES",
"VMX",
"VMX_and_INVEPT",
"VMX_and_INVVPID",
"VPCLMULQDQ",
"AVX512F_and_VPCLMULQDQ",
"AVX512VL_and_VPCLMULQDQ",
"WAITPKG",
"WBNOINVD",
"XOP",
"XSAVE",
"XSAVEC",
"XSAVEOPT",
"XSAVES",
"SEV_SNP",
"SERIALIZE",
"TSXLDTRK",
"INVLPGB",
"AMX_BF16",
"AMX_TILE",
"AMX_INT8",
"CYRIX_FPU",
"CYRIX_SMM",
"CYRIX_SMINT",
"CYRIX_SMINT_0F7E",
"CYRIX_SHR",
"CYRIX_DDI",
"CYRIX_EMMI",
"CYRIX_DMI",
"CENTAUR_AIS",
"MOV_TR",
"SMM",
"TDX",
"KL",
"AESKLE",
"AESKLE_and_WIDE_KL",
"UINTR",
"HRESET",
"AVX_VNNI",
"PADLOCK_GMI",
"FRED",
"LKGS",
"AVX512_FP16",
"AVX512VL_and_AVX512_FP16",
"UDBG",
"KNC",
"PADLOCK_UNDOC",
"RMPQUERY",
"RAO_INT",
"PREFETCHITI",
"AMX_FP16",
"CMPCCXADD",
"AVX_IFMA",
"AVX_NE_CONVERT",
"AVX_VNNI_INT8",
"MSRLIST",
"WRMSRNS",
"AMX_COMPLEX",
"AVX_and_SHA512",
"AVX_and_SM3",
"AVX_and_SM4",
"TSE",
"AVX_VNNI_INT16",
];
#[cfg(feature = "instr_info")]
impl fmt::Debug for CpuidFeatureInternal {
#[inline]
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", GEN_DEBUG_CPUID_FEATURE_INTERNAL[*self as usize])
}
}
#[cfg(feature = "instr_info")]
impl Default for CpuidFeatureInternal {
#[must_use]
#[inline]
fn default() -> Self {
CpuidFeatureInternal::INTEL8086
}
}