Merge zizzer.eecs.umich.edu:/z/m5/Bitkeeper/m5
into zizzer.eecs.umich.edu:/z/ehallnor/work/m5 --HG-- extra : convert_revision : fa4e85d5f5c783985357eb5205fcf8957f214d1e
This commit is contained in:
@@ -400,6 +400,15 @@ SimpleCPU::copy(Addr dest)
|
||||
xc->mem->read(memReq, data);
|
||||
memReq->paddr = dest_addr;
|
||||
xc->mem->write(memReq, data);
|
||||
if (dcacheInterface) {
|
||||
memReq->cmd = Copy;
|
||||
memReq->completionEvent = NULL;
|
||||
memReq->paddr = xc->copySrcPhysAddr;
|
||||
memReq->dest = dest_addr;
|
||||
memReq->size = 64;
|
||||
memReq->time = curTick;
|
||||
dcacheInterface->access(memReq);
|
||||
}
|
||||
}
|
||||
return fault;
|
||||
}
|
||||
|
||||
@@ -52,7 +52,13 @@ OptCPU::OptCPU(const string &name,
|
||||
numBlks(cache_size/block_size), assoc(_assoc), numSets(numBlks/assoc),
|
||||
setMask(numSets - 1)
|
||||
{
|
||||
int log_block_size = (int)(log((double) block_size)/log(2.0));
|
||||
int log_block_size = 0;
|
||||
int tmp_block_size = block_size;
|
||||
while (tmp_block_size > 1) {
|
||||
++log_block_size;
|
||||
tmp_block_size = tmp_block_size >> 1;
|
||||
}
|
||||
assert(1<<log_block_size == block_size);
|
||||
MemReqPtr req;
|
||||
trace->getNextReq(req);
|
||||
refInfo.resize(numSets);
|
||||
@@ -124,7 +130,7 @@ OptCPU::processSet(int set)
|
||||
for (int start = assoc/2; start >= 0; --start) {
|
||||
heapify(set,start);
|
||||
}
|
||||
verifyHeap(set,0);
|
||||
//verifyHeap(set,0);
|
||||
|
||||
for (; i < refInfo[set].size(); ++i) {
|
||||
RefIndex cache_index = lookupValue(refInfo[set][i].addr);
|
||||
@@ -134,8 +140,11 @@ OptCPU::processSet(int set)
|
||||
// replace from cacheHeap[0]
|
||||
// mark replaced block as absent
|
||||
setValue(refInfo[set][cacheHeap[0]].addr, -1);
|
||||
setValue(refInfo[set][i].addr, 0);
|
||||
cacheHeap[0] = i;
|
||||
heapify(set, 0);
|
||||
// Make sure its in the cache
|
||||
assert(lookupValue(refInfo[set][i].addr) != -1);
|
||||
} else {
|
||||
// hit
|
||||
hits++;
|
||||
@@ -143,9 +152,11 @@ OptCPU::processSet(int set)
|
||||
refInfo[set][i].addr);
|
||||
assert(refInfo[set][cacheHeap[cache_index]].nextRefTime == i);
|
||||
assert(heapLeft(cache_index) >= assoc);
|
||||
|
||||
cacheHeap[cache_index] = i;
|
||||
processRankIncrease(set, cache_index);
|
||||
assert(lookupValue(refInfo[set][i].addr) != -1);
|
||||
}
|
||||
cacheHeap[cache_index] = i;
|
||||
processRankIncrease(set, cache_index);
|
||||
}
|
||||
}
|
||||
void
|
||||
|
||||
@@ -75,9 +75,14 @@ TraceCPU::tick()
|
||||
icacheInterface->squash(nextReq->asid);
|
||||
} else {
|
||||
++instReqs;
|
||||
nextReq->completionEvent =
|
||||
new TraceCompleteEvent(nextReq, this);
|
||||
icacheInterface->access(nextReq);
|
||||
if (icacheInterface->doEvents()) {
|
||||
nextReq->completionEvent =
|
||||
new TraceCompleteEvent(nextReq, this);
|
||||
icacheInterface->access(nextReq);
|
||||
} else {
|
||||
icacheInterface->access(nextReq);
|
||||
completeRequest(nextReq);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (dcacheInterface->isBlocked())
|
||||
@@ -85,9 +90,15 @@ TraceCPU::tick()
|
||||
|
||||
++dataReqs;
|
||||
nextReq->time = curTick;
|
||||
nextReq->completionEvent =
|
||||
new TraceCompleteEvent(nextReq, this);
|
||||
dcacheInterface->access(nextReq);
|
||||
if (dcacheInterface->doEvents()) {
|
||||
nextReq->completionEvent =
|
||||
new TraceCompleteEvent(nextReq, this);
|
||||
dcacheInterface->access(nextReq);
|
||||
} else {
|
||||
dcacheInterface->access(nextReq);
|
||||
completeRequest(nextReq);
|
||||
}
|
||||
|
||||
}
|
||||
nextCycle = dataTrace->getNextReq(nextReq);
|
||||
}
|
||||
|
||||
@@ -294,6 +294,10 @@ Statistics::serialize(ostream &os)
|
||||
{
|
||||
int exemode = themode;
|
||||
SERIALIZE_SCALAR(exemode);
|
||||
SERIALIZE_SCALAR(idleProcess);
|
||||
SERIALIZE_SCALAR(iplLast);
|
||||
SERIALIZE_SCALAR(iplLastTick);
|
||||
SERIALIZE_SCALAR(lastModeTick);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -301,6 +305,10 @@ Statistics::unserialize(Checkpoint *cp, const string §ion)
|
||||
{
|
||||
int exemode;
|
||||
UNSERIALIZE_SCALAR(exemode);
|
||||
UNSERIALIZE_SCALAR(idleProcess);
|
||||
UNSERIALIZE_SCALAR(iplLast);
|
||||
UNSERIALIZE_SCALAR(iplLastTick);
|
||||
UNSERIALIZE_SCALAR(lastModeTick);
|
||||
themode = (cpu_mode)exemode;
|
||||
}
|
||||
|
||||
|
||||
@@ -70,6 +70,7 @@ void
|
||||
IdleStartEvent::process(ExecContext *xc)
|
||||
{
|
||||
xc->kernelStats->setIdleProcess(xc->regs.ipr[AlphaISA::IPR_PALtemp23]);
|
||||
remove();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user