From 243bc6fe4c3183e63fcd3f1672a07f13c9568f05 Mon Sep 17 00:00:00 2001 From: Nicolas Kirchner Date: Tue, 15 Aug 2017 19:27:22 +0200 Subject: [PATCH] Optimize Toom-3 algorithm --- bigint/src/algorithms.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bigint/src/algorithms.rs b/bigint/src/algorithms.rs index 2c28113..33df786 100644 --- a/bigint/src/algorithms.rs +++ b/bigint/src/algorithms.rs @@ -394,11 +394,17 @@ fn mac3(acc: &mut [BigDigit], b: &[BigDigit], c: &[BigDigit]) { let y1 = BigInt::from_slice(Plus, &y[y0_len..y0_len + y1_len]); let y2 = BigInt::from_slice(Plus, &y[y0_len + y1_len..]); + let p = &x0 + &x2; + let q = &y0 + &y2; + + let p2 = &p - &x1; + let q2 = &q - &y1; + let r0 = &x0 * &y0; let r4 = &x2 * &y2; - let r1 = (&x0 + &x1 + &x2) * (&y0 + &y1 + &y2); - let r2 = (&x0 - &x1 + &x2) * (&y0 - &y1 + &y2); - let r3 = (x0 - x1*2 + x2*4) * (y0 - y1*2 + y2*4); + let r1 = (&p + &x1) * (&q + &y1); + let r2 = &p2 * &q2; + let r3 = ((p2 + x2)*2 - x0) * ((q2 + y2)*2 - y0); let mut comp3: BigInt = (&r3 - &r1) / 3; let mut comp1: BigInt = (&r1 - &r2) / 2;