diff -r 74e0e1c18fba -r 68b74d7aedee src/cpu/o3/fetch_impl.hh --- a/src/cpu/o3/fetch_impl.hh Fri Aug 13 12:04:56 2010 -0500 +++ b/src/cpu/o3/fetch_impl.hh Fri Aug 13 12:06:21 2010 -0500 @@ -1150,9 +1150,9 @@ 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); diff -r 74e0e1c18fba -r 68b74d7aedee src/cpu/o3/iew_impl.hh --- a/src/cpu/o3/iew_impl.hh Fri Aug 13 12:04:56 2010 -0500 +++ b/src/cpu/o3/iew_impl.hh Fri Aug 13 12:06:21 2010 -0500 @@ -1318,10 +1318,10 @@ 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] && diff -r 74e0e1c18fba -r 68b74d7aedee src/cpu/o3/lsq_unit_impl.hh --- a/src/cpu/o3/lsq_unit_impl.hh Fri Aug 13 12:04:56 2010 -0500 +++ b/src/cpu/o3/lsq_unit_impl.hh Fri Aug 13 12:06:21 2010 -0500 @@ -479,9 +479,14 @@ // 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]; @@ -553,9 +558,14 @@ // 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];