| 74 | |
| 75 | impl<I> FuzzwareMmioHandler<I> { |
| 76 | pub fn add_extract_model(&mut self, pc: u64, min_bit: u8, max_bit: u8) { |
| 77 | let kind = if max_bit < min_bit { |
| 78 | // No bits are used (zero-sized load). |
| 79 | tracing::warn!("[{pc:#x}] removed zero sized load"); |
| 80 | ModelKind::Constant { val: 0 } |
| 81 | } |
| 82 | else { |
| 83 | let required_bits = max_bit - min_bit + 1; |
| 84 | let size = required_bits.next_multiple_of(8) / 8; |
| 85 | let mask = (pcode::mask(required_bits as u64) as u32) << min_bit; |
| 86 | tracing::info!("adjusting load [{pc:#x}] size={size}, shift={min_bit}, mask={mask:#b}"); |
| 87 | ModelKind::Bitextract { size, left_shift: min_bit, mask } |
| 88 | }; |
| 89 | self.models.push(Model { pc: pc as u32, addr: u32::MAX, kind }) |
| 90 | } |
| 91 | |
| 92 | pub fn new( |
| 93 | models: &config::MmioModels, |