diff options
author | tege <tege@gmplib.org> | 2002-04-16 23:26:39 +0200 |
---|---|---|
committer | tege <tege@gmplib.org> | 2002-04-16 23:26:39 +0200 |
commit | 5c894ae514eacbac1efb34da1baf0cd4f0733cf4 (patch) | |
tree | 34ea55109ae11a28b3b57bf6cd6173685c7e9cc2 /mpz/get_si.c | |
parent | 2df1b7f8b38aea6cdb42873d5e30ffd364fda2e3 (diff) | |
download | gmp-5c894ae514eacbac1efb34da1baf0cd4f0733cf4.tar.gz |
Nailify.
Diffstat (limited to 'mpz/get_si.c')
-rw-r--r-- | mpz/get_si.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/mpz/get_si.c b/mpz/get_si.c index 7783eafb3..94e6b8865 100644 --- a/mpz/get_si.c +++ b/mpz/get_si.c @@ -23,10 +23,18 @@ MA 02111-1307, USA. */ #include "gmp-impl.h" signed long int -mpz_get_si (mpz_srcptr op) +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 low_limb = zp[0]; + + if (ULONG_MAX > GMP_NUMB_MAX != 0 && ABS (size) >= 2) + { + /* happens for nails, but not if LONG_LONG_LIMB */ + /* assume two limbs are enough to fill an ulong */ + low_limb += zp[1] << GMP_NUMB_BITS; + } if (size > 0) return (long) low_limb & LONG_MAX; |