480a481,490
> } else if (pkt->req->isSwap()) {
> std::vector<uint8_t> overwrite_val(pkt->getSize());
> memcpy(&overwrite_val[0], pkt->getConstPtr<uint8_t>(),
> pkt->getSize());
> memcpy(pkt->getPtr<uint8_t>(),
> data.getData(getOffset(request_address), pkt->getSize()),
> pkt->getSize());
> data.setData(&overwrite_val[0],
> getOffset(request_address), pkt->getSize());
> DPRINTF(RubySequencer, "swap data %s\n", data);
568c578,588
< if (pkt->isRead()) {
---
> //
> // To support SwapReq, we need to check isWrite() first: a SwapReq
> // should always be treated like a write, but since a SwapReq implies
> // both isWrite() and isRead() are true, check isWrite() first here.
> //
> if (pkt->isWrite()) {
> //
> // Note: M5 packets do not differentiate ST from RMW_Write
> //
> primary_type = secondary_type = RubyRequestType_ST;
> } else if (pkt->isRead()) {
586,590d605
< } else if (pkt->isWrite()) {
< //
< // Note: M5 packets do not differentiate ST from RMW_Write
< //
< primary_type = secondary_type = RubyRequestType_ST;