diff options
Diffstat (limited to 'mpz')
-rw-r--r-- | mpz/aorsmul_i.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/mpz/aorsmul_i.c b/mpz/aorsmul_i.c index 73f986e8a..cd41d2323 100644 --- a/mpz/aorsmul_i.c +++ b/mpz/aorsmul_i.c @@ -151,10 +151,9 @@ mpz_aorsmul_1 (mpz_ptr w, mpz_srcptr x, mp_limb_t y, mp_size_t sub) { /* Borrow out of w, take twos complement negative to get absolute value, flip sign of w. */ - wp[new_wsize] = ~-cy; /* extra limb is 0-cy */ - mpn_com (wp, wp, new_wsize); - new_wsize++; - MPN_INCR_U (wp, new_wsize, CNST_LIMB(1)); + cy -= mpn_neg (wp, wp, new_wsize); + wp[new_wsize] = cy; + new_wsize += (cy != 0); wsize_signed = -wsize_signed; } } @@ -166,9 +165,7 @@ mpz_aorsmul_1 (mpz_ptr w, mpz_srcptr x, mp_limb_t y, mp_size_t sub) mp_limb_t cy2; /* -(-cy*b^n + w-x*y) = (cy-1)*b^n + ~(w-x*y) + 1 */ - mpn_com (wp, wp, wsize); - cy += mpn_add_1 (wp, wp, wsize, CNST_LIMB(1)); - cy -= 1; + cy -= mpn_neg (wp, wp, wsize); /* If cy-1 == -1 then hold that -1 for latter. mpn_submul_1 never returns cy==MP_LIMB_T_MAX so that value always indicates a -1. */ |