[libre-riscv-dev] spike simple-v implementation, refinement needed

Luke Kenneth Casson Leighton lkcl at lkcl.net
Fri Sep 28 03:36:33 BST 2018


https://groups.google.com/a/groups.riscv.org/d/msg/isa-dev/xfWAqSnNng4/QrbDUYi1AQAJ

this discussion highlights an issue with SV.  the plan was: not to
have any new instructions. the discussion shows that this *may* be
unavoidable, or that the loops would require an extra instruction:

instead of:

loop:
 setvl t0, a0, 4 # vl = t0 = min(min(mvl, 4, n))
 ld    a3, a1    # load 4 registers a3-6 from x
 slli  t1, t0, 3 # t1 = vl * 8 (in bytes)
 ld    a7, a2    # load 4 registers a7-10 from y

it would be:

loop:
 setvl a0, 4 # vl= min(min(mvl, 4, a0))
 getvl t0 # t0 = vl
 ld    a3, a1    # load 4 registers a3-6 from x
 slli  t1, t0, 3 # t1 = vl * 8 (in bytes)
 ld    a7, a2    # load 4 registers a7-10 from y

this is not really desirable (the extra instruction) although it could
reasonably be claimed that macro-op fusion could take care of it.

one possibility: have a separate CSR that sets a register which is to
be allocated *AS* vl.

i'll have to think about this and raise some further discussion.

l.



More information about the libre-riscv-dev mailing list