diff --git a/ghc/runtime/gmp/mpz_get_si.c b/ghc/runtime/gmp/mpz_get_si.c index 9cddf4be7761a122b05e5d4d3272e48978e45e69..b2b87a7bf42acf77a68e490eb49446263eb7927e 100644 --- a/ghc/runtime/gmp/mpz_get_si.c +++ b/ghc/runtime/gmp/mpz_get_si.c @@ -34,7 +34,7 @@ mpz_get_si (integer) if (size > 0) return integer->d[0] % ((mp_limb) 1 << (BITS_PER_MP_LIMB - 1)); else if (size < 0) - return -(integer->d[0] % ((mp_limb) 1 << (BITS_PER_MP_LIMB - 1))); + return ~((integer->d[0] - 1) % ((mp_limb) 1 << (BITS_PER_MP_LIMB - 1))); else return 0; }