use crate::core::{
arch_traits::*,
operand::{OperandSignature, RegTraits, RegType},
types::TypeId,
};
use super::operands::{A64Gpw, A64Gpx, A64VecB, A64VecD, A64VecH, A64VecQ, A64VecS, Gp};
#[rustfmt::skip]
const SIGNATURES: [OperandSignature; 32] = [
OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(A64Gpw::SIGNATURE), OperandSignature::new(A64Gpx::SIGNATURE), OperandSignature::new(A64VecB::SIGNATURE), OperandSignature::new(A64VecH::SIGNATURE), OperandSignature::new(A64VecS::SIGNATURE), OperandSignature::new(A64VecD::SIGNATURE), OperandSignature::new(A64VecQ::SIGNATURE), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), OperandSignature::new(0), 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::Void, TypeId::Void, TypeId::Void, TypeId::Int32, TypeId::Int64, TypeId::Int8, TypeId::Int16, TypeId::Int32, TypeId::Int64, TypeId::Int32x4, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void, TypeId::Void,
TypeId::Void,
TypeId::Void,
TypeId::Void,
TypeId::Void,
TypeId::Void,
TypeId::Void,
];
#[rustfmt::skip]
const TYPE_ID_TO_REG_TYPE: [RegType; 32] = [
RegType::Gp64, RegType::Gp64, RegType::Gp32, RegType::Gp32, RegType::Gp32, RegType::Gp32, RegType::Gp32, RegType::Gp32, RegType::Gp64, RegType::Gp64, RegType::Vec32, RegType::Vec64, 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,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
RegType::None,
];
pub const AARCH64_ARCH_TRAITS: ArchTraits = ArchTraits {
sp_reg_id: Gp::ID_SP as u8, fp_reg_id: Gp::ID_FP as u8, link_reg_id: Gp::ID_LR as u8, ip_reg_id: 0xff,
hw_stack_alignment: 16,
min_stack_offset: 4095,
max_stack_offset: 65520,
regs_signature: SIGNATURES,
reg_type_to_type_id: REG_TYPE_TO_TYPE_ID,
type_id_to_reg_type: TYPE_ID_TO_REG_TYPE,
};