summaryrefslogtreecommitdiffstats
path: root/libtommath
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2019-11-07 14:56:58 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2019-11-07 14:56:58 (GMT)
commit208e4fd87b7123289717f2a292a056da196f3665 (patch)
tree007249b8ff790b61ab5bb160ff9a5b0915cac892 /libtommath
parentbdf8f9cc31ac1d71dbb46090b4f5d1c69c3cd4bd (diff)
downloadtcl-208e4fd87b7123289717f2a292a056da196f3665.zip
tcl-208e4fd87b7123289717f2a292a056da196f3665.tar.gz
tcl-208e4fd87b7123289717f2a292a056da196f3665.tar.bz2
Make mp_mul(a,a,c) equivalent to mp_sqr(a,c). Optimization backported from libtommath.
Diffstat (limited to 'libtommath')
-rw-r--r--libtommath/bn_mp_mul.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libtommath/bn_mp_mul.c b/libtommath/bn_mp_mul.c
index 561913a..b00334d 100644
--- a/libtommath/bn_mp_mul.c
+++ b/libtommath/bn_mp_mul.c
@@ -12,7 +12,9 @@ mp_err mp_mul(const mp_int *a, const mp_int *b, mp_int *c)
digs = a->used + b->used + 1;
mp_sign neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG;
- if (MP_HAS(S_MP_BALANCE_MUL) &&
+ if (a == b) {
+ return mp_sqr(a,c);
+ } else if (MP_HAS(S_MP_BALANCE_MUL) &&
/* Check sizes. The smaller one needs to be larger than the Karatsuba cut-off.
* The bigger one needs to be at least about one MP_KARATSUBA_MUL_CUTOFF bigger
* to make some sense, but it depends on architecture, OS, position of the