You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
868 B
39 lines
868 B
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, ")")
|
|
}
|
|
}
|
|
|