summaryrefslogtreecommitdiffstats
path: root/polly/lib/External/isl/imath/ChangeLog
diff options
context:
space:
mode:
Diffstat (limited to 'polly/lib/External/isl/imath/ChangeLog')
-rw-r--r--polly/lib/External/isl/imath/ChangeLog377
1 files changed, 377 insertions, 0 deletions
diff --git a/polly/lib/External/isl/imath/ChangeLog b/polly/lib/External/isl/imath/ChangeLog
new file mode 100644
index 00000000000..5222475d084
--- /dev/null
+++ b/polly/lib/External/isl/imath/ChangeLog
@@ -0,0 +1,377 @@
+1.0.1
+ First released version.
+
+1.0.2
+ Fixed a bug in mp_int_div() which would yield incorrect quotients
+ when the divisor was very close in value to a prefix of the
+ dividend. This is now fixed, and there are regression tests in
+ the tests directory.
+
+ Added recursive multiplication and squaring (Karatsuba-Ofman) for
+ large input values. Integrated these with the existing code for
+ exponentiation, too. See the code for s_kmul() and s_ksqr() in
+ imath.c. Tests added and verified against GNU bc.
+
+ Added documentation on mp_get_multiply_threshold() and the reason
+ why it exists.
+
+1.0.3
+ Fixed a couple of bugs in pi.c that were causing incorrect values
+ to be computed for > 30 digits or so. Added a pi-computation test
+ to the default test suite (make test), checked against a static
+ file computed by bc (set scale=1024, compute 4 * atan(1)). Added
+ command line option to specify output radix for pi.
+
+ Cleaned up a sign-related bug in mp_int_gcd(), which would cause
+ the sign of gcd(0, x) to be incorrect when x < 0. Test cases
+ added for future regression.
+
+ Fixed a bug in s_reduce() which would give incorrect results for
+ powers of 2 in certain circumstances. Added tests to drive this
+ case for future regression.
+
+ Added mp_int_exptmod_evalue() and mp_int_exptmod_bvalue() to make
+ it easier to work with small bases and small exponents.
+
+ Set default recursive multiplication threshold to 50 digits, since
+ this seems to work best for the platforms I've tested so far.
+
+ Added iprime.h and iprime.c to the distribution.
+
+1.0.4
+ Added `findsizes.pl' to the distribution.
+
+ Revised the type declarations in imath.h to use 32/64 bit
+ operations where the "long long" type is supported.
+
+ Fixed a sign-related bug in mp_int_invmod().
+
+ Fixed several small bugs related to shifting which affect the use
+ of 32-bit digits. Many architectures cannot shift by 32 bits at a
+ time (e.g., MIPS), so I split each of these cases into two shifts
+ of half the size, which should scale properly for both the smaller
+ and larger cases.
+
+ Fixed several arithmetic issues with 32-bit digits that arose due
+ to missing type-casts on the right-hand sides of assignments.
+
+ Fixed s_print() and s_print_buf() to handle the sizes of digits
+ transparently.
+
+1.0.5
+ Updated the Makefile to include the _GNU_SOURCE macro. For many
+ GCC systems, this is necessary to get the correct definition of
+ the ULLONG_MAX macro in <limits.h>. Also, you may now build with
+ the make option DEBUG=Y to enable debugging, e.g.:
+
+ make DEBUG=Y imtest
+
+ By default, the Makefile builds with the optimizer enabled.
+
+ Cleaned up the definitions triggered by USE_LONG_LONG in imath.h,
+ and added an #error instruction in case the build is unable to
+ find a definition of ULLONG_MAX or ULONG_LONG_MAX in <limits.h>.
+ Also added the mp_int_to_unsigned(), mp_int_read_unsigned(), and
+ mp_int_unsigned_len() prototypes.
+
+ Fixed a bug in s_qmul() [imath.c:2493] that would grow the value
+ being multiplied even if there was room in the existing digits to
+ hold the result. This was driving an (apparent) bug in the more
+ general mp_int_read_binary() routine. Added the routines
+ mentioned in the previous paragraph, and factored some common
+ code out into a static s_tobin().
+
+ Added reset_registers() to imdrover.{h,c}. Added new test
+ driver functions test_to_uns() and test_read_uns(). Renamed
+ test_read_bin to test_read_binary().
+
+ Silenced a sign-related warning in pi.c (related to printf).
+
+ Added many new test vectors to tests/conv.t, including the
+ original bug proof-of-concept from Tom Wu, and a series of new
+ tests for the unsigned conversion routines.
+
+ Updated `doc.txt' to reflect the changes described above.
+
+1.0.6
+ Updated copyright notices, added LICENSE file explaining the
+ license I am using. This is basically the BSD license, so
+ you should have no trouble incorporating this code into other
+ open source projects.
+
+ No new functionality in this release.
+
+1.0.7
+ The mp_int_invmod(a, m, c) function would compute a negative value
+ for c when given a < 0. I added some code to insure that the value
+ returned is always the least non-negative member of the congruence
+ class, if the inverse exists. A test for this was added to invmod.t.
+
+1.0.8
+ Fixed a small buffer-overrun in s_qmul(). Because it only
+ allocates an extra digit if it absolutely has to, the test for
+ whether it needs to carry a shift out into the "spare" digit had
+ to be written carefully; I missed a subtlety, which is now
+ fixed. Along the way, I fixed a minor performance-related bug in
+ the same routine.
+
+ Added mp_int_error_string(), which converts mp_result values
+ into descriptive strings. These are statically allocated, so
+ you don't have to free them.
+
+ This version also adds an "examples" subdirectory. Currently,
+ there is only one program there, but I will add more examples as
+ time permits me. You have to read the source to understand them
+ anyway, so I won't explain them here.
+
+1.1.0
+ Added imrat.h and imrat.c, containing routines for rational number
+ arithmetic at arbitrary precision. Added support to the test driver,
+ in imath.c and included various tests in the tests/ subdirectory.
+
+ Fixed a sign-of-zero bug in mp_int_mul(). Tests added to mul.t to
+ regress this fix.
+
+1.1.2
+ Fixed a bug with leading zeroes after the decimal point in the
+ mp_rat_read_decimal() function (imrat.c). Along the way, I also
+ found a sign-related bug, in which -0.5 would be treated as if it
+ were positive, because the sign of zero is implicitly positive,
+ and the denominator is treated as unsigned always.
+
+ Thanks to Eric Silva for pointing out the leading zeroes bug.
+ The solution isn't the most efficient possible.
+
+1.1.3
+ Rewrote mp_int_to_decimal() to support new rounding modes. The
+ modes are documented in doc.txt. Some of the code sucked anyway,
+ so I rewrote pretty much the entire function.
+
+ Added new rounding mode constants.
+
+1.1.4
+ Added mixed rational/integer operations:
+ mp_rat_add_int, mp_rat_sub_int, mp_rat_mul_int, mp_rat_div_int
+ Added rational exponentiation (with integer exponents):
+ mp_rat_expt
+
+ Tests for same were added to the tests/ subdirectory.
+
+1.1.5
+ Added mp_rat_read_cdecimal() and mp_rat_read_ustring()
+ Updated the input.c example.
+
+1.1.6
+ Fixed a bug in mp_int_read_cstring() which would read the string
+ "-0" with incorrect sign (MP_NEG instead of MP_ZPOS). This would
+ violate an invariant that zero is always signed with positives.
+
+ Added some tests to tests/neg.t to catch this case.
+
+1.1.7
+ Fixed a bug in s_udiv(), internal to imath.c, which caused
+ division to fail in some corner cases masked by the use of long
+ long as a word type. As a result, s_udiv() has now been wholly
+ rewritten. I also fixed a few lingering buffer-length errors in
+ s_kmul(), and added a "const" qualifier to the input buffers for
+ the mp_int_read_string() and mp_int_read_cstring() functions,
+ and their analogs in imrat.c.
+
+1.1.8
+ Added mp_int_alloc() and mp_int_free().
+
+1.1.9
+ Added mp_rat_alloc() and mp_rat_free(). Fixed a couple of minor
+ bugs in the doc.txt file. Added mp_int_sqrt() to imath.{h,c} and
+ doc.txt.
+
+1.2
+ Dropped bugfix component of revision number. Fixed rsakey.c
+ example program to be complete and work faster.
+
+1.3
+ Replaced findsizes.pl with findsizes.py. Fixed two bugs in the
+ rsakey tool that were leading to incorrect output.
+
+1.4
+ Fixed a bug in mp_int_alloc(), it was not returning NULL when out
+ of memory, but rather failing in assert() instead. Also, updated
+ the documentation to have better language about the return values
+ in various error conditions.
+
+1.5
+ Changed the API for rational rounding. Removed the two functions
+ mp_rat_set_rounding() and mp_rat_get_rounding(), along with the
+ round_output global variable. Redefined the MP_ROUND_* constants
+ as an enumeration type (mp_round_mode). Added a new parameter to
+ the mp_rat_to_decimal() function to accept a rounding mode. Unit
+ tests and doc.txt updated suitably.
+
+ This release also incorporates a small patch submitted by Jonathan
+ Shapiro to support compilation in C++.
+
+1.6
+ Defined default_precision and multiply_threshold to be constant
+ and static. If IMATH_TEST is defined at compile time, these are
+ made global, and can be modified by the caller (the imtimer tool
+ makes use of this ability, for example).
+
+ Implemented a single-digit optimization suggested by J. Shapiro.
+ Documentation updated.
+
+1.7
+ Fixed a subtle casting problem in the use of the ctype macros that
+ would permit negative signed character values to produce illogical
+ behaviour in some configurations (e.g., NetBSD). Removed a dead
+ "return" statement.
+
+ Added the -pedantic switch for gcc, to get more aggressive
+ warnings; to permit the nonstandard "long long" type to still be
+ used, I also added -Wno-long-long when building with long long
+ enabled (the standard configuration).
+
+ Fixed a bug found by the Samba team running Valgrind on the
+ Heimdal project, and reported by Love Hörnquist Âstrand: One of
+ the intermediate values used during modular exponentiation could
+ be overflowed during recursive multiplication. Fixed by taking a
+ more conservative approach to buffer sizing.
+
+ Added a "contrib" subdirectory, whose first entry is a Makefile
+ to build IMath with the MSVC++ "nmake" program, contributed by
+ Matus Horvath.
+
+1.8
+ Fixed a bug in s_udiv() affecting the computation of quotient
+ digits. Thanks to Love Âstrand for isolating this bug. Also in
+ this release, defining USELLONG=Y or USELLONG=N on the command
+ line for make will switch support for the "long long" data type on
+ or off without having to edit the Makefile. The default is still
+ to permit use of "long long", even though the type is not standard
+ ANSI C90.
+
+1.9
+ Increased the number of small primes used for primality testing to
+ 100 from 32. Removed an unwanted #define from imath.c, left over
+ from testing; added "static" to the declaration of the s_embar()
+ internal function since it is not used outside imath.c. Reduced
+ the quantity of feedback generated by rsakey.c during the prime
+ finding stage of key generation.
+
+1.10
+ All primes less than 1000 are now used in iprime.c for preliminary
+ testing of prime candidates. Removed declaration of s_pad() from
+ rsakey.c example. Added imcalc.c example.
+
+ Beginning with this release, defining the DEBUG preprocessor macro
+ when compiling imath.c causes all the normally-static helper
+ functions to be exported. This makes it easier to troubleshoot
+ bugs in the back end functions without manually editing the source
+ till you have found where the bug actually is.
+
+ Fixed a memory leak in the test driver (imtest.c) where the input
+ buffers allocated for test specs were not released before being
+ released. No impact on the core routines, but nevertheless not a
+ good thing.
+
+ Fixed several uninitialized memory reads and one subtle read past
+ the end of a buffer in s_kmul(), found during a run of Purify.
+ Thanks to Love Hörnquist Âstrand for finding this one, and
+ providing a good test case so I could isolate the problem. Also
+ fixed a buglet in s_kmul(), in which free() was being called
+ instead of s_free(), which would break if you provided a custom
+ version of s_alloc() and s_free() for your application.
+
+1.11
+ Those functions which take int parameters to supply one or more of
+ the arithmetic values of the function have been converted to use a
+ typedef "mp_small". This is defined in imath.h, along with some
+ supporting macros.
+
+ Added mp_int_to_uint() and mp_int_lcm() in imath.{h,c}, based on a
+ patch contributed by Hal Finkel. Added LCM tests as as well as
+ some more GCD tests in tests/lcm.t and tests/gcd.t
+
+ Also at Hal Finkel's request, added mp_int_root() to compute the
+ integer nth root, i.e., \lfloor a^{1/b}\rfloor; replaced the old
+ mp_int_sqrt() function with a call to mp_int_root() via a macro.
+ The new implementation is probably slightly less efficient for
+ square roots, but more general. Added tests/root.t and moved the
+ sqrt tests there, also.
+
+1.12
+ Added a new global constant MP_MINERR which is the value of the
+ smallest error code defined by IMath itself. This can be used by
+ clients who wish to define and use additional error codes, so that
+ those codes will not conflict with the existing set.
+
+ Extended the imcalc example to include memory.
+
+ Fixed a bug in mp_int_add() in which -1 + 1 = -0 (the sign of zero
+ was recorded incorrectly). Added tests to the regression suite
+ for this fix.
+
+1.13
+ Cosmetic change -- updated all the files with my new web address.
+
+ Fixed a buglet caught by Love Hörnquist Âstrand using the LLVM
+ static checker tools, in which a mp_int_copy() failure would be
+ silently ignored and cause an extra copy to be generated.
+
+ Fixed a bug in the testing suite while building on MinGW. The pi
+ generation tests compare to static files and these tests fail if
+ CR/LF is output instead of just LF. The test script now strips
+ all CR and LF from the output and compares to files lacking them.
+ Reported by Chris Cole <cjcole@gmail.com>.
+
+1.14
+ Instead of using the preprocessor to delete "static", the static
+ definitions in imath.c now use an explicit STATIC macro, that is
+ made null when DEBUG is defined. This avoids a subtle problem
+ with static variables defined inside functions (although no bugs
+ actually arose from it).
+
+ Fixed a bug in s_udiv() while building on MinGW. When building
+ with short type digits, the routine was incorrectly discarding
+ overflow when computing the next quotient digit.
+ Reported by Paul DeMarco <pdemarco@ppg.com>.
+
+1.15
+ Fixed a bug in the definition of MP_DIGIT_MAX that caused errors
+ when IMath is built under 64-bit Linux. Reported by
+ Klaus Stengel <klaus.stengel@informatik.stud.uni-erlangen.de>.
+
+ Unpacked the macro definitions in imath.c a bit, to make them more
+ readable.
+
+ Added mp_int_expt_full() by request of Andrea Barberio
+ <insomniac@slackware.it>.
+
+1.16
+ Fixed a bug in mp_int_to_uint() which was causing incorrect MP_RANGE
+ errors during small integer conversion.
+ Reported by Andrea Barberio <insomniac@slackware.it>
+
+ Added mp_int_compare_uvalue().
+ Added some new testing hooks in imtest.c, new unit tests.
+
+ Made some code style changes that do not affect functionality.
+
+1.17
+ Fixed a bug in mp_int_swap() where mpz_t structures using their single
+ field as storage would not get swapped correctly.
+ Reported by Andres Navarro <canavarro82@gmail.com>
+
+ Added regression test for this and some hooks for future
+ regressions in the tests/test.sh script.
+
+1.18
+ Made mp_int_rat() use mp_int_init() to initialize numerator and
+ denominator instead of mp_int_init_size().
+ Some minor code cleanup inside the testing code (imdrover.c).
+
+ Fixed an off-by-one bug in s_udiv() which could cause the quotient
+ guessing loop to spin. Reported by Andres Navarro. Added
+ triggering example to div.t as a regression test.
+
+1.19
+ Fix signedness error in compile. Reported by Paweł Sikora.
OpenPOWER on IntegriCloud