summaryrefslogtreecommitdiff
path: root/src/mem
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem')
-rw-r--r--src/mem/physical.cc4
-rw-r--r--src/mem/request.hh6
2 files changed, 10 insertions, 0 deletions
diff --git a/src/mem/physical.cc b/src/mem/physical.cc
index 2f358daf2..4ea58e5e3 100644
--- a/src/mem/physical.cc
+++ b/src/mem/physical.cc
@@ -304,9 +304,13 @@ PhysicalMemory::doAtomicAccess(PacketPtr pkt)
void
PhysicalMemory::doFunctionalAccess(PacketPtr pkt)
{
+ warn("addr %#x >= %#x AND %#x <= %#x",
+ pkt->getAddr(), start(), pkt->getAddr() + pkt->getSize(), start() + size());
+
assert(pkt->getAddr() >= start() &&
pkt->getAddr() + pkt->getSize() <= start() + size());
+
uint8_t *hostAddr = pmemAddr + pkt->getAddr() - start();
if (pkt->cmd == MemCmd::ReadReq) {
diff --git a/src/mem/request.hh b/src/mem/request.hh
index e08593f0d..cc9c6b8bf 100644
--- a/src/mem/request.hh
+++ b/src/mem/request.hh
@@ -75,6 +75,8 @@ const uint32_t INST_READ = 0x80000;
/** This request is for a memory swap. */
const uint32_t MEM_SWAP = 0x100000;
const uint32_t MEM_SWAP_COND = 0x200000;
+/** The request should ignore unaligned access faults */
+const uint32_t NO_HALF_WORD_ALIGN_FAULT = 0x400000;
class Request : public FastAlloc
@@ -272,6 +274,10 @@ class Request : public FastAlloc
bool isCondSwap() { return (getFlags() & MEM_SWAP_COND) != 0; }
+ bool inline isMisaligned() {return (!(getFlags() & NO_ALIGN_FAULT) &&
+ ((vaddr & 1) ||
+ (!(getFlags() & NO_HALF_WORD_ALIGN_FAULT)
+ && (vaddr & 0x2))));}
friend class Packet;
};