X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-gmp%2Fgmp.lisp;fp=contrib%2Fsb-gmp%2Fgmp.lisp;h=50c456229a19bb415aebbd27c63c89dcb98d7548;hb=cd1c0c889786b8d43bfc22f0892a17f23c73ab3b;hp=283db5a49eb128a060b9caa351cd4b0e213cb04d;hpb=eb520f74a818e381004bd69668d7ba1abb94a0bb;p=sbcl.git diff --git a/contrib/sb-gmp/gmp.lisp b/contrib/sb-gmp/gmp.lisp index 283db5a..50c4562 100644 --- a/contrib/sb-gmp/gmp.lisp +++ b/contrib/sb-gmp/gmp.lisp @@ -131,7 +131,7 @@ pre-allocated bignum. The allocated bignum-length must be (1+ COUNT)." (type (alien (* unsigned-long)) z) (type bignum-type b) (type bignum-index count)) - (dotimes (i count (%normalize-bignum b count)) + (dotimes (i count (%normalize-bignum b (1+ count))) (%bignum-set b i (deref z i)))) (defun gmp-z-to-bignum-neg (z b count) @@ -145,7 +145,7 @@ be (1+ COUNT)." (let ((carry 0) (add 1)) (declare (type (mod 2) carry add)) - (dotimes (i count b) + (dotimes (i count (%normalize-bignum b (1+ count))) (multiple-value-bind (value carry-tmp) (%add-with-carry (%lognot (deref z i)) add carry) @@ -364,9 +364,9 @@ be (1+ COUNT)." collect size into sizes collect `(,gres (struct gmpint)) into declares collect `(__gmpz_init (addr ,gres)) into inits - collect `(,size (1+ (abs (slot ,gres 'mp_size)))) + collect `(,size (abs (slot ,gres 'mp_size))) into resinits - collect `(,res (%allocate-bignum ,size)) + collect `(,res (%allocate-bignum (1+ ,size))) into resinits collect `(setf ,res (if (minusp (slot ,gres 'mp_size)) ; check for negative result (gmp-z-to-bignum-neg (slot ,gres 'mp_d) ,res ,size)