instruction->setThreadState(cpu->thread[tid]);
- DPRINTF(Fetch, "[tid:%i]: Instruction PC %#x created "
- "[sn:%lli]\n",
- tid, instruction->readPC(), inst_seq);
+ DPRINTF(Fetch, "[tid:%i]: Instruction PC %#x (%d) created "
+ "[sn:%lli]\n", tid, instruction->readPC(),
+ instruction->readMicroPC(), inst_seq);
//DPRINTF(Fetch, "[tid:%i]: MachInst is %#x\n", tid, ext_inst);
DynInstPtr violator;
violator = ldstQueue.getMemDepViolator(tid);
- DPRINTF(IEW, "LDSTQ detected a violation. Violator PC: "
- "%#x, inst PC: %#x. Addr is: %#x.\n",
- violator->readPC(), inst->readPC(), inst->physEffAddr);
-
+ DPRINTF(IEW, "LDSTQ detected a violation. Violator PC: %#x "
+ "[sn:%lli], inst PC: %#x [sn:%lli]. Addr is: %#x.\n",
+ violator->readPC(), violator->seqNum,
+ inst->readPC(), inst->seqNum, inst->physEffAddr);
// Ensure the violating instruction is older than
// current squash
/* if (fetchRedirect[tid] &&
// are quad word accesses.
// @todo: Fix this, magic number being used here
+
+ // @todo: Uncachable load is not executed until it reaches
+ // the head of the ROB. Once this if checks only the executed
+ // loads(as noted above), this check can be removed
if (loadQueue[load_idx]->effAddrValid &&
- (loadQueue[load_idx]->effAddr >> 8) ==
- (inst->effAddr >> 8)) {
+ ((loadQueue[load_idx]->effAddr >> 8)
+ == (inst->effAddr >> 8)) &&
+ !loadQueue[load_idx]->uncacheable()) {
// A load incorrectly passed this load. Squash and refetch.
// For now return a fault to show that it was unsuccessful.
DynInstPtr violator = loadQueue[load_idx];
// are quad word accesses.
// @todo: Fix this, magic number being used here
+
+ // @todo: Uncachable load is not executed until it reaches
+ // the head of the ROB. Once this if checks only the executed
+ // loads(as noted above), this check can be removed
if (loadQueue[load_idx]->effAddrValid &&
- (loadQueue[load_idx]->effAddr >> 8) ==
- (store_inst->effAddr >> 8)) {
+ ((loadQueue[load_idx]->effAddr >> 8)
+ == (store_inst->effAddr >> 8)) &&
+ !loadQueue[load_idx]->uncacheable()) {
// A load incorrectly passed this store. Squash and refetch.
// For now return a fault to show that it was unsuccessful.
DynInstPtr violator = loadQueue[load_idx];