diff --git a/gmp.lisp b/gmp.lisp index f8f23f4..a003d58 100644 --- a/gmp.lisp +++ b/gmp.lisp @@ -420,9 +420,11 @@ be (1+ COUNT)." (error "Size of result exceeds maxim bignum length")) into checks collect `(,res (%allocate-bignum (1+ ,size))) into resallocs - collect `(setf ,res (if (minusp (slot ,gres 'mp_size)) ; check for negative result - (gmp-z-to-bignum-neg (slot ,gres 'mp_d) ,res ,size) - (gmp-z-to-bignum (slot ,gres 'mp_d) ,res ,size))) + collect `(setf ,res (cond ((minusp (slot ,gres 'mp_size)) + (%bignum-set ,res ,size sb-bignum::all-ones-digit) + (gmp-z-to-bignum-neg (slot ,gres 'mp_d) ,res ,size)) + (t + (gmp-z-to-bignum (slot ,gres 'mp_d) ,res ,size)))) into copylimbs collect `(__gmpz_clear (addr ,gres)) into clears collect res into results