GMP 6.0 is upwardly source and binary compatible with 5.1, 5.0, 4.x, and 3.x,
except for applications that use the semi-documented mpn_bdivmod
function.
Changes in GMP 6.0.0
GMP
6.0.0 release announcement
BUGS FIXED
- The function mpz_invert now considers any number invertible in Z/1Z.
- The mpn multiply code now handles operands of more than 231 limbs
correctly. (Note however that the mpz code is limited to 232 bits on
32-bit hosts and 237 bits on 64-bit hosts.)
- Contains all fixes from release 5.1.3.
SPEEDUPS
- Plain division of large operands is faster and more monotonous in operand
size.
- Major speedup for ARM, in particular ARM Cortex-A15, thanks to improved
assembly.
- Major speedup for SPARC T4/T5 and speedup also for T3, thanks to a lot of
new assembly.
- Speedup for Intel Sandy Bridge, Ivy Bridge, Haswell, thanks to rewritten
and vastly expanded assembly support. Speedup also for the older Core 2
and Nehalem.
- Faster mixed arithmetic between mpq_class and double.
- With g++, optimise more operations when one argument is a simple constant.
FEATURES
- Support for new Intel and AMD CPUs.
- Support for ARM64 alias Aarch64 alias ARMv8.
- New public functions mpn_sec_mul and mpn_sec_sqr, implementing side-channel
silent multiplication and squaring.
- New public functions mpn_sec_div_qr and mpn_sec_div_r, implementing
side-channel silent division.
- New public functions mpn_cnd_add_n and mpn_cnd_sub_n. Side-channel silent
conditional addition and subtraction.
- New public function mpn_sec_powm, implementing side-channel silent modexp.
- New public function mpn_sec_invert, implementing side-channel silent
modular inversion.
- Better support for applications which use the mpz_t type, but nevertheless
need to call some of the lower-level mpn functions. See the documentation
for mpz_limbs_read and related functions.
MISC
- This release will not work on NetBSD 5.x, FreeBSD 7.x, 8.x or 9 series
before 9.3. The reason is that the m4 command is not correctly
implemented. (Workaround: Use an older GMP release, or install GNU m4 from
/usr/ports and tell GMP to use it.)
- This release will not build properly on FreeBSD/amd64 before version 10
using the 32-bit ABI (once a working m4 is installed). The reason is
broken limits.h. (Workaround: Use an older GMP release if using the 32-bit
ABI on these FreeBSD releases is important.)
- This release will not work reliably on FreeBSD 10.0 for i386 or amd64 using
the 32-bit ABI. The reason is bugs in the compiler 'clang'. Depending on
CPU-dependent compiler flags, GMP may or may not be miscompiled in a
particular build. (Workaround: Compiling gcc from /usr/ports should work,
except that gcc circularly depends on GMP; we have not been able to test
that workaround due to FreeBSD 10.0 bugs affecting its ability to run under
KVM and Xen.)
- This release will not compile on FreeBSD before version 10 for i386,
targeting any modern AMD processor. The reason is bugs in the old gcc
bundled with FreeBSD. (Workaround: install a less obsolete gcc from
/usr/ports and tell GMP to use it, or override the -march=amdfam10
GMP configure command line argument.)
The GMP 6.0 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.
There is a public repository for GMP, please see
the GMP repository usage instructions for
more information.
Torbjörn's work on GMP is sponsored in part
by Stiftelsen för Strategisk
Forskning, through CIAM.