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

Reply via email to