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