Don't let interupts interupt microcode at undesired points.
authorGabe Black <gblack@eecs.umich.edu>
Mon, 23 Oct 2006 06:39:02 +0000 (02:39 -0400)
committerGabe Black <gblack@eecs.umich.edu>
Mon, 23 Oct 2006 06:39:02 +0000 (02:39 -0400)
--HG--
extra : convert_revision : a8ddc6b213b1a1b0d9c5cd194b88ac0c6bfb2a21

src/cpu/simple/atomic.cc
src/cpu/simple/timing.cc

index 38a8ba097ae4504ca76289b93b9d6618aca98e8d..25c478ae92ace019b767befb293746efced1579d 100644 (file)
@@ -448,7 +448,8 @@ AtomicSimpleCPU::tick()
     for (int i = 0; i < width; ++i) {
         numCycles++;
 
-        checkForInterrupts();
+        if (!curStaticInst || !curStaticInst->isDelayedCommit())
+            checkForInterrupts();
 
         Fault fault = setupFetchRequest(ifetch_req);
 
index 97df0e5d5d4c8937e4058c0c340a32b0184a0a9e..fe6775ea4d158cf478e75be30c4092b296764e0d 100644 (file)
@@ -427,7 +427,8 @@ TimingSimpleCPU::write(int32_t data, Addr addr, unsigned flags, uint64_t *res)
 void
 TimingSimpleCPU::fetch()
 {
-    checkForInterrupts();
+    if (!curStaticInst || !curStaticInst->isDelayedCommit())
+        checkForInterrupts();
 
     Request *ifetch_req = new Request();
     ifetch_req->setThreadContext(cpu_id, /* thread ID */ 0);