1*8ccd4a63SDavid du Colombier #include "os.h"
2*8ccd4a63SDavid du Colombier #include <mp.h>
3*8ccd4a63SDavid du Colombier #include "dat.h"
4*8ccd4a63SDavid du Colombier
5*8ccd4a63SDavid du Colombier // prereq: alen >= blen, sum has at least blen+1 digits
6*8ccd4a63SDavid du Colombier void
mpvecadd(mpdigit * a,int alen,mpdigit * b,int blen,mpdigit * sum)7*8ccd4a63SDavid du Colombier mpvecadd(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *sum)
8*8ccd4a63SDavid du Colombier {
9*8ccd4a63SDavid du Colombier int i, carry;
10*8ccd4a63SDavid du Colombier mpdigit x, y;
11*8ccd4a63SDavid du Colombier
12*8ccd4a63SDavid du Colombier carry = 0;
13*8ccd4a63SDavid du Colombier for(i = 0; i < blen; i++){
14*8ccd4a63SDavid du Colombier x = *a++;
15*8ccd4a63SDavid du Colombier y = *b++;
16*8ccd4a63SDavid du Colombier x += carry;
17*8ccd4a63SDavid du Colombier if(x < carry)
18*8ccd4a63SDavid du Colombier carry = 1;
19*8ccd4a63SDavid du Colombier else
20*8ccd4a63SDavid du Colombier carry = 0;
21*8ccd4a63SDavid du Colombier x += y;
22*8ccd4a63SDavid du Colombier if(x < y)
23*8ccd4a63SDavid du Colombier carry++;
24*8ccd4a63SDavid du Colombier *sum++ = x;
25*8ccd4a63SDavid du Colombier }
26*8ccd4a63SDavid du Colombier for(; i < alen; i++){
27*8ccd4a63SDavid du Colombier x = *a++ + carry;
28*8ccd4a63SDavid du Colombier if(x < carry)
29*8ccd4a63SDavid du Colombier carry = 1;
30*8ccd4a63SDavid du Colombier else
31*8ccd4a63SDavid du Colombier carry = 0;
32*8ccd4a63SDavid du Colombier *sum++ = x;
33*8ccd4a63SDavid du Colombier }
34*8ccd4a63SDavid du Colombier *sum = carry;
35*8ccd4a63SDavid du Colombier }
36