pub struct Instruction(u32);
impl Instruction {
pub fn new(raw: u32) -> Self {
Instruction(raw)
}
pub fn raw(&self) -> u32 {
self.0
}
pub fn opcode(&self) -> u8 {
(self.0 >> 26) as u8
}
pub fn funct(&self) -> u8 {
(self.0 & 0x3f) as u8
}
pub fn rs(&self) -> usize {
((self.0 >> 21) & 0x1f) as usize
}
pub fn rt(&self) -> usize {
((self.0 >> 16) & 0x1f) as usize
}
pub fn rd(&self) -> usize {
((self.0 >> 11) & 0x1f) as usize
}
pub fn shamt(&self) -> usize {
((self.0 >> 6) & 0x1f) as usize
}
pub fn simm16(&self) -> i32 {
(self.0 & 0xffff) as i16 as i32
}
pub fn imm16(&self) -> u32 {
self.0 & 0xffff
}
pub fn jump_target(&self) -> u32 {
self.0 & 0x03ffffff
}
pub fn cop_execute(&self) -> bool {
(self.0 >> 25) & 1 != 0
}
pub fn cop_funct(&self) -> u8 {
((self.0 >> 21) & 0x0f) as u8
}
pub fn cop_instruction(&self) -> u32 {
self.0 & 0x01ffffff
}
}