Croissant Runtime
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.
 
 
crsn/crsn/src/asm/data/wr.rs

50 lines
934 B

use std::fmt::{Debug, Display, Formatter};
use std::fmt;
use crate::asm::data::{Rd, WrData};
/// Data destination argument (read-write)
#[derive(Clone, Copy, Eq, PartialEq)]
pub struct Wr(pub WrData);
impl Wr {
pub fn new(dst: WrData) -> Self {
Wr(dst)
}
pub fn discard() -> Wr {
Wr(WrData::Discard)
}
pub fn as_rd(self) -> Rd {
Rd(self.0.into())
}
pub fn is_readable(self) -> bool {
self.0.is_readable()
}
pub fn is_discard(self) -> bool {
match self.0 {
WrData::Discard => true,
_ => false
}
}
}
impl From<&Wr> for Wr {
fn from(a: &Wr) -> Self {
*a
}
}
impl Display for Wr {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.0)
}
}
impl Debug for Wr {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
write!(f, "Wr({})", self.0)
}
}