You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bddisasm/bindings/rsbddisasm/bddisasm/src/instruction_category.rs

253 lines
9.7 KiB

/*
* Copyright (c) 2021 Bitdefender
* SPDX-License-Identifier: Apache-2.0
*/
//! Instruction categories.
use super::decode_error::DecodeError;
use core::convert::TryFrom;
/// Instruction category.
#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
#[allow(non_camel_case_types)]
pub enum Category {
I3DNOW,
AES,
AESKL,
AMX,
APX,
ARITH,
AVX,
AVX2,
AVX2GATHER,
AVX512,
AVX512BF16,
AVX512FP16,
AVX512VBMI,
AVX512VP2INTERSECT,
AVXIFMA,
AVXNECONVERT,
AVXVNNI,
AVXVNNIINT16,
AVXVNNIINT8,
BITBYTE,
BLEND,
BMI1,
BMI2,
BROADCAST,
CALL,
CET,
CLDEMOTE,
CMOV,
CMPCCXADD,
COMPRESS,
COND_BR,
CONFLICT,
CONVERT,
DATAXFER,
DECIMAL,
ENQCMD,
EXPAND,
FLAGOP,
FMA4,
GATHER,
GFNI,
HRESET,
I386,
IFMA,
INTERRUPT,
IO,
IOSTRINGOP,
KL,
KMASK,
KNL,
LKGS,
LOGIC,
LOGICAL,
LOGICAL_FP,
LWP,
LZCNT,
MISC,
MMX,
MOVDIR64B,
MOVDIRI,
MPX,
NOP,
PCLMULQDQ,
PCONFIG,
POP,
PREFETCH,
PTWRITE,
PUSH,
RAOINT,
RDPID,
RDRAND,
RDSEED,
RDWRFSGS,
RET,
ROTATE,
SCATTER,
SEGOP,
SEMAPHORE,
SGX,
SHA,
SHA512,
SHIFT,
SM3,
SM4,
SMAP,
SSE,
SSE2,
STRINGOP,
STTNI,
SYSCALL,
SYSRET,
SYSTEM,
TDX,
UD,
UINTR,
UNCOND_BR,
UNKNOWN,
USER_MSR,
VAES,
VFMA,
VFMAPS,
VNNI,
VNNIW,
VPCLMULQDQ,
VPOPCNT,
VTX,
WAITPKG,
WBNOINVD,
WIDENOP,
WIDE_KL,
X87_ALU,
XOP,
XSAVE,
}
#[doc(hidden)]
impl TryFrom<ffi::ND_INS_CATEGORY> for Category {
type Error = DecodeError;
#[allow(clippy::too_many_lines)]
fn try_from(value: ffi::ND_INS_CATEGORY) -> Result<Self, Self::Error> {
match value {
ffi::_ND_INS_TYPE::ND_CAT_INVALID => Err(DecodeError::InternalError(value as u64)),
ffi::_ND_INS_TYPE::ND_CAT_3DNOW => Ok(Category::I3DNOW),
ffi::_ND_INS_TYPE::ND_CAT_AES => Ok(Category::AES),
ffi::_ND_INS_TYPE::ND_CAT_AESKL => Ok(Category::AESKL),
ffi::_ND_INS_TYPE::ND_CAT_AMX => Ok(Category::AMX),
ffi::_ND_INS_TYPE::ND_CAT_APX => Ok(Category::APX),
ffi::_ND_INS_TYPE::ND_CAT_ARITH => Ok(Category::ARITH),
ffi::_ND_INS_TYPE::ND_CAT_AVX => Ok(Category::AVX),
ffi::_ND_INS_TYPE::ND_CAT_AVX2 => Ok(Category::AVX2),
ffi::_ND_INS_TYPE::ND_CAT_AVX2GATHER => Ok(Category::AVX2GATHER),
ffi::_ND_INS_TYPE::ND_CAT_AVX512 => Ok(Category::AVX512),
ffi::_ND_INS_TYPE::ND_CAT_AVX512BF16 => Ok(Category::AVX512BF16),
ffi::_ND_INS_TYPE::ND_CAT_AVX512FP16 => Ok(Category::AVX512FP16),
ffi::_ND_INS_TYPE::ND_CAT_AVX512VBMI => Ok(Category::AVX512VBMI),
ffi::_ND_INS_TYPE::ND_CAT_AVX512VP2INTERSECT => Ok(Category::AVX512VP2INTERSECT),
ffi::_ND_INS_TYPE::ND_CAT_AVXIFMA => Ok(Category::AVXIFMA),
ffi::_ND_INS_TYPE::ND_CAT_AVXNECONVERT => Ok(Category::AVXNECONVERT),
ffi::_ND_INS_TYPE::ND_CAT_AVXVNNI => Ok(Category::AVXVNNI),
ffi::_ND_INS_TYPE::ND_CAT_AVXVNNIINT16 => Ok(Category::AVXVNNIINT16),
ffi::_ND_INS_TYPE::ND_CAT_AVXVNNIINT8 => Ok(Category::AVXVNNIINT8),
ffi::_ND_INS_TYPE::ND_CAT_BITBYTE => Ok(Category::BITBYTE),
ffi::_ND_INS_TYPE::ND_CAT_BLEND => Ok(Category::BLEND),
ffi::_ND_INS_TYPE::ND_CAT_BMI1 => Ok(Category::BMI1),
ffi::_ND_INS_TYPE::ND_CAT_BMI2 => Ok(Category::BMI2),
ffi::_ND_INS_TYPE::ND_CAT_BROADCAST => Ok(Category::BROADCAST),
ffi::_ND_INS_TYPE::ND_CAT_CALL => Ok(Category::CALL),
ffi::_ND_INS_TYPE::ND_CAT_CET => Ok(Category::CET),
ffi::_ND_INS_TYPE::ND_CAT_CLDEMOTE => Ok(Category::CLDEMOTE),
ffi::_ND_INS_TYPE::ND_CAT_CMOV => Ok(Category::CMOV),
ffi::_ND_INS_TYPE::ND_CAT_CMPCCXADD => Ok(Category::CMPCCXADD),
ffi::_ND_INS_TYPE::ND_CAT_COMPRESS => Ok(Category::COMPRESS),
ffi::_ND_INS_TYPE::ND_CAT_COND_BR => Ok(Category::COND_BR),
ffi::_ND_INS_TYPE::ND_CAT_CONFLICT => Ok(Category::CONFLICT),
ffi::_ND_INS_TYPE::ND_CAT_CONVERT => Ok(Category::CONVERT),
ffi::_ND_INS_TYPE::ND_CAT_DATAXFER => Ok(Category::DATAXFER),
ffi::_ND_INS_TYPE::ND_CAT_DECIMAL => Ok(Category::DECIMAL),
ffi::_ND_INS_TYPE::ND_CAT_ENQCMD => Ok(Category::ENQCMD),
ffi::_ND_INS_TYPE::ND_CAT_EXPAND => Ok(Category::EXPAND),
ffi::_ND_INS_TYPE::ND_CAT_FLAGOP => Ok(Category::FLAGOP),
ffi::_ND_INS_TYPE::ND_CAT_FMA4 => Ok(Category::FMA4),
ffi::_ND_INS_TYPE::ND_CAT_GATHER => Ok(Category::GATHER),
ffi::_ND_INS_TYPE::ND_CAT_GFNI => Ok(Category::GFNI),
ffi::_ND_INS_TYPE::ND_CAT_HRESET => Ok(Category::HRESET),
ffi::_ND_INS_TYPE::ND_CAT_I386 => Ok(Category::I386),
ffi::_ND_INS_TYPE::ND_CAT_IFMA => Ok(Category::IFMA),
ffi::_ND_INS_TYPE::ND_CAT_INTERRUPT => Ok(Category::INTERRUPT),
ffi::_ND_INS_TYPE::ND_CAT_IO => Ok(Category::IO),
ffi::_ND_INS_TYPE::ND_CAT_IOSTRINGOP => Ok(Category::IOSTRINGOP),
ffi::_ND_INS_TYPE::ND_CAT_KL => Ok(Category::KL),
ffi::_ND_INS_TYPE::ND_CAT_KMASK => Ok(Category::KMASK),
ffi::_ND_INS_TYPE::ND_CAT_KNL => Ok(Category::KNL),
ffi::_ND_INS_TYPE::ND_CAT_LKGS => Ok(Category::LKGS),
ffi::_ND_INS_TYPE::ND_CAT_LOGIC => Ok(Category::LOGIC),
ffi::_ND_INS_TYPE::ND_CAT_LOGICAL => Ok(Category::LOGICAL),
ffi::_ND_INS_TYPE::ND_CAT_LOGICAL_FP => Ok(Category::LOGICAL_FP),
ffi::_ND_INS_TYPE::ND_CAT_LWP => Ok(Category::LWP),
ffi::_ND_INS_TYPE::ND_CAT_LZCNT => Ok(Category::LZCNT),
ffi::_ND_INS_TYPE::ND_CAT_MISC => Ok(Category::MISC),
ffi::_ND_INS_TYPE::ND_CAT_MMX => Ok(Category::MMX),
ffi::_ND_INS_TYPE::ND_CAT_MOVDIR64B => Ok(Category::MOVDIR64B),
ffi::_ND_INS_TYPE::ND_CAT_MOVDIRI => Ok(Category::MOVDIRI),
ffi::_ND_INS_TYPE::ND_CAT_MPX => Ok(Category::MPX),
ffi::_ND_INS_TYPE::ND_CAT_NOP => Ok(Category::NOP),
ffi::_ND_INS_TYPE::ND_CAT_PCLMULQDQ => Ok(Category::PCLMULQDQ),
ffi::_ND_INS_TYPE::ND_CAT_PCONFIG => Ok(Category::PCONFIG),
ffi::_ND_INS_TYPE::ND_CAT_POP => Ok(Category::POP),
ffi::_ND_INS_TYPE::ND_CAT_PREFETCH => Ok(Category::PREFETCH),
ffi::_ND_INS_TYPE::ND_CAT_PTWRITE => Ok(Category::PTWRITE),
ffi::_ND_INS_TYPE::ND_CAT_PUSH => Ok(Category::PUSH),
ffi::_ND_INS_TYPE::ND_CAT_RAOINT => Ok(Category::RAOINT),
ffi::_ND_INS_TYPE::ND_CAT_RDPID => Ok(Category::RDPID),
ffi::_ND_INS_TYPE::ND_CAT_RDRAND => Ok(Category::RDRAND),
ffi::_ND_INS_TYPE::ND_CAT_RDSEED => Ok(Category::RDSEED),
ffi::_ND_INS_TYPE::ND_CAT_RDWRFSGS => Ok(Category::RDWRFSGS),
ffi::_ND_INS_TYPE::ND_CAT_RET => Ok(Category::RET),
ffi::_ND_INS_TYPE::ND_CAT_ROTATE => Ok(Category::ROTATE),
ffi::_ND_INS_TYPE::ND_CAT_SCATTER => Ok(Category::SCATTER),
ffi::_ND_INS_TYPE::ND_CAT_SEGOP => Ok(Category::SEGOP),
ffi::_ND_INS_TYPE::ND_CAT_SEMAPHORE => Ok(Category::SEMAPHORE),
ffi::_ND_INS_TYPE::ND_CAT_SGX => Ok(Category::SGX),
ffi::_ND_INS_TYPE::ND_CAT_SHA => Ok(Category::SHA),
ffi::_ND_INS_TYPE::ND_CAT_SHA512 => Ok(Category::SHA512),
ffi::_ND_INS_TYPE::ND_CAT_SHIFT => Ok(Category::SHIFT),
ffi::_ND_INS_TYPE::ND_CAT_SM3 => Ok(Category::SM3),
ffi::_ND_INS_TYPE::ND_CAT_SM4 => Ok(Category::SM4),
ffi::_ND_INS_TYPE::ND_CAT_SMAP => Ok(Category::SMAP),
ffi::_ND_INS_TYPE::ND_CAT_SSE => Ok(Category::SSE),
ffi::_ND_INS_TYPE::ND_CAT_SSE2 => Ok(Category::SSE2),
ffi::_ND_INS_TYPE::ND_CAT_STRINGOP => Ok(Category::STRINGOP),
ffi::_ND_INS_TYPE::ND_CAT_STTNI => Ok(Category::STTNI),
ffi::_ND_INS_TYPE::ND_CAT_SYSCALL => Ok(Category::SYSCALL),
ffi::_ND_INS_TYPE::ND_CAT_SYSRET => Ok(Category::SYSRET),
ffi::_ND_INS_TYPE::ND_CAT_SYSTEM => Ok(Category::SYSTEM),
ffi::_ND_INS_TYPE::ND_CAT_TDX => Ok(Category::TDX),
ffi::_ND_INS_TYPE::ND_CAT_UD => Ok(Category::UD),
ffi::_ND_INS_TYPE::ND_CAT_UINTR => Ok(Category::UINTR),
ffi::_ND_INS_TYPE::ND_CAT_UNCOND_BR => Ok(Category::UNCOND_BR),
ffi::_ND_INS_TYPE::ND_CAT_UNKNOWN => Ok(Category::UNKNOWN),
ffi::_ND_INS_TYPE::ND_CAT_USER_MSR => Ok(Category::USER_MSR),
ffi::_ND_INS_TYPE::ND_CAT_VAES => Ok(Category::VAES),
ffi::_ND_INS_TYPE::ND_CAT_VFMA => Ok(Category::VFMA),
ffi::_ND_INS_TYPE::ND_CAT_VFMAPS => Ok(Category::VFMAPS),
ffi::_ND_INS_TYPE::ND_CAT_VNNI => Ok(Category::VNNI),
ffi::_ND_INS_TYPE::ND_CAT_VNNIW => Ok(Category::VNNIW),
ffi::_ND_INS_TYPE::ND_CAT_VPCLMULQDQ => Ok(Category::VPCLMULQDQ),
ffi::_ND_INS_TYPE::ND_CAT_VPOPCNT => Ok(Category::VPOPCNT),
ffi::_ND_INS_TYPE::ND_CAT_VTX => Ok(Category::VTX),
ffi::_ND_INS_TYPE::ND_CAT_WAITPKG => Ok(Category::WAITPKG),
ffi::_ND_INS_TYPE::ND_CAT_WBNOINVD => Ok(Category::WBNOINVD),
ffi::_ND_INS_TYPE::ND_CAT_WIDENOP => Ok(Category::WIDENOP),
ffi::_ND_INS_TYPE::ND_CAT_WIDE_KL => Ok(Category::WIDE_KL),
ffi::_ND_INS_TYPE::ND_CAT_X87_ALU => Ok(Category::X87_ALU),
ffi::_ND_INS_TYPE::ND_CAT_XOP => Ok(Category::XOP),
ffi::_ND_INS_TYPE::ND_CAT_XSAVE => Ok(Category::XSAVE),
}
}
}