asmkit/x86/
arch_traits.rs1use 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};