
Packit 
5c3484 
Copyright 1996, 19992016 Free Software Foundation, Inc.


Packit 
5c3484 


Packit 
5c3484 
Verbatim copying and distribution of this entire article is permitted in any


Packit 
5c3484 
medium, provided this notice is preserved.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 6.1.1 and 6.1.2


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* MiniGMP: Fixed a division bug, which on a machine with 64bit


Packit 
5c3484 
unsigned long affects approximately 1 out of 2^32 divisors.


Packit 
5c3484 


Packit 
5c3484 
* MiniGMP: Fix mpz_set_str crash on inputs with a large number of


Packit 
5c3484 
leading zeros. Also stricter input validation, rejecting inputs


Packit 
5c3484 
with no digits.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* Handle more systems which require PIC code in static libraries (e.g.,


Packit 
5c3484 
"hardened" Gentoo and Debian 9).


Packit 
5c3484 


Packit 
5c3484 
* Configuration for arm (32 and 64) has been rewritten, fixing poor


Packit 
5c3484 
code selection for many CPUs.


Packit 
5c3484 


Packit 
5c3484 
* MiniGMP: Updated to the latest development version, including


Packit 
5c3484 
new functions mpn_com and mpn_neg.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* None, except for arm CPUs affected by the configuration rewrite.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 



Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 6.1.0 and 6.1.1


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* Make Intel Broadwell configurations work on Windows.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* Work around faulty cpuid on some recent Intel chips (this allows GMP to run


Packit 
5c3484 
on Skylake Pentiums).


Packit 
5c3484 


Packit 
5c3484 
* Support thumbless ARM chips.


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 6.0.* and 6.1.0


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* The public function mpn_com is now correctly declared in gmp.h.


Packit 
5c3484 


Packit 
5c3484 
* Healed possible failures of mpn_sec_sqr for noncryptographic sizes for


Packit 
5c3484 
some obsolete CPUs.


Packit 
5c3484 


Packit 
5c3484 
* The option disableassembly now disables all inlined asm.


Packit 
5c3484 


Packit 
5c3484 
* Fixed bug affecting minigmp's bitwise functions mpz_setbit, mpz_clrbit,


Packit 
5c3484 
and mpz_combit.


Packit 
5c3484 


Packit 
5c3484 
* Various problems related to precision for mpf have been fixed.


Packit 
5c3484 


Packit 
5c3484 
* Fixed ABI incompatible stack alignment in calls from assembly code.


Packit 
5c3484 


Packit 
5c3484 
* Fixed PIC bug in popcount affecting Intel processors using the 32bit ABI.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* Speedup for Intel Broadwell and Skylake through assembly code making use of


Packit 
5c3484 
new ADX instructions.


Packit 
5c3484 


Packit 
5c3484 
* Square root is now faster when the remainder is not needed. Also the speed


Packit 
5c3484 
to compute the kth root improved, for small sizes.


Packit 
5c3484 


Packit 
5c3484 
* Improved arm64 support.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* New C++ functions gcd and lcm for mpz_class.


Packit 
5c3484 


Packit 
5c3484 
* New public mpn functions mpn_divexact_1, mpn_zero_p, and mpn_cnd_swap.


Packit 
5c3484 


Packit 
5c3484 
* New public mpq_cmp_z function, to efficiently compare rationals with


Packit 
5c3484 
integers.


Packit 
5c3484 


Packit 
5c3484 
* Support for Darwin in all x86 code, thereby enabling fat builds on Darwin.


Packit 
5c3484 


Packit 
5c3484 
* Support for more 32bit arm processors.


Packit 
5c3484 


Packit 
5c3484 
* Support for compilation with clang/llvm on more platforms. Caution: GMP


Packit 
5c3484 
triggers miscompilation bugs in clang for many platforms, such as arm, x86


Packit 
5c3484 
(32bit and 64bit), powerpc, mips.


Packit 
5c3484 


Packit 
5c3484 
* Support for AVXless modern x86 CPUs. (Such support might be missing either


Packit 
5c3484 
because the CPU vendor chose to disable AVX, or because the running kernel


Packit 
5c3484 
lacks AVX context switch support.)


Packit 
5c3484 


Packit 
5c3484 
* Stack usage trimmed; we believe 512 KiB is now sufficient for any GMP


Packit 
5c3484 
call, irrespective of operand size.


Packit 
5c3484 


Packit 
5c3484 
* Support for NetBSD under Xen; we switch off AVX unconditionally under


Packit 
5c3484 
NetBSD since a bug in NetBSD makes AVX fail under Xen.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* We now use manufacturers' code names for x86 CPUs, e.g., "haswell" instead


Packit 
5c3484 
of names derived from the commercial brands.


Packit 
5c3484 


Packit 
5c3484 
* Small improvements and better coverage for the test suite.


Packit 
5c3484 


Packit 
5c3484 
* The various FreeBSD problems listed for 6.0.0 affect this release too.


Packit 
5c3484 


Packit 
5c3484 
* Tuned values for FFT multiplications are provided for larger number on


Packit 
5c3484 
many platforms.


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.1.* and 6.0.0


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* The function mpz_invert now considers any number invertible in Z/1Z.


Packit 
5c3484 


Packit 
5c3484 
* The mpn multiply code now handles operands of more than 2^31 limbs


Packit 
5c3484 
correctly. (Note however that the mpz code is limited to 2^32 bits on


Packit 
5c3484 
32bit hosts and 2^37 bits on 64bit hosts.)


Packit 
5c3484 


Packit 
5c3484 
* Contains all fixes from release 5.1.3.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* Plain division of large operands is faster and more monotonous in operand


Packit 
5c3484 
size.


Packit 
5c3484 


Packit 
5c3484 
* Major speedup for ARM, in particular ARM CortexA15, thanks to improved


Packit 
5c3484 
assembly.


Packit 
5c3484 


Packit 
5c3484 
* Major speedup for SPARC T4/T5 and speedup also for T3, thanks to a lot of


Packit 
5c3484 
new assembly.


Packit 
5c3484 


Packit 
5c3484 
* Speedup for Intel Sandy Bridge, Ivy Bridge, Haswell, thanks to rewritten


Packit 
5c3484 
and vastly expanded assembly support. Speedup also for the older Core 2


Packit 
5c3484 
and Nehalem.


Packit 
5c3484 


Packit 
5c3484 
* Faster mixed arithmetic between mpq_class and double.


Packit 
5c3484 


Packit 
5c3484 
* With g++, optimise more operations when one argument is a simple constant.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* Support for new Intel and AMD CPUs.


Packit 
5c3484 


Packit 
5c3484 
* Support for ARM64 alias Aarch64 alias ARMv8.


Packit 
5c3484 


Packit 
5c3484 
* New public functions mpn_sec_mul and mpn_sec_sqr, implementing sidechannel


Packit 
5c3484 
silent multiplication and squaring.


Packit 
5c3484 


Packit 
5c3484 
* New public functions mpn_sec_div_qr and mpn_sec_div_r, implementing


Packit 
5c3484 
sidechannel silent division.


Packit 
5c3484 


Packit 
5c3484 
* New public functions mpn_cnd_add_n and mpn_cnd_sub_n. Sidechannel silent


Packit 
5c3484 
conditional addition and subtraction.


Packit 
5c3484 


Packit 
5c3484 
* New public function mpn_sec_powm, implementing sidechannel silent modexp.


Packit 
5c3484 


Packit 
5c3484 
* New public function mpn_sec_invert, implementing sidechannel silent


Packit 
5c3484 
modular inversion.


Packit 
5c3484 


Packit 
5c3484 
* Better support for applications which use the mpz_t type, but nevertheless


Packit 
5c3484 
need to call some of the lowerlevel mpn functions. See the documentation


Packit 
5c3484 
for mpz_limbs_read and related functions.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* This release will not work on NetBSD 5.x, FreeBSD 7.x, 8.x or 9 series


Packit 
5c3484 
before 9.3. The reason is that the m4 command is not correctly


Packit 
5c3484 
implemented. (Workaround: Use an older GMP release, or install GNU m4 from


Packit 
5c3484 
/usr/ports and tell GMP to use it.)


Packit 
5c3484 


Packit 
5c3484 
* This release will not build properly on FreeBSD/amd64 before version 10


Packit 
5c3484 
using the 32bit ABI (once a working m4 is installed). The reason is


Packit 
5c3484 
broken limits.h. (Workaround: Use an older GMP release if using the 32bit


Packit 
5c3484 
ABI on these FreeBSD releases is important.)


Packit 
5c3484 


Packit 
5c3484 
* This release will not work reliably on FreeBSD 10.0 for i386 or amd64 using


Packit 
5c3484 
the 32bit ABI. The reason is bugs in the compiler 'clang'. Depending on


Packit 
5c3484 
CPUdependent compiler flags, GMP may or may not be miscompiled in a


Packit 
5c3484 
particular build. (Workaround: Compiling gcc from /usr/ports should work,


Packit 
5c3484 
except that gcc circularly depends on GMP; we have not been able to test


Packit 
5c3484 
that workaround due to FreeBSD 10.0 bugs affecting its ability to run under


Packit 
5c3484 
KVM and Xen.)


Packit 
5c3484 


Packit 
5c3484 
* This release will not compile on FreeBSD before version 10 for i386,


Packit 
5c3484 
targeting any modern AMD processor. The reason is bugs in the old gcc


Packit 
5c3484 
bundled with FreeBSD. (Workaround: install a less obsolete gcc from


Packit 
5c3484 
/usr/ports and tell GMP to use it, or override the march=amdfam10


Packit 
5c3484 
GMP configure command line argument.)


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.1.2 and 5.1.3


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* The internal functions mpn_sbpi1_div_qr_sec mpn_sbpi1_div_r_sec could


Packit 
5c3484 
compute garbage with a low probability. They are now rewritten, and the


Packit 
5c3484 
test code has been improved.


Packit 
5c3484 


Packit 
5c3484 
* A bug in the ia64 implementation of mpn_divrem_2, clobbering some


Packit 
5c3484 
calleesave registers, has been fixed. This is an internal


Packit 
5c3484 
function, with the bug manifesting itself as miscomputation in,


Packit 
5c3484 
e.g., mpn_sqrtrem.


Packit 
5c3484 


Packit 
5c3484 
* The documentation now correctly says 'const' for input arguments.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.1.1 and 5.1.2


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* A bug in mpz_powm_ui triggered by base arguments of at least 15000 decimal


Packit 
5c3484 
digits or mod arguments of at least 7500 decimal digits has been fixed.


Packit 
5c3484 


Packit 
5c3484 
* An AMD Bulldozer specific bug affecting the 64bit Windows ABI has been


Packit 
5c3484 
fixed. This bug was in a key function (mpn_mul_1) and made both Bulldozer


Packit 
5c3484 
specific builds and fat builds run on Bulldozer completely nonfunctional.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* Fixes and generalisations to the test suite.


Packit 
5c3484 


Packit 
5c3484 
* Minor portability enhancements.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.1.0 and 5.1.1


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* On Windows 64bit, an error causing link errors about


Packit 
5c3484 
__gmp_binvert_limb_table has been fixed.


Packit 
5c3484 


Packit 
5c3484 
* Aarch64 alias ARM64 support now works.


Packit 
5c3484 


Packit 
5c3484 
* A possible buffer overrun in mpz_ior has been fixed.


Packit 
5c3484 


Packit 
5c3484 
* A rare sign flip in mpz_remove has been fixed.


Packit 
5c3484 


Packit 
5c3484 
* A bug causing problems with mpf numbers with absolute value >= 2^31 has


Packit 
5c3484 
been fixed.


Packit 
5c3484 


Packit 
5c3484 
* Several bugs in minigmp have been fixed.


Packit 
5c3484 


Packit 
5c3484 
* A bug caused by automake, related to the 'distcheck' target, has been fixed


Packit 
5c3484 
by upgrading the automake used for GMP release engineering.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* Preliminary support for the x32 ABI under x8664.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* The minigmp testsuite now tests the entire set of functions.


Packit 
5c3484 


Packit 
5c3484 
* Various improvements of the GMP testsuite.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.0.* and 5.1.0


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* When reading a C++ number (like mpz_class) in an istream reaches the end


Packit 
5c3484 
of the stream, the eofbit is now set.


Packit 
5c3484 


Packit 
5c3484 
* The result sign of mpz_rootrem's remainder is now always correct.


Packit 
5c3484 


Packit 
5c3484 
* The mpz_remove function now handles negative divisors.


Packit 
5c3484 


Packit 
5c3484 
* Contains all fixes from release 5.0.5.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* The nfactorial and noverk functions have been reimplemented for great


Packit 
5c3484 
speedups for small and large operands.


Packit 
5c3484 


Packit 
5c3484 
* New subquadratic algorithm for the Kronecker/Jacobi/Legendre symbol.


Packit 
5c3484 


Packit 
5c3484 
* Major speedup for ARM, in particular ARM CortexA9 and A15, thanks to broad


Packit 
5c3484 
assembly support.


Packit 
5c3484 


Packit 
5c3484 
* Significant speedup for POWER6 and POWER7 thanks to improved assembly.


Packit 
5c3484 


Packit 
5c3484 
* The performance under M$ Windows' 64bit ABI has been greatly improved


Packit 
5c3484 
thanks to complete assembly support.


Packit 
5c3484 


Packit 
5c3484 
* Minor speed improvements of many functions and for many platforms.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* Many new CPUs recognised.


Packit 
5c3484 


Packit 
5c3484 
* New functions for multifactorials, and primorial: mpz_2fac_ui,


Packit 
5c3484 
mpz_mfac_uiui and mpz_primorial_ui.


Packit 
5c3484 


Packit 
5c3484 
* The mpz_powm_sec function now uses sidechannel silent division for


Packit 
5c3484 
converting into Montgomery residues.


Packit 
5c3484 


Packit 
5c3484 
* The fat binary mechanism is now more robust in its CPU recognition.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* Inclusion of assembly code is now controlled by the configure options


Packit 
5c3484 
enableassembly and disableassembly. The "none" CPU target is gone.


Packit 
5c3484 


Packit 
5c3484 
* In C++, the conversions mpq_class>mpz_class, mpf_class>mpz_class and


Packit 
5c3484 
mpf_class>mpq_class are now explicit.


Packit 
5c3484 


Packit 
5c3484 
* Includes "minigmp", a small, portable, but less efficient, implementation


Packit 
5c3484 
of a subset of GMP's mpn and mpz interfaces. Used in GMP bootstrap, but it


Packit 
5c3484 
can also be bundled with applications as a fallback when the real GMP


Packit 
5c3484 
library is unavailable.


Packit 
5c3484 


Packit 
5c3484 
* The ABIs under AIX are no longer called aix32 and aix64, but mode64 and 32.


Packit 
5c3484 
This is more consistent with other powerpc systems.


Packit 
5c3484 


Packit 
5c3484 
* The coverage of the testsuite has been improved, using the lcov tool. See


Packit 
5c3484 
also https://gmplib.org/devel/lcov/.


Packit 
5c3484 


Packit 
5c3484 
* It is now possible to compile GMP using a C++ compiler.


Packit 
5c3484 


Packit 
5c3484 
* K&R C compilers are no longer supported.


Packit 
5c3484 


Packit 
5c3484 
* The BSD MP compatibility functions have been removed.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.0.4 and 5.0.5


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* A bug causing AMD 11h processors to be treated like AMD 10h has been fixed.


Packit 
5c3484 
The 11h processors do not correctly handle all 10h (aka K10) instructions,


Packit 
5c3484 
and GMP's use of these instructions results in major miscomputations (not


Packit 
5c3484 
as one would have hoped CPU traps of some 'illegal instruction' sort).


Packit 
5c3484 


Packit 
5c3484 
* A bug affecting recent Intel Sandy Bridge CPUs resulting in configuration


Packit 
5c3484 
failures has been fixed.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* A couple of tests added to the selfcheck suite.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.0.3 and 5.0.4


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* Thresholds in mpn_powm_sec for both fat and nonfat builds are now used


Packit 
5c3484 
safely, plugging a oneword buffer overrun introduced in the 5.0.3 release


Packit 
5c3484 
(for nonfat) and a multiword buffer overrun that existed since 5.0 (for


Packit 
5c3484 
fat). (We have not been able to provoke malign stack smashing in any of


Packit 
5c3484 
the ~100 configurations explored by the GMP nightly builds, but the bug


Packit 
5c3484 
should be assumed to be exploitable.)


Packit 
5c3484 


Packit 
5c3484 
* Two bugs in multiplication code causing incorrect computation with


Packit 
5c3484 
extremely low probability have been fixed.


Packit 
5c3484 


Packit 
5c3484 
* A bug in the test suite causing buffer overruns during "make check",


Packit 
5c3484 
sometimes leading to subsequent malloc crashes, has been fixed.


Packit 
5c3484 


Packit 
5c3484 
* Two bugs in the gcd code have been fixed. They could lead to incorrect


Packit 
5c3484 
results, but for uniformly distributed random operands, the likelihood for


Packit 
5c3484 
that is infinitesimally small. (There was also a third bug, but that was


Packit 
5c3484 
an incorrect ASSERT, which furthermore was not enabled by default.)


Packit 
5c3484 


Packit 
5c3484 
* A bug affecting 32bit PowerPC division has been fixed. The bug caused


Packit 
5c3484 
miscomputation for certain divisors in the range 2^32 ... 2^641 (about 1


Packit 
5c3484 
in 2^30 of these).


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* None, except indirectly through recognition of new CPUs, and through better


Packit 
5c3484 
tuning parameters.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* Some more tests added to the selfcheck suite.


Packit 
5c3484 


Packit 
5c3484 
* The AMD "Bulldozer" CPU is now recognised.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.0.2 and 5.0.3


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* A few minor bugs related to portability fixed.


Packit 
5c3484 


Packit 
5c3484 
* A slight timing leak of the powm_sec functions have been sealed. (This


Packit 
5c3484 
leak could possibly be used to extract the most significant few bits of the


Packit 
5c3484 
exponent. "Few" here means at most 10.)


Packit 
5c3484 


Packit 
5c3484 
* The mpz_nextprime function now runs a safer number of pseudorandom prime


Packit 
5c3484 
tests.


Packit 
5c3484 


Packit 
5c3484 
* A bug in division code possibly causing incorrect computation was fixed.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* None, except indirectly through recognition of new CPUs, and through better


Packit 
5c3484 
tuning parameters.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* New CPUs recognised.


Packit 
5c3484 


Packit 
5c3484 
* IBM S/390 are now supported in both 31/32bit and 64bit mode. (We have


Packit 
5c3484 
not been able to fully test this on any multilib machine, since IBM expired


Packit 
5c3484 
our guest account a few days before our release.)


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.0.1 and 5.0.2


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* Many minor bugs related to portability fixed.


Packit 
5c3484 


Packit 
5c3484 
* The support for HPPA 2.0N now works, after an assembly bug fix.


Packit 
5c3484 


Packit 
5c3484 
* A test case type error has been fixed. The symptom of this bug was


Packit 
5c3484 
spurious 'make check' failures.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* None, except indirectly through recognition of new CPUs.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* Fat builds are now supported for 64bit x86 processors also under Darwin.


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 5.0.0 and 5.0.1


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* Fat builds fixed.


Packit 
5c3484 


Packit 
5c3484 
* Fixed crash for huge multiplies when old FFT_TABLE2 type of parameter


Packit 
5c3484 
selection tables' sentinel was smaller than multiplied operands.


Packit 
5c3484 


Packit 
5c3484 
* The solib numbers now reflect the removal of the documented but preliminary


Packit 
5c3484 
mpn_bdivmod function; we correctly flag incompatibility with GMP 4.3. GMP


Packit 
5c3484 
5.0.0 has this wrong, and should perhaps be uninstalled to avoid confusion.


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* Multiplication of large numbers has indirectly been sped up through better


Packit 
5c3484 
FFT tuning and processor recognition. Since many operations depend on


Packit 
5c3484 
multiplication, there will be a general speedup.


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* More Core i3, i5 an Core i7 processor models are recognised.


Packit 
5c3484 


Packit 
5c3484 
* Fixes and workarounds for Mac OS quirks should make this GMP version build


Packit 
5c3484 
using many of the different versions of "Xcode".


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* The amount of scratch memory needed for multiplication of huge numbers has


Packit 
5c3484 
been reduced substantially (but is still larger than in GMP 4.3.)


Packit 
5c3484 


Packit 
5c3484 
* Likewise, the amount of scratch memory needed for division of large numbers


Packit 
5c3484 
has been reduced substantially.


Packit 
5c3484 


Packit 
5c3484 
* The FFT tuning code of tune/tuneup.c has been completely rewritten, and


Packit 
5c3484 
new, large FFT parameter selection tables are provided for many machines.


Packit 
5c3484 


Packit 
5c3484 
* Upgraded to the latest autoconf, automake, libtool.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.3.X and 5.0.0


Packit 
5c3484 


Packit 
5c3484 
BUGS FIXED


Packit 
5c3484 
* None (contains the same fixes as release 4.3.2).


Packit 
5c3484 


Packit 
5c3484 
SPEEDUPS


Packit 
5c3484 
* Multiplication has been overhauled:


Packit 
5c3484 
(1) Multiplication of larger same size operands has been improved with


Packit 
5c3484 
the addition of two new Toom functions and a new internal function


Packit 
5c3484 
mpn_mulmod_bnm1 (computing U * V mod (B^n1), B being the word base.


Packit 
5c3484 
This latter function is used for the largest products, waiting for a


Packit 
5c3484 
better SchoenhageStrassen U * V mod (B^n+1) implementation.


Packit 
5c3484 
(2) Likewise for squaring.


Packit 
5c3484 
(3) Multiplication of different size operands has been improved with the


Packit 
5c3484 
addition of many new Toom function, and by selecting underlying


Packit 
5c3484 
functions better from the main multiply functions.


Packit 
5c3484 


Packit 
5c3484 
* Division and mod have been overhauled:


Packit 
5c3484 
(1) Plain "schoolbook" division is reimplemented using faster quotient


Packit 
5c3484 
approximation.


Packit 
5c3484 
(2) Division Q = N/D, R = N mod D where both the quotient and remainder


Packit 
5c3484 
are needed now runs in time O(M(log(N))). This is an improvement of


Packit 
5c3484 
a factor log(log(N))


Packit 
5c3484 
(3) Division where just the quotient is needed is now O(M(log(Q))) on


Packit 
5c3484 
average.


Packit 
5c3484 
(4) Modulo operations using Montgomery REDC form now take time O(M(n)).


Packit 
5c3484 
(5) Exact division Q = N/D by means of mpz_divexact has been improved


Packit 
5c3484 
for all sizes, and now runs in time O(M(log(N))).


Packit 
5c3484 


Packit 
5c3484 
* The function mpz_powm is now faster for all sizes. Its complexity has


Packit 
5c3484 
gone from O(M(n)log(n)m) to O(M(n)m) where n is the size of the modulo


Packit 
5c3484 
argument and m is the size of the exponent. It is also radically


Packit 
5c3484 
faster for even modulus, since it now partially factors such modulus


Packit 
5c3484 
and performs two smaller modexp operations, then uses CRT.


Packit 
5c3484 


Packit 
5c3484 
* The internal support for multiplication yielding just the lower n limbs


Packit 
5c3484 
has been improved by using Mulders' algorithm.


Packit 
5c3484 


Packit 
5c3484 
* Computation of inverses, both plain 1/N and 1/N mod B^n have been


Packit 
5c3484 
improved by using welltuned Newton iterations, and wraparound


Packit 
5c3484 
multiplication using mpn_mulmod_bnm1.


Packit 
5c3484 


Packit 
5c3484 
* A new algorithm makes mpz_perfect_power_p asymptotically faster.


Packit 
5c3484 


Packit 
5c3484 
* The function mpz_remove uses a much faster algorithm, is better tuned,


Packit 
5c3484 
and also benefits from the division improvements.


Packit 
5c3484 


Packit 
5c3484 
* Intel Atom and VIA Nano specific optimisations.


Packit 
5c3484 


Packit 
5c3484 
* Plus hundreds of smaller improvements and tweaks!


Packit 
5c3484 


Packit 
5c3484 
FEATURES


Packit 
5c3484 
* New mpz function: mpz_powm_sec for sidechannel quiet modexp


Packit 
5c3484 
computations.


Packit 
5c3484 


Packit 
5c3484 
* New mpn functions: mpn_sqr, mpn_and_n, mpn_ior_n, mpn_xor_n, mpn_nand_n,


Packit 
5c3484 
mpn_nior_n, mpn_xnor_n, mpn_andn_n, mpn_iorn_n, mpn_com, mpn_neg,


Packit 
5c3484 
mpn_copyi, mpn_copyd, mpn_zero.


Packit 
5c3484 


Packit 
5c3484 
* The function mpn_tdiv_qr now allows certain argument overlap.


Packit 
5c3484 


Packit 
5c3484 
* Support for fat binaries for 64bit x86 processors has been added.


Packit 
5c3484 


Packit 
5c3484 
* A new type, mp_bitcnt_t for bignum bit counts, has been introduced.


Packit 
5c3484 


Packit 
5c3484 
* Support for Windows64 through mingw64 has been added.


Packit 
5c3484 


Packit 
5c3484 
* The cofactors of mpz_gcdext and mpn_gcdext are now more strictly


Packit 
5c3484 
normalised, returning to how GMP 4.2 worked. (Note that also release


Packit 
5c3484 
4.3.2 has this change.)


Packit 
5c3484 


Packit 
5c3484 
MISC


Packit 
5c3484 
* The mpn_mul function should no longer be used for squaring,


Packit 
5c3484 
instead use the new mpn_sqr.


Packit 
5c3484 


Packit 
5c3484 
* The algorithm selection has been improved, the number of thresholds have


Packit 
5c3484 
more than doubled, and the tuning and use of existing thresholds have


Packit 
5c3484 
been improved.


Packit 
5c3484 


Packit 
5c3484 
* The tune/speed program can measure many of new functions.


Packit 
5c3484 


Packit 
5c3484 
* The mpn_bdivmod function has been removed. We do not consider this an


Packit 
5c3484 
incompatible change, since the function was marked as preliminary.


Packit 
5c3484 


Packit 
5c3484 
* The testsuite has been enhanced in various ways.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.3.1 and 4.3.2


Packit 
5c3484 


Packit 
5c3484 
Bugs:


Packit 
5c3484 
* Fixed bug in mpf_eq.


Packit 
5c3484 
* Fixed overflow issues in mpz_set_str, mpz_inp_str, mpf_set_str, and


Packit 
5c3484 
mpf_get_str.


Packit 
5c3484 
* Avoid unbounded stack allocation for unbalanced multiplication.


Packit 
5c3484 
* Fixed bug in FFT multiplication.


Packit 
5c3484 


Packit 
5c3484 
Speedups:


Packit 
5c3484 
* None, except that proper processor recognition helps affected processors.


Packit 
5c3484 


Packit 
5c3484 
Features:


Packit 
5c3484 
* Recognise more "Core 2" processor variants.


Packit 
5c3484 
* The cofactors of mpz_gcdext and mpn_gcdext are now more strictly


Packit 
5c3484 
normalised, returning to how GMP 4.2 worked.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.3.0 and 4.3.1


Packit 
5c3484 


Packit 
5c3484 
Bugs:


Packit 
5c3484 
* Fixed bug in mpn_gcdext, affecting also mpz_gcdext and mpz_invert.


Packit 
5c3484 
The bug could cause a cofactor to have a leading zero limb, which


Packit 
5c3484 
could lead to crashes or miscomputation later on.


Packit 
5c3484 
* Fixed some minor documentation issues.


Packit 
5c3484 


Packit 
5c3484 
Speedups:


Packit 
5c3484 
* None.


Packit 
5c3484 


Packit 
5c3484 
Features:


Packit 
5c3484 
* Workarounds for various issues with Mac OS X's build tools.


Packit 
5c3484 
* Recognise more IBM "POWER" processor variants.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.2.X and 4.3.0


Packit 
5c3484 


Packit 
5c3484 
Bugs:


Packit 
5c3484 
* Fixed bug in mpz_perfect_power_p with recognition of negative perfect


Packit 
5c3484 
powers that can be written both as an even and odd power.


Packit 
5c3484 
* We might accidentally have added bugs since there is a large amount of


Packit 
5c3484 
new code in this release.


Packit 
5c3484 


Packit 
5c3484 
Speedups:


Packit 
5c3484 
* Vastly improved assembly code for x8664 processors from AMD and Intel.


Packit 
5c3484 
* Major improvements also for many other processor families, such as


Packit 
5c3484 
Alpha, PowerPC, and Itanium.


Packit 
5c3484 
* New subquadratic mpn_gcd and mpn_gcdext, as well as improved basecase


Packit 
5c3484 
gcd code.


Packit 
5c3484 
* The multiply FFT code has been slightly improved.


Packit 
5c3484 
* Balanced multiplication now uses 4way Toom in addition to schoolbook,


Packit 
5c3484 
Karatsuba, 3way Toom, and FFT.


Packit 
5c3484 
* Unbalanced multiplication has been vastly improved.


Packit 
5c3484 
* Improved schoolbook division by means of faster quotient approximation.


Packit 
5c3484 
* Several new algorithms for division and mod by single limbs, giving


Packit 
5c3484 
manyfold speedups.


Packit 
5c3484 
* Improved nth root computations.


Packit 
5c3484 
* The mpz_nextprime function uses sieving and is much faster.


Packit 
5c3484 
* Countless minor tweaks.


Packit 
5c3484 


Packit 
5c3484 
Features:


Packit 
5c3484 
* Updated support for fat binaries for x86_32 include current processors


Packit 
5c3484 
* Lots of new mpn internal interfaces. Some of them will become public


Packit 
5c3484 
in a future GMP release.


Packit 
5c3484 
* Support for the 32bit ABI under x86appledarwin.


Packit 
5c3484 
* x86 CPU recognition code should now default better for future


Packit 
5c3484 
processors.


Packit 
5c3484 
* The experimental nails feature does not work in this release, but


Packit 
5c3484 
it might be reenabled in the future.


Packit 
5c3484 


Packit 
5c3484 
Misc:


Packit 
5c3484 
* The gmp_version variable now always contains three parts. For this


Packit 
5c3484 
release, it is "4.3.0".


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.2.3 and 4.2.4


Packit 
5c3484 


Packit 
5c3484 
Bugs:


Packit 
5c3484 
* Fix bug with parsing exponent '+' sign in mpf.


Packit 
5c3484 
* Fix an allocation bug in mpf_set_str, also affecting mpf_init_set_str, and


Packit 
5c3484 
mpf_inp_str.


Packit 
5c3484 


Packit 
5c3484 
Speedups:


Packit 
5c3484 
* None, except that proper processor recognition helps affected processors.


Packit 
5c3484 


Packit 
5c3484 
Features:


Packit 
5c3484 
* Recognize new AMD processors.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.2.2 and 4.2.3


Packit 
5c3484 


Packit 
5c3484 
Bugs:


Packit 
5c3484 
* Fix x86 CPU recognition code to properly identify recent AMD and Intel


Packit 
5c3484 
64bit processors.


Packit 
5c3484 
* The >> operator of the C++ wrapper gmpxx.h now does floor rounding, not


Packit 
5c3484 
truncation.


Packit 
5c3484 
* Inline semantics now follow the C99 standard, and works with recent GCC


Packit 
5c3484 
releases.


Packit 
5c3484 
* C++ bitwise logical operations work for more types.


Packit 
5c3484 
* For C++, gmp.h now includes cstdio, improving compiler compatibility.


Packit 
5c3484 
* Bases > 36 now work properly in mpf_set_str.


Packit 
5c3484 


Packit 
5c3484 
Speedups:


Packit 
5c3484 
* None, except that proper processor recognition helps affected processors.


Packit 
5c3484 


Packit 
5c3484 
Features:


Packit 
5c3484 
* The allocation functions now detect overflow of the mpz_t type. This means


Packit 
5c3484 
that overflow will now cause an abort, except when the allocation


Packit 
5c3484 
computation itself overflows. (Such overflow can probably only happen in


Packit 
5c3484 
powering functions; we will detect powering overflow in the future.)


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.2.1 and 4.2.2


Packit 
5c3484 


Packit 
5c3484 
* License is now LGPL version 3.


Packit 
5c3484 


Packit 
5c3484 
Bugs:


Packit 
5c3484 
* Shared library numbers corrected for libcxx.


Packit 
5c3484 
* Fixed serious bug in gmpxx.h where a=a+b*c would generate garbage.


Packit 
5c3484 
Note that this only affects C++ programs.


Packit 
5c3484 
* Fix crash in mpz_set_d for arguments with large negative exponent.


Packit 
5c3484 
* Fix 32bit ABI bug with Itanium assembly for popcount and hamdist.


Packit 
5c3484 
* Fix assembly syntax problem for powerpcibmaix with AIX native assembler.


Packit 
5c3484 
* Fix problems with x86 enablefat, where the compiler where told to


Packit 
5c3484 
generate code for the build machine, not plain i386 code as it should.


Packit 
5c3484 
* Improved recognition of powerpc systems wrt Altivec/VMX capability.


Packit 
5c3484 
* Misc minor fixes, mainly workarounds for compiler/assembler bugs.


Packit 
5c3484 


Packit 
5c3484 
Speedups:


Packit 
5c3484 
* "Core 2" and Pentium 4 processors, running in 64bit mode will get a


Packit 
5c3484 
slight boost as they are now specifically recognized.


Packit 
5c3484 


Packit 
5c3484 
Features:


Packit 
5c3484 
* New support for x86_64solaris


Packit 
5c3484 
* New, rudimentary support for x86appledarwin and x86_64appledarwin.


Packit 
5c3484 
(Please see https://gmplib.org/macos.html for more information.)


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.2 and 4.2.1


Packit 
5c3484 


Packit 
5c3484 
Bugs:


Packit 
5c3484 
* Shared library numbers corrected.


Packit 
5c3484 
* Broken support for 32bit AIX fixed.


Packit 
5c3484 
* Misc minor fixes.


Packit 
5c3484 


Packit 
5c3484 
Speedups:


Packit 
5c3484 
* Exact division (mpz_divexact) now falls back to plain division for large


Packit 
5c3484 
operands.


Packit 
5c3484 


Packit 
5c3484 
Features:


Packit 
5c3484 
* Support for some new systems.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.1.4 and 4.2


Packit 
5c3484 


Packit 
5c3484 
Bugs:


Packit 
5c3484 
* Minor bug fixes and code generalizations.


Packit 
5c3484 
* Expanded and improved test suite.


Packit 
5c3484 


Packit 
5c3484 
Speedups:


Packit 
5c3484 
* Many minor optimizations, too many to mention here.


Packit 
5c3484 
* Division now always subquadratic.


Packit 
5c3484 
* Computation of nfactorial much faster.


Packit 
5c3484 
* Added basic x8664 assembly code.


Packit 
5c3484 
* Floatingpoint output is now subquadratic for all bases.


Packit 
5c3484 
* FFT multiply code now about 25% faster.


Packit 
5c3484 
* Toom3 multiply code faster.


Packit 
5c3484 


Packit 
5c3484 
Features:


Packit 
5c3484 
* Much improved configure.


Packit 
5c3484 
* Workarounds for many more compiler bugs.


Packit 
5c3484 
* Temporary allocations are now made on the stack only if small.


Packit 
5c3484 
* New systems supported: HPPA2.0 gcc, IA64 HPUX, PowerPC64 Darwin,


Packit 
5c3484 
Sparc64 GNU/Linux.


Packit 
5c3484 
* New i386 fat binaries, selecting optimised code at runtime (enablefat).


Packit 
5c3484 
* New build option: enableprofiling=instrument.


Packit 
5c3484 
* New memory function: mp_get_memory_functions.


Packit 
5c3484 
* New Mersenne Twister random numbers: gmp_randinit_mt, also now used for


Packit 
5c3484 
gmp_randinit_default.


Packit 
5c3484 
* New random functions: gmp_randinit_set, gmp_urandomb_ui, gmp_urandomm_ui.


Packit 
5c3484 
* New integer functions: mpz_combit, mpz_rootrem.


Packit 
5c3484 
* gmp_printf etc new type "M" for mp_limb_t.


Packit 
5c3484 
* gmp_scanf and friends now accept C99 hex floats.


Packit 
5c3484 
* Numeric input and output can now be in bases up to 62.


Packit 
5c3484 
* Comparisons mpz_cmp_d, mpz_cmpabs_d, mpf_cmp_d recognise infinities.


Packit 
5c3484 
* Conversions mpz_get_d, mpq_get_d, mpf_get_d truncate towards zero,


Packit 
5c3484 
previously their behaviour was unspecified.


Packit 
5c3484 
* Fixes for overflow issues with operands >= 2^31 bits.


Packit 
5c3484 


Packit 
5c3484 
Caveats:


Packit 
5c3484 
* mpfr is gone, and will from now on be released only separately. Please see


Packit 
5c3484 
www.mpfr.org.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.1.3 and 4.1.4


Packit 
5c3484 


Packit 
5c3484 
* Bug fix to FFT multiplication code (crash for huge operands).


Packit 
5c3484 
* Bug fix to mpf_sub (miscomputation).


Packit 
5c3484 
* Support for powerpc64gnulinux.


Packit 
5c3484 
* Better support for AMD64 in 32bit mode.


Packit 
5c3484 
* Upwardly binary compatible with 4.1.3, 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0,


Packit 
5c3484 
and 3.x versions.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.1.2 and 4.1.3


Packit 
5c3484 


Packit 
5c3484 
* Bug fix for FFT multiplication code (miscomputation).


Packit 
5c3484 
* Bug fix to K6 assembly code for gcd.


Packit 
5c3484 
* Bug fix to IA64 assembly code for population count.


Packit 
5c3484 
* Portability improvements, most notably functional AMD64 support.


Packit 
5c3484 
* mpz_export allows NULL for countp parameter.


Packit 
5c3484 
* Many minor bug fixes.


Packit 
5c3484 
* mpz_export allows NULL for countp parameter.


Packit 
5c3484 
* Upwardly binary compatible with 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0, and 3.x


Packit 
5c3484 
versions.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.1.1 and 4.1.2


Packit 
5c3484 


Packit 
5c3484 
* Bug fixes.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.1 and 4.1.1


Packit 
5c3484 


Packit 
5c3484 
* Bug fixes.


Packit 
5c3484 
* New systems supported: NetBSD and OpenBSD sparc64.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.0.1 and 4.1


Packit 
5c3484 


Packit 
5c3484 
* Bug fixes.


Packit 
5c3484 
* Speed improvements.


Packit 
5c3484 
* Upwardly binary compatible with 4.0, 4.0.1, and 3.x versions.


Packit 
5c3484 
* Asymptotically fast conversion to/from strings (mpz, mpq, mpn levels), but


Packit 
5c3484 
also major speed improvements for tiny operands.


Packit 
5c3484 
* mpn_get_str parameter restrictions relaxed.


Packit 
5c3484 
* Major speed improvements for HPPA 2.0 systems.


Packit 
5c3484 
* Major speed improvements for UltraSPARC systems.


Packit 
5c3484 
* Major speed improvements for IA64 systems (but still suboptimal code).


Packit 
5c3484 
* Extended test suite.


Packit 
5c3484 
* mpfr is back, with many bug fixes and portability improvements.


Packit 
5c3484 
* New function: mpz_ui_sub.


Packit 
5c3484 
* New functions: mpz_export, mpz_import.


Packit 
5c3484 
* Optimization for nth root functions (mpz_root, mpz_perfect_power_p).


Packit 
5c3484 
* Optimization for extended gcd (mpz_gcdext, mpz_invert, mpn_gcdext).


Packit 
5c3484 
* Generalized lowlevel number format, reserving a `nails' part of each


Packit 
5c3484 
limb. (Please note that this is really experimental; some functions


Packit 
5c3484 
are likely to compute garbage when nails are enabled.)


Packit 
5c3484 
* Nailsenabled Alpha 21264 assembly code, allowing up to 75% better


Packit 
5c3484 
performance. (Use enablenails=4 to enable it.)


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 4.0 and 4.0.1


Packit 
5c3484 


Packit 
5c3484 
* Bug fixes.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 3.1.1 and 4.0


Packit 
5c3484 


Packit 
5c3484 
* Bug fixes.


Packit 
5c3484 
* Speed improvements.


Packit 
5c3484 
* Upwardly binary compatible with 3.x versions.


Packit 
5c3484 
* New CPU support: IA64, Pentium 4.


Packit 
5c3484 
* Improved CPU support: 21264, Cray vector systems.


Packit 
5c3484 
* Support for all MIPS ABIs: o32, n32, 64.


Packit 
5c3484 
* New systems supported: Darwin, SCO, Windows DLLs.


Packit 
5c3484 
* New divideandconquer square root algorithm.


Packit 
5c3484 
* New algorithms chapter in the manual.


Packit 
5c3484 
* New malloc reentrant temporary memory method.


Packit 
5c3484 
* New C++ class interface by Gerardo Ballabio (beta).


Packit 
5c3484 
* Revamped configure, featuring ABI selection.


Packit 
5c3484 
* Speed improvements for mpz_powm and mpz_powm_ui (mainly affecting small


Packit 
5c3484 
operands).


Packit 
5c3484 
* mpz_perfect_power_p now properly recognizes 0, 1, and negative perfect


Packit 
5c3484 
powers.


Packit 
5c3484 
* mpz_hamdist now supports negative operands.


Packit 
5c3484 
* mpz_jacobi now accepts nonpositive denominators.


Packit 
5c3484 
* mpz_powm now supports negative exponents.


Packit 
5c3484 
* mpn_mul_1 operand overlap requirements relaxed.


Packit 
5c3484 
* Float input and output uses locale specific decimal point where available.


Packit 
5c3484 
* New gmp_printf, gmp_scanf and related functions.


Packit 
5c3484 
* New division functions: mpz_cdiv_q_2exp, mpz_cdiv_r_2exp, mpz_divexact_ui.


Packit 
5c3484 
* New divisibility tests: mpz_divisible_p, mpz_divisible_ui_p,


Packit 
5c3484 
mpz_divisible_2exp_p, mpz_congruent_p, mpz_congruent_ui_p,


Packit 
5c3484 
mpz_congruent_2exp_p.


Packit 
5c3484 
* New Fibonacci function: mpz_fib2_ui.


Packit 
5c3484 
* New Lucas number functions: mpz_lucnum_ui, mpz_lucnum2_ui.


Packit 
5c3484 
* Other new integer functions: mpz_cmp_d, mpz_cmpabs_d, mpz_get_d_2exp,


Packit 
5c3484 
mpz_init2, mpz_kronecker, mpz_lcm_ui, mpz_realloc2.


Packit 
5c3484 
* New rational I/O: mpq_get_str, mpq_inp_str, mpq_out_str, mpq_set_str.


Packit 
5c3484 
* Other new rational functions: mpq_abs, mpq_cmp_si, mpq_div_2exp,


Packit 
5c3484 
mpq_mul_2exp, mpq_set_f.


Packit 
5c3484 
* New float tests: mpf_integer_p, mpf_fits_sint_p, mpf_fits_slong_p,


Packit 
5c3484 
mpf_fits_sshort_p, mpf_fits_uint_p, mpf_fits_ulong_p, mpf_fits_ushort_p.


Packit 
5c3484 
* Other new float functions: mpf_cmp_d, mpf_get_default_prec, mpf_get_si,


Packit 
5c3484 
mpf_get_ui, mpf_get_d_2exp.


Packit 
5c3484 
* New random functions: gmp_randinit_default, gmp_randinit_lc_2exp_size.


Packit 
5c3484 
* New demo expression string parser (see demos/expr).


Packit 
5c3484 
* New preliminary perl interface (see demos/perl).


Packit 
5c3484 
* Tuned algorithm thresholds for many more CPUs.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 3.1 and 3.1.1


Packit 
5c3484 


Packit 
5c3484 
* Bug fixes for division (rare), mpf_get_str, FFT, and miscellaneous minor


Packit 
5c3484 
things.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 3.0 and 3.1


Packit 
5c3484 


Packit 
5c3484 
* Bug fixes.


Packit 
5c3484 
* Improved `make check' running more tests.


Packit 
5c3484 
* Tuned algorithm cutoff points for many machines. This will improve speed for


Packit 
5c3484 
a lot of operations, in some cases by a large amount.


Packit 
5c3484 
* Major speed improvements: Alpha 21264.


Packit 
5c3484 
* Some speed improvements: Cray vector computers, AMD K6 and Athlon, Intel P5


Packit 
5c3484 
and Pentium Pro/II/III.


Packit 
5c3484 
* The mpf_get_prec function now works as it did in GMP 2.


Packit 
5c3484 
* New utilities for autotuning and speed measuring.


Packit 
5c3484 
* Multiplication now optionally uses FFT for very large operands. (To enable


Packit 
5c3484 
it, pass enablefft to configure.)


Packit 
5c3484 
* Support for new systems: Solaris running on x86, FreeBSD 5, HPUX 11, Cray


Packit 
5c3484 
vector computers, Rhapsody, Nextstep/Openstep, MacOS.


Packit 
5c3484 
* Support for shared libraries on 32bit HPPA.


Packit 
5c3484 
* New integer functions: mpz_mul_si, mpz_odd_p, mpz_even_p.


Packit 
5c3484 
* New Kronecker symbol functions: mpz_kronecker_si, mpz_kronecker_ui,


Packit 
5c3484 
mpz_si_kronecker, mpz_ui_kronecker.


Packit 
5c3484 
* New rational functions: mpq_out_str, mpq_swap.


Packit 
5c3484 
* New float functions: mpf_swap.


Packit 
5c3484 
* New mpn functions: mpn_divexact_by3c, mpn_tdiv_qr.


Packit 
5c3484 
* New EXPERIMENTAL function layer for accurate floatingpoint arithmetic, mpfr.


Packit 
5c3484 
To try it, pass enablempfr to configure. See the mpfr subdirectory for


Packit 
5c3484 
more information; it is not documented in the main GMP manual.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 3.0 and 3.0.1


Packit 
5c3484 


Packit 
5c3484 
* Memory leaks in gmp_randinit and mpz_probab_prime_p fixed.


Packit 
5c3484 
* Documentation for gmp_randinit fixed. Misc documentation errors fixed.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 2.0 and 3.0


Packit 
5c3484 


Packit 
5c3484 
* Source level compatibility with past releases (except mpn_gcd).


Packit 
5c3484 
* Bug fixes.


Packit 
5c3484 
* Much improved speed thanks to both host independent and host dependent


Packit 
5c3484 
optimizations.


Packit 
5c3484 
* Switch to autoconf/automake/libtool.


Packit 
5c3484 
* Support for building libgmp as a shared library.


Packit 
5c3484 
* Multiplication and squaring using 3way ToomCook.


Packit 
5c3484 
* Division using the BurnikelZiegler method.


Packit 
5c3484 
* New functions computing binomial coefficients: mpz_bin_ui, mpz_bin_uiui.


Packit 
5c3484 
* New function computing Fibonacci numbers: mpz_fib_ui.


Packit 
5c3484 
* New random number generators: mpf_urandomb, mpz_rrandomb, mpz_urandomb,


Packit 
5c3484 
mpz_urandomm, gmp_randclear, gmp_randinit, gmp_randinit_lc_2exp,


Packit 
5c3484 
gmp_randseed, gmp_randseed_ui.


Packit 
5c3484 
* New function for quickly extracting limbs: mpz_getlimbn.


Packit 
5c3484 
* New functions performing integer size tests: mpz_fits_sint_p,


Packit 
5c3484 
mpz_fits_slong_p, mpz_fits_sshort_p, mpz_fits_uint_p, mpz_fits_ulong_p,


Packit 
5c3484 
mpz_fits_ushort_p.


Packit 
5c3484 
* New mpf functions: mpf_ceil, mpf_floor, mpf_pow_ui, mpf_trunc.


Packit 
5c3484 
* New mpq function: mpq_set_d.


Packit 
5c3484 
* New mpz functions: mpz_addmul_ui, mpz_cmpabs, mpz_cmpabs_ui, mpz_lcm,


Packit 
5c3484 
mpz_nextprime, mpz_perfect_power_p, mpz_remove, mpz_root, mpz_swap,


Packit 
5c3484 
mpz_tdiv_ui, mpz_tstbit, mpz_xor.


Packit 
5c3484 
* New mpn function: mpn_divexact_by3.


Packit 
5c3484 
* New CPU support: DEC Alpha 21264, AMD K6 and Athlon, HPPA 2.0 and 64,


Packit 
5c3484 
Intel Pentium Pro and PentiumII/III, Sparc 64, PowerPC 64.


Packit 
5c3484 
* Almost 10 times faster mpz_invert and mpn_gcdext.


Packit 
5c3484 
* The interface of mpn_gcd has changed.


Packit 
5c3484 
* Better support for MIPS R4x000 and R5000 under Irix 6.


Packit 
5c3484 
* Improved support for SPARCv8 and SPARCv9 processors.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 2.0 and 2.0.2


Packit 
5c3484 


Packit 
5c3484 
* Many bug fixes.


Packit 
5c3484 


Packit 
5c3484 


Packit 
5c3484 
Changes between GMP version 1.3.2 and 2.0


Packit 
5c3484 


Packit 
5c3484 
* Division routines in the mpz class have changed. There are three classes of


Packit 
5c3484 
functions, that rounds the quotient to infinity, 0, and +infinity,


Packit 
5c3484 
respectively. The first class of functions have names that begin with


Packit 
5c3484 
mpz_fdiv (f is short for floor), the second class' names begin with mpz_tdiv


Packit 
5c3484 
(t is short for trunc), and the third class' names begin with mpz_cdiv (c is


Packit 
5c3484 
short for ceil).


Packit 
5c3484 


Packit 
5c3484 
The old division routines beginning with mpz_m are similar to the new


Packit 
5c3484 
mpz_fdiv, with the exception that some of the new functions return useful


Packit 
5c3484 
values.


Packit 
5c3484 


Packit 
5c3484 
The old function names can still be used. All the old functions names will


Packit 
5c3484 
now do floor division, not trunc division as some of them used to. This was


Packit 
5c3484 
changed to make the functions more compatible with common mathematical


Packit 
5c3484 
practice.


Packit 
5c3484 


Packit 
5c3484 
The mpz_mod and mpz_mod_ui functions now compute the mathematical mod


Packit 
5c3484 
function. I.e., the sign of the 2nd argument is ignored.


Packit 
5c3484 


Packit 
5c3484 
* The mpq assignment functions do not canonicalize their results. A new


Packit 
5c3484 
function, mpq_canonicalize must be called by the user if the result is not


Packit 
5c3484 
known to be canonical.


Packit 
5c3484 
* The mpn functions are now documented. These functions are intended for


Packit 
5c3484 
very time critical applications, or applications that need full control over


Packit 
5c3484 
memory allocation. Note that the mpn interface is irregular and hard to


Packit 
5c3484 
use.


Packit 
5c3484 
* New functions for arbitrary precision floating point arithmetic. Names


Packit 
5c3484 
begin with `mpf_'. Associated type mpf_t.


Packit 
5c3484 
* New and improved mpz functions, including much faster GCD, fast exact


Packit 
5c3484 
division (mpz_divexact), bit scan (mpz_scan0 and mpz_scan1), and number


Packit 
5c3484 
theoretical functions like Jacobi (mpz_jacobi) and multiplicative inverse


Packit 
5c3484 
(mpz_invert).


Packit 
5c3484 
* New variable types (mpz_t and mpq_t) are available that makes syntax of


Packit 
5c3484 
mpz and mpq calls nicer (no need for & before variables). The MP_INT and


Packit 
5c3484 
MP_RAT types are still available for compatibility.


Packit 
5c3484 
* Uses GNU configure. This makes it possible to choose target architecture


Packit 
5c3484 
and CPU variant, and to compile into a separate object directory.


Packit 
5c3484 
* Carefully optimized assembly for important inner loops. Support for DEC


Packit 
5c3484 
Alpha, Amd 29000, HPPA 1.0 and 1.1, Intel Pentium and generic x86, Intel


Packit 
5c3484 
i960, Motorola MC68000, MC68020, MC88100, and MC88110, Motorola/IBM


Packit 
5c3484 
PowerPC, National NS32000, IBM POWER, MIPS R3000, R4000, SPARCv7,


Packit 
5c3484 
SuperSPARC, generic SPARCv8, and DEC VAX. Some support also for ARM,


Packit 
5c3484 
Clipper, IBM ROMP (RT), and Pyramid AP/XP.


Packit 
5c3484 
* Faster. Thanks to the assembler code, new algorithms, and general tuning.


Packit 
5c3484 
In particular, the speed on machines without GCC is improved.


Packit 
5c3484 
* Support for machines without alloca.


Packit 
5c3484 
* Now under the LGPL.


Packit 
5c3484 


Packit 
5c3484 
INCOMPATIBILITIES BETWEEN GMP 1 AND GMP 2


Packit 
5c3484 


Packit 
5c3484 
* mpq assignment functions do not canonicalize their results.


Packit 
5c3484 
* mpz division functions round differently.


Packit 
5c3484 
* mpz mod functions now really compute mod.


Packit 
5c3484 
* mpz_powm and mpz_powm_ui now really use mod for reduction.
