changeset a4e999395e15 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=a4e999395e15
description:
        inorder: DynInst handling of stores for big-endian ISAs
        The DynInst was not performing the host-to-guest translation
        which ended up breaking stores for SPARC

diffstat:

 src/cpu/inorder/inorder_dyn_inst.cc     |  13 ++++++++-----
 src/cpu/inorder/resources/cache_unit.cc |   6 ++++++
 2 files changed, 14 insertions(+), 5 deletions(-)

diffs (58 lines):

diff -r ee898bed2872 -r a4e999395e15 src/cpu/inorder/inorder_dyn_inst.cc
--- a/src/cpu/inorder/inorder_dyn_inst.cc       Sun Jun 19 21:43:35 2011 -0400
+++ b/src/cpu/inorder/inorder_dyn_inst.cc       Sun Jun 19 21:43:35 2011 -0400
@@ -527,7 +527,10 @@
         traceData->setData(data);
     }
     Fault fault = readBytes(addr, (uint8_t *)&data, sizeof(T), flags);
+    DPRINTF(InOrderDynInst, "[sn:%i] (1) Received Bytes %x\n", seqNum, data);
     data = TheISA::gtoh(data);
+    DPRINTF(InOrderDynInst, "[sn%:i] (2) Received Bytes %x\n", seqNum, data);
+
     if (traceData)
         traceData->setData(data);
     return fault;
@@ -588,6 +591,8 @@
 {
     assert(sizeof(storeData) >= size);
     memcpy(&storeData, data, size);
+    DPRINTF(InOrderDynInst, "(2) [tid:%i]: [sn:%i] Setting store data to 
%#x.\n",
+            threadNumber, seqNum, storeData);
     return cpu->write(this, (uint8_t *)&storeData, size, addr, flags, res);
 }
 
@@ -595,15 +600,13 @@
 inline Fault
 InOrderDynInst::write(T data, Addr addr, unsigned flags, uint64_t *res)
 {
-    storeData  = data;
-
-    DPRINTF(InOrderDynInst, "[tid:%i]: [sn:%i] Setting store data to %#x.\n",
-            threadNumber, seqNum, storeData);
     if (traceData) {
         traceData->setAddr(addr);
         traceData->setData(data);
     }
-    storeData = TheISA::htog(data);
+    data = TheISA::htog(data);
+    DPRINTF(InOrderDynInst, "(1) [tid:%i]: [sn:%i] Setting store data to 
%#x.\n",
+            threadNumber, seqNum, data);
     return writeBytes((uint8_t*)&data, sizeof(T), addr, flags, res);
 }
 
diff -r ee898bed2872 -r a4e999395e15 src/cpu/inorder/resources/cache_unit.cc
--- a/src/cpu/inorder/resources/cache_unit.cc   Sun Jun 19 21:43:35 2011 -0400
+++ b/src/cpu/inorder/resources/cache_unit.cc   Sun Jun 19 21:43:35 2011 -0400
@@ -840,6 +840,12 @@
         } else {
             cache_req->dataPkt->dataStatic(&cache_req->inst->storeData);       
     
         }
+
+        DPRINTF(InOrderCachePort,
+                "[tid:%u]: [sn:%i]: Storing data: %s\n",
+                tid, inst->seqNum,
+                printMemData(cache_req->dataPkt->getPtr<uint8_t>(),
+                             cache_req->dataPkt->getSize()));
         
         if (cache_req->memReq->isCondSwap()) {
             assert(write_res);
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to