#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum SystemOp {
#[default]
None,
Mret,
Sret,
Wfi,
Fence,
FenceI,
SfenceVma,
CboZero,
CboInval,
CboClean,
CboFlush,
Ecall,
Csr,
}
impl SystemOp {
pub const fn serializes_after(self) -> bool {
matches!(
self,
Self::Csr
| Self::Ecall
| Self::Mret
| Self::Sret
| Self::Wfi
| Self::SfenceVma
| Self::FenceI
)
}
pub const fn is_cbo(self) -> bool {
matches!(self, Self::CboZero | Self::CboInval | Self::CboClean | Self::CboFlush)
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
pub enum CsrOp {
#[default]
None,
Rw,
Rs,
Rc,
Rwi,
Rsi,
Rci,
}