| 53 | match addr { |
| 54 | a if a == MTIME_BASE => Ok(self.mtime as u32), |
| 55 | a if a == MTIME_BASE + 4 => Ok((self.mtime >> 32) as u32), |
| 56 | a if a == MTIMECMP_BASE => Ok(self.mtimecmp as u32), |
| 57 | a if a == MTIMECMP_BASE + 4 => Ok((self.mtimecmp >> 32) as u32), |
| 58 | a if a == MSIP_BASE => Ok(self.msip), |
| 59 | _ => Err(VmError::LoadAccessFault(addr)), |
| 60 | } |
| 61 | } |
| 62 | |
| 63 | fn read_doubleword(&mut self, addr: u64) -> Result<u64, VmError> { |
| 64 | let lo = self.read_word(addr)? as u64; |
| 65 | let hi = self.read_word(addr + 4)? as u64; |
| 66 | Ok(lo | (hi << 32)) |
| 67 | } |