[Libre-soc-dev] [RFC] SVP64 on branch instructions
Luke Kenneth Casson Leighton
lkcl at lkcl.net
Sun Aug 15 17:24:31 BST 2021
ok so there are now two first unit tests, "sv.bc" and "sv.bc/all".
https://git.libre-soc.org/?p=openpower-isa.git;a=blob;f=src/openpower/decoder/isa/test_caller_svp64_bc.py;h=5378040085995813070ccaa9cbe28a1add9a5e81;hb=c3b9973df8edcb1f6c1583c2da693336af7d1921#l80
sv.bc/all makes a bit of a mess of the pseudocode, it's a Finite State Machine
where ISACaller is calling the sv.bc operation once per element.
in the case of sv.bc/all it is necessary to branch *ONLY* when *ALL*
tests are successful... but the tests actually need to be done.
normal bc pseudocode:
if cond_ok then branch
sv.bc pseudocode:
if cond_ok and last element in VL loop:
branch
it's more complex than that, though.
if NOT last element and cond NOT ok
terminate entire VL loop with early-out
non-ALL mode (ANY mode) is more straightforward, but again,
on branch, you must not continue to do further tests! so branch
definitely terminates the VL loop...
... but in Vertical-First Mode it's a completely different story,
much more like a standard scalar branch.
there's an awful lot going on, quite fascinating.
l.
More information about the Libre-soc-dev
mailing list