summaryrefslogtreecommitdiff
path: root/bignum.c
diff options
context:
space:
mode:
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/bignum.c b/bignum.c
index 0621180134..fffb65f01c 100644
--- a/bignum.c
+++ b/bignum.c
@@ -2559,12 +2559,20 @@ bary_mul_toom3_start(BDIGIT *zds, size_t zl, const BDIGIT *xds, size_t xl, const
static void
bary_mul(BDIGIT *zds, size_t zl, const BDIGIT *xds, size_t xl, const BDIGIT *yds, size_t yl)
{
- if (xl < KARATSUBA_MUL_DIGITS || yl < KARATSUBA_MUL_DIGITS) {
- if (xds == yds && xl == yl)
- bary_sq_fast(zds, zl, xds, xl);
- else
- bary_mul1(zds, zl, xds, xl, yds, yl);
- return;
+ if (xl <= yl) {
+ if (yl < KARATSUBA_MUL_DIGITS) {
+ if (xds == yds && xl == yl)
+ bary_sq_fast(zds, zl, xds, xl);
+ else
+ bary_mul1(zds, zl, xds, xl, yds, yl);
+ return;
+ }
+ }
+ else {
+ if (xl < KARATSUBA_MUL_DIGITS) {
+ bary_mul1(zds, zl, yds, yl, xds, xl);
+ return;
+ }
}
bary_mul_toom3_start(zds, zl, xds, xl, yds, yl, NULL, 0);