#[cfg(feature = "serde")]
mod serde_utils;
use core::num::NonZeroU8;
#[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Parameters {
pub cache_size_p: u8,
pub call_counter_size_p: u8,
pub context_width_p: NonZeroU8,
pub time_width_p: NonZeroU8,
pub ecause_width_p: NonZeroU8,
pub f0s_width_p: u8,
pub iaddress_lsb_p: NonZeroU8,
pub iaddress_width_p: NonZeroU8,
#[cfg_attr(feature = "serde", serde(with = "serde_utils::Flag"))]
pub nocontext_p: bool,
#[cfg_attr(feature = "serde", serde(with = "serde_utils::Flag"))]
pub notime_p: bool,
pub privilege_width_p: NonZeroU8,
pub return_stack_size_p: u8,
#[cfg_attr(feature = "serde", serde(with = "serde_utils::Flag"))]
pub sijump_p: bool,
}
impl Default for Parameters {
fn default() -> Self {
PARAMETERS
}
}
pub const PARAMETERS: Parameters = Parameters {
cache_size_p: 0,
call_counter_size_p: 0,
context_width_p: NonZeroU8::MIN,
time_width_p: NonZeroU8::MIN,
ecause_width_p: NonZeroU8::new(6).unwrap(),
f0s_width_p: 0,
iaddress_lsb_p: NonZeroU8::MIN,
iaddress_width_p: NonZeroU8::new(32).unwrap(),
nocontext_p: true,
notime_p: true,
privilege_width_p: NonZeroU8::new(2).unwrap(),
return_stack_size_p: 0,
sijump_p: false,
};
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
pub struct Features {
pub sequentially_inferred_jumps: bool,
pub implicit_returns: bool,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum AddressMode {
Full,
Delta,
}
impl AddressMode {
pub const fn from_full(full: bool) -> Self {
if full {
Self::Full
} else {
Self::Delta
}
}
}
impl Default for AddressMode {
fn default() -> Self {
Self::Delta
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum Version {
V1,
V2,
}
impl Default for Version {
fn default() -> Self {
Self::V2
}
}