diff options
author | tege <tege@gmplib.org> | 2003-12-18 02:06:24 +0100 |
---|---|---|
committer | tege <tege@gmplib.org> | 2003-12-18 02:06:24 +0100 |
commit | 7376b90578ea4dba53f5d0f4f91259221928996e (patch) | |
tree | 18797d2c421e1808965a7be9b5adc659ed955f36 | |
parent | 3b1aceaccb2fdca3cf8e54a3da534256a13d4e5e (diff) | |
download | gmp-7376b90578ea4dba53f5d0f4f91259221928996e.tar.gz |
(ref_mpn_mul): Handle un == vn specially, to avoid
a dummy r/w outside of allocated area.
-rw-r--r-- | tests/mpz/t-mul.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/tests/mpz/t-mul.c b/tests/mpz/t-mul.c index 8dd301d22..98f3c97da 100644 --- a/tests/mpz/t-mul.c +++ b/tests/mpz/t-mul.c @@ -214,14 +214,21 @@ ref_mpn_mul (mp_ptr wp, mp_srcptr up, mp_size_t un, mp_srcptr vp, mp_size_t vn) mul_kara (tp + 2 * vn, up, vp, vn, tp); - if (un - vn < vn) - ref_mpn_mul (wp + vn, vp, vn, up + vn, un - vn); - else - ref_mpn_mul (wp + vn, up + vn, un - vn, vp, vn); + if (un != vn) + { + if (un - vn < vn) + ref_mpn_mul (wp + vn, vp, vn, up + vn, un - vn); + else + ref_mpn_mul (wp + vn, up + vn, un - vn, vp, vn); - MPN_COPY (wp, tp + 2 * vn, vn); - cy = mpn_add_n (wp + vn, wp + vn, tp + 3 * vn, vn); - mpn_incr_u (wp + 2 * vn, cy); + MPN_COPY (wp, tp + 2 * vn, vn); + cy = mpn_add_n (wp + vn, wp + vn, tp + 3 * vn, vn); + mpn_incr_u (wp + 2 * vn, cy); + } + else + { + MPN_COPY (wp, tp + 2 * vn, 2 * vn); + } __GMP_FREE_FUNC_LIMBS (tp, 4 * vn); } |