xref: /dflybsd-src/contrib/gmp/mpz/iset_si.c (revision d365564473a20a528d07c59cad8ee2f4bea5546f)
14b6a78b7SSimon Schubert /* mpz_init_set_si(dest,val) -- Make a new multiple precision in DEST and
24b6a78b7SSimon Schubert    assign VAL to the new number.
34b6a78b7SSimon Schubert 
44b6a78b7SSimon Schubert Copyright 1991, 1993, 1994, 1995, 2000, 2001, 2002 Free Software Foundation,
54b6a78b7SSimon Schubert Inc.
64b6a78b7SSimon Schubert 
74b6a78b7SSimon Schubert This file is part of the GNU MP Library.
84b6a78b7SSimon Schubert 
94b6a78b7SSimon Schubert The GNU MP Library is free software; you can redistribute it and/or modify
104b6a78b7SSimon Schubert it under the terms of the GNU Lesser General Public License as published by
114b6a78b7SSimon Schubert the Free Software Foundation; either version 3 of the License, or (at your
124b6a78b7SSimon Schubert option) any later version.
134b6a78b7SSimon Schubert 
144b6a78b7SSimon Schubert The GNU MP Library is distributed in the hope that it will be useful, but
154b6a78b7SSimon Schubert WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
164b6a78b7SSimon Schubert or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
174b6a78b7SSimon Schubert License for more details.
184b6a78b7SSimon Schubert 
194b6a78b7SSimon Schubert You should have received a copy of the GNU Lesser General Public License
204b6a78b7SSimon Schubert along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
214b6a78b7SSimon Schubert 
224b6a78b7SSimon Schubert #include "gmp.h"
234b6a78b7SSimon Schubert #include "gmp-impl.h"
244b6a78b7SSimon Schubert 
254b6a78b7SSimon Schubert void
mpz_init_set_si(mpz_ptr dest,signed long int val)264b6a78b7SSimon Schubert mpz_init_set_si (mpz_ptr dest, signed long int val)
274b6a78b7SSimon Schubert {
284b6a78b7SSimon Schubert   mp_size_t size;
294b6a78b7SSimon Schubert   mp_limb_t vl;
304b6a78b7SSimon Schubert 
314b6a78b7SSimon Schubert   dest->_mp_alloc = 1;
324b6a78b7SSimon Schubert   dest->_mp_d = (mp_ptr) (*__gmp_allocate_func) (BYTES_PER_MP_LIMB);
334b6a78b7SSimon Schubert 
34*d2d4b659SJohn Marino   vl = (mp_limb_t) ABS_CAST (unsigned long int, val);
354b6a78b7SSimon Schubert 
364b6a78b7SSimon Schubert   dest->_mp_d[0] = vl & GMP_NUMB_MASK;
374b6a78b7SSimon Schubert   size = vl != 0;
384b6a78b7SSimon Schubert 
394b6a78b7SSimon Schubert #if GMP_NAIL_BITS != 0
404b6a78b7SSimon Schubert   if (vl > GMP_NUMB_MAX)
414b6a78b7SSimon Schubert     {
424b6a78b7SSimon Schubert       MPZ_REALLOC (dest, 2);
434b6a78b7SSimon Schubert       dest->_mp_d[1] = vl >> GMP_NUMB_BITS;
444b6a78b7SSimon Schubert       size = 2;
454b6a78b7SSimon Schubert     }
464b6a78b7SSimon Schubert #endif
474b6a78b7SSimon Schubert 
484b6a78b7SSimon Schubert   dest->_mp_size = val >= 0 ? size : -size;
494b6a78b7SSimon Schubert }
50