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