#[repr(u16)]
#[derive(Copy, Debug)]
#[derive_const(
Clone,
Default,
Eq,
Ord,
PartialEq,
PartialOrd,
)]
pub enum TraceMode {
#[default]
NoTrace = 0b0000_0000_0000_0000,
TraceFlow = 0b0100_0000_0000_0000,
TraceInstruction = 0b1000_0000_0000_0000,
}
impl TraceMode {
#[inline]
#[must_use]
#[track_caller]
pub const fn from_u16(mut value: u16) -> Self {
value &= 0b1100_0000_0000_0000;
match value {
0b0000_0000_0000_0000 => Self::NoTrace,
0b0100_0000_0000_0000 => Self::TraceFlow,
0b1000_0000_0000_0000 => Self::TraceInstruction,
_ => {
panic!("undefined tracing mode");
}
}
}
#[inline(always)]
#[must_use]
pub const fn as_u16(self) -> u16 {
self as u16
}
}