[Libre-soc-isa] [Bug 572] elwidth and indirection: two vectors, one width

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Fri Jan 8 01:20:45 GMT 2021


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

--- Comment #7 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
(In reply to Jacob Lifshay from comment #6)
> so, for `ld reg, imm(reg)`, the src elwidth specifies:
> 0 -- unit stride -- loads from reg + imm + load_size * element_index
> 1 -- strided with stride of imm -- loads from reg + imm * element_index
> written: ld reg, (reg), stride=imm
> 2, 3 -- reserved -- maybe split imm bits between offset and stride?

mmm there's only 16 bits (signed/unsigned), not too keen on limiting
expectations (and altering compiler from scalar behaviour)

RVV sets an "ordered/unordered" mode, which is interesting.

other options: select to use the *dest* elwidth as the unit stride multiplier. 
this will give some weird overlaps when using e.g. ld (64 bit) with dest
elwidth=8, and some stranger overlaps for ST.


also, it turns out that when RA is vectorised, unit stride is absurd nonsense.

     EA = iregs[RA+i] + i*imm

naah.  so i disable unit stride there and make it just:

     EA = iregs[RA+i] + i*imm

this leaves the "mode" bits doing nothing. what to do there? can we do anything
with the 2 bits?  put them back to src elwidth?


> written: ld reg, offset_imm(reg), stride=stride_imm
> 
> for `ld reg, (base_reg + index_reg)`, the src elwidth specifies the elwidth
> of index_reg, base_reg is always 64-bit.

yes, this is just necessary.
get_polymorphic_reg(RA, elwidth=64, i)

rather than elwidth=op_wid.

> similarly for store.

yes.  it's the EA (effective address)

question is, does "mode" do anything useful?  2 bits, 4 options... i'm honestly
not thinking of anything that really stands out except perhaps
ordered/unordered

hmmm

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


More information about the Libre-SOC-ISA mailing list