use std::fmt::{self, Display, Formatter};
use furiosa_opt_macro::primitive;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum RngdAlu {
LogicAnd,
LogicOr,
LogicXor,
LogicLshift,
LogicRshift,
FxpAdd,
FxpLshift,
FxpMul,
FxpRshift,
FpFma,
FpFpu,
FpExp,
FpMul0,
FpMul1,
ClipAdd,
ClipMax,
ClipMin,
ReduceAccTree,
ReduceFpDiv,
}
#[primitive(ve::FpMulAlu)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum FpMulAlu {
Mul0,
Mul1,
Fma,
}
impl Display for FpMulAlu {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
match self {
Self::Mul0 => write!(f, "FpMulAlu::Mul0"),
Self::Mul1 => write!(f, "FpMulAlu::Mul1"),
Self::Fma => write!(f, "FpMulAlu::Fma"),
}
}
}
impl FpMulAlu {
pub fn to_alu(self) -> RngdAlu {
match self {
FpMulAlu::Mul0 => RngdAlu::FpMul0,
FpMulAlu::Mul1 => RngdAlu::FpMul1,
FpMulAlu::Fma => RngdAlu::FpFma,
}
}
}