mirror of
https://github.com/Noratrieb/rustv32i.git
synced 2026-01-14 21:35:02 +01:00
j immediate decoding fix
This commit is contained in:
parent
13aec667db
commit
9cdc795824
3 changed files with 59 additions and 10 deletions
11
src/inst.rs
11
src/inst.rs
|
|
@ -394,13 +394,8 @@ impl Display for AmoOp {
|
|||
}
|
||||
|
||||
fn sign_extend(value: u32, size: u32) -> u32 {
|
||||
assert!(size <= u32::BITS);
|
||||
let sign = value >> (size - 1);
|
||||
if sign == 1 {
|
||||
(u32::MAX << size) | value
|
||||
} else {
|
||||
value
|
||||
}
|
||||
let right = u32::BITS - size;
|
||||
(((value << right) as i32) >> right) as u32
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
|
|
@ -462,7 +457,7 @@ impl InstCode {
|
|||
self.immediate_u(&[(12..=31, 12)])
|
||||
}
|
||||
fn imm_j(self) -> u32 {
|
||||
self.immediate_u(&[(31..=31, 20), (21..=30, 1), (20..=20, 11), (12..=19, 12)])
|
||||
self.immediate_s(&[(31..=31, 20), (21..=30, 1), (20..=20, 11), (12..=19, 12)])
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue