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.
59 lines
1.1 KiB
59 lines
1.1 KiB
use std::fmt::{Debug, Display, Formatter};
|
|
use std::fmt;
|
|
|
|
use crate::asm::data::{Rd, WrData, Wr};
|
|
|
|
/// Data destination argument (read-write)
|
|
#[derive(Clone, Copy, Eq, PartialEq)]
|
|
pub struct RdWr(pub WrData);
|
|
|
|
impl RdWr {
|
|
pub fn new(dst: WrData) -> Self {
|
|
if !dst.is_readable() {
|
|
panic!("Not readable: {}", dst);
|
|
}
|
|
RdWr(dst)
|
|
}
|
|
pub fn wr(self) -> Wr {
|
|
Wr(self.0)
|
|
}
|
|
pub fn rd(self) -> Rd {
|
|
Rd(self.0.into())
|
|
}
|
|
}
|
|
|
|
impl From<RdWr> for Rd {
|
|
fn from(rdwr: RdWr) -> Self {
|
|
rdwr.rd()
|
|
}
|
|
}
|
|
|
|
impl From<RdWr> for Wr {
|
|
fn from(rdwr: RdWr) -> Self {
|
|
rdwr.wr()
|
|
}
|
|
}
|
|
|
|
impl From<&RdWr> for Rd {
|
|
fn from(rdwr: &RdWr) -> Self {
|
|
rdwr.rd()
|
|
}
|
|
}
|
|
|
|
impl From<&RdWr> for Wr {
|
|
fn from(rdwr: &RdWr) -> Self {
|
|
rdwr.wr()
|
|
}
|
|
}
|
|
|
|
impl Display for RdWr {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
|
write!(f, "{}", self.0)
|
|
}
|
|
}
|
|
|
|
impl Debug for RdWr {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
|
write!(f, "RdWr({})", self.0)
|
|
}
|
|
}
|
|
|