=================================================================== RCS file: /home/cvs/OpenXM_contrib/gmp/mpz/Attic/iset_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/iset_si.c 2000/09/09 14:12:54 1.1.1.2 +++ OpenXM_contrib/gmp/mpz/Attic/iset_si.c 2003/08/25 16:06:33 1.1.1.3 @@ -1,7 +1,8 @@ -/* mpz_init_set_si(val) -- Make a new multiple precision number with - value val. +/* mpz_init_set_si(dest,val) -- Make a new multiple precision in DEST and + assign VAL to the new number. -Copyright (C) 1991, 1993, 1994, 1995, 2000 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. @@ -24,26 +25,27 @@ MA 02111-1307, USA. */ #include "gmp-impl.h" void -#if __STDC__ -mpz_init_set_si (mpz_ptr x, signed long int val) -#else -mpz_init_set_si (x, val) - mpz_ptr x; - signed long int val; -#endif +mpz_init_set_si (mpz_ptr dest, signed long int val) { - x->_mp_alloc = 1; - x->_mp_d = (mp_ptr) (*_mp_allocate_func) (BYTES_PER_MP_LIMB); - if (val > 0) + mp_size_t size; + mp_limb_t vl; + + dest->_mp_alloc = 1; + dest->_mp_d = (mp_ptr) (*__gmp_allocate_func) (BYTES_PER_MP_LIMB); + + vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val); + + dest->_mp_d[0] = vl & GMP_NUMB_MASK; + size = vl != 0; + +#if GMP_NAIL_BITS != 0 + if (vl > GMP_NUMB_MAX) { - x->_mp_d[0] = val; - x->_mp_size = 1; + MPZ_REALLOC (dest, 2); + dest->_mp_d[1] = vl >> GMP_NUMB_BITS; + size = 2; } - else if (val < 0) - { - x->_mp_d[0] = (unsigned long) -val; - x->_mp_size = -1; - } - else - x->_mp_size = 0; +#endif + + dest->_mp_size = val >= 0 ? size : -size; }