void var_set_zero(struct variable *var) { assert(var != NULL); var->type = VAR_BIGNUM; mpl_zero(&var->bnum); }
int mpl_shr(mpl_int *a, unsigned int nr) { _mpl_int_t *dst, *src; unsigned int nbits, ndigs; int i, n; if (nr == 0 || mpl_iszero(a)) return MPL_OK; if (nr >= mpl_nr_bits(a)) { mpl_zero(a); return MPL_OK; } ndigs = nr / MPL_INT_BITS; nbits = nr % MPL_INT_BITS; n = a->top + 1 - ndigs; dst = a->dig; src = a->dig + ndigs; if (nbits > 0) { _mpl_int_t mask, shift; mask = (~(_mpl_int_t)0 & MPL_INT_MASK) >> (MPL_INT_BITS - nbits); shift = MPL_INT_BITS - nbits; for (i = 1; i < n; i++) { *dst = *src >> nbits; *dst |= (*(src+1) & mask) << shift; ++dst; ++src; } *dst = *src >> nbits; } else {