]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libmp/port/mpvecadd.c
merge
[plan9front.git] / sys / src / libmp / port / mpvecadd.c
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
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 }