On Aug 22, 2010, at 4:58 PM, Steve Reinhardt wrote: > On Sun, Aug 22, 2010 at 8:28 AM, Ali Saidi <[email protected]> wrote: >> >> The dyninst might be able to do something like this, I'm not completely >> sure. The parser still needs to add the destination registers to the source >> registers or a whole mechanism would have to be cerated in the O3 to do the >> wakeup logic for for the predicate false case (which seems like a whole lot >> of trouble and extra code): >> >> void forwardOldRegs() >> { >> >> for (int idx = 0; idx < numDestRegs(); idx++) { >> PhysRegIndex prev_phys_reg = prevDestRegIdx(idx); >> TheISA::RegIndex original_dest_reg = staticInst->destRegIdx(idx); >> if (original_dest_reg < TheISA::FP_Base_DepTag) >> setIntRegOperand(staticInst, idx, >> this->cpu->readIntReg(prev_phys_reg)); >> else if (original_dest_reg < TheISA::Ctrl_Base_DepTag) >> setFloatRegOperandBits(staticInst, idx, >> this->cpu->readFloatRegOperandBits(prev_phys_reg)); >> } >> } > > Yea, this is along the lines of what I was thinking... if this really > is all there is to it, isn't that simpler than all the changes to the > isa parser? Obviously there's a little more to it than this function, > but is it that bad?
I seem to have gotten it to work. There were a few bugs in the above, but it's roughly right. The ISA parser still spits out code that selectively makes all the destination registers sources as well, but yes it's better and less intrusive. Interestingly one of the reasons it was easy was because prevDestRegIdx() existed, although it was never used by anything. Ali _______________________________________________ m5-dev mailing list [email protected] http://m5sim.org/mailman/listinfo/m5-dev
