use crate::mem::Memory; use std::collections::HashSet; pub struct CpuState { pub memory: Memory, pub registers: [u32; 32], pub f_registers: [f32; 32], pub pc: u32, pub reserved_addr: Option, } impl CpuState { pub fn new(memory: Memory) -> CpuState { CpuState { memory, registers: [0u32; 32], f_registers: [0f32; 32], pc: 0, reserved_addr: None, } } pub fn is_addr_reserved(&self, addr: usize) -> bool { if let Some(reservation) = self.reserved_addr && (reservation..reservation + 4).contains(&addr) { return true } false } pub fn release_reservations(&mut self, indices: &[usize]) { if let Some(addr) = self.reserved_addr { for index in indices { if (addr..addr + 4).contains(index) { self.reserved_addr = None; return; } } } } pub fn acquire_reservations(&mut self, addr: usize) { self.reserved_addr = Some(addr); } }