GMP 6.0.0 released

Torbjorn Granlund tg at gmplib.org
Tue Mar 25 17:39:10 UTC 2014


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


More information about the gmp-announce mailing list