=================================================================== RCS file: /home/cvs/OpenXM_contrib/gmp/mpz/Attic/get_si.c,v retrieving revision 1.1.1.2 retrieving revision 1.1.1.3 diff -u -p -r1.1.1.2 -r1.1.1.3 --- OpenXM_contrib/gmp/mpz/Attic/get_si.c 2000/09/09 14:12:52 1.1.1.2 +++ OpenXM_contrib/gmp/mpz/Attic/get_si.c 2003/08/25 16:06:33 1.1.1.3 @@ -1,6 +1,7 @@ /* mpz_get_si(integer) -- Return the least significant digit from INTEGER. -Copyright (C) 1991, 1993, 1994, 1995 Free Software Foundation, Inc. +Copyright 1991, 1993, 1994, 1995, 2000, 2001, 2002 Free Software Foundation, +Inc. This file is part of the GNU MP Library. @@ -23,21 +24,22 @@ MA 02111-1307, USA. */ #include "gmp-impl.h" signed long int -#if __STDC__ -mpz_get_si (mpz_srcptr op) -#else -mpz_get_si (op) - mpz_srcptr op; -#endif +mpz_get_si (mpz_srcptr z) { - mp_size_t size = op->_mp_size; - mp_limb_t low_limb = op->_mp_d[0]; + mp_ptr zp = z->_mp_d; + mp_size_t size = z->_mp_size; + mp_limb_t zl = zp[0]; +#if GMP_NAIL_BITS != 0 + if (ULONG_MAX > GMP_NUMB_MAX != 0 && ABS (size) >= 2) + zl |= zp[1] << GMP_NUMB_BITS; +#endif + if (size > 0) - return low_limb % ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1)); + return (long) zl & LONG_MAX; else if (size < 0) - /* This convoluted expression is necessary to properly handle 0x80000000 */ - return ~((low_limb - 1) % ((mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1))); + /* This expression is necessary to properly handle 0x80000000 */ + return ~(((long) zl - 1L) & LONG_MAX); else return 0; }