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: a >= b, alen >= blen, diff has at least alen digits
6*7dd7cddfSDavid du Colombier void
mpvecsub(mpdigit * a,int alen,mpdigit * b,int blen,mpdigit * diff)7*7dd7cddfSDavid du Colombier mpvecsub(mpdigit *a, int alen, mpdigit *b, int blen, mpdigit *diff)
8*7dd7cddfSDavid du Colombier {
9*7dd7cddfSDavid du Colombier int i, borrow;
10*7dd7cddfSDavid du Colombier mpdigit x, y;
11*7dd7cddfSDavid du Colombier
12*7dd7cddfSDavid du Colombier borrow = 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 y += borrow;
17*7dd7cddfSDavid du Colombier if(y < borrow)
18*7dd7cddfSDavid du Colombier borrow = 1;
19*7dd7cddfSDavid du Colombier else
20*7dd7cddfSDavid du Colombier borrow = 0;
21*7dd7cddfSDavid du Colombier if(x < y)
22*7dd7cddfSDavid du Colombier borrow++;
23*7dd7cddfSDavid du Colombier *diff++ = x - y;
24*7dd7cddfSDavid du Colombier }
25*7dd7cddfSDavid du Colombier for(; i < alen; i++){
26*7dd7cddfSDavid du Colombier x = *a++;
27*7dd7cddfSDavid du Colombier y = x - borrow;
28*7dd7cddfSDavid du Colombier if(y > x)
29*7dd7cddfSDavid du Colombier borrow = 1;
30*7dd7cddfSDavid du Colombier else
31*7dd7cddfSDavid du Colombier borrow = 0;
32*7dd7cddfSDavid du Colombier *diff++ = y;
33*7dd7cddfSDavid du Colombier }
34*7dd7cddfSDavid du Colombier }
35