diff options
Diffstat (limited to 'src/decode.rs')
| -rw-r--r-- | src/decode.rs | 52 |
1 files changed, 25 insertions, 27 deletions
diff --git a/src/decode.rs b/src/decode.rs index e24bac0..616f7f7 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -4,12 +4,10 @@ // This file is part of TRVE (https://gitea.taitep.se/taitep/trve) // See LICENSE file in the project root for full license text. -use crate::consts::{DWord, RegId, Word}; - -const MASK_REGISTER: Word = 0x1f; +const MASK_REGISTER: u32 = 0x1f; #[derive(Debug, Clone, Copy)] -pub struct Instruction(pub Word); +pub struct Instruction(pub u32); #[allow(dead_code)] impl Instruction { @@ -26,8 +24,8 @@ impl Instruction { } #[inline] - pub fn rd(self) -> RegId { - (self.0 >> 7 & MASK_REGISTER) as RegId + pub fn rd(self) -> u8 { + (self.0 >> 7 & MASK_REGISTER) as u8 } #[inline] @@ -36,13 +34,13 @@ impl Instruction { } #[inline] - pub fn rs1(self) -> RegId { - (self.0 >> 15 & MASK_REGISTER) as RegId + pub fn rs1(self) -> u8 { + (self.0 >> 15 & MASK_REGISTER) as u8 } #[inline] - pub fn rs2(self) -> RegId { - (self.0 >> 20 & MASK_REGISTER) as RegId + pub fn rs2(self) -> u8 { + (self.0 >> 20 & MASK_REGISTER) as u8 } #[inline] @@ -51,38 +49,38 @@ impl Instruction { } #[inline] - pub fn imm_i(self) -> DWord { - (self.0 as i32 as i64 >> 20) as DWord + pub fn imm_i(self) -> u64 { + (self.0 as i32 as i64 >> 20) as u64 } #[inline] - pub fn imm_s(self) -> DWord { - let imm_11_5 = (self.0 as i32 as i64 >> 25 << 5) as DWord; - let imm_4_0 = (self.0 >> 7 & 0x1f) as DWord; + pub fn imm_s(self) -> u64 { + let imm_11_5 = (self.0 as i32 as i64 >> 25 << 5) as u64; + let imm_4_0 = (self.0 >> 7 & 0x1f) as u64; imm_11_5 | imm_4_0 } #[inline] - pub fn imm_b(self) -> DWord { - let imm_12 = ((self.0 & 0x8000_0000) as i32 as i64 >> (31 - 12)) as DWord; - let imm_10_5 = ((self.0 >> 25 & 0x3f) << 5) as DWord; - let imm_4_1 = ((self.0 >> 8 & 0xf) << 1) as DWord; - let imm_11 = ((self.0 >> 7 & 1) << 11) as DWord; + pub fn imm_b(self) -> u64 { + let imm_12 = ((self.0 & 0x8000_0000) as i32 as i64 >> (31 - 12)) as u64; + let imm_10_5 = ((self.0 >> 25 & 0x3f) << 5) as u64; + let imm_4_1 = ((self.0 >> 8 & 0xf) << 1) as u64; + let imm_11 = ((self.0 >> 7 & 1) << 11) as u64; imm_12 | imm_10_5 | imm_4_1 | imm_11 } #[inline] - pub fn imm_u(self) -> DWord { - (self.0 & 0xffff_f000) as i32 as i64 as DWord + pub fn imm_u(self) -> u64 { + (self.0 & 0xffff_f000) as i32 as i64 as u64 } #[inline] - pub fn imm_j(self) -> DWord { - let imm_20 = ((self.0 & 0x8000_0000) as i32 as i64 >> (31 - 20)) as DWord; - let imm_10_1 = ((self.0 >> 21 & 0x3ff) << 1) as DWord; - let imm_11 = ((self.0 >> 20 & 1) << 11) as DWord; - let imm_19_12 = ((self.0 >> 12 & 0xff) << 12) as DWord; + pub fn imm_j(self) -> u64 { + let imm_20 = ((self.0 & 0x8000_0000) as i32 as i64 >> (31 - 20)) as u64; + let imm_10_1 = ((self.0 >> 21 & 0x3ff) << 1) as u64; + let imm_11 = ((self.0 >> 20 & 1) << 11) as u64; + let imm_19_12 = ((self.0 >> 12 & 0xff) << 12) as u64; imm_20 | imm_10_1 | imm_11 | imm_19_12 } |
