CPU: Make Exec trace to print predication result (if false) for memory instructions

This commit is contained in:
Min Kyu Jeong 2010-08-23 11:18:41 -05:00
parent 92ae620be8
commit 03286e9d4e
5 changed files with 21 additions and 1 deletions

View file

@ -805,6 +805,10 @@ class BaseDynInst : public FastAlloc, public RefCounted
void setPredicate(bool val)
{
predicate = val;
if (traceData) {
traceData->setPredicate(val);
}
}
/** Sets the ASID. */

View file

@ -111,6 +111,10 @@ Trace::ExeTracerRecord::traceInst(StaticInstPtr inst, bool ran)
outs << Enums::OpClassStrings[inst->opClass()] << " : ";
}
if (IsOn(ExecResult) && predicate == false) {
outs << "Predicated False";
}
if (IsOn(ExecResult) && data_status != DataInvalid) {
ccprintf(outs, " D=%#018x", data.as_int);
}

View file

@ -458,6 +458,9 @@ LSQUnit<Impl>::executeLoad(DynInstPtr &inst)
// realizes there is activity.
// Mark it as executed unless it is an uncached load that
// needs to hit the head of commit.
DPRINTF(LSQUnit, "Load [sn:%lli] not executed from %s\n",
inst->seqNum,
(load_fault != NoFault ? "fault" : "predication"));
if (!(inst->hasRequest() && inst->uncacheable()) ||
inst->isAtCommit()) {
inst->setExecuted();

View file

@ -295,7 +295,12 @@ class BaseSimpleCPU : public BaseCPU
void setNextMicroPC(uint64_t val) { thread->setNextMicroPC(val); }
void setNextNPC(uint64_t val) { thread->setNextNPC(val); }
void setPredicate(bool val)
{ return thread->setPredicate(val); }
{
thread->setPredicate(val);
if (traceData) {
traceData->setPredicate(val);
}
}
MiscReg readMiscRegNoEffect(int misc_reg)
{

View file

@ -58,6 +58,7 @@ class InstRecord
StaticInstPtr macroStaticInst;
MicroPC upc;
bool misspeculating;
bool predicate;
// The remaining fields are only valid for particular instruction
// types (e.g, addresses for memory ops) or when particular
@ -102,6 +103,7 @@ class InstRecord
fetch_seq_valid = false;
cp_seq_valid = false;
predicate = false;
}
virtual ~InstRecord() { }
@ -128,6 +130,8 @@ class InstRecord
void setCPSeq(InstSeqNum seq)
{ cp_seq = seq; cp_seq_valid = true; }
void setPredicate(bool val) { predicate = val; }
virtual void dump() = 0;
public: