[Libre-soc-isa] [Bug 1080] allowing LD/ST-Update to select individual regsters needed

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Mon May 8 23:22:43 BST 2023


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

--- Comment #3 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to Jacob Lifshay from comment #2)
> (In reply to Luke Kenneth Casson Leighton from comment #1)
> > (In reply to Luke Kenneth Casson Leighton from comment #0)
> > 
> > > lwzux,LDST_IDX,,2P,EXTRA2,EN,d:RT,d:RA,s:RB,0,RA_OR_ZERO,RB,0,RT,0,0,RA
> > > stdux,LDST_IDX,,2P,EXTRA2,EN,d:RA,s:RS;s:RA,s:RB,0,RA_OR_ZERO,RB,RS,0,0,0,RA
> > > 
> > > these become harder as the encoding space is only 6 bits (and there
> > > are 3 regs, RT/RS RA RB) due to Twin-Predication taking up 3 bits
> > > of EXTRA
> > 
> > this cannot be lost as it destroys VSPLAT VINDEX VGATHER VSCATTER
> 
> please define VINDEX 

sm=1<<r3. or just sm=r3 where one bit is set. there is probably another
name for it.


>-- it is non-standard terminology -- do you mean
> load/store with index remap?

no. i would have said Indexed REMAP.

> predicate). The only load/store ops that need more than one predicate are
> compress/expand load/store

i.e. all of them (as far as the actual scalar ld/sts are concerned)

> iirc the plan was originally to have twin-predication only on 1-in/1-out
> operations, which ldux/stdux clearly are not.

the address (EA) is considered to be "1" in this case.

> > could ELWIDTH instead be considered, and the operation width
> > (ld lw lh lb) be used in its place?
> > 
> > * yes as long as losing saturation and sign-extending is ok.
> 
> simple -- just set ELWIDTH larger than the load op and the load op
> intrinsically will do the sign/zero extend, no need for SVP64 to add
> sign/zero extension on top of that. (with the sole exception of signed
> bytes, thanks PowerISA for being non-orthogonal)

deep joy.

and it isn't _particularly_ useful to do shorter (load then truncate,
that's just dumb).

> saturation can still be done -- saturating from the load's type to the dest
> type (ELWIDTH + saturation's unsigned/signed bit).
> 
> so this removes any need for ELWIDTH_SRC on any load/store ops afaict.

okaay. now we are cooking with gas.

next stage, given two free bits, is to work out what regs can be
expanded from EXTRA2 to EXTRA3.

* lwzux RT,RA,RB

if vectorised and used for list-pointer-chaining, it is RT and RA that
must be allowed to be one-different.  RB, because it is not updated,
need not be EXTRA3.

* stdux RS,RA,RB

likewise.

aieee this is going to be fun.

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


More information about the Libre-SOC-ISA mailing list