Get the "hard" SPARC instructions working in o3. I don't like that the IsStoreConditional flag needs to be set for them because they aren't store conditional instructions, and I should fix the format code which is not handling the opt_flags correctly.
--HG-- extra : convert_revision : cfd32808592832d7b6fbdaace5ae7b17c8a246e9
This commit is contained in:
@@ -877,6 +877,11 @@ BaseDynInst<Impl>::write(T data, Addr addr, unsigned flags, uint64_t *res)
|
||||
effAddrValid = true;
|
||||
physEffAddr = req->getPaddr();
|
||||
memReqFlags = req->getFlags();
|
||||
|
||||
if (req->isCondSwap()) {
|
||||
assert(res);
|
||||
req->setExtraData(*res);
|
||||
}
|
||||
#if 0
|
||||
if (cpu->system->memctrl->badaddr(physEffAddr)) {
|
||||
fault = TheISA::genMachineCheckFault();
|
||||
|
||||
@@ -647,7 +647,8 @@ LSQUnit<Impl>::writebackStores()
|
||||
|
||||
memcpy(inst->memData, storeQueue[storeWBIdx].data, req->getSize());
|
||||
|
||||
PacketPtr data_pkt = new Packet(req, MemCmd::WriteReq,
|
||||
MemCmd command = req->isSwap() ? MemCmd::SwapReq : MemCmd::WriteReq;
|
||||
PacketPtr data_pkt = new Packet(req, command,
|
||||
Packet::Broadcast);
|
||||
data_pkt->dataStatic(inst->memData);
|
||||
|
||||
@@ -664,7 +665,7 @@ LSQUnit<Impl>::writebackStores()
|
||||
inst->seqNum);
|
||||
|
||||
// @todo: Remove this SC hack once the memory system handles it.
|
||||
if (req->isLocked()) {
|
||||
if (inst->isStoreConditional()) {
|
||||
// Disable recording the result temporarily. Writing to
|
||||
// misc regs normally updates the result, but this is not
|
||||
// the desired behavior when handling store conditionals.
|
||||
|
||||
Reference in New Issue
Block a user