From 3534b428629be185e096be99e3bd5fdfe32d5544 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Thu, 18 Sep 2014 18:55:44 +0000 Subject: initial commit with rc for skalibs-2.0.0.0 --- src/libbiguint/bu_mul.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/libbiguint/bu_mul.c (limited to 'src/libbiguint/bu_mul.c') diff --git a/src/libbiguint/bu_mul.c b/src/libbiguint/bu_mul.c new file mode 100644 index 0000000..184d652 --- /dev/null +++ b/src/libbiguint/bu_mul.c @@ -0,0 +1,32 @@ +/* ISC license. */ + +#include +#include +#include + + /* No Karatsuba. Keep it simple, stupid. */ + +int bu_mul (uint32 *x, unsigned int xn, uint32 const *a, unsigned int an, uint32 const *b, unsigned int bn) +{ + unsigned int alen = bu_len(a, an) ; + unsigned int blen = bu_len(b, bn) ; + uint32 c[alen + blen] ; + register unsigned int i = 0 ; + bu_zero(c, alen + blen) ; + for (; i < alen ; i++) + { + register uint32 carry = 0 ; + register unsigned int j = 0 ; + for (; j < blen ; j++) + { + register uint64 t = a[i] ; + t *= b[j] ; + t += c[i+j] ; + t += carry ; + c[i+j] = (uint32)t ; + carry = (uint32)(t >> 32) ; + } + c[i+j] += carry ; + } + return bu_copy(x, xn, c, alen+blen) ; +} -- cgit v1.2.3