int mp_cmp(const mp *a, const mp *b)
{
- if (!((a->f ^ b->f) & MP_NEG))
- return (mpx_ucmp(a->v, a->vl, b->v, b->vl));
- else if (a->f & MP_NEG)
+ if (!((a->f ^ b->f) & MP_NEG)) {
+ if (a->f & MP_NEG)
+ return (-mpx_ucmp(a->v, a->vl, b->v, b->vl));
+ else
+ return (mpx_ucmp(a->v, a->vl, b->v, b->vl));
+ } else if (a->f & MP_NEG)
return (-1);
else
return (+1);
p_bn \
} else { /* Both negative */ \
mp *t = mp_not2c(MP_NEW, a); \
- mp *d = mp_not2c(d, b); \
+ d = mp_not2c(d, b); \
d = mp_bit##abn(d, t, d); \
MP_DROP(t); \
p_abn \
ss = 0;
else {
mpw x = *v;
- mpw mask = MPW_MAX;
- unsigned z = MPW_BITS / 2;
+ unsigned z = MPW_P2;
+ mpw mask = ((mpw)1 << z) - 1;
while (z) {
- mask >>= z;
if (!(x & mask)) {
x >>= z;
ss += z;
}
z >>= 1;
+ mask >>= z;
}
}