diff options
author | Steve Reinhardt <steve.reinhardt@amd.com> | 2015-02-11 10:48:50 -0800 |
---|---|---|
committer | Steve Reinhardt <steve.reinhardt@amd.com> | 2015-02-11 10:48:50 -0800 |
commit | ee0b52404c99cfed91a8d3fbebe3f42b0ac133df (patch) | |
tree | 5c26f8de53e57903f80ed45e643b4abd3020040a /src/mem | |
parent | ccef61d1ccaea43cf44aa45bee272475f0b10405 (diff) | |
download | gem5-ee0b52404c99cfed91a8d3fbebe3f42b0ac133df.tar.xz |
mem: restructure Packet cmd initialization a bit more
Refactor the way that specific MemCmd values are generated for packets.
The new approach is a little more elegant in that we assign the right
value up front, and it's also more amenable to non-heap-allocated
Packet objects.
Also replaced the code in the Minor model that was still doing it the
ad-hoc way.
This is basically a refinement of http://repo.gem5.org/gem5/rev/711eb0e64249.
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/packet.hh | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/mem/packet.hh b/src/mem/packet.hh index cb8a5cbf4..8badc7c73 100644 --- a/src/mem/packet.hh +++ b/src/mem/packet.hh @@ -643,45 +643,47 @@ class Packet : public Printable } /** - * Change the packet type based on request type. + * Generate the appropriate read MemCmd based on the Request flags. */ - void - refineCommand() + static MemCmd + makeReadCmd(const RequestPtr req) { - if (cmd == MemCmd::ReadReq) { - if (req->isLLSC()) { - cmd = MemCmd::LoadLockedReq; - } else if (req->isPrefetch()) { - cmd = MemCmd::SoftPFReq; - } - } else if (cmd == MemCmd::WriteReq) { - if (req->isLLSC()) { - cmd = MemCmd::StoreCondReq; - } else if (req->isSwap()) { - cmd = MemCmd::SwapReq; - } - } + if (req->isLLSC()) + return MemCmd::LoadLockedReq; + else if (req->isPrefetch()) + return MemCmd::SoftPFReq; + else + return MemCmd::ReadReq; + } + + /** + * Generate the appropriate write MemCmd based on the Request flags. + */ + static MemCmd + makeWriteCmd(const RequestPtr req) + { + if (req->isLLSC()) + return MemCmd::StoreCondReq; + else if (req->isSwap()) + return MemCmd::SwapReq; + else + return MemCmd::WriteReq; } /** * Constructor-like methods that return Packets based on Request objects. - * Will call refineCommand() to fine-tune the Packet type if it's not a - * vanilla read or write. + * Fine-tune the MemCmd type if it's not a vanilla read or write. */ static PacketPtr createRead(const RequestPtr req) { - PacketPtr pkt = new Packet(req, MemCmd::ReadReq); - pkt->refineCommand(); - return pkt; + return new Packet(req, makeReadCmd(req)); } static PacketPtr createWrite(const RequestPtr req) { - PacketPtr pkt = new Packet(req, MemCmd::WriteReq); - pkt->refineCommand(); - return pkt; + return new Packet(req, makeWriteCmd(req)); } /** |