The internal functions mpn_sbpi1_div_qr_sec mpn_sbpi1_div_r_sec could
compute garbage with a low probability. They are now rewritten, and the
test code has been improved.
A bug in the ia64 implementation of mpn_divrem_2, clobbering some
callee-save registers, has been fixed. This is an internal function,
with the bug manifesting itself as miscomputation in, e.g., mpn_sqrtrem.
The documentation now correctly says 'const' for input arguments.
A bug in mpz_powm_ui triggered by base arguments of at least 15000
decimal digits or mod arguments of at least 7500 decimal digits has been
An AMD Bulldozer specific bug affecting the 64-bit Windows ABI has been
fixed. This bug was in a key function (mpn_mul_1) and made both Bulldozer
specific builds and fat builds run on Bulldozer completely non-functional.
When reading a C++ number (like mpz_class) in an istream reaches the end
of the stream, the eofbit is now set.
The result sign of mpz_rootrem's remainder is now always correct.
The mpz_remove function now handles negative divisors.
Contains all fixes from release 5.0.5.
The n-factorial and n-over-k functions have been reimplemented for great
speedups for small and large operands.
New subquadratic algorithm for the Kronecker/Jacobi/Legendre symbol.
Major speedup for ARM, in particular ARM Cortex-A9 and A15, thanks to broad
Significant speedup for POWER6 and POWER7 thanks to improved assembly.
The performance under M$ Windows' 64-bit ABI has been greatly improved
thanks to complete assembly support.
Minor speed improvements of many functions and for many platforms.
Many new CPUs recognised.
New functions for multi-factorials, and primorial: mpz_2fac_ui,
mpz_mfac_uiui and mpz_primorial_ui.
The mpz_powm_sec function now uses side-channel silent division for
converting into Montgomery residues.
The fat binary mechanism is now more robust in its CPU recognition.
Inclusion of assembly code is now controlled by the configure options
--enable-assembly and --disable-assembly. The "none" CPU target is gone.
In C++, the conversions mpq_class->mpz_class, mpf_class->mpz_class and
mpf_class->mpq_class are now explicit.
Includes "mini-gmp", a small, portable, but less efficient, implementation
of a subset of GMP's mpn and mpz interfaces. Used in GMP bootstrap, but it
can also be bundled with applications as a fallback when the real GMP
library is unavailable.
The ABIs under AIX are no longer called aix32 and aix64, but mode64 and 32.
This is more consistent with other powerpc systems.
The coverage of the testsuite has been improved, using the lcov tool. See
It is now possible to compile GMP using a C++ compiler.
K&R C compilers are no longer supported.
The BSD MP compatibility functions have been removed.
The GMP 5.1 release would not have been possible without the very devoted
work of Niels Möller and Marco Bodrato, or Marc Glisse's work on the C++
interface. As usual, Torbjörn Granlund coordinated the development and
release, and did a fair amount of development work himself. Please see
the GMP manual for a
complete list of GMP contributors.