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