O3CPU: Make the instcount debugging stuff per-cpu.
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
This commit is contained in:
parent
9c49bc7b00
commit
1adfe5c7f3
8 changed files with 30 additions and 19 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -34,7 +34,3 @@
|
|||
|
||||
// Explicit instantiation
|
||||
template class BaseDynInst<O3CPUImpl>;
|
||||
|
||||
template <>
|
||||
int
|
||||
BaseDynInst<O3CPUImpl>::instcount = 0;
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -33,7 +33,3 @@
|
|||
|
||||
// Explicit instantiation
|
||||
template class BaseDynInst<OzoneImpl>;
|
||||
|
||||
template <>
|
||||
int
|
||||
BaseDynInst<OzoneImpl>::instcount = 0;
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue