[Libre-soc-isa] [Bug 552] single-predication has "splat" capability, needs review

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Wed Dec 23 21:01:35 GMT 2020


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

--- Comment #1 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
right.  we need the following:

RT.v = RA.v RB.v
RT.v = RA.v RB.s and s/v
RT.v = RA.s RB.s
RT.s = RA.v RB.v
RT.s = RA.v RB.s and s/v
RT.s = RA.s RB.s

vvv no problem, obvious
vvs and vsv, no problem, obvious
sss also obvious

slightly less obvious:

RT.s = RA.v RB.v

which would take the first nonmaskedout elements from RA/RB vector srces

and 

RT.s = RA.v RB.s and s/v

which is a variant of the above, taking the  first nonmaskedout vector element
from one of the srces.

so with some thought it really is just this one not obvious case:

RT.v = RA.s RB.s

which i originally expected would stop at the first element, but it could be
interpreted as scalar-result-splat.

question: what behaviour do we want? what *actual* behaviour?

* scalar-scalar (yep, covered)
* vector-vector (likewise)
* picker from vector into scalar (covered)
* scalar insert into vector (covered by single bit of predicate)

well, all of those are covered regardless of how the ambiguous case works.

i.e. the "splat" capability, which can also be a masked-splat, is a superset of
the single insert.

therefore, conclusion: good call, jacob, it's a good idea to have this.

inplementation-wise (high performance wise) it will be a pain, but we will
manage, as i think it's worth it.

i will make a note in the spec.

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


More information about the Libre-SOC-ISA mailing list