use std::fmt::{Debug, Formatter}; use std::fmt; use crate::asm::data::{DataDisp, Mask, Rd, WrData}; /// Data destination argument (read-write) #[derive(Clone, Copy, Eq, PartialEq)] pub struct Wr(WrData, Mask); impl Wr { pub fn new(dst: WrData) -> Self { Wr(dst, Mask::default()) } pub fn d(self) -> WrData { self.0 } pub fn mask(self) -> Mask { self.1 } pub fn as_rd(&self) -> Rd { Rd(self.0.into(), self.1) } pub fn discard() -> Wr { Wr(WrData::Discard, Mask::default()) } } impl Debug for Wr { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { write!(f, "Wr(")?; let disp: DataDisp = self.0.into(); write!(f, "{}", disp)?; if !self.mask().is_default() { write!(f, ",{:?}", self.mask())?; } write!(f, ")") } }