From 05a9968d6dafb31d0e33590d80f6eb364de50d8a Mon Sep 17 00:00:00 2001 From: David Li Date: Fri, 15 Jan 2016 17:21:00 -0700 Subject: Allow stalls that do not retry instruction --- src/simulator.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/simulator.rs') diff --git a/src/simulator.rs b/src/simulator.rs index 63b5eec..41331ef 100644 --- a/src/simulator.rs +++ b/src/simulator.rs @@ -290,9 +290,11 @@ impl<'a> Core<'a> { match result { Ok(value) => self.registers.write_word(inst.rd(), value), - Err(MemoryError::CacheMiss { stall_cycles }) => { + Err(MemoryError::CacheMiss { stall_cycles, retry }) => { self.stall = stall_cycles - 1; - return; // don't increment PC + if retry { + return; // don't increment PC + } }, Err(MemoryError::InvalidAddress) => { self.trap(Trap::IllegalRead { @@ -325,9 +327,11 @@ impl<'a> Core<'a> { match result { Ok(()) => (), - Err(MemoryError::CacheMiss { stall_cycles }) => { + Err(MemoryError::CacheMiss { stall_cycles, retry }) => { self.stall = stall_cycles - 1; - return; // don't increment PC + if retry { + return; // don't increment PC + } }, Err(MemoryError::InvalidAddress) => { self.trap(Trap::IllegalWrite { -- cgit v1.2.3