diff options
Diffstat (limited to 'cpu/o3/alpha_dyn_inst_impl.hh')
-rw-r--r-- | cpu/o3/alpha_dyn_inst_impl.hh | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/cpu/o3/alpha_dyn_inst_impl.hh b/cpu/o3/alpha_dyn_inst_impl.hh index 541d5ab82..d82d46830 100644 --- a/cpu/o3/alpha_dyn_inst_impl.hh +++ b/cpu/o3/alpha_dyn_inst_impl.hh @@ -64,9 +64,10 @@ template <class Impl> Fault AlphaDynInst<Impl>::execute() { - // @todo: Pretty convoluted way to avoid squashing from happening when using - // the XC during an instruction's execution (specifically for instructions - // that have sideeffects that use the XC). Fix this. + // @todo: Pretty convoluted way to avoid squashing from happening + // when using the XC during an instruction's execution + // (specifically for instructions that have side-effects that use + // the XC). Fix this. bool in_syscall = this->thread->inSyscall; this->thread->inSyscall = true; @@ -81,9 +82,10 @@ template <class Impl> Fault AlphaDynInst<Impl>::initiateAcc() { - // @todo: Pretty convoluted way to avoid squashing from happening when using - // the XC during an instruction's execution (specifically for instructions - // that have sideeffects that use the XC). Fix this. + // @todo: Pretty convoluted way to avoid squashing from happening + // when using the XC during an instruction's execution + // (specifically for instructions that have side-effects that use + // the XC). Fix this. bool in_syscall = this->thread->inSyscall; this->thread->inSyscall = true; @@ -99,10 +101,12 @@ Fault AlphaDynInst<Impl>::completeAcc() { if (this->isLoad()) { + // Loads need the request's data to complete the access. this->fault = this->staticInst->completeAcc(this->req->data, this, this->traceData); } else if (this->isStore()) { + // Stores need the result of the request to complete their access. this->fault = this->staticInst->completeAcc((uint8_t*)&this->req->result, this, this->traceData); @@ -118,9 +122,11 @@ template <class Impl> Fault AlphaDynInst<Impl>::hwrei() { + // Can only do a hwrei when in pal mode. if (!this->cpu->inPalMode(this->readPC())) return new AlphaISA::UnimplementedOpcodeFault; + // Set the next PC based on the value of the EXC_ADDR IPR. this->setNextPC(this->cpu->readMiscReg(AlphaISA::IPR_EXC_ADDR, this->threadNumber)); |