summaryrefslogtreecommitdiffstats
path: root/mpi-patches
Commit message (Collapse)AuthorAgeFilesLines
* Bignum support in mult function.Kaz Kylheku2011-12-103-18/+27
| | | | | | | | | | | | | | | | | | | | | | * arith.c: Regenerated. * arith.txr (CNUM_BIT): New constant. (bignum, bignum_dbl_ipt): New static functions. (@{add-fname}): Use bignum function. (mul): New functions, rewrite of mul from lib.c. * lib.c (mul): Function removed. * mpi-patches/add-mp-set-intptr (mp_set_intptr): Revised patch. Local variable v should be int_ptr_t not unsigned long. Also, the mp_set interface doesn't set the sign; it's an unsigned interface. We must do that ourselves. * mpi-patches/fix-mult-bug: The main multiplication function is also broken in the same way, requiring the cast. * mpi-patches/mpi-set-double-intptr: Fixed use of wrong type for local variable v.
* * mpi-patches/mpi-set-mpi-word: Bugfix and refresh.Kaz Kylheku2011-12-103-4/+60
| | | | | | * mpi-patches/mpi-set-double-intptr: New file. * mpi-patches/series (mpi-set-double-intptr): Patch added.
* Adding mp_set_word function.Kaz Kylheku2011-12-102-0/+33
| | | | | | * mpi-patches/series (mpi-set-mpi-word): New patch. * mpi-patches/mpi-set-mpi-word: New file.
* * mpi-patches/add-mp-hash: Rewrote mp_hash to only hash enoughKaz Kylheku2011-12-103-32/+23
| | | | | | | | | | | | | low-order bit material from the bignum to fill an unsigned long. We don't need to walk the entire bignum. If the low order digit of the bignum is at least as large as an unsigned long, we just take that as the hash, otherwise we take enough of the digits to fill an unsigned long. For negative numbers, we just invert the bits of the hash. * mpi-patches/add-mpi-toradix-with-case: Refreshed. * mpi-patches/fix-mult-bug: Refreshed.
* Build and pass test suite on Cygwin.Kaz Kylheku2011-12-091-11/+11
| | | | | | | | | | * configure (longlong, ulonglong, superlong, usuperlong): Initialize these variables so that if the detection tests fail, the script does not access unbound variables. Avoid adding junk like .bss.* into config.h. * mpi-patches/config-types: Fixed wrong use of nonexistent SIZEOF_LONG_T.
* 2011-12-09 Kaz Kylheku <kaz@kylheku.com>Kaz Kylheku2011-12-091-11/+13
| | | | | * mpi-patches/config-types: Added missing definitions of MP_DIGIT_SIZE in two cases.
* Bignum support, here we go!Kaz Kylheku2011-12-099-0/+485
Bignums, based on Michael Fromberger's MPI library, are integrated into the input syntax, stream output, equality testing, the garbage collector, and hashing. The plus operation handles transitions between fixnums and bignums. Other operations are still fixnum only. * Makefile (CFLAGS): Add mpi directory to include file search. (OBJS): Include new arith.o module and all of MPI_OBJS. (MPI_OBJS, MPI_OBJS_BASE): New variables. * configure (mpi_version, have_quilt, have_patch): New variables. Script detects whether patch and quilt are available. Unpacks mpi library, applies patches. Detects 128 bit integer type. Records more information in config.h about the sizes of types. * dep.mk: Updated. * depend.txr: Make work with paths that have directory components. * eval.c (eval_init): Rename of nump to fixnump. * gc.c (finalize, mark_obj): Handle BGNUM case. * hash.c: (hash_c_str): Changed to return unsigned long instead of long. (equal_hash): Handle BGNUM case. (eql_hash): Handle bignums with equal-hash, but other objects as eq. * lib.c (num_s): Variable renamed to fixnum_s. (bignum_s): New symbol variable. (code2type): Follow rename of num_s. Handle BGNUM case. (typeof): Follow rename of num_s. (eql): Handle bignums using equal, and other types using eq. (equal): Handle BGNUM case. (chk_calloc): New function. (c_num): Wording change in error message: is not a fixnum. (nump): Renamed to fixnump. (bignump): New function. (plus): Function removed, reimplemented in arith.c. (int_str): Handle integers which are too large for wcstol using bignum conversion. Base 0 is no longer passed to wcstol but converted to 10 because the special semantics for 0 would be inconsistent for bignums. (obj_init): Follow rename of num_s. Initialize bignum_s.