[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:49:39 BST 2023


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

--- Comment #4 from Jacob Lifshay <programmerjake at gmail.com> ---
(In reply to Luke Kenneth Casson Leighton from comment #3)
> (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.

the standard name is extractelement or extract
https://llvm.org/docs/LangRef.html#extractelement-instruction

imho it may be more efficient to simply add r3 to the load address and perform
a scalar load (optionally SVP64 prefixed) rather than setting sm=1<<r3, since
that's much simpler and simple hardware then won't issue VL load ops for only
one of them to succeed.

extractelement is only really useful when extracting from a vector already in
registers, since you can't always just add to the address for that.

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


More information about the Libre-SOC-ISA mailing list