Quoting Korey Sewell <ksew...@umich.edu>: >> Unless I'm misunderstanding your question, this does work in O3 with >> SPARC because it tracks each single precision floating point register >> separately. Each FP instruction is considered to have two sources for >> each double precision register it uses, and only when both are marked >> ready is the instruction scheduled to execute. This isn't anything >> special O3 is doing though. There's a hack in SPARC that pre processes >> the code going into an instruction to do the appropriate replacements. >> This issue was discovered when there was very little time to fix it, >> and rather than re-engineer O3 and rewrite all the FP instructions in >> SPARC, I just added that hack. > Yea, this is the type of thing I'm looking for. Sounds like you made > it work for SPARC but maybe it's not a general O3 solution. I actually > think it's a ISA-independent problem, since the CPU model simply asks > for how many source registers and destination registers. Changing that > value shouldnt have any effect on how the CPU model tracks those > dependencies. > > I'm obviously unfamiliar with the SPARC code, but I would need to > figure out what kind of preprocessing your doing to increase the > number of source registers for a FP double precision instruction. Are > you saying you have done that through O3 stuff or SPARC ISA stuff? > >
This is in the ISA stuff. >> But for forwarding values around, you need to know how many registers >> each src and dest affects so you can get dependencies right. > I agree , but I dont really see how that changes too much if you add a > width for each source register. The CPU model would know that say src > reg F0 is a double precision access, so it would mark dependencies for > regs F0 and F1. > > Or if you want to attack it from another angle, then you can make > there literally increase the number of source registers for a double > precision register but that gives the side effect of now the FP > instructions having to figure out how to combine those two registers > before execution (i.e. it gets messy IMO) > > That's what SPARC does in its preprocessing. Look for filterDoubles in the SPARC source. Gabe _______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev