1/*
2 * Copyright (c) 2004-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 43 unchanged lines hidden (view full) ---

52
53template<class Impl>
54void
55LSQUnit<Impl>::WritebackEvent::process()
56{
57 if (!lsqPtr->isSwitchedOut()) {
58 lsqPtr->writeback(inst, pkt);
59 }
60
61 if (pkt->senderState)
62 delete pkt->senderState;
63
64 delete pkt->req;
60 delete pkt;
61}
62
63template<class Impl>
64const char *
65LSQUnit<Impl>::WritebackEvent::description()
66{
67 return "Store writeback event";

--- 7 unchanged lines hidden (view full) ---

75 DynInstPtr inst = state->inst;
76 DPRINTF(IEW, "Writeback event [sn:%lli]\n", inst->seqNum);
77 DPRINTF(Activity, "Activity: Writeback event [sn:%lli]\n", inst->seqNum);
78
79 //iewStage->ldstQueue.removeMSHR(inst->threadNumber,inst->seqNum);
80
81 if (isSwitchedOut() || inst->isSquashed()) {
82 iewStage->decrWb(inst->seqNum);
83 delete state;
84 delete pkt->req;
85 delete pkt;
86 return;
87 } else {
88 if (!state->noWB) {
89 writeback(inst, pkt);
90 }
91
92 if (inst->isStore()) {
93 completeStore(state->idx);
94 }

--- 541 unchanged lines hidden (view full) ---

636 DynInstPtr inst = storeQueue[storeWBIdx].inst;
637
638 Request *req = storeQueue[storeWBIdx].req;
639 storeQueue[storeWBIdx].committed = true;
640
641 assert(!inst->memData);
642 inst->memData = new uint8_t[64];
643
645 TheISA::IntReg convertedData =
646 TheISA::htog(storeQueue[storeWBIdx].data);
644 memcpy(inst->memData, storeQueue[storeWBIdx].data, req->getSize());
645
648 //FIXME This is a hack to get SPARC working. It, along with endianness
649 //in the memory system in general, need to be straightened out more
650 //formally. The problem is that the data's endianness is swapped when
651 //it's in the 64 bit data field in the store queue. The data that you
652 //want won't start at the beginning of the field anymore unless it was
653 //a 64 bit access.
654 memcpy(inst->memData,
655 (uint8_t *)&convertedData +
656 (TheISA::ByteOrderDiffers ?
657 (sizeof(TheISA::IntReg) - req->getSize()) : 0),
658 req->getSize());
659
646 PacketPtr data_pkt = new Packet(req, MemCmd::WriteReq,
647 Packet::Broadcast);
648 data_pkt->dataStatic(inst->memData);
649
650 LSQSenderState *state = new LSQSenderState;
651 state->isLoad = false;
652 state->idx = storeWBIdx;
653 state->inst = inst;

--- 378 unchanged lines hidden ---