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.