summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortege <tege@gmplib.org>2003-12-18 02:06:24 +0100
committertege <tege@gmplib.org>2003-12-18 02:06:24 +0100
commit7376b90578ea4dba53f5d0f4f91259221928996e (patch)
tree18797d2c421e1808965a7be9b5adc659ed955f36
parent3b1aceaccb2fdca3cf8e54a3da534256a13d4e5e (diff)
downloadgmp-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.c21
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);
}