MCPcopy Create free account
hub / github.com/LPC4/Full-Stack / load_int

Function load_int

crates/virtual-machine/src/cpu/pipeline/memory.rs:239–285  ·  view source on GitHub ↗
(bus: &mut SystemBus, addr: u64, funct3: u8)

Source from the content-addressed store, hash-verified

237 Ok(dw)
238 }
239 4 => {
240 let byte = bus
241 .read_byte(addr)
242 .map_err(|_| VmError::LoadAccessFault(addr))?;
243 Ok(byte as u64)
244 }
245 5 => {
246 let hw = bus
247 .read_halfword(addr)
248 .map_err(|_| VmError::LoadAccessFault(addr))?;
249 Ok(hw as u64)
250 }
251 6 => {
252 let w = bus
253 .read_word(addr)
254 .map_err(|_| VmError::LoadAccessFault(addr))?;
255 Ok(w as u64)
256 }
257 _ => Err(VmError::LoadAccessFault(addr)),
258 }
259}
260
261// --- Integer store ---
262
263fn store_int(bus: &mut SystemBus, addr: u64, val: u64, funct3: u8) -> Result<(), VmError> {
264 match funct3 {
265 0 => bus
266 .write_byte(addr, val as u8)
267 .map_err(|_| VmError::StoreAccessFault(addr)),
268 1 => bus
269 .write_halfword(addr, val as u16)
270 .map_err(|_| VmError::StoreAccessFault(addr)),
271 2 => bus
272 .write_word(addr, val as u32)
273 .map_err(|_| VmError::StoreAccessFault(addr)),
274 3 => bus
275 .write_doubleword(addr, val)
276 .map_err(|_| VmError::StoreAccessFault(addr)),
277 _ => Err(VmError::StoreAccessFault(addr)),
278 }
279}
280
281// --- FP load ---
282
283fn load_fp(bus: &mut SystemBus, addr: u64, funct3: u8) -> Result<u64, VmError> {
284 match funct3 {
285 2 => {
286 // FLW: NaN-box
287 let word = bus
288 .read_word(addr)

Callers 1

memory_stage_with_pmpFunction · 0.85

Calls 4

read_byteMethod · 0.45
read_halfwordMethod · 0.45
read_wordMethod · 0.45
read_doublewordMethod · 0.45

Tested by

no test coverage detected