[libre-riscv-dev] [Bug 139] Add LD.X and ST.X? Strided

bugzilla-daemon at libre-riscv.org bugzilla-daemon at libre-riscv.org
Wed Oct 9 10:31:26 BST 2019


http://bugs.libre-riscv.org/show_bug.cgi?id=139

--- Comment #60 from Jacob Lifshay <programmerjake at gmail.com> ---
(In reply to Luke Kenneth Casson Leighton from comment #58)
> > it doesn't trigger because of being the right register, but because 
> > jumps aren't valid inside VBLOCK. 
> 
> oh, duh :)  oh wait...
> 
> > This requires VBLOCK encoding exactly which instructions are inside 
> > and not (which I recall it doing).
> 
> yes.
> 
> ok, JAL _is_ valid... as long as it's to *outside* the memory
> area covered by the VBLOCK.  jumping to the *start* of the VBLOCK
> is permitted.
> 
> likewise for BEQ (etc)

If BEQ is used as a vector compare-to-mask, it might be worthwhile to support
branches as long as they branch to the next instruction. Different immediates
could still be used to encode other instructions though.

On the other hand, I think having a separate compare-to-mask instruction
(instead of repurposing BEQ) would be worthwhile, since we could use R-type
instructions instead of B-type, allowing the compiler to greatly simplify
register allocation. Also, that would avoid needlessly triggering the branch
predictor, allowing for possible power savings.

We could additionally have a RMW on rd for compare, allowing simpler mask
generation:

rd |= rs1 < rs2 where rs1 and rs2 are vectors

we could also support &=, ^=, and plain assignment.

Some of those ops are redundant with predicated compare, can weed those out
later.

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


More information about the libre-riscv-dev mailing list