summaryrefslogtreecommitdiff
path: root/mpz
diff options
context:
space:
mode:
authorTorbjorn Granlund <tege@gmplib.org>2012-02-11 12:51:21 +0100
committerTorbjorn Granlund <tege@gmplib.org>2012-02-11 12:51:21 +0100
commita4cdc3d613b1571b7b6e6229dc79fedb0dbfa99d (patch)
tree490ceb211d0417d0c0db3237e16a143e8e1d9809 /mpz
parent742c01ed5a51098862b9515c373022e71c80a412 (diff)
downloadgmp-a4cdc3d613b1571b7b6e6229dc79fedb0dbfa99d.tar.gz
(ABS_CAST): New macro.
Diffstat (limited to 'mpz')
-rw-r--r--mpz/cmp_si.c7
-rw-r--r--mpz/get_si.c4
-rw-r--r--mpz/iset_si.c2
-rw-r--r--mpz/mul_i.h2
-rw-r--r--mpz/set_si.c2
5 files changed, 9 insertions, 8 deletions
diff --git a/mpz/cmp_si.c b/mpz/cmp_si.c
index a8acdeffe..1919bd33e 100644
--- a/mpz/cmp_si.c
+++ b/mpz/cmp_si.c
@@ -28,6 +28,7 @@ _mpz_cmp_si (mpz_srcptr u, signed long int v_digit) __GMP_NOTHROW
mp_size_t usize = u->_mp_size;
mp_size_t vsize;
mp_limb_t u_digit;
+ unsigned long int absv_digit = (unsigned long int) v_digit;
#if GMP_NAIL_BITS != 0
/* FIXME. This isn't very pretty. */
@@ -45,7 +46,7 @@ _mpz_cmp_si (mpz_srcptr u, signed long int v_digit) __GMP_NOTHROW
else if (v_digit < 0)
{
vsize = -1;
- v_digit = -v_digit;
+ absv_digit = -absv_digit;
}
if (usize != vsize)
@@ -56,10 +57,10 @@ _mpz_cmp_si (mpz_srcptr u, signed long int v_digit) __GMP_NOTHROW
u_digit = u->_mp_d[0];
- if (u_digit == (mp_limb_t) (unsigned long) v_digit)
+ if (u_digit == (mp_limb_t) absv_digit)
return 0;
- if (u_digit > (mp_limb_t) (unsigned long) v_digit)
+ if (u_digit > (mp_limb_t) absv_digit)
return usize;
else
return -usize;
diff --git a/mpz/get_si.c b/mpz/get_si.c
index d24a4e47d..2f8a4738c 100644
--- a/mpz/get_si.c
+++ b/mpz/get_si.c
@@ -34,10 +34,10 @@ mpz_get_si (mpz_srcptr z) __GMP_NOTHROW
#endif
if (size > 0)
- return (long) zl & LONG_MAX;
+ return zl & LONG_MAX;
else if (size < 0)
/* This expression is necessary to properly handle 0x80000000 */
- return ~(((long) zl - 1L) & LONG_MAX);
+ return -1 - (long) ((zl - 1) & LONG_MAX);
else
return 0;
}
diff --git a/mpz/iset_si.c b/mpz/iset_si.c
index 0eb3881f4..64e51b386 100644
--- a/mpz/iset_si.c
+++ b/mpz/iset_si.c
@@ -31,7 +31,7 @@ mpz_init_set_si (mpz_ptr dest, signed long int val)
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);
+ vl = (mp_limb_t) ABS_CAST (unsigned long int, val);
dest->_mp_d[0] = vl & GMP_NUMB_MASK;
size = vl != 0;
diff --git a/mpz/mul_i.h b/mpz/mul_i.h
index d86196049..2de3fe0b5 100644
--- a/mpz/mul_i.h
+++ b/mpz/mul_i.h
@@ -26,7 +26,7 @@ along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
#ifdef OPERATION_mul_si
#define FUNCTION mpz_mul_si
#define MULTIPLICAND_UNSIGNED
-#define MULTIPLICAND_ABS(x) ((unsigned long) ABS(x))
+#define MULTIPLICAND_ABS(x) ABS_CAST(unsigned long, (x))
#endif
#ifdef OPERATION_mul_ui
diff --git a/mpz/set_si.c b/mpz/set_si.c
index 7c73047e3..bffb2ee33 100644
--- a/mpz/set_si.c
+++ b/mpz/set_si.c
@@ -27,7 +27,7 @@ mpz_set_si (mpz_ptr dest, signed long int val)
mp_size_t size;
mp_limb_t vl;
- vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val);
+ vl = (mp_limb_t) ABS_CAST (unsigned long int, val);
dest->_mp_d[0] = vl & GMP_NUMB_MASK;
size = vl != 0;