A new major release of the GNU Multiple Precision Arithmetic Library (GMP) is now available. The new release is identified as 6.0.0.
The release can be downloaded from here: https://gmplib.org/download/gmp/gmp-6.0.0a.tar.lz (smallest) https://gmplib.org/download/gmp/gmp-6.0.0a.tar.xz https://gmplib.org/download/gmp/gmp-6.0.0a.tar.bz2 (largest) These files will also soon be found at the GNU main site as well as its many mirrors. The 6.0.0 release contains a considerable amount of new code, and many improvements to existing code. Please see below for the some high- lights. There are both "6.0.0" and "6.0.0a" tar files; the latter have no code changes but a few fixes to the documentation files. It cannot be said enough times: Please run "make check" after you've built your library. And if "make check" stops with an error, do not use the compiled library. When this happens, you've almost surely run into a compiler bug, not a GMP bug, since we've of course made sure the library passes its own test suite. The first thing to try at this point is using a different compiler. See also https://gmplib.org/. We have expanded the testing from about 100 configurations to over 600 configurations. Thanks to both the broad testing and careful development, we expect this to be a very stable release. This release would not have been possible without the hard 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. Mark Sofroniou developed the fixes allowing > 2^31 limb mpn multiplies to work correctly. Changes between GMP version 5.1.* and 6.0.0 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.) * 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.) Torbjörn Granlund KTH Royal Institute of Technology _______________________________________________ GNU Announcement mailing list <[email protected]> https://lists.gnu.org/mailman/listinfo/info-gnu
