use super::{InstFormat, Opcode};
use core::fmt::{self, Display, Formatter};
#[allow(non_camel_case_types, clippy::upper_case_acronyms)]
#[derive(Debug, PartialEq)]
pub enum ZicfissOpcode {
SSPUSH,
C_SSPUSH,
SSPOPCHK,
C_SSPOPCHK,
SSRDP,
SSAMOSWAP_W,
SSAMOSWAP_D,
}
impl Display for ZicfissOpcode {
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
match self {
ZicfissOpcode::SSPUSH => write!(f, "sspush"),
ZicfissOpcode::C_SSPUSH => write!(f, "c.sspush"),
ZicfissOpcode::SSPOPCHK => write!(f, "sspopchk"),
ZicfissOpcode::C_SSPOPCHK => write!(f, "c.sspopchk"),
ZicfissOpcode::SSRDP => write!(f, "ssrdp"),
ZicfissOpcode::SSAMOSWAP_W => write!(f, "ssamoswap.w"),
ZicfissOpcode::SSAMOSWAP_D => write!(f, "ssamoswap.d"),
}
}
}
impl Opcode for ZicfissOpcode {
fn get_format(&self) -> InstFormat {
match self {
ZicfissOpcode::SSPUSH => InstFormat::OnlyRs1,
ZicfissOpcode::SSPOPCHK => InstFormat::OnlyRs2,
ZicfissOpcode::SSRDP => InstFormat::OnlyRd,
ZicfissOpcode::SSAMOSWAP_W | ZicfissOpcode::SSAMOSWAP_D => InstFormat::AFormat,
ZicfissOpcode::C_SSPUSH | ZicfissOpcode::C_SSPOPCHK => InstFormat::NoOperand,
}
}
}