cpu: remove unnecessary data ptr from O3 internal read() funcs
authorSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 18 Jan 2016 02:27:46 +0000 (18:27 -0800)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Mon, 18 Jan 2016 02:27:46 +0000 (18:27 -0800)
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).

src/cpu/base_dyn_inst.hh
src/cpu/o3/cpu.hh
src/cpu/o3/lsq.hh
src/cpu/o3/lsq_unit.hh

index ebe882a8848142eff2b2d82d3804336ae86801ad..b6b8c045aea0953d4d33b746cdf7b46f5ff94d22 100644 (file)
@@ -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.
index 09177d404aaeb58c308e58b3bdb45a529c06dbd8..eed5811cb0079cd2edd14f7fc2cd309e42e995e1 100644 (file)
@@ -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. */
index d726088ef1b0d8e76914070016fdd8d4e37c6ad2..dcd676221d52e795beba7f45bd653d3f2aaf1c30 100644 (file)
@@ -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>
index 039bba8b68067932aa373c976930fafaf050811a..b1b0aae3aebd7ba241f0ee00a1490430c8dd0bf5 100644 (file)
@@ -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()];