also affects some files.
Changes between GMP version 4.3.0 and 4.3.1
Bugs:
* Fixed bug in mpn_gcdext, affecting also mpz_gcdext and mpz_invert.
The bug could cause a cofactor to have a leading zero limb, which
could lead to crashes or miscomputation later on.
* Fixed some minor documentation issues.
Features:
* Workarounds for various issues with Mac OS X's build tools.
* Recognise more IBM "POWER" processor variants.
Changes between GMP version 4.2.X and 4.3.0
Bugs:
* Fixed bug in mpz_perfect_power_p with recognition of negative perfect
powers that can be written both as an even and odd power.
* We might accidentally have added bugs since there is a large amount of
new code in this release.
Speedups:
* Vastly improved assembly code for x86-64 processors from AMD and Intel.
* Major improvements also for many other processor families, such as
Alpha, PowerPC, and Itanium.
* New sub-quadratic mpn_gcd and mpn_gcdext, as well as improved basecase
gcd code.
* The multiply FFT code has been slightly improved.
* Balanced multiplication now uses 4-way Toom in addition to schoolbook,
Karatsuba, 3-way Toom, and FFT.
* Unbalanced multiplication has been vastly improved.
* Improved schoolbook division by means of faster quotient approximation.
* Several new algorithms for division and mod by single limbs, giving
many-fold speedups.
* Improved nth root computations.
* The mpz_nextprime function uses sieving and is much faster.
* Countless minor tweaks.
Features:
* Updated support for fat binaries for x86_32 include current processors
* Lots of new mpn internal interfaces. Some of them will become public
in a future GMP release.
* Support for the 32-bit ABI under x86-apple-darwin.
* x86 CPU recognition code should now default better for future
processors.
* The experimental nails feature does not work in this release, but
it might be re-enabled in the future.
Misc:
* The gmp_version variable now always contains three parts. For this
release, it is "4.3.0".
Changes between GMP version 4.2.3 and 4.2.4
Bugs:
* Fix bug with parsing exponent '+' sign in mpf.
* Fix an allocation bug in mpf_set_str, also affecting mpf_init_set_str, and
mpf_inp_str.
Speedups:
* None, except that proper processor recognition helps affected processors.
Features:
* Recognize new AMD processors.
Changes between GMP version 4.2.2 and 4.2.3:
Bugs:
* Fix x86 CPU recognition code to properly identify recent AMD and Intel
64-bit processors.
* The >> operator of the C++ wrapper gmpxx.h now does floor rounding, not
truncation.
* Inline semantics now follow the C99 standard, and works with recent GCC
releases.
* C++ bitwise logical operations work for more types.
* For C++, gmp.h now includes cstdio, improving compiler compatibility.
* Bases > 36 now work properly in mpf_set_str.
Speedups:
* None, except that proper processor recognition helps affected processors.
Features:
* The allocation functions now detect overflow of the mpz_t type. This means
that overflow will now cause an abort, except when the allocation
computation itself overflows. (Such overflow can probably only happen in
powering functions; we will detect powering overflow in the future.)
When using mpf_set_str, mpf_init_set_str, or mpf_inp_str
with a base > 36, the supplied base will actually be ignored,
and the exponent 0 will be supplanted. [2007-12-10]
All tests pass on NetBSD/amd64 4.99.58.
Bump revision.
to build a "fat" binary on (${MACHINE_ARCH} == "i386" && ${OPSYS} != "Darwin").
This isn't enabled by default now, but it might be useful for build builds,
as it uses cpuid at runtime to choose the most appropriate assembler code.
Insofar as I can tell, no BUILDLINK_A[BP]I_DEPENDS bump is necessary.
NOTE: Support for Darwin-*-i386 and Darwin-*-x86_64 has been improved,
see below. Thus, I recommend that we test building the assembler code
on Darwin at some point.
Changes between GMP version 4.2.1 and 4.2.2:
* License is now LGPL version 3.
Bugs:
* Shared library numbers corrected for libcxx.
* Fixed serious bug in gmpxx.h where a=a+b*c would generate garbage.
Note that this only affects C++ programs.
* Fix crash in mpz_set_d for arguments with large negative exponent.
* Fix 32-bit ABI bug with Itanium assembly for popcount and hamdist.
* Fix assembly syntax problem for powerpc-ibm-aix with AIX
native assembler.
* Fix problems with x86 --enable-fat, where the compiler where told to
generate code for the build machine, not plain i386 code as it should.
* Improved recognition of powerpc systems wrt Altivec/VMX capability.
* Misc minor fixes, mainly workarounds for compiler/assembler bugs.
Speedups:
* "Core 2" and Pentium 4 processors, running in 64-bit mode will get a
slight boost as they are now specifically recognized.
Features:
* New support for x86_64-solaris
* New, rudimentary support for x86-apple-darwin and x86_64-apple-darwin.
(Please see http://gmplib.org/macos.html for more information.)
Changes between GMP version 4.2 and 4.2.1
Bugs:
* Shared library numbers corrected.
* Broken support for 32-bit AIX fixed.
* Misc minor fixes.
Speedups:
* Exact division (mpz_divexact) now falls back to plain division for large
operands.
Features:
* Support for some new systems.
Changes between GMP version 4.1.4 and 4.2
Bugs:
* Minor bug fixes and code generalizations.
* Expanded and improved test suite.
Speedups:
* Many minor optimizations, too many to mention here.
* Division now always subquadratic.
* Computation of n-factorial much faster.
* Added basic x86-64 assembly code.
* Floating-point output is now subquadratic for all bases.
* FFT multiply code now about 25% faster.
* Toom3 multiply code faster.
Features:
* Much improved configure.
* Workarounds for many more compiler bugs.
* Temporary allocations are now made on the stack only if small.
* New systems supported: HPPA-2.0 gcc, IA-64 HP-UX, PowerPC-64 Darwin,
Sparc64 GNU/Linux.
* New i386 fat binaries, selecting optimised code at runtime (--enable-fat).
* New build option: --enable-profiling=instrument.
* New memory function: mp_get_memory_functions.
* New Mersenne Twister random numbers: gmp_randinit_mt, also now used for
gmp_randinit_default.
* New random functions: gmp_randinit_set, gmp_urandomb_ui, gmp_urandomm_ui.
* New integer functions: mpz_combit, mpz_rootrem.
* gmp_printf etc new type "M" for mp_limb_t.
* gmp_scanf and friends now accept C99 hex floats.
* Numeric input and output can now be in bases up to 62.
* Comparisons mpz_cmp_d, mpz_cmpabs_d, mpf_cmp_d recognise infinities.
* Conversions mpz_get_d, mpq_get_d, mpf_get_d truncate towards zero,
previously their behaviour was unspecified.
* Fixes for overflow issues with operands >= 2^31 bits.
Caveats:
* mpfr is gone, and will from now on be released only separately. Please see
www.mpfr.org.
* Bug fix to FFT multiplication code (crash for huge operands).
* Bug fix to mpf_sub (miscomputation).
* Support for powerpc64-gnu-linux.
* Better support for AMD64 in 32-bit mode.
* Upwardly binary compatible with 4.1.3, 4.1.2, 4.1.1, 4.1, 4.0.1, 4.0,
and 3.x versions.
* mpn/generic/rootrem.c: In Newton loop, pad qp with leading zero.
* mpn/generic/rootrem.c: Allocate 1.585 (log2(3)) times more space
for pp temporary to allow for worst case overestimate of root.
Add some asserts.
* tests/mpz/t-root.c: Generalize and speed up.
* mpfr/pow.c: Fixed bug (infinite loop) for exact powers.
* mpfr/sub.c: Fixed wrong inexact flag for a - b where a and b are of
different signs and EXP(a) < EXP(b).
* printf/printffuns.c (gmp_fprintf_reps): Make it actually work
for padding > 256.
* gmp-impl.h (USE_LEADING_REGPARM): Disable for PIC code generation.
* mpn/generic/tdiv_qr.c: Remove a bogus assert.
* mpn/generic/mode1o.c, mpn/alpha/ev5/mode1o.c: Correction to ASSERTs.
Reported by Christoph Ludwig.
* mpf/urandomb.c: Truncate nbits to precision of rop.
* configure.in (sparc v9 *bsd*): Add NetBSD and OpenBSD sparc64.
(x86 openbsd*): Extra underscore for _GLOBAL_OFFSET_TABLE_.
* mpn/generic/rootrem.c: Avoid overflow in xnb calculation.
* mpz/root.c: Avoid overflow in rootnb calculation.
* gmpxx.h (__gmp_binary_equal, __gmp_binary_not_equal): Fix broken
mpq/double functions.
* mpn/m68k/lshift.asm: Fix typo in !scale_available_p code.
* mpn/m68k/rshift.asm: Likewise.
* mpz/remove.c: Make src==0 return 0, not do DIVIDE_BY_ZERO.
* mpfr/acinclude.m4 (MPFR_CONFIGS): Patch by Vincent for an apparent
float rounding gremlin on powerpc.
* mpf/inp_str.c: Fix returned count of chars read, reported by Paul
Zimmermann. Also fix a memory leak for invalid input.
* mpfr/set_q.c: Allow for 1 bit numerator or denominator.
* Bug fixes.
* Speed improvements.
* Upwardly binary compatible with 4.0, 4.0.1, and 3.x versions.
* Asymptotically fast conversion to/from strings (mpz, mpq, mpn levels), but
also major speed improvements for tiny operands.
* mpn_get_str parameter restrictions relaxed.
* Major speed improvments for HPPA 2.0 systems.
* Major speed improvments for UltraSPARC systems.
* Major speed improvments for IA-64 systems (but still sub-optimal code).
* Extended test suite.
* mpfr is back, with many bug fixes and portability improvements.
* New function: mpz_ui_sub.
* New functions: mpz_export, mpz_import.
* Optimization for nth root functions (mpz_root, mpz_perfect_power_p).
* Optimization for extended gcd (mpz_gcdext, mpz_invert, mpn_gcdext).
* Generalized low-level number format, reserving a `nails' part of each
limb. (Please note that this is really experimental; some functions
are likely to compute garbage when nails are enabled.)
* Nails-enabled Alpha 21264 assembly code, allowing up to 75% better
performance. (Use --enable-nails=4 to enable it.)
* Bug fixes.
* Speed improvements.
* Upwardly binary compatible with 3.x versions.
* New CPU support: IA-64, Pentium 4.
* Improved CPU support: 21264, Cray vector systems.
* Support for all MIPS ABIs: o32, n32, 64.
* New systems supported: Darwin, SCO, Windows DLLs.
* New divide-and-conquer square root algorithm.
* New algorithms chapter in the manual.
* New malloc reentrant temporary memory method.
* New C++ class interface by Gerardo Ballabio (beta).
* Revamped configure, featuring ABI selection.
* Speed improvements for mpz_powm and mpz_powm_ui (mainly affecting small
operands).
* mpz_perfect_power_p now properly recognizes 0, 1, and negative perfect
powers.
* mpz_hamdist now supports negative operands.
* mpz_jacobi now accepts non-positive denominators.
* mpz_powm now supports negative exponents.
* mpn_mul_1 operand overlap requirements relaxed.
* Float input and output uses locale specific decimal point where available.
* New gmp_printf, gmp_scanf and related functions.
* New division functions: mpz_cdiv_q_2exp, mpz_cdiv_r_2exp, mpz_divexact_ui.
* New divisibility tests: mpz_divisible_p, mpz_divisible_ui_p,
mpz_divisible_2exp_p, mpz_congruent_p, mpz_congruent_ui_p,
mpz_congruent_2exp_p.
* New Fibonacci function: mpz_fib2_ui.
* New Lucas number functions: mpz_lucnum_ui, mpz_lucnum2_ui.
* Other new integer functions: mpz_cmp_d, mpz_cmpabs_d, mpz_get_d_2exp,
mpz_init2, mpz_kronecker, mpz_lcm_ui, mpz_realloc2.
* New rational I/O: mpq_get_str, mpq_inp_str, mpq_out_str, mpq_set_str.
* Other new rational functions: mpq_abs, mpq_cmp_si, mpq_div_2exp,
mpq_mul_2exp, mpq_set_f.
* New float tests: mpf_integer_p, mpf_fits_sint_p, mpf_fits_slong_p,
mpf_fits_sshort_p, mpf_fits_uint_p, mpf_fits_ulong_p, mpf_fits_ushort_p.
* Other new float functions: mpf_cmp_d, mpf_get_default_prec, mpf_get_si,
mpf_get_ui, mpf_get_d_2exp.
* New random functions: gmp_randinit_default, gmp_randinit_lc_2exp_size.
* New demo expression string parser (see demos/expr).
* New preliminary perl interface (see demos/perl).
* Tuned algorithm thresholds for many more CPUs.