From f0007668e61816594734612e7592cbeac1ca5a94 Mon Sep 17 00:00:00 2001 From: Nathan Lee Date: Fri, 12 Jun 2026 20:47:32 -0500 Subject: fix memory reservation system --- src/state.rs | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'src/state.rs') diff --git a/src/state.rs b/src/state.rs index 8a6c332..6b1fb81 100644 --- a/src/state.rs +++ b/src/state.rs @@ -6,7 +6,7 @@ pub struct CpuState { pub registers: [u32; 32], pub f_registers: [f32; 32], pub pc: u32, - pub reservations: HashSet, + pub reserved_addr: Option, } impl CpuState { @@ -16,18 +16,30 @@ impl CpuState { registers: [0u32; 32], f_registers: [0f32; 32], pc: 0, - reservations: HashSet::new(), + reserved_addr: None, } } - pub fn release_reservations(&mut self, indices: &[usize]) { - for index in indices { - self.reservations.remove(&index); + 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 acquire_reservations(&mut self, indices: &[usize]) { - for index in indices { - self.reservations.insert(*index); + + 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); + } } -- cgit v1.2.3