Merge ktlim@zizzer:/bk/newmem
into zamp.eecs.umich.edu:/z/ktlim2/clean/newmem-merge
configs/test/test.py:
Hand merge.
--HG--
extra : convert_revision : e3fce9cf50a65a9400cd3ec887b13e4765274ec2
This commit is contained in:
@@ -996,6 +996,12 @@ DefaultCommit<Impl>::commitHead(DynInstPtr &head_inst, unsigned inst_num)
|
||||
// Check if the instruction caused a fault. If so, trap.
|
||||
Fault inst_fault = head_inst->getFault();
|
||||
|
||||
// DTB will sometimes need the machine instruction for when
|
||||
// faults happen. So we will set it here, prior to the DTB
|
||||
// possibly needing it for its fault.
|
||||
thread[tid]->setInst(
|
||||
static_cast<TheISA::MachInst>(head_inst->staticInst->machInst));
|
||||
|
||||
if (inst_fault != NoFault) {
|
||||
head_inst->setCompleted();
|
||||
DPRINTF(Commit, "Inst [sn:%lli] PC %#x has a fault\n",
|
||||
@@ -1018,12 +1024,6 @@ DefaultCommit<Impl>::commitHead(DynInstPtr &head_inst, unsigned inst_num)
|
||||
// execution doesn't generate extra squashes.
|
||||
thread[tid]->inSyscall = true;
|
||||
|
||||
// DTB will sometimes need the machine instruction for when
|
||||
// faults happen. So we will set it here, prior to the DTB
|
||||
// possibly needing it for its fault.
|
||||
thread[tid]->setInst(
|
||||
static_cast<TheISA::MachInst>(head_inst->staticInst->machInst));
|
||||
|
||||
// Execute the trap. Although it's slightly unrealistic in
|
||||
// terms of timing (as it doesn't wait for the full timing of
|
||||
// the trap event to complete before updating state), it's
|
||||
|
||||
@@ -765,7 +765,8 @@ template <class Impl>
|
||||
void
|
||||
FullO3CPU<Impl>::serialize(std::ostream &os)
|
||||
{
|
||||
SERIALIZE_ENUM(_status);
|
||||
SimObject::State so_state = SimObject::getState();
|
||||
SERIALIZE_ENUM(so_state);
|
||||
BaseCPU::serialize(os);
|
||||
nameOut(os, csprintf("%s.tickEvent", name()));
|
||||
tickEvent.serialize(os);
|
||||
@@ -786,7 +787,8 @@ template <class Impl>
|
||||
void
|
||||
FullO3CPU<Impl>::unserialize(Checkpoint *cp, const std::string §ion)
|
||||
{
|
||||
UNSERIALIZE_ENUM(_status);
|
||||
SimObject::State so_state;
|
||||
UNSERIALIZE_ENUM(so_state);
|
||||
BaseCPU::unserialize(cp, section);
|
||||
tickEvent.unserialize(cp, csprintf("%s.tickEvent", section));
|
||||
|
||||
@@ -1063,7 +1065,8 @@ template <class Impl>
|
||||
void
|
||||
FullO3CPU<Impl>::setArchFloatRegSingle(int reg_idx, float val, unsigned tid)
|
||||
{
|
||||
PhysRegIndex phys_reg = commitRenameMap[tid].lookup(reg_idx);
|
||||
int idx = reg_idx + TheISA::FP_Base_DepTag;
|
||||
PhysRegIndex phys_reg = commitRenameMap[tid].lookup(idx);
|
||||
|
||||
regFile.setFloatReg(phys_reg, val);
|
||||
}
|
||||
@@ -1072,7 +1075,8 @@ template <class Impl>
|
||||
void
|
||||
FullO3CPU<Impl>::setArchFloatRegDouble(int reg_idx, double val, unsigned tid)
|
||||
{
|
||||
PhysRegIndex phys_reg = commitRenameMap[tid].lookup(reg_idx);
|
||||
int idx = reg_idx + TheISA::FP_Base_DepTag;
|
||||
PhysRegIndex phys_reg = commitRenameMap[tid].lookup(idx);
|
||||
|
||||
regFile.setFloatReg(phys_reg, val, 64);
|
||||
}
|
||||
@@ -1081,7 +1085,8 @@ template <class Impl>
|
||||
void
|
||||
FullO3CPU<Impl>::setArchFloatRegInt(int reg_idx, uint64_t val, unsigned tid)
|
||||
{
|
||||
PhysRegIndex phys_reg = commitRenameMap[tid].lookup(reg_idx);
|
||||
int idx = reg_idx + TheISA::FP_Base_DepTag;
|
||||
PhysRegIndex phys_reg = commitRenameMap[tid].lookup(idx);
|
||||
|
||||
regFile.setFloatRegBits(phys_reg, val);
|
||||
}
|
||||
|
||||
@@ -158,18 +158,29 @@ AtomicSimpleCPU::~AtomicSimpleCPU()
|
||||
void
|
||||
AtomicSimpleCPU::serialize(ostream &os)
|
||||
{
|
||||
SERIALIZE_ENUM(_status);
|
||||
BaseSimpleCPU::serialize(os);
|
||||
SimObject::State so_state = SimObject::getState();
|
||||
SERIALIZE_ENUM(so_state);
|
||||
nameOut(os, csprintf("%s.tickEvent", name()));
|
||||
tickEvent.serialize(os);
|
||||
BaseSimpleCPU::serialize(os);
|
||||
}
|
||||
|
||||
void
|
||||
AtomicSimpleCPU::unserialize(Checkpoint *cp, const string §ion)
|
||||
{
|
||||
UNSERIALIZE_ENUM(_status);
|
||||
BaseSimpleCPU::unserialize(cp, section);
|
||||
SimObject::State so_state;
|
||||
UNSERIALIZE_ENUM(so_state);
|
||||
tickEvent.unserialize(cp, csprintf("%s.tickEvent", section));
|
||||
BaseSimpleCPU::unserialize(cp, section);
|
||||
}
|
||||
|
||||
void
|
||||
AtomicSimpleCPU::resume()
|
||||
{
|
||||
if (thread->status() == ThreadContext::Active) {
|
||||
if (!tickEvent.scheduled())
|
||||
tickEvent.schedule(curTick);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -126,6 +126,7 @@ class AtomicSimpleCPU : public BaseSimpleCPU
|
||||
|
||||
virtual void serialize(std::ostream &os);
|
||||
virtual void unserialize(Checkpoint *cp, const std::string §ion);
|
||||
virtual void resume();
|
||||
|
||||
void switchOut();
|
||||
void takeOverFrom(BaseCPU *oldCPU);
|
||||
|
||||
@@ -178,8 +178,8 @@ void
|
||||
BaseSimpleCPU::serialize(ostream &os)
|
||||
{
|
||||
BaseCPU::serialize(os);
|
||||
SERIALIZE_SCALAR(inst);
|
||||
nameOut(os, csprintf("%s.xc", name()));
|
||||
// SERIALIZE_SCALAR(inst);
|
||||
nameOut(os, csprintf("%s.xc.0", name()));
|
||||
thread->serialize(os);
|
||||
}
|
||||
|
||||
@@ -187,8 +187,8 @@ void
|
||||
BaseSimpleCPU::unserialize(Checkpoint *cp, const string §ion)
|
||||
{
|
||||
BaseCPU::unserialize(cp, section);
|
||||
UNSERIALIZE_SCALAR(inst);
|
||||
thread->unserialize(cp, csprintf("%s.xc", section));
|
||||
// UNSERIALIZE_SCALAR(inst);
|
||||
thread->unserialize(cp, csprintf("%s.xc.0", section));
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -102,14 +102,16 @@ TimingSimpleCPU::~TimingSimpleCPU()
|
||||
void
|
||||
TimingSimpleCPU::serialize(ostream &os)
|
||||
{
|
||||
SERIALIZE_ENUM(_status);
|
||||
SimObject::State so_state = SimObject::getState();
|
||||
SERIALIZE_ENUM(so_state);
|
||||
BaseSimpleCPU::serialize(os);
|
||||
}
|
||||
|
||||
void
|
||||
TimingSimpleCPU::unserialize(Checkpoint *cp, const string §ion)
|
||||
{
|
||||
UNSERIALIZE_ENUM(_status);
|
||||
SimObject::State so_state;
|
||||
UNSERIALIZE_ENUM(so_state);
|
||||
BaseSimpleCPU::unserialize(cp, section);
|
||||
}
|
||||
|
||||
@@ -134,7 +136,9 @@ TimingSimpleCPU::resume()
|
||||
if (_status != SwitchedOut && _status != Idle) {
|
||||
// Delete the old event if it existed.
|
||||
if (fetchEvent) {
|
||||
assert(!fetchEvent->scheduled());
|
||||
if (fetchEvent->scheduled())
|
||||
fetchEvent->deschedule();
|
||||
|
||||
delete fetchEvent;
|
||||
}
|
||||
|
||||
|
||||
@@ -196,6 +196,7 @@ SimpleThread::copyState(ThreadContext *oldContext)
|
||||
#if !FULL_SYSTEM
|
||||
funcExeInst = oldContext->readFuncExeInst();
|
||||
#endif
|
||||
inst = oldContext->getInst();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user