summaryrefslogtreecommitdiff
path: root/src/state.rs
diff options
context:
space:
mode:
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);
+ }
}