#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum ExecutionMode {
TreeWalk,
#[default]
Tiered,
TieredNoJit,
NoGcTransaction,
}
impl ExecutionMode {
pub fn target_tier(self) -> TierState {
match self {
ExecutionMode::TreeWalk | ExecutionMode::NoGcTransaction => TierState::TreeWalk,
ExecutionMode::Tiered => TierState::Jit,
ExecutionMode::TieredNoJit => TierState::Ir,
}
}
pub fn is_tiered(self) -> bool {
matches!(self, ExecutionMode::Tiered | ExecutionMode::TieredNoJit)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[repr(u8)]
pub enum TierState {
TreeWalk = 0,
Ir = 1,
Jit = 2,
}
impl TierState {
pub(crate) fn from_u8(raw: u8) -> Self {
match raw {
1 => TierState::Ir,
2 => TierState::Jit,
_ => TierState::TreeWalk,
}
}
pub fn ir_enabled(self) -> bool {
self >= TierState::Ir
}
pub fn jit_enabled(self) -> bool {
self == TierState::Jit
}
}