// verify this data.
if (unverifiedReq &&
!(unverifiedReq->isUncacheable()) &&
- (!(unverifiedReq->isLlsc()) ||
- ((unverifiedReq->isLlsc()) &&
+ (!(unverifiedReq->isLLSC()) ||
+ ((unverifiedReq->isLLSC()) &&
unverifiedReq->getExtraData() == 1))) {
T inst_data;
/*
Request *memReq = cache_req->dataPkt->req;
- if (cache_req->dataPkt->isWrite() && memReq->isLlsc()) {
+ if (cache_req->dataPkt->isWrite() && memReq->isLLSC()) {
assert(cache_req->inst->isStoreConditional());
DPRINTF(InOrderCachePort, "Evaluating Store Conditional access\n");
do_access = TheISA::handleLockedWrite(cpu, memReq);
cacheStatus = cacheWaitResponse;
cacheBlocked = false;
}
- } else if (!do_access && memReq->isLlsc()){
+ } else if (!do_access && memReq->isLLSC()){
// Store-Conditional instructions complete even if they "failed"
assert(cache_req->inst->isStoreConditional());
cache_req->setCompleted(true);
if (inst->isLoad()) {
assert(cache_pkt->isRead());
- if (cache_pkt->req->isLlsc()) {
+ if (cache_pkt->req->isLLSC()) {
DPRINTF(InOrderCachePort,
"[tid:%u]: Handling Load-Linked for [sn:%u]\n",
tid, inst->seqNum);
"storeHead: %i addr: %#x\n",
load_idx, store_idx, storeHead, req->getPaddr());
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
// Disable recording the result temporarily. Writing to misc
// regs normally updates the result, but this is not the
// desired behavior when handling store conditionals.
if (!lsq->cacheBlocked()) {
PacketPtr data_pkt =
new Packet(req,
- (req->isLlsc() ?
+ (req->isLLSC() ?
MemCmd::LoadLockedReq : MemCmd::ReadReq),
Packet::Broadcast);
data_pkt->dataStatic(load_inst->memData);
MemCmd command =
req->isSwap() ? MemCmd::SwapReq :
- (req->isLlsc() ? MemCmd::StoreCondReq : MemCmd::WriteReq);
+ (req->isLLSC() ? MemCmd::StoreCondReq : MemCmd::WriteReq);
PacketPtr data_pkt = new Packet(req, command,
Packet::Broadcast);
data_pkt->dataStatic(inst->memData);
// ++iewExecStoreInsts;
- if (!(inst->req->isLlsc())) {
+ if (!(inst->req->isLLSC())) {
inst->setExecuted();
instToCommit(inst);
}
}
/*
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
if (req->isUncacheable()) {
// Don't update result register (see stq_c in isa_desc)
req->result = 2;
MemAccessResult result = dcacheInterface->access(req);
//@todo temp fix for LL/SC (works fine for 1 CPU)
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
req->result=1;
panic("LL/SC! oh no no support!!!");
}
Event *wb = NULL;
/*
typename IEW::LdWritebackEvent *wb = NULL;
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
// Stx_C does not generate a system port transaction.
req->result=0;
wb = new typename IEW::LdWritebackEvent(storeQueue[storeWBIdx].inst,
// DPRINTF(Activity, "Active st accessing mem hit [sn:%lli]\n",
// storeQueue[storeWBIdx].inst->seqNum);
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
// Stx_C does not generate a system port transaction.
req->result=1;
typename BackEnd::LdWritebackEvent *wb =
PacketPtr data_pkt =
new Packet(req,
- (req->isLlsc() ?
+ (req->isLLSC() ?
MemCmd::LoadLockedReq : Packet::ReadReq),
Packet::Broadcast);
data_pkt->dataStatic(inst->memData);
return NoFault;
}
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
cpu->lockFlag = true;
}
MemCmd command =
req->isSwap() ? MemCmd::SwapReq :
- (req->isLlsc() ? MemCmd::WriteReq : MemCmd::StoreCondReq);
+ (req->isLLSC() ? MemCmd::WriteReq : MemCmd::StoreCondReq);
PacketPtr data_pkt = new Packet(req, command, Packet::Broadcast);
data_pkt->dataStatic(inst->memData);
inst->seqNum);
// @todo: Remove this SC hack once the memory system handles it.
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
if (req->isUncacheable()) {
req->setExtraData(2);
} else {
if (result != MA_HIT && dcacheInterface->doEvents()) {
store_event->miss = true;
typename BackEnd::LdWritebackEvent *wb = NULL;
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
wb = new typename BackEnd::LdWritebackEvent(inst,
be);
store_event->wbEvent = wb;
// DPRINTF(Activity, "Active st accessing mem hit [sn:%lli]\n",
// inst->seqNum);
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
// Stx_C does not generate a system port
// transaction in the 21264, but that might be
// hard to accomplish in this model.
// Now do the access.
if (fault == NoFault) {
Packet pkt = Packet(req,
- req->isLlsc() ? MemCmd::LoadLockedReq : MemCmd::ReadReq,
+ req->isLLSC() ? MemCmd::LoadLockedReq : MemCmd::ReadReq,
Packet::Broadcast);
pkt.dataStatic(dataPtr);
assert(!pkt.isError());
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
TheISA::handleLockedRead(thread, req);
}
}
MemCmd cmd = MemCmd::WriteReq; // default
bool do_access = true; // flag to suppress cache access
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
cmd = MemCmd::StoreCondReq;
do_access = TheISA::handleLockedWrite(thread, req);
} else if (req->isSwap()) {
} else {
bool do_access = true; // flag to suppress cache access
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
do_access = TheISA::handleLockedWrite(thread, req);
} else if (req->isCondSwap()) {
assert(res);
MemCmd cmd;
if (read) {
cmd = MemCmd::ReadReq;
- if (req->isLlsc())
+ if (req->isLLSC())
cmd = MemCmd::LoadLockedReq;
} else {
cmd = MemCmd::WriteReq;
- if (req->isLlsc()) {
+ if (req->isLLSC()) {
cmd = MemCmd::StoreCondReq;
} else if (req->isSwap()) {
cmd = MemCmd::SwapReq;
_status = DTBWaitResponse;
if (split_addr > addr) {
RequestPtr req1, req2;
- assert(!req->isLlsc() && !req->isSwap());
+ assert(!req->isLLSC() && !req->isSwap());
req->splitOnVaddr(split_addr, req1, req2);
typedef SplitDataTranslation::WholeTranslationState WholeState;
_status = DTBWaitResponse;
if (split_addr > addr) {
RequestPtr req1, req2;
- assert(!req->isLlsc() && !req->isSwap());
+ assert(!req->isLLSC() && !req->isSwap());
req->splitOnVaddr(split_addr, req1, req2);
typedef SplitDataTranslation::WholeTranslationState WholeState;
// the locked flag may be cleared on the response packet, so check
// pkt->req and not pkt to see if it was a load-locked
- if (pkt->isRead() && pkt->req->isLlsc()) {
+ if (pkt->isRead() && pkt->req->isLLSC()) {
TheISA::handleLockedRead(thread, pkt->req);
}
*/
void trackLoadLocked(PacketPtr pkt)
{
- assert(pkt->isLlsc());
+ assert(pkt->isLLSC());
lockList.push_front(Lock(pkt->req));
}
bool checkWrite(PacketPtr pkt)
{
Request *req = pkt->req;
- if (pkt->isLlsc()) {
+ if (pkt->isLLSC()) {
// it's a store conditional... have to check for matching
// load locked.
bool success = false;
pkt->writeDataToBlock(blk->data, blkSize);
}
} else if (pkt->isRead()) {
- if (pkt->isLlsc()) {
+ if (pkt->isLLSC()) {
blk->trackLoadLocked(pkt);
}
pkt->setDataFromBlock(blk->data, blkSize);
incMissCount(pkt);
- if (blk == NULL && pkt->isLlsc() && pkt->isWrite()) {
+ if (blk == NULL && pkt->isLLSC() && pkt->isWrite()) {
// complete miss on store conditional... just give up now
pkt->req->setExtraData(0);
return true;
bool isInvalidate() const { return testCmdAttrib(IsInvalidate); }
bool hasData() const { return testCmdAttrib(HasData); }
bool isReadWrite() const { return isRead() && isWrite(); }
- bool isLlsc() const { return testCmdAttrib(IsLlsc); }
+ bool isLLSC() const { return testCmdAttrib(IsLlsc); }
bool isError() const { return testCmdAttrib(IsError); }
bool isPrint() const { return testCmdAttrib(IsPrint); }
bool isInvalidate() const { return cmd.isInvalidate(); }
bool hasData() const { return cmd.hasData(); }
bool isReadWrite() const { return cmd.isReadWrite(); }
- bool isLlsc() const { return cmd.isLlsc(); }
+ bool isLLSC() const { return cmd.isLLSC(); }
bool isError() const { return cmd.isError(); }
bool isPrint() const { return cmd.isPrint(); }
{
Request *req = pkt->req;
Addr paddr = LockedAddr::mask(req->getPaddr());
- bool isLlsc = pkt->isLlsc();
+ bool isLLSC = pkt->isLLSC();
// Initialize return value. Non-conditional stores always
// succeed. Assume conditional stores will fail until proven
// otherwise.
- bool success = !isLlsc;
+ bool success = !isLLSC;
// Iterate over list. Note that there could be multiple matching
// records, as more than one context could have done a load locked
if (i->addr == paddr) {
// we have a matching address
- if (isLlsc && i->matchesContext(req)) {
+ if (isLLSC && i->matchesContext(req)) {
// it's a store conditional, and as far as the memory
// system can tell, the requesting context's lock is
// still valid.
}
}
- if (isLlsc) {
+ if (isLLSC) {
req->setExtraData(success ? 1 : 0);
}
TRACE_PACKET("Read/Write");
} else if (pkt->isRead()) {
assert(!pkt->isWrite());
- if (pkt->isLlsc()) {
+ if (pkt->isLLSC()) {
trackLoadLocked(pkt);
}
if (pmemAddr)
Request *req = pkt->req;
if (lockedAddrList.empty()) {
// no locked addrs: nothing to check, store_conditional fails
- bool isLlsc = pkt->isLlsc();
- if (isLlsc) {
+ bool isLLSC = pkt->isLLSC();
+ if (isLLSC) {
req->setExtraData(0);
}
- return !isLlsc; // only do write if not an sc
+ return !isLLSC; // only do write if not an sc
} else {
// iterate over list...
return checkLockedAddrList(pkt);
/** Accessor Function to Check Cacheability. */
bool isUncacheable() const { return flags.isSet(UNCACHEABLE); }
bool isInstRead() const { return flags.isSet(INST_READ); }
- bool isLlsc() const { return flags.isSet(LLSC); }
+ bool isLLSC() const { return flags.isSet(LLSC); }
bool isLocked() const { return flags.isSet(LOCKED); }
bool isSwap() const { return flags.isSet(MEM_SWAP|MEM_SWAP_COND); }
bool isCondSwap() const { return flags.isSet(MEM_SWAP_COND); }