big: Add _private_int_sqr_comba.

This commit is contained in:
Jeroen van Rijn
2021-08-11 20:59:54 +02:00
parent 1f91a2fe65
commit 6c681b258c
9 changed files with 180 additions and 24 deletions
+13 -6
View File
@@ -36,6 +36,8 @@ import "core:mem"
import "core:intrinsics"
import rnd "core:math/rand"
//import "core:fmt"
/*
Low-level addition, unsigned. Handbook of Applied Cryptography, algorithm 14.7.
@@ -624,16 +626,21 @@ internal_int_mul :: proc(dest, src, multiplier: ^Int, allocator := context.alloc
/*
Do we need to square?
*/
if false && src.used >= SQR_TOOM_CUTOFF {
if src.used >= SQR_TOOM_CUTOFF {
/* Use Toom-Cook? */
// err = s_mp_sqr_toom(a, c);
} else if false && src.used >= SQR_KARATSUBA_CUTOFF {
// fmt.printf("_private_int_sqr_toom: %v\n", src.used);
err = #force_inline _private_int_sqr(dest, src);
} else if src.used >= SQR_KARATSUBA_CUTOFF {
/* Karatsuba? */
// err = s_mp_sqr_karatsuba(a, c);
} else if false && ((src.used * 2) + 1) < _WARRAY &&
src.used < (_MAX_COMBA / 2) {
/* Fast comba? */
// err = s_mp_sqr_comba(a, c);
// fmt.printf("_private_int_sqr_karatsuba: %v\n", src.used);
err = #force_inline _private_int_sqr(dest, src);
} else if ((src.used * 2) + 1) < _WARRAY && src.used < (_MAX_COMBA / 2) {
/*
Fast comba?
*/
err = #force_inline _private_int_sqr_comba(dest, src);
} else {
err = #force_inline _private_int_sqr(dest, src);
}