From b7111860f29bb123365794a8cdabbbf473463204 Mon Sep 17 00:00:00 2001
From: David Li
Date: Wed, 6 Jan 2016 10:51:37 -0700
Subject: Get rid of Box in memory refs
---
src/simulator.rs | 63 +++++++++++++++++++++++++++++++++++---------------------
1 file changed, 39 insertions(+), 24 deletions(-)
(limited to 'src/simulator.rs')
diff --git a/src/simulator.rs b/src/simulator.rs
index 0101c44..4feb1c0 100644
--- a/src/simulator.rs
+++ b/src/simulator.rs
@@ -368,34 +368,49 @@ impl<'a> Simulator<'a> {
}
}
- pub fn run(&mut self) {
- loop {
- let mut ran = false;
- for core in self.cores.iter_mut() {
- if !core.running {
- continue;
- }
+ fn step(&mut self) -> bool {
+ let mut ran = false;
+ for core in self.cores.iter_mut() {
+ if !core.running {
+ continue;
+ }
- let pc = core.pc;
- let pc = core.mmu.translate(pc);
- let inst = self.memory.borrow_mut().read_instruction(pc);
+ let pc = core.pc;
+ let pc = core.mmu.translate(pc);
+ let inst = self.memory.borrow_mut().read_instruction(pc);
- if let Some(inst) = inst {
- core.step(inst);
- }
- else {
- // TODO: trap
- }
+ if let Some(inst) = inst {
+ core.step(inst);
+ }
+ else {
+ // TODO: trap
+ }
- core.cache.borrow_mut().step();
- ran = true;
+ core.cache.borrow_mut().step();
+ ran = true;
+ }
+ if !ran {
+ println!("All cores are not running, stopping...");
+ for (i, core) in self.cores.iter().enumerate() {
+ println!("Core {}: stalled {} of {}", i, core.stall_count, core.cycle_count);
}
- if !ran {
- println!("All cores are not running, stopping...");
- for (i, core) in self.cores.iter().enumerate() {
- println!("Core {}: stalled {} of {}", i, core.stall_count, core.cycle_count);
- }
- break;
+ }
+
+ ran
+ }
+
+ pub fn run(&mut self) {
+ loop {
+ if !self.step() {
+ break
+ }
+ }
+ }
+
+ pub fn run_max(&mut self, cycles: usize) {
+ for _ in 0..cycles {
+ if !self.step() {
+ break
}
}
}
--
cgit v1.2.3