use crate::core::{
arch_traits::*,
operand::{OperandSignature, RegTraits, RegType},
types::TypeId,
};
use super::operands::{
X86Bnd, X86CReg, X86DReg, X86GpbHi, X86GpbLo, X86Gpd, X86Gpq, X86Gpw, X86KReg, X86Mm, X86Rip,
X86SReg, X86St, X86Tmm, X86Xmm, X86Ymm, X86Zmm,
};
#[rustfmt::skip]
const SIGNATURES: [OperandSignature; 32] = [
OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(X86Rip::SIGNATURE), OperandSignature::new(X86GpbLo::SIGNATURE), OperandSignature::new(X86GpbHi::SIGNATURE), OperandSignature::new(X86Gpw::SIGNATURE), OperandSignature::new(X86Gpd::SIGNATURE), OperandSignature::new(X86Gpq::SIGNATURE), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(X86Xmm::SIGNATURE), OperandSignature::new(X86Ymm::SIGNATURE), OperandSignature::new(X86Zmm::SIGNATURE), OperandSignature::new(0), OperandSignature::new(X86KReg::SIGNATURE), OperandSignature::new(X86Mm::SIGNATURE), OperandSignature::new(X86SReg::SIGNATURE), OperandSignature::new(X86CReg::SIGNATURE), OperandSignature::new(X86DReg::SIGNATURE), OperandSignature::new(X86St::SIGNATURE), OperandSignature::new(X86Bnd::SIGNATURE), OperandSignature::new(X86Tmm::SIGNATURE), OperandSignature::new(0),
OperandSignature::new(0),
OperandSignature::new(0),
OperandSignature::new(0),
OperandSignature::new(0),
OperandSignature::new(0),
OperandSignature::new(0),
];
#[rustfmt::skip]
const REG_TYPE_TO_TYPE_ID: [TypeId; 32] = [
TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Int8, TypeId::Int8, TypeId::Int16, TypeId::Int32, TypeId::Int64, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Int32x4, TypeId::Int32x8, TypeId::Int32x16, TypeId::Void, TypeId::Mask64, TypeId::Mmx64, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Float80, TypeId::Void, TypeId::Void, TypeId::Void,
TypeId::Void,
TypeId::Void,
TypeId::Void,
TypeId::Void,
TypeId::Void,
TypeId::Void,
];
#[rustfmt::skip]
const X86_TYPE_ID_TO_REG_TYPE: [RegType; 32] = [
RegType::Gp32, RegType::Gp32, RegType::Gp8Lo, RegType::Gp8Lo, RegType::Gp16, RegType::Gp16, RegType::Gp32, RegType::Gp32, RegType::None, RegType::None, RegType::Vec128, RegType::Vec128, RegType::None, RegType::Mask, RegType::Mask, RegType::Mask, RegType::Mask, RegType::Extra, RegType::Extra, RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
];
#[rustfmt::skip]
const X64_TYPE_ID_TO_REG_TYPE: [RegType; 32] = [
RegType::Gp64, RegType::Gp64, RegType::Gp8Lo, RegType::Gp8Lo, RegType::Gp16, RegType::Gp16, RegType::Gp32, RegType::Gp32, RegType::Gp64, RegType::Gp64, RegType::Vec128, RegType::Vec128, RegType::None, RegType::Mask, RegType::Mask, RegType::Mask, RegType::Mask, RegType::Extra, RegType::Extra, RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
];
pub const X86_ARCH_TRAITS: ArchTraits = ArchTraits {
fp_reg_id: 5, sp_reg_id: 4, ip_reg_id: 0, link_reg_id: 0xff,
hw_stack_alignment: 1,
min_stack_offset: 0x7FFFFFFF,
max_stack_offset: 0x7FFFFFFF,
regs_signature: SIGNATURES,
reg_type_to_type_id: REG_TYPE_TO_TYPE_ID,
type_id_to_reg_type: X86_TYPE_ID_TO_REG_TYPE,
};
pub const X64_ARCH_TRAITS: ArchTraits = ArchTraits {
fp_reg_id: 5, sp_reg_id: 4, ip_reg_id: 0, link_reg_id: 0xff,
hw_stack_alignment: 1,
min_stack_offset: 0x7FFFFFFF,
max_stack_offset: 0x7FFFFFFF,
regs_signature: SIGNATURES,
reg_type_to_type_id: REG_TYPE_TO_TYPE_ID,
type_id_to_reg_type: X64_TYPE_ID_TO_REG_TYPE,
};