summaryrefslogtreecommitdiff
path: root/cpu/simple_cpu/simple_cpu.cc
diff options
context:
space:
mode:
authorNathan Binkert <binkertn@umich.edu>2004-11-18 00:25:17 -0500
committerNathan Binkert <binkertn@umich.edu>2004-11-18 00:25:17 -0500
commit2a649076a47ee7a2dbf9c630e1dc06b403b4dc25 (patch)
tree6e6cbedcdba8a24300a2c53982366c5e5301893e /cpu/simple_cpu/simple_cpu.cc
parent9bf39b1c601d329bb8d670fb91fca4eb4148c876 (diff)
parent44ef49bd2b66799add0077ecf60c2a111d9a2844 (diff)
downloadgem5-2a649076a47ee7a2dbf9c630e1dc06b403b4dc25.tar.xz
Merge zizzer.eecs.umich.edu:/bk/m5
into ziff.eecs.umich.edu:/z/binkertn/research/m5/latest --HG-- extra : convert_revision : a8a8e26bda81546b4de45983e99e57e24ddf8567
Diffstat (limited to 'cpu/simple_cpu/simple_cpu.cc')
-rw-r--r--cpu/simple_cpu/simple_cpu.cc49
1 files changed, 12 insertions, 37 deletions
diff --git a/cpu/simple_cpu/simple_cpu.cc b/cpu/simple_cpu/simple_cpu.cc
index 4bd7ce638..d48f93663 100644
--- a/cpu/simple_cpu/simple_cpu.cc
+++ b/cpu/simple_cpu/simple_cpu.cc
@@ -103,7 +103,7 @@ SimpleCPU::CacheCompletionEvent::CacheCompletionEvent(SimpleCPU *_cpu)
void SimpleCPU::CacheCompletionEvent::process()
{
- cpu->processCacheCompletion(read);
+ cpu->processCacheCompletion();
}
const char *
@@ -414,25 +414,21 @@ template <class T>
Fault
SimpleCPU::read(Addr addr, T &data, unsigned flags)
{
- Fault fault;
+ memReq->reset(addr, sizeof(T), flags);
- if (status() == DcacheMissStall) {
- //Just do the functional access
+ // translate to physical address
+ Fault fault = xc->translateDataReadReq(memReq);
+
+ // do functional access
+ if (fault == No_Fault)
fault = xc->read(memReq, data);
- if (traceData) {
- traceData->setAddr(addr);
- if (fault == No_Fault)
- traceData->setData(data);
- }
- return fault;
+ if (traceData) {
+ traceData->setAddr(addr);
+ if (fault == No_Fault)
+ traceData->setData(data);
}
- memReq->reset(addr, sizeof(T), flags);
-
- // translate to physical address
- fault = xc->translateDataReadReq(memReq);
-
// if we have a cache, do cache access too
if (fault == No_Fault && dcacheInterface) {
memReq->cmd = Read;
@@ -444,25 +440,11 @@ SimpleCPU::read(Addr addr, T &data, unsigned flags)
// a miss. We really should add first-class support for this
// at some point.
if (result != MA_HIT && dcacheInterface->doEvents()) {
- cacheCompletionEvent.read = true;
memReq->completionEvent = &cacheCompletionEvent;
- //May later want to pass the staticinst as well, so it can call
- //it independantly
lastDcacheStall = curTick;
unscheduleTickEvent();
_status = DcacheMissStall;
}
- else {
- // do functional access
- if (fault == No_Fault)
- fault = xc->read(memReq, data);
-
- if (traceData) {
- traceData->setAddr(addr);
- if (fault == No_Fault)
- traceData->setData(data);
- }
- }
}
if (!dcacheInterface && (memReq->flags & UNCACHEABLE))
@@ -543,7 +525,6 @@ SimpleCPU::write(T data, Addr addr, unsigned flags, uint64_t *res)
// a miss. We really should add first-class support for this
// at some point.
if (result != MA_HIT && dcacheInterface->doEvents()) {
- cacheCompletionEvent.read = false;
memReq->completionEvent = &cacheCompletionEvent;
lastDcacheStall = curTick;
unscheduleTickEvent();
@@ -615,7 +596,7 @@ Tick save_cycle = 0;
void
-SimpleCPU::processCacheCompletion(bool read)
+SimpleCPU::processCacheCompletion()
{
switch (status()) {
case IcacheMissStall:
@@ -625,9 +606,6 @@ SimpleCPU::processCacheCompletion(bool read)
break;
case DcacheMissStall:
dcacheStallCycles += curTick - lastDcacheStall;
- if (read) {
- globalsi->execute(this,traceData);
- }
_status = Running;
scheduleTickEvent(1);
break;
@@ -751,7 +729,6 @@ SimpleCPU::tick()
// a miss. We really should add first-class support for this
// at some point.
if (result != MA_HIT && icacheInterface->doEvents()) {
- cacheCompletionEvent.read = false;
memReq->completionEvent = &cacheCompletionEvent;
lastIcacheStall = curTick;
unscheduleTickEvent();
@@ -776,8 +753,6 @@ SimpleCPU::tick()
inst = htoa(inst);
StaticInstPtr<TheISA> si(inst);
- globalsi = si;
-
traceData = Trace::getInstRecord(curTick, xc, this, si,
xc->regs.pc);