[Libre-soc-isa] [Bug 697] SVP64 Reduce Modes

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Wed May 18 18:53:55 BST 2022


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

--- Comment #30 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
something along these lines:

* RB-RA (the register *numbers* not GPR(RB)-GPR(RA) is computed and stored,
  call it offs
* RT-RA likewise call it roffs
* a sequence of offsets is computed from the predicate mask
  0b1001101 would create indices [0, 2, 3, 6], call it idxs

the for-loop therefore goes:

   for i in range(len(idxs)-MAX(roffs, offs)):
      ra = RA + idxs[i]
      rb = RA + idxs[i+offs]
      result = OPERATION(GPR(ra), GPR(rb))
      rt = RA + idxs[i+roffs]
      GPR(rt) = result

taking twin-predication into account would involve using the dest
predicate to create a separate list of indices.

if RT != RA then this could be used to e.g. create a vector sequence of
differences but e.g. skip certain elements.

if RT == RA then as usual for mr and mr/RG (reverse gear) mode this becomes
a cumulative sum.

if RT<RA then the first few starting elements are skipped to always make
sure idxs[] referencing is within range

the bit that's conceptually new is that the actual register numbers are
computed
from the difference to RA as a baseline register.

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


More information about the Libre-SOC-ISA mailing list