xref: /inferno-os/libmp/port/mpcmp.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 // return neg, 0, pos as abs(b1)-abs(b2) is neg, 0, pos
6*37da2899SCharles.Forsyth int
mpmagcmp(mpint * b1,mpint * b2)7*37da2899SCharles.Forsyth mpmagcmp(mpint *b1, mpint *b2)
8*37da2899SCharles.Forsyth {
9*37da2899SCharles.Forsyth 	int i;
10*37da2899SCharles.Forsyth 
11*37da2899SCharles.Forsyth 	i = b1->top - b2->top;
12*37da2899SCharles.Forsyth 	if(i)
13*37da2899SCharles.Forsyth 		return i;
14*37da2899SCharles.Forsyth 
15*37da2899SCharles.Forsyth 	return mpveccmp(b1->p, b1->top, b2->p, b2->top);
16*37da2899SCharles.Forsyth }
17*37da2899SCharles.Forsyth 
18*37da2899SCharles.Forsyth // return neg, 0, pos as b1-b2 is neg, 0, pos
19*37da2899SCharles.Forsyth int
mpcmp(mpint * b1,mpint * b2)20*37da2899SCharles.Forsyth mpcmp(mpint *b1, mpint *b2)
21*37da2899SCharles.Forsyth {
22*37da2899SCharles.Forsyth 	if(b1->sign != b2->sign)
23*37da2899SCharles.Forsyth 		return b1->sign - b2->sign;
24*37da2899SCharles.Forsyth 	if(b1->sign < 0)
25*37da2899SCharles.Forsyth 		return mpmagcmp(b2, b1);
26*37da2899SCharles.Forsyth 	else
27*37da2899SCharles.Forsyth 		return mpmagcmp(b1, b2);
28*37da2899SCharles.Forsyth }
29