mirror of
https://github.com/Zenithsiz/dcb.git
synced 2026-02-07 18:31:14 +00:00
51 lines
1001 B
Rust
51 lines
1001 B
Rust
//! Jmp register instructions
|
|
|
|
// Modules
|
|
pub mod imm;
|
|
pub mod reg;
|
|
|
|
// Exports
|
|
pub use imm::{JmpImmInst, JmpImmInstRaw};
|
|
pub use reg::{JmpRegInst, JmpRegInstRaw};
|
|
|
|
/// Raw representation
|
|
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
|
|
pub enum JmpInstRaw {
|
|
/// Immediate
|
|
Imm(JmpImmInstRaw),
|
|
|
|
/// Register
|
|
Reg(JmpRegInstRaw),
|
|
}
|
|
|
|
/// Jmp register instructions
|
|
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
|
|
#[derive(derive_more::Display)]
|
|
pub enum JmpInst {
|
|
/// Immediate
|
|
Imm(JmpImmInst),
|
|
|
|
/// Register
|
|
Reg(JmpRegInst),
|
|
}
|
|
|
|
impl JmpInst {
|
|
/// Decodes this instruction
|
|
#[must_use]
|
|
pub fn decode(raw: JmpInstRaw) -> Option<Self> {
|
|
match raw {
|
|
JmpInstRaw::Imm(raw) => Self::Imm(JmpImmInst::decode(raw)?),
|
|
JmpInstRaw::Reg(raw) => Self::Reg(JmpRegInst::decode(raw)?),
|
|
}
|
|
}
|
|
|
|
/// Encodes this instruction
|
|
#[must_use]
|
|
pub fn encode(self) -> JmpInstRaw {
|
|
match self {
|
|
JmpInst::Imm(inst) => JmpInstRaw::Imm(inst.encode()),
|
|
JmpInst::Reg(inst) => JmpInstRaw::Reg(inst.encode()),
|
|
}
|
|
}
|
|
}
|