[libre-riscv-dev] [Bug 333] investigate why CR pipeline code took 100% CPU and locked up generating ILANG

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Wed May 20 20:42:50 BST 2020


https://bugs.libre-soc.org/show_bug.cgi?id=333

--- Comment #7 from Michael Nolan <mtnolan2640 at gmail.com> ---
(In reply to Luke Kenneth Casson Leighton from comment #6)
> this is dreadful:
> 
>                 for i in range(4):
>                     comb += cr_out_arr[bf*4 + i].eq(cr_arr[bfa*4 + i])
> 
> the computation of the index is done almost a hundred times or more.
> 32x4 times.
> 
> for now it can be done again with a mask (shifted).  two masks - one
> to shift-extract cr[bfa*4..+4], shift by the *difference* between
> bf and bfa then bit-mask in.
> 
> dreadful.
> 
> we really need to split CR out into its 8 separate CRs.  XER's fields
> are going to have to be done this way anyway.

So for this module, how would that work? I'm assuming we wouldn't be passing in
all 8 CRs, because that would be just as bad as what we have now. But we need
the full CR for mfcr and mtcrf. Would we have 2 small cr inputs as well as the
full cr, and depending on whether which opcode it is we select which one to
use?

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-riscv-dev mailing list