diff options
| author | taitep <taitep@taitep.se> | 2025-12-21 14:00:47 +0100 |
|---|---|---|
| committer | taitep <taitep@taitep.se> | 2025-12-21 14:00:47 +0100 |
| commit | d03863f5a211809db49da118f7e0d754abc65e51 (patch) | |
| tree | cd453f114fbc7e9292c7253981b1b1a7679cad3e /src/decode.rs | |
| parent | 87e6d03dbd6498b06c9d4ec477d3be37b2b99686 (diff) | |
Implement SLLI and fix sign extension of immediates for I-type and S-type instructions
Diffstat (limited to 'src/decode.rs')
| -rw-r--r-- | src/decode.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/decode.rs b/src/decode.rs index 31a7bd2..fd12d6b 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -52,12 +52,12 @@ impl Instruction { #[inline] pub fn imm_i(self) -> DWord { - (self.0 as i64 >> 20) as DWord + (self.0 as i32 as i64 >> 20) as DWord } #[inline] pub fn imm_s(self) -> DWord { - (self.0 as i64 >> (25 - 5) & (0x7f << 5)) as DWord | (self.0 >> 7 & 0b1111) as DWord + (self.0 as i32 as i64 >> (25 - 5) & (0x7f << 5)) as DWord | (self.0 >> 7 & 0b1111) as DWord } #[inline] @@ -88,12 +88,12 @@ impl Instruction { // The following are AFAIK only used for shift by immediate operations #[inline] - fn funct6(self) -> u8 { + pub fn funct6(self) -> u8 { (self.0 >> 26 & 0x3f) as u8 } #[inline] - fn imm_shamt(self) -> usize { + pub fn imm_shamt(self) -> usize { (self.0 >> 20 & 0x3f) as usize } } |
