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