GMP 6.0.0 released

Richard Biener rguenther at
Wed Mar 26 10:49:12 UTC 2014

On Tue, 25 Mar 2014, Torbjorn Granlund wrote:

> 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:
>     (smallest)
>    (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
> 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
>   * 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.
>   * 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.
>   * 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.)

 * Fails to build on ppc64-linux and ppc64le-linux

as I get for both

gcc -std=gnu99 -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. 
-DOPERATION_gcd_1 -fmessage-length=0 -grecord-gcc-switches -O2 -Wall 
-D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables 
-fasynchronous-unwind-tables -g -fexceptions -Wa,--noexecstack tmp-gcd_1.s 
-fPIC -DPIC -o .libs/gcd_1.o
tmp-gcd_1.s: Assembler messages:
tmp-gcd_1.s:98: Error: unsupported relocation against 

it would also be nice to finally fix

  configure: error: --target is not appropriate for GMP

for the case of --host == --build == --target as older rpm does this
for us:

[   72s] + ./configure --host=x86_64-suse-linux-gnu 
--build=x86_64-suse-linux-gnu --target=x86_64-suse-linux


Richard Biener <rguenther at>
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer

More information about the gmp-devel mailing list