[BACK]Return to lshift.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / cray

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>