xref: /inferno-os/libmp/port/mpveccmp.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "os.h"
2*37da2899SCharles.Forsyth #include <mp.h>
3*37da2899SCharles.Forsyth #include "dat.h"
4*37da2899SCharles.Forsyth 
5*37da2899SCharles.Forsyth int
mpveccmp(mpdigit * a,int alen,mpdigit * b,int blen)6*37da2899SCharles.Forsyth mpveccmp(mpdigit *a, int alen, mpdigit *b, int blen)
7*37da2899SCharles.Forsyth {
8*37da2899SCharles.Forsyth 	mpdigit x;
9*37da2899SCharles.Forsyth 
10*37da2899SCharles.Forsyth 	while(alen > blen)
11*37da2899SCharles.Forsyth 		if(a[--alen] != 0)
12*37da2899SCharles.Forsyth 			return 1;
13*37da2899SCharles.Forsyth 	while(blen > alen)
14*37da2899SCharles.Forsyth 		if(b[--blen] != 0)
15*37da2899SCharles.Forsyth 			return -1;
16*37da2899SCharles.Forsyth 	while(alen > 0){
17*37da2899SCharles.Forsyth 		--alen;
18*37da2899SCharles.Forsyth 		x = a[alen] - b[alen];
19*37da2899SCharles.Forsyth 		if(x == 0)
20*37da2899SCharles.Forsyth 			continue;
21*37da2899SCharles.Forsyth 		if(x > a[alen])
22*37da2899SCharles.Forsyth 			return -1;
23*37da2899SCharles.Forsyth 		else
24*37da2899SCharles.Forsyth 			return 1;
25*37da2899SCharles.Forsyth 	}
26*37da2899SCharles.Forsyth 	return 0;
27*37da2899SCharles.Forsyth }
28