/* Copyright (c) 2009 Ian Piumarta
 * All rights reserved.
 * See the file COPYING for details.
 */

#include "_mpint.h"

/* mp = mp >> n */

mp_t *mp_shiftr(mp_t *mp, mp_size_t n)
{
  if (!n || mp_zerop(mp)) return mp;
  mp_ssize_t w= mp->width;
  mp_size_t  m= n / MP_BITS;
  if (m) {
    if ((w -= m) < 1) return mp_clear(mp);
    memmove(mp->bits, mp->bits + m, MP_BYTES * w);
    mp->width= w;
  }
  if (n %= MP_BITS) {
    mp_digit2_t c= 0;
    while (w--) {
      mp_digit2_t d= _mp_digitAt(mp, w);
      _mp_digitAtPut(mp, w, (c >> n) | (d >> n));
      c= d << MP_BITS;
    }
    mp_normalise(mp);
  }
  return mp;
}

