diff options
Diffstat (limited to 'src/cpu')
-rwxr-xr-x | src/cpu/o3/thread_context_impl.hh | 33 |
1 files changed, 4 insertions, 29 deletions
diff --git a/src/cpu/o3/thread_context_impl.hh b/src/cpu/o3/thread_context_impl.hh index e7b0540d1..b179ad50e 100755 --- a/src/cpu/o3/thread_context_impl.hh +++ b/src/cpu/o3/thread_context_impl.hh @@ -231,36 +231,11 @@ template <class Impl> void O3ThreadContext<Impl>::copyArchRegs(ThreadContext *tc) { - // This function will mess things up unless the ROB is empty and - // there are no instructions in the pipeline. - ThreadID tid = thread->threadId(); - PhysRegIndex renamed_reg; - - // First loop through the integer registers. - for (int i = 0; i < TheISA::NumIntRegs; ++i) { - renamed_reg = cpu->renameMap[tid].lookup(i); - - DPRINTF(O3CPU, "Copying over register %i, had data %lli, " - "now has data %lli.\n", - renamed_reg, cpu->readIntReg(renamed_reg), - tc->readIntReg(i)); - - cpu->setIntReg(renamed_reg, tc->readIntReg(i)); - } - - // Then loop through the floating point registers. - for (int i = 0; i < TheISA::NumFloatRegs; ++i) { - renamed_reg = cpu->renameMap[tid].lookup(i + TheISA::FP_Base_DepTag); - cpu->setFloatRegBits(renamed_reg, - tc->readFloatRegBits(i)); - } - - // Copy the misc regs. - TheISA::copyMiscRegs(tc, this); + // Prevent squashing + thread->inSyscall = true; + TheISA::copyRegs(tc, this); + thread->inSyscall = false; - // Then finally set the PC, the next PC, the nextNPC, the micropc, and the - // next micropc. - cpu->pcState(tc->pcState(), tid); #if !FULL_SYSTEM this->thread->funcExeInst = tc->readFuncExeInst(); #endif |