]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libmp/port/mpvectscmp.c
merge
[plan9front.git] / sys / src / libmp / port / mpvectscmp.c
1 #include "os.h"
2 #include <mp.h>
3 #include "dat.h"
4
5 int
6 mpvectscmp(mpdigit *a, int alen, mpdigit *b, int blen)
7 {
8         mpdigit x, y, z, v;
9         int m, p;
10
11         if(alen > blen){
12                 v = 0;
13                 while(alen > blen)
14                         v |= a[--alen];
15                 m = p = (-v^v|v)>>Dbits-1;
16         } else if(blen > alen){
17                 v = 0;
18                 while(blen > alen)
19                         v |= b[--blen];
20                 m = (-v^v|v)>>Dbits-1;
21                 p = m^1;
22         } else
23                 m = p = 0;
24         while(alen-- > 0){
25                 x = a[alen];
26                 y = b[alen];
27                 z = x - y;
28                 x = ~x;
29                 v = ((-z^z|z)>>Dbits-1) & ~m;
30                 p = ((~(x&y|x&z|y&z)>>Dbits-1) & v) | (p & ~v);
31                 m |= v;
32         }
33         return (p-m) | m;
34 }