summaryrefslogtreecommitdiff
path: root/mpf/set_si.c
diff options
context:
space:
mode:
authortege <tege@gmplib.org>2002-05-06 15:22:19 +0200
committertege <tege@gmplib.org>2002-05-06 15:22:19 +0200
commit9080f17b46e75167b7f3bde7c1f0d45f99621db3 (patch)
tree74c3c0b10276e1ee3f3afc2184523f9594867e63 /mpf/set_si.c
parentbd3be8816de78cfeee4881fe50ff0e1f6d7410f2 (diff)
downloadgmp-9080f17b46e75167b7f3bde7c1f0d45f99621db3.tar.gz
Nailify.
Diffstat (limited to 'mpf/set_si.c')
-rw-r--r--mpf/set_si.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/mpf/set_si.c b/mpf/set_si.c
index 020d647ac..dd9a594cf 100644
--- a/mpf/set_si.c
+++ b/mpf/set_si.c
@@ -23,9 +23,24 @@ MA 02111-1307, USA. */
#include "gmp-impl.h"
void
-mpf_set_si (mpf_ptr f, long n)
+mpf_set_si (mpf_ptr dest, long val)
{
- f->_mp_d[0] = (unsigned long) (n >= 0 ? n : -n);
- f->_mp_exp = (n != 0);
- f->_mp_size = (n < 0 ? -1 : n != 0);
+ mp_size_t size;
+ mp_limb_t vl;
+
+ 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)
+ {
+ dest->_mp_d[1] = vl >> GMP_NUMB_BITS;
+ size = 2;
+ }
+#endif
+
+ dest->_mp_exp = size;
+ dest->_mp_size = val >= 0 ? size : -size;
}