[Libre-soc-dev] SVP64 Vectorised add-carry => big int add
luke.leighton at gmail.com
Mon Apr 18 17:46:44 BST 2022
On Mon, Apr 18, 2022 at 5:23 PM Jacob Lifshay <programmerjake at gmail.com> wrote:
> yes...there's 2 problems:
> 1. sum is uninitialized -- did you even compile with warnings enabled?!
no of course not: gcc test.c; ./a.out
> (another UB trap in C, if you had used Rust or basically any
> good language it would have not let you compile that).
don't. please. i'm having a really bad day.
> 2. the algorithm I gave requires carry to start at 1
> -- just like subfe does (subfe uses RT <- ~RA + RB + CA).
> that's because -x == ~x + 1 for all integers x.
> I'm trying to have the algorithm be like subfe since that likely gives simpler
> hardware, otherwise I'd just have it use the CARRY register as a borrow
> value like the original algorithm in that c you added from hackers' delight
ok i corrected it: still no dice. i think the reason for that is that "t" is
not being set correctly: t is supposed to be used later, if is -ve, then
1 is added back onto un.
it's almost there:
Error, dividend u = 80000000 00000000 00000003
divisor v = 20000000 00000000 00000001
For quotient, got: 00000004
Should get: 00000003
Error, dividend u = 80000000 00000000 fffffffe 00000000
divisor v = 80000000 00000000 ffffffff
For quotient, got: 00000001 fffffffd
Should get: 00000000 ffffffff
More information about the Libre-soc-dev