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 2 31 limbs correctly. (Note however that the mpz code is limited to 2 32 bits on 32-bit hosts and 2 37 bits on 64-bit hosts.)

limbs correctly. (Note however that the mpz code is limited to 2 bits on 32-bit hosts and 2 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.