Include ability to copy all misc regs.

arch/alpha/ev5.cc:
    Include function for the MiscRegFile to copy all of the Iprs from an ExecContext.
arch/alpha/isa_traits.hh:
    Include functions to copy MiscRegs from an ExecContext.
cpu/cpu_exec_context.cc:
    Be sure to copy all of the misc regs when copying all architectural state.

--HG--
extra : convert_revision : cb948b5ff141ea0f739a1016f98236bd2a512f76
This commit is contained in:
Kevin Lim 2006-03-08 15:10:47 -05:00
parent 67732a7b28
commit 77e40756b7
3 changed files with 13 additions and 9 deletions

View file

@ -541,6 +541,14 @@ AlphaISA::MiscRegFile::setIpr(int idx, uint64_t val, ExecContext *xc)
return NoFault; return NoFault;
} }
void
AlphaISA::MiscRegFile::copyIprs(ExecContext *xc)
{
for (int i = IPR_Base_DepTag; i < NumInternalProcRegs; ++i) {
ipr[i] = xc->readMiscReg(i);
}
}
/** /**
* Check for special simulator handling of specific PAL calls. * Check for special simulator handling of specific PAL calls.
* If return value is false, actual PAL call will be suppressed. * If return value is false, actual PAL call will be suppressed.

View file

@ -169,6 +169,8 @@ extern const int reg_redir[NumIntRegs];
Fault setRegWithEffect(int misc_reg, const MiscReg &val, Fault setRegWithEffect(int misc_reg, const MiscReg &val,
ExecContext *xc); ExecContext *xc);
void copyMiscRegs(ExecContext *xc);
#if FULL_SYSTEM #if FULL_SYSTEM
protected: protected:
InternalProcReg ipr[NumInternalProcRegs]; // Internal processor regs InternalProcReg ipr[NumInternalProcRegs]; // Internal processor regs
@ -177,6 +179,8 @@ extern const int reg_redir[NumIntRegs];
MiscReg readIpr(int idx, Fault &fault, ExecContext *xc); MiscReg readIpr(int idx, Fault &fault, ExecContext *xc);
Fault setIpr(int idx, uint64_t val, ExecContext *xc); Fault setIpr(int idx, uint64_t val, ExecContext *xc);
void copyIprs(ExecContext *xc);
#endif #endif
friend class RegFile; friend class RegFile;
}; };

View file

@ -289,15 +289,7 @@ CPUExecContext::copyArchRegs(ExecContext *xc)
} }
// Copy misc. registers // Copy misc. registers
setMiscReg(AlphaISA::Fpcr_DepTag, xc->readMiscReg(AlphaISA::Fpcr_DepTag)); regs.miscRegs.copyMiscRegs(xc);
setMiscReg(AlphaISA::Uniq_DepTag, xc->readMiscReg(AlphaISA::Uniq_DepTag));
setMiscReg(AlphaISA::Lock_Flag_DepTag,
xc->readMiscReg(AlphaISA::Lock_Flag_DepTag));
setMiscReg(AlphaISA::Lock_Addr_DepTag,
xc->readMiscReg(AlphaISA::Lock_Addr_DepTag));
// Also need to copy all the IPRs. Probably should just have a copy misc
// regs function defined on the misc regs.
// Lastly copy PC/NPC // Lastly copy PC/NPC
setPC(xc->readPC()); setPC(xc->readPC());