O3CPU: Make the instcount debugging stuff per-cpu.
authorClint Smullen <cws3k@cs.virginia.edu>
Mon, 10 Nov 2008 19:51:18 +0000 (11:51 -0800)
committerClint Smullen <cws3k@cs.virginia.edu>
Mon, 10 Nov 2008 19:51:18 +0000 (11:51 -0800)
This is to prevent the assertion from firing if you have a large multicore.
Also make sure that it's not compiled in when NDEBUG is defined

src/cpu/base_dyn_inst.hh
src/cpu/base_dyn_inst_impl.hh
src/cpu/o3/base_dyn_inst.cc
src/cpu/o3/cpu.cc
src/cpu/o3/cpu.hh
src/cpu/ozone/base_dyn_inst.cc
src/cpu/ozone/cpu.hh
src/cpu/ozone/cpu_impl.hh

index 3520fafaa2c14e882647e1dacc95716d61b9de70..f40616e549f03e9bf245a0058a1fed1f8a14e64e 100644 (file)
@@ -258,9 +258,6 @@ class BaseDynInst : public FastAlloc, public RefCounted
 
   public:
 
-    /** Count of total number of dynamic instructions. */
-    static int instcount;
-
 #ifdef DEBUG
     void dumpSNList();
 #endif
index 66075c60ace011f80e124c0a37a8c12710aa5931..4ee7d2f2c91cd98a6202253c01e947e6a0fec533 100644 (file)
@@ -168,18 +168,21 @@ BaseDynInst<Impl>::initVars()
     // Initialize the fault to be NoFault.
     fault = NoFault;
 
-    ++instcount;
+#ifndef NDEBUG
+    ++cpu->instcount;
 
-    if (instcount > 1500) {
+    if (cpu->instcount > 1500) {
 #ifdef DEBUG
         cpu->dumpInsts();
         dumpSNList();
 #endif
-        assert(instcount <= 1500);
+        assert(cpu->instcount <= 1500);
     }
 
-    DPRINTF(DynInst, "DynInst: [sn:%lli] Instruction created. Instcount=%i\n",
-            seqNum, instcount);
+    DPRINTF(DynInst,
+        "DynInst: [sn:%lli] Instruction created. Instcount for %s = %i\n",
+        seqNum, cpu->name(), cpu->instcount);
+#endif
 
 #ifdef DEBUG
     cpu->snList.insert(seqNum);
@@ -199,10 +202,13 @@ BaseDynInst<Impl>::~BaseDynInst()
 
     fault = NoFault;
 
-    --instcount;
+#ifndef NDEBUG
+    --cpu->instcount;
 
-    DPRINTF(DynInst, "DynInst: [sn:%lli] Instruction destroyed. Instcount=%i\n",
-            seqNum, instcount);
+    DPRINTF(DynInst,
+        "DynInst: [sn:%lli] Instruction destroyed. Instcount for %s = %i\n",
+        seqNum, cpu->name(), cpu->instcount);
+#endif
 #ifdef DEBUG
     cpu->snList.erase(seqNum);
 #endif
index 3cf89e1b6e5f94925e3b0fcf3589efc3a6d4d9ce..510109d8a9744ba6ae029d658de02594066089e7 100644 (file)
@@ -34,7 +34,3 @@
 
 // Explicit instantiation
 template class BaseDynInst<O3CPUImpl>;
-
-template <>
-int
-BaseDynInst<O3CPUImpl>::instcount = 0;
index 26c15526247bca4aa5ba42947e1880bc992ec65d..7320d5638c49ec497440b6cdcaf997f1112260fc 100644 (file)
@@ -159,6 +159,9 @@ FullO3CPU<Impl>::FullO3CPU(DerivO3CPUParams *params)
       itb(params->itb),
       dtb(params->dtb),
       tickEvent(this),
+#ifndef NDEBUG
+      instcount(0),
+#endif
       removeInstsThisCycle(false),
       fetch(this, params),
       decode(this, params),
index c60c20d550dab3c6fa15418463c4362fbea949e8..d24e8c38347ca1c347fe1d9d1b9a7b3222bd681e 100644 (file)
@@ -576,6 +576,11 @@ class FullO3CPU : public BaseO3CPU
     void dumpInsts();
 
   public:
+#ifndef NDEBUG
+    /** Count of total number of dynamic instructions in flight. */
+    int instcount;
+#endif
+
     /** List of all the instructions in flight. */
     std::list<DynInstPtr> instList;
 
index 5a3a69dff8d0eacc9252534d56952ccc9690eb9a..e0570fd1626591bf15b31730d7248bec517e2b4d 100644 (file)
@@ -33,7 +33,3 @@
 
 // Explicit instantiation
 template class BaseDynInst<OzoneImpl>;
-
-template <>
-int
-BaseDynInst<OzoneImpl>::instcount = 0;
index cc371ed93d0c78f9c1cc926e588eb5be8302c573..6b5e7282d4a5fef51e50bd216914fc96a0f78f55 100644 (file)
@@ -287,6 +287,11 @@ class OzoneCPU : public BaseCPU
     // main simulation loop (one cycle)
     void tick();
 
+#ifndef NDEBUG
+    /** Count of total number of dynamic instructions in flight. */
+    int instcount;
+#endif
+
     std::set<InstSeqNum> snList;
     std::set<Addr> lockAddrList;
   private:
index 93848c03ff9198bf2583750c64d9e3e8e06d2d91..1402f4b727ac972dd314baf2c823fb654138a320 100644 (file)
@@ -94,6 +94,9 @@ OzoneCPU<Impl>::OzoneCPU(Params *p)
 #else
     : BaseCPU(p), thread(this, 0, p->workload[0], 0),
       tickEvent(this, p->width),
+#endif
+#ifndef NDEBUG
+      instcount(0),
 #endif
       comm(5, 5)
 {