summaryrefslogtreecommitdiff
path: root/src/state.rs
diff options
context:
space:
mode:
authorNathan Lee <me@nwlee.tech>2026-06-12 20:47:32 -0500
committerNathan Lee <me@nwlee.tech>2026-06-12 20:47:32 -0500
commitf0007668e61816594734612e7592cbeac1ca5a94 (patch)
treefb17d39b30e1f29da100f8d6fd0dd927fab7b7ad /src/state.rs
parent7e2032ec239b78cbda1bef5667ed96d13ebc5bf9 (diff)
fix memory reservation system
Diffstat (limited to 'src/state.rs')
-rw-r--r--src/state.rs28
1 files changed, 20 insertions, 8 deletions
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<usize>,
+ pub reserved_addr: Option<usize>,
}
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);
+ }
}