[Libre-soc-dev] SVP64 Vectorised add-carry => big int add

lkcl luke.leighton at gmail.com
Sat Apr 16 06:54:43 BST 2022

On April 16, 2022 12:26:38 AM UTC, lkcl <luke.leighton at gmail.com> wrote:

>            uint64_t v = (uint64_t)q[i] * d[j] + carry;
>            carry = v >> 32;
>            v = (uint32_t)v;

rright. ok.  i have a bit more of a handle on this.

both halves are needed, but normally in scalar mul you can do macro op fusion:

* mullo r3, r10, r11
* mulhi r4, r10, r11


* OP_MULLOHI r3&4, r10, r11

when SVP64 Vectorised the element ops are split up unless actually doing the same fusion trick on the vector ops *before* putting into element execution.

question is, is it worth adding a mulx? and if so, is it worth trying to overload OE=1 on say "sv.madd" rather than add a new opcode?

(madd is RT=RA*RB+RC, maddo would be {RT,RT+1}=RA*RB+RC and sv.maddo would be {RT,RT+VL}=RA*RB+RC)


More information about the Libre-soc-dev mailing list