case IPR_DTB_PTE:
{
- TlbEntry &entry
- = tc->getDTBPtr()->index(!tc->misspeculating());
+ TlbEntry &entry = tc->getDTBPtr()->index(1);
retval |= ((uint64_t)entry.ppn & ULL(0x7ffffff)) << 32;
retval |= ((uint64_t)entry.xre & ULL(0xf)) << 8;
void
ISA::setIpr(int idx, uint64_t val, ThreadContext *tc)
{
- if (tc->misspeculating())
- return;
-
switch (idx) {
case IPR_PALtemp0:
case IPR_PALtemp1:
CPA::cpa()->swAutoBegin(tc, pc.npc());
- if (!misspeculating()) {
- if (kernelStats)
- kernelStats->hwrei();
- }
+ if (kernelStats)
+ kernelStats->hwrei();
// FIXME: XXX check for interrupts? XXX
return NoFault;
// on VPTE loads (instead of locking the registers until IPR_VA is
// read, like the EV5). The EV6 approach is cleaner and seems to
// work with EV5 PAL code, but not the other way around.
- if (!tc->misspeculating() &&
- reqFlags.noneSet(Request::VPTE | Request::PREFETCH)) {
+ if (reqFlags.noneSet(Request::VPTE | Request::PREFETCH)) {
// set VA register with faulting address
tc->setMiscRegNoEffect(IPR_VA, vaddr);
ItbFault::invoke(ThreadContext *tc, const StaticInstPtr &inst)
{
if (FullSystem) {
- if (!tc->misspeculating()) {
- tc->setMiscRegNoEffect(IPR_ITB_TAG, pc);
- tc->setMiscRegNoEffect(IPR_IFAULT_VA_FORM,
- tc->readMiscRegNoEffect(IPR_IVPTBR) | (VAddr(pc).vpn() << 3));
- }
+ tc->setMiscRegNoEffect(IPR_ITB_TAG, pc);
+ tc->setMiscRegNoEffect(IPR_IFAULT_VA_FORM,
+ tc->readMiscRegNoEffect(IPR_IVPTBR) | (VAddr(pc).vpn() << 3));
}
AlphaFault::invoke(tc);
DebugFlag('ExecOpClass', 'Format: Include operand class')
DebugFlag('ExecRegDelta')
DebugFlag('ExecResult', 'Format: Include results from execution')
-DebugFlag('ExecSpeculative', 'Format: Include a miss-/speculation flag (-/+)')
DebugFlag('ExecSymbol', 'Format: Try to include symbol names')
DebugFlag('ExecThread', 'Format: Include thread ID in trace')
DebugFlag('ExecTicks', 'Format: Include tick count')
CompoundFlag('ExecAll', [ 'ExecEnable', 'ExecCPSeq', 'ExecEffAddr',
'ExecFaulting', 'ExecFetchSeq', 'ExecOpClass', 'ExecRegDelta',
- 'ExecResult', 'ExecSpeculative', 'ExecSymbol', 'ExecThread',
+ 'ExecResult', 'ExecSymbol', 'ExecThread',
'ExecTicks', 'ExecMicro', 'ExecMacro', 'ExecUser', 'ExecKernel',
'ExecAsid', 'ExecFlags' ])
CompoundFlag('Exec', [ 'ExecEnable', 'ExecTicks', 'ExecOpClass', 'ExecThread',
actualTC->setStCondFailures(sc_failures);
}
- // @todo: Fix this!
- bool misspeculating() { return actualTC->misspeculating(); }
-
Counter readFuncExeInst() { return actualTC->readFuncExeInst(); }
uint64_t readIntRegFlat(int idx)
outs << thread->getCpuPtr()->name() << " ";
- if (Debug::ExecSpeculative)
- outs << (misspeculating ? "-" : "+") << " ";
-
if (Debug::ExecAsid)
outs << "A" << dec << TheISA::getExecutingAsid(thread) << " ";
#include "cpu/static_inst.hh"
#include "cpu/thread_context.hh"
#include "debug/ExecEnable.hh"
-#include "debug/ExecSpeculative.hh"
#include "params/ExeTracer.hh"
#include "sim/insttracer.hh"
public:
ExeTracerRecord(Tick _when, ThreadContext *_thread,
const StaticInstPtr _staticInst, TheISA::PCState _pc,
- bool spec, const StaticInstPtr _macroStaticInst = NULL)
- : InstRecord(_when, _thread, _staticInst, _pc, spec,
- _macroStaticInst)
+ const StaticInstPtr _macroStaticInst = NULL)
+ : InstRecord(_when, _thread, _staticInst, _pc, _macroStaticInst)
{
}
if (!Trace::enabled)
return NULL;
- if (!Debug::ExecSpeculative && tc->misspeculating())
- return NULL;
-
return new ExeTracerRecord(when, tc,
- staticInst, pc, tc->misspeculating(), macroStaticInst);
+ staticInst, pc, macroStaticInst);
}
};
{
public:
InOrderTraceRecord(unsigned num_stages, bool _stage_tracing,
- ThreadContext *_thread, TheISA::PCState _pc, bool spec = false)
- : ExeTracerRecord(0, _thread, NULL, _pc, spec)
+ ThreadContext *_thread, TheISA::PCState _pc)
+ : ExeTracerRecord(0, _thread, NULL, _pc)
{
stageTrace = _stage_tracing;
stageCycle.resize(num_stages);
void setStCondFailures(unsigned sc_failures)
{ thread->storeCondFailures = sc_failures; }
- // Only really makes sense for old CPU model. Lots of code
- // outside the CPU still checks this function, so it will
- // always return false to keep everything working.
- /** Checks if the thread is misspeculating. Because it is
- * very difficult to determine if the thread is
- * misspeculating, this is set as false. */
- bool misspeculating() { return false; }
-
/** Executes a syscall in SE mode. */
void syscall(int64_t callnum)
{ return cpu->syscall(callnum, thread->threadId()); }
#include "cpu/static_inst.hh"
#include "cpu/thread_context.hh"
#include "debug/ExecEnable.hh"
-#include "debug/ExecSpeculative.hh"
#include "params/IntelTrace.hh"
#include "sim/insttracer.hh"
public:
IntelTraceRecord(Tick _when, ThreadContext *_thread,
const StaticInstPtr _staticInst, TheISA::PCState _pc,
- bool spec, const StaticInstPtr _macroStaticInst = NULL)
- : InstRecord(_when, _thread, _staticInst, _pc, spec,
+ const StaticInstPtr _macroStaticInst = NULL)
+ : InstRecord(_when, _thread, _staticInst, _pc,
_macroStaticInst)
{
}
if (!Trace::enabled)
return NULL;
- if (!Debug::ExecSpeculative && tc->misspeculating())
- return NULL;
-
- return new IntelTraceRecord(when, tc,
- staticInst, pc, tc->misspeculating(), macroStaticInst);
+ return new IntelTraceRecord(when, tc, staticInst, pc, macroStaticInst);
}
};
NativeTraceRecord(NativeTrace * _parent,
Tick _when, ThreadContext *_thread,
const StaticInstPtr _staticInst, TheISA::PCState _pc,
- bool spec, const StaticInstPtr _macroStaticInst = NULL)
- : ExeTracerRecord(_when, _thread, _staticInst, _pc, spec,
- _macroStaticInst),
+ const StaticInstPtr _macroStaticInst = NULL)
+ : ExeTracerRecord(_when, _thread, _staticInst, _pc, _macroStaticInst),
parent(_parent)
{
}
const StaticInstPtr staticInst, TheISA::PCState pc,
const StaticInstPtr macroStaticInst = NULL)
{
- if (tc->misspeculating())
- return NULL;
-
return new NativeTraceRecord(this, when, tc,
- staticInst, pc, tc->misspeculating(), macroStaticInst);
+ staticInst, pc, macroStaticInst);
}
template<class T>
virtual void setStCondFailures(unsigned sc_failures)
{ thread->storeCondFailures = sc_failures; }
- // Only really makes sense for old CPU model. Lots of code
- // outside the CPU still checks this function, so it will
- // always return false to keep everything working.
- /** Checks if the thread is misspeculating. Because it is
- * very difficult to determine if the thread is
- * misspeculating, this is set as false. */
- virtual bool misspeculating() { return false; }
-
/** Executes a syscall in SE mode. */
virtual void syscall(int64_t callnum)
{ return cpu->syscall(callnum, thread->threadId()); }
thread->syscall(callnum);
}
- bool misspeculating() { return thread->misspeculating(); }
ThreadContext *tcBase() { return tc; }
private:
/// Set the status to Halted.
void halt();
- virtual bool misspeculating();
-
void copyArchRegs(ThreadContext *tc);
void clearArchRegs()
};
-// for non-speculative execution context, spec_mode is always false
-inline bool
-SimpleThread::misspeculating()
-{
- return false;
-}
-
#endif // __CPU_CPU_EXEC_CONTEXT_HH__
virtual void setStCondFailures(unsigned sc_failures) = 0;
- // Only really makes sense for old CPU model. Still could be useful though.
- virtual bool misspeculating() = 0;
-
// Same with st cond failures.
virtual Counter readFuncExeInst() = 0;
void setStCondFailures(unsigned sc_failures)
{ actualTC->setStCondFailures(sc_failures); }
- // @todo: Fix this!
- bool misspeculating() { return actualTC->misspeculating(); }
-
void syscall(int64_t callnum)
{ actualTC->syscall(callnum); }
{
if (FullSystem) {
DPRINTF(Fault, "Fault %s at PC: %s\n", name(), tc->pcState());
- assert(!tc->misspeculating());
} else {
panic("fault (%s) detected @ PC %s", name(), tc->pcState());
}
StaticInstPtr staticInst;
TheISA::PCState pc;
StaticInstPtr macroStaticInst;
- bool misspeculating;
bool predicate;
// The remaining fields are only valid for particular instruction
public:
InstRecord(Tick _when, ThreadContext *_thread,
const StaticInstPtr _staticInst,
- TheISA::PCState _pc, bool spec,
+ TheISA::PCState _pc,
const StaticInstPtr _macroStaticInst = NULL)
: when(_when), thread(_thread),
staticInst(_staticInst), pc(_pc),
macroStaticInst(_macroStaticInst),
- misspeculating(spec), predicate(true), addr(0), addr_valid(false),
+ predicate(true), addr(0), addr_valid(false),
data_status(DataInvalid),
fetch_seq(0), fetch_seq_valid(false), cp_seq(0), cp_seq_valid(false)
{
StaticInstPtr getStaticInst() { return staticInst; }
TheISA::PCState getPCState() { return pc; }
StaticInstPtr getMacroStaticInst() { return macroStaticInst; }
- bool getMisspeculating() { return misspeculating; }
Addr getAddr() { return addr; }
bool getAddrValid() { return addr_valid; }