summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Reinhardt <steve.reinhardt@amd.com>2016-01-17 18:27:46 -0800
committerSteve Reinhardt <steve.reinhardt@amd.com>2016-01-17 18:27:46 -0800
commit707275265f188a514d1d5673ed4c8d6495304962 (patch)
treec245b55e0efae47759c11e96e703d4c8794c8573
parente595d9cccb3c3a06f915547ecc9b224d65e7d5cc (diff)
downloadgem5-707275265f188a514d1d5673ed4c8d6495304962.tar.xz
cpu: remove unnecessary data ptr from O3 internal read() funcs
The read() function merely initiates a memory read operation; the data doesn't arrive until the access completes and a response packet is received from the memory system. Thus there's no need to provide a data pointer; its existence is historical. Getting this pointer out of this internal o3 interface sets the stage for similar cleanup in the ExecContext interface. Also found that we were pointlessly setting the contents at this pointer on a store forward (the useful memcpy happens just a few lines below the deleted one).
-rw-r--r--src/cpu/base_dyn_inst.hh2
-rw-r--r--src/cpu/o3/cpu.hh5
-rw-r--r--src/cpu/o3/lsq.hh6
-rw-r--r--src/cpu/o3/lsq_unit.hh10
4 files changed, 8 insertions, 15 deletions
diff --git a/src/cpu/base_dyn_inst.hh b/src/cpu/base_dyn_inst.hh
index ebe882a88..b6b8c045a 100644
--- a/src/cpu/base_dyn_inst.hh
+++ b/src/cpu/base_dyn_inst.hh
@@ -910,7 +910,7 @@ BaseDynInst<Impl>::readMem(Addr addr, uint8_t *data,
}
reqToVerify = new Request(*req);
}
- fault = cpu->read(req, sreqLow, sreqHigh, data, lqIdx);
+ fault = cpu->read(req, sreqLow, sreqHigh, lqIdx);
} else {
// Commit will have to clean up whatever happened. Set this
// instruction as executed.
diff --git a/src/cpu/o3/cpu.hh b/src/cpu/o3/cpu.hh
index 09177d404..eed5811cb 100644
--- a/src/cpu/o3/cpu.hh
+++ b/src/cpu/o3/cpu.hh
@@ -678,10 +678,9 @@ class FullO3CPU : public BaseO3CPU
/** CPU read function, forwards read to LSQ. */
Fault read(RequestPtr &req, RequestPtr &sreqLow, RequestPtr &sreqHigh,
- uint8_t *data, int load_idx)
+ int load_idx)
{
- return this->iew.ldstQueue.read(req, sreqLow, sreqHigh,
- data, load_idx);
+ return this->iew.ldstQueue.read(req, sreqLow, sreqHigh, load_idx);
}
/** CPU write function, forwards write to LSQ. */
diff --git a/src/cpu/o3/lsq.hh b/src/cpu/o3/lsq.hh
index d726088ef..dcd676221 100644
--- a/src/cpu/o3/lsq.hh
+++ b/src/cpu/o3/lsq.hh
@@ -275,7 +275,7 @@ class LSQ {
* index.
*/
Fault read(RequestPtr req, RequestPtr sreqLow, RequestPtr sreqHigh,
- uint8_t *data, int load_idx);
+ int load_idx);
/** Executes a store operation, using the store specified at the store
* index.
@@ -332,11 +332,11 @@ class LSQ {
template <class Impl>
Fault
LSQ<Impl>::read(RequestPtr req, RequestPtr sreqLow, RequestPtr sreqHigh,
- uint8_t *data, int load_idx)
+ int load_idx)
{
ThreadID tid = req->threadId();
- return thread[tid].read(req, sreqLow, sreqHigh, data, load_idx);
+ return thread[tid].read(req, sreqLow, sreqHigh, load_idx);
}
template <class Impl>
diff --git a/src/cpu/o3/lsq_unit.hh b/src/cpu/o3/lsq_unit.hh
index 039bba8b6..b1b0aae3a 100644
--- a/src/cpu/o3/lsq_unit.hh
+++ b/src/cpu/o3/lsq_unit.hh
@@ -511,7 +511,7 @@ class LSQUnit {
public:
/** Executes the load at the given index. */
Fault read(Request *req, Request *sreqLow, Request *sreqHigh,
- uint8_t *data, int load_idx);
+ int load_idx);
/** Executes the store at the given index. */
Fault write(Request *req, Request *sreqLow, Request *sreqHigh,
@@ -550,7 +550,7 @@ class LSQUnit {
template <class Impl>
Fault
LSQUnit<Impl>::read(Request *req, Request *sreqLow, Request *sreqHigh,
- uint8_t *data, int load_idx)
+ int load_idx)
{
DynInstPtr load_inst = loadQueue[load_idx];
@@ -676,12 +676,6 @@ LSQUnit<Impl>::read(Request *req, Request *sreqLow, Request *sreqHigh,
// Get shift amount for offset into the store's data.
int shift_amt = req->getVaddr() - storeQueue[store_idx].inst->effAddr;
- if (storeQueue[store_idx].isAllZeros)
- memset(data, 0, req->getSize());
- else
- memcpy(data, storeQueue[store_idx].data + shift_amt,
- req->getSize());
-
// Allocate memory if this is the first time a load is issued.
if (!load_inst->memData) {
load_inst->memData = new uint8_t[req->getSize()];