Blob
1 #include "os.h"2 #include <mp.h>3 #include "dat.h"5 #define VLDIGITS (sizeof(vlong)/sizeof(mpdigit))7 /*8 * this code assumes that a vlong is an integral number of9 * mpdigits long.10 */11 mpint*12 uvtomp(uvlong v, mpint *b)13 {14 int s;16 if(b == nil)17 b = mpnew(VLDIGITS*sizeof(mpdigit));18 else19 mpbits(b, VLDIGITS*sizeof(mpdigit));20 mpassign(mpzero, b);21 if(v == 0)22 return b;23 for(s = 0; s < VLDIGITS && v != 0; s++){24 b->p[s] = v;25 v >>= sizeof(mpdigit)*8;26 }27 b->top = s;28 return b;29 }31 uvlong32 mptouv(mpint *b)33 {34 uvlong v;35 int s;37 if(b->top == 0)38 return 0LL;40 mpnorm(b);41 if(b->top > VLDIGITS)42 return MAXVLONG;44 v = 0ULL;45 for(s = 0; s < b->top; s++)46 v |= b->p[s]<<(s*sizeof(mpdigit)*8);48 return v;49 }