asmkit/x86/
arch_traits.rs

1use crate::core::{
2    arch_traits::*,
3    operand::{OperandSignature, RegTraits, RegType},
4    types::TypeId,
5};
6
7use super::operands::{
8    X86Bnd, X86CReg, X86DReg, X86GpbHi, X86GpbLo, X86Gpd, X86Gpq, X86Gpw, X86KReg, X86Mm, X86Rip,
9    X86SReg, X86St, X86Tmm, X86Xmm, X86Ymm, X86Zmm,
10};
11
12const SIGNATURES: [OperandSignature; 32] = [
13    OperandSignature::new(0),
14    OperandSignature::new(0),
15    OperandSignature::new(X86Rip::SIGNATURE),
16    OperandSignature::new(X86GpbLo::SIGNATURE),
17    OperandSignature::new(X86GpbHi::SIGNATURE),
18    OperandSignature::new(X86Gpw::SIGNATURE),
19    OperandSignature::new(X86Gpd::SIGNATURE),
20    OperandSignature::new(X86Gpq::SIGNATURE),
21    OperandSignature::new(0),
22    OperandSignature::new(0),
23    OperandSignature::new(0),
24    OperandSignature::new(X86Xmm::SIGNATURE),
25    OperandSignature::new(X86Ymm::SIGNATURE),
26    OperandSignature::new(X86Zmm::SIGNATURE),
27    OperandSignature::new(0),
28    OperandSignature::new(X86KReg::SIGNATURE),
29    OperandSignature::new(X86Mm::SIGNATURE),
30    OperandSignature::new(X86SReg::SIGNATURE),
31    OperandSignature::new(X86CReg::SIGNATURE),
32    OperandSignature::new(X86DReg::SIGNATURE),
33    OperandSignature::new(X86St::SIGNATURE),
34    OperandSignature::new(X86Bnd::SIGNATURE),
35    OperandSignature::new(X86Tmm::SIGNATURE),
36    OperandSignature::new(0),
37    OperandSignature::new(0),
38    OperandSignature::new(0),
39    OperandSignature::new(0),
40    OperandSignature::new(0),
41    OperandSignature::new(0),
42    OperandSignature::new(0),
43    OperandSignature::new(0),
44    OperandSignature::new(0),
45];
46
47pub const X86_ARCH_TRAITS: ArchTraits = ArchTraits {
48    fp_reg_id: 0xff,
49    sp_reg_id: 0xff,
50    ip_reg_id: 0xff,
51    link_reg_id: 0xff,
52    hw_stack_alignment: 1,
53    min_stack_offset: 0x7FFFFFFF,
54    max_stack_offset: 0x7FFFFFFF,
55    regs_signature: SIGNATURES,
56    reg_type_to_type_id: [TypeId::Void; 32],
57    type_id_to_reg_type: [RegType::Gp32; 32],
58};
59
60pub const X64_ARCH_TRAITS: ArchTraits = ArchTraits {
61    fp_reg_id: 0xff,
62    sp_reg_id: 0xff,
63    ip_reg_id: 0xff,
64    link_reg_id: 0xff,
65    hw_stack_alignment: 1,
66    min_stack_offset: 0x7FFFFFFF,
67    max_stack_offset: 0x7FFFFFFF,
68    regs_signature: SIGNATURES,
69    reg_type_to_type_id: [TypeId::Void; 32],
70    type_id_to_reg_type: [RegType::Gp32; 32],
71};