ref: 549a6745e3b6a69c9a14deb5090b8fa1ad444f06
dir: /sys/src/libmp/port/mpvecadd.c/
#include "os.h" #include <mp.h> #include "dat.h" // prereq: alen >= blen, sum has at least blen+1 digits void mpvecadd(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *sum) { int i, carry; mpdigit x, y; carry = 0; for(i = 0; i < blen; i++){ x = *a++; y = *b++; x += carry; if(x < carry) carry = 1; else carry = 0; x += y; if(x < y) carry++; *sum++ = x; } for(; i < alen; i++){ x = *a++ + carry; if(x < carry) carry = 1; else carry = 0; *sum++ = x; } *sum = carry; }