diff --git a/rvdc/src/lib.rs b/rvdc/src/lib.rs index 05b06a9..344ade7 100644 --- a/rvdc/src/lib.rs +++ b/rvdc/src/lib.rs @@ -791,10 +791,9 @@ impl InstCode { (self.0 << (end_span)) >> (end_span + range.start()) } fn insert(self, range: RangeInclusive, data: u32) -> Self { - let (start,end) = (*range.start(),*range.end()); // let start = ; - let span_item = (1 << (end - start + 1)) - 1; - Self(self.0 & !(span_item << start) | ((data & span_item) << start)) + let span_item = (1 << (range.end() - range.start())) - 1; + Self(self.0 & !(span_item << range.start()) | ((data & span_item) << range.start())) } fn immediate_s(self, mappings: &[(RangeInclusive, u32)]) -> Imm { let mut imm = 0; @@ -808,16 +807,8 @@ impl InstCode { Imm::new_i32(sign_extend(imm, size) as i32) } fn with_immediate_s(self, mappings: &[(RangeInclusive, u32)], data: Imm) -> Self { - let mut size = 0; - for (from, to) in mappings { - let this_size = from.end() - from.start() + 1; - size = size.max(*to + this_size); - } mappings.iter().fold(self, |this, (from, to)| { - this.insert( - from.clone(), - data.as_u32() >> *to, - ) + this.insert(from.clone(), data.as_u32() >> to) }) } @@ -2123,13 +2114,7 @@ mod tests { let i2 = Inst::decode(i, xlen); if let Ok((i2, crate::IsCompressed::No)) = i2 { if is_inst_supposed_to_roundtrip(&i2) { - assert_eq!( - i2, - Inst::decode(i2.encode_normal(xlen), xlen) - .expect("to succeed") - .0, - "encoded inst different: {i2} from {i} encodes differently" - ); + assert_eq!(i2.encode_normal(xlen), i); } } } @@ -2137,13 +2122,7 @@ mod tests { let i = u32::MAX; if let Ok((i2, crate::IsCompressed::No)) = i2 { if is_inst_supposed_to_roundtrip(&i2) { - assert_eq!( - i2, - Inst::decode(i2.encode_normal(xlen), xlen) - .expect("to succeed") - .0, - "encoded inst different: {i2} from {i} encodes differently" - ); + assert_eq!(i2.encode_normal(xlen), i); } } }