rshift.c revision 1.1.1.1
1/* mpn_rshift -- Shift right low level for Cray vector processors. 2 3Copyright (C) 2000 Free Software Foundation, Inc. 4 5This file is part of the GNU MP Library. 6 7The GNU MP Library is free software; you can redistribute it and/or modify 8it under the terms of the GNU Lesser General Public License as published by 9the Free Software Foundation; either version 3 of the License, or (at your 10option) any later version. 11 12The GNU MP Library is distributed in the hope that it will be useful, but 13WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 15License for more details. 16 17You should have received a copy of the GNU Lesser General Public License 18along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ 19 20#include <intrinsics.h> 21#include "gmp.h" 22#include "gmp-impl.h" 23 24mp_limb_t 25mpn_rshift (mp_ptr wp, mp_srcptr up, mp_size_t n, unsigned int cnt) 26{ 27 unsigned sh_1, sh_2; 28 mp_size_t i; 29 mp_limb_t retval; 30 31 sh_1 = cnt; 32 sh_2 = GMP_LIMB_BITS - sh_1; 33 retval = up[0] << sh_2; 34 35#pragma _CRI ivdep 36 for (i = 0; i < n - 1; i++) 37 { 38#if 1 39 wp[i] = (up[i] >> sh_1) | (up[i + 1] << sh_2); 40#else 41 /* This is the recommended way, but at least on SV1 it is slower. */ 42 wp[i] = _dshiftr (up[i + 1], up[i], sh_1); 43#endif 44 } 45 46 wp[n - 1] = up[n - 1] >> sh_1; 47 return retval; 48} 49