aboutsummaryrefslogtreecommitdiffstats
path: root/src/math
diff options
context:
space:
mode:
authorlloyd <[email protected]>2011-12-18 01:19:25 +0000
committerlloyd <[email protected]>2011-12-18 01:19:25 +0000
commit8809043895d1d4cf37ff476cb69c9277b33cc957 (patch)
tree72ca6a117cce901c9a36631422b1a7e5d88e1aac /src/math
parent5a76eb4c07f0caedde1a3d1d2824f2764a46a582 (diff)
parenta3d81efbd2c56749d4abf9e6a27cb36cbbb10702 (diff)
propagate from branch 'net.randombit.botan' (head 39f53266912f33dc48e942b1b865ddcd6af66d8d)
to branch 'net.randombit.botan.cxx11' (head 0bf26cec09f71e75c547b4ec53365748c6d80d86)
Diffstat (limited to 'src/math')
-rw-r--r--src/math/mp/mp_comba.cpp1276
-rw-r--r--src/math/mp/mp_core.h3
2 files changed, 639 insertions, 640 deletions
diff --git a/src/math/mp/mp_comba.cpp b/src/math/mp/mp_comba.cpp
index 2770d3f0a..99dcda176 100644
--- a/src/math/mp/mp_comba.cpp
+++ b/src/math/mp/mp_comba.cpp
@@ -1,6 +1,6 @@
/*
* Comba Multiplication and Squaring
-* (C) 1999-2007 Jack Lloyd
+* (C) 1999-2007,2011 Jack Lloyd
*
* Distributed under the terms of the Botan license
*/
@@ -19,30 +19,30 @@ void bigint_comba_sqr4(word z[8], const word x[4])
{
word w2 = 0, w1 = 0, w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], x[0]);
- z[0] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w2, &w1, &w0, x[ 0], x[ 0]);
+ z[ 0] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[0], x[1]);
- z[1] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
+ z[ 1] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[0], x[2]);
- word3_muladd(&w2, &w1, &w0, x[1], x[1]);
- z[2] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], x[ 1]);
+ z[ 2] = w2; w2 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
- z[3] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
+ word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
+ z[ 3] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[1], x[3]);
- word3_muladd(&w2, &w1, &w0, x[2], x[2]);
- z[4] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], x[ 2]);
+ z[ 4] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[2], x[3]);
- z[5] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
+ z[ 5] = w2; w2 = 0;
- word3_muladd(&w2, &w1, &w0, x[3], x[3]);
- z[6] = w0;
- z[7] = w1;
+ word3_muladd(&w2, &w1, &w0, x[ 3], x[ 3]);
+ z[ 6] = w0;
+ z[ 7] = w1;
}
/*
@@ -52,36 +52,36 @@ void bigint_comba_mul4(word z[8], const word x[4], const word y[4])
{
word w2 = 0, w1 = 0, w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], y[0]);
- z[0] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
+ z[ 0] = w0; w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], y[1]);
- word3_muladd(&w2, &w1, &w0, x[1], y[0]);
- z[1] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
+ z[ 1] = w1; w1 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], y[2]);
- word3_muladd(&w2, &w1, &w0, x[1], y[1]);
- word3_muladd(&w2, &w1, &w0, x[2], y[0]);
- z[2] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
+ z[ 2] = w2; w2 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], y[3]);
- word3_muladd(&w2, &w1, &w0, x[1], y[2]);
- word3_muladd(&w2, &w1, &w0, x[2], y[1]);
- word3_muladd(&w2, &w1, &w0, x[3], y[0]);
- z[3] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
+ word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
+ word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
+ word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
+ z[ 3] = w0; w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[1], y[3]);
- word3_muladd(&w2, &w1, &w0, x[2], y[2]);
- word3_muladd(&w2, &w1, &w0, x[3], y[1]);
- z[4] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
+ z[ 4] = w1; w1 = 0;
- word3_muladd(&w2, &w1, &w0, x[2], y[3]);
- word3_muladd(&w2, &w1, &w0, x[3], y[2]);
- z[5] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
+ z[ 5] = w2; w2 = 0;
- word3_muladd(&w2, &w1, &w0, x[3], y[3]);
- z[6] = w0;
- z[7] = w1;
+ word3_muladd(&w2, &w1, &w0, x[ 3], y[ 3]);
+ z[ 6] = w0;
+ z[ 7] = w1;
}
/*
@@ -91,49 +91,49 @@ void bigint_comba_sqr6(word z[12], const word x[6])
{
word w2 = 0, w1 = 0, w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], x[0]);
- z[0] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w2, &w1, &w0, x[ 0], x[ 0]);
+ z[ 0] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[0], x[1]);
- z[1] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
+ z[ 1] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[0], x[2]);
- word3_muladd(&w2, &w1, &w0, x[1], x[1]);
- z[2] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], x[ 1]);
+ z[ 2] = w2; w2 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
- z[3] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
+ word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
+ z[ 3] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[0], x[4]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[3]);
- word3_muladd(&w2, &w1, &w0, x[2], x[2]);
- z[4] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 4]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], x[ 2]);
+ z[ 4] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[0], x[5]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[4]);
- word3_muladd_2(&w2, &w1, &w0, x[2], x[3]);
- z[5] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 5]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 4]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
+ z[ 5] = w2; w2 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
- word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
- word3_muladd(&w2, &w1, &w0, x[3], x[3]);
- z[6] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 5]);
+ word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 4]);
+ word3_muladd(&w2, &w1, &w0, x[ 3], x[ 3]);
+ z[ 6] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[2], x[5]);
- word3_muladd_2(&w2, &w1, &w0, x[3], x[4]);
- z[7] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 5]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 4]);
+ z[ 7] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[3], x[5]);
- word3_muladd(&w2, &w1, &w0, x[4], x[4]);
- z[8] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], x[ 4]);
+ z[ 8] = w2; w2 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
- z[9] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 5]);
+ z[ 9] = w0; w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[5], x[5]);
- z[10] = w0;
- z[11] = w1;
+ word3_muladd(&w0, &w2, &w1, x[ 5], x[ 5]);
+ z[10] = w1;
+ z[11] = w2;
}
/*
@@ -143,64 +143,64 @@ void bigint_comba_mul6(word z[12], const word x[6], const word y[6])
{
word w2 = 0, w1 = 0, w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], y[0]);
- z[0] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[1]);
- word3_muladd(&w2, &w1, &w0, x[1], y[0]);
- z[1] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[2]);
- word3_muladd(&w2, &w1, &w0, x[1], y[1]);
- word3_muladd(&w2, &w1, &w0, x[2], y[0]);
- z[2] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[3]);
- word3_muladd(&w2, &w1, &w0, x[1], y[2]);
- word3_muladd(&w2, &w1, &w0, x[2], y[1]);
- word3_muladd(&w2, &w1, &w0, x[3], y[0]);
- z[3] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[4]);
- word3_muladd(&w2, &w1, &w0, x[1], y[3]);
- word3_muladd(&w2, &w1, &w0, x[2], y[2]);
- word3_muladd(&w2, &w1, &w0, x[3], y[1]);
- word3_muladd(&w2, &w1, &w0, x[4], y[0]);
- z[4] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[5]);
- word3_muladd(&w2, &w1, &w0, x[1], y[4]);
- word3_muladd(&w2, &w1, &w0, x[2], y[3]);
- word3_muladd(&w2, &w1, &w0, x[3], y[2]);
- word3_muladd(&w2, &w1, &w0, x[4], y[1]);
- word3_muladd(&w2, &w1, &w0, x[5], y[0]);
- z[5] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[1], y[5]);
- word3_muladd(&w2, &w1, &w0, x[2], y[4]);
- word3_muladd(&w2, &w1, &w0, x[3], y[3]);
- word3_muladd(&w2, &w1, &w0, x[4], y[2]);
- word3_muladd(&w2, &w1, &w0, x[5], y[1]);
- z[6] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[2], y[5]);
- word3_muladd(&w2, &w1, &w0, x[3], y[4]);
- word3_muladd(&w2, &w1, &w0, x[4], y[3]);
- word3_muladd(&w2, &w1, &w0, x[5], y[2]);
- z[7] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[3], y[5]);
- word3_muladd(&w2, &w1, &w0, x[4], y[4]);
- word3_muladd(&w2, &w1, &w0, x[5], y[3]);
- z[8] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[4], y[5]);
- word3_muladd(&w2, &w1, &w0, x[5], y[4]);
- z[9] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[5], y[5]);
- z[10] = w0;
- z[11] = w1;
+ word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
+ z[ 0] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
+ z[ 1] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
+ z[ 2] = w2; w2 = 0;
+
+ word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
+ word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
+ word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
+ word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
+ z[ 3] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 0]);
+ z[ 4] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 0]);
+ z[ 5] = w2; w2 = 0;
+
+ word3_muladd(&w2, &w1, &w0, x[ 1], y[ 5]);
+ word3_muladd(&w2, &w1, &w0, x[ 2], y[ 4]);
+ word3_muladd(&w2, &w1, &w0, x[ 3], y[ 3]);
+ word3_muladd(&w2, &w1, &w0, x[ 4], y[ 2]);
+ word3_muladd(&w2, &w1, &w0, x[ 5], y[ 1]);
+ z[ 6] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[ 5]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[ 2]);
+ z[ 7] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 3]);
+ z[ 8] = w2; w2 = 0;
+
+ word3_muladd(&w2, &w1, &w0, x[ 4], y[ 5]);
+ word3_muladd(&w2, &w1, &w0, x[ 5], y[ 4]);
+ z[ 9] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[ 5]);
+ z[10] = w1;
+ z[11] = w2;
}
/*
@@ -210,72 +210,72 @@ void bigint_comba_sqr8(word z[16], const word x[8])
{
word w2 = 0, w1 = 0, w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], x[0]);
- z[0] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[0], x[1]);
- z[1] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[0], x[2]);
- word3_muladd(&w2, &w1, &w0, x[1], x[1]);
- z[2] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
- z[3] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[0], x[4]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[3]);
- word3_muladd(&w2, &w1, &w0, x[2], x[2]);
- z[4] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[0], x[5]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[4]);
- word3_muladd_2(&w2, &w1, &w0, x[2], x[3]);
- z[5] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
- word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
- word3_muladd(&w2, &w1, &w0, x[3], x[3]);
- z[6] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[0], x[7]);
- word3_muladd_2(&w2, &w1, &w0, x[1], x[6]);
- word3_muladd_2(&w2, &w1, &w0, x[2], x[5]);
- word3_muladd_2(&w2, &w1, &w0, x[3], x[4]);
- z[7] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[1], x[7]);
- word3_muladd_2(&w2, &w1, &w0, x[2], x[6]);
- word3_muladd_2(&w2, &w1, &w0, x[3], x[5]);
- word3_muladd(&w2, &w1, &w0, x[4], x[4]);
- z[8] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
- word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
- word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
- z[9] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[3], x[7]);
- word3_muladd_2(&w2, &w1, &w0, x[4], x[6]);
- word3_muladd(&w2, &w1, &w0, x[5], x[5]);
- z[10] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[4], x[7]);
- word3_muladd_2(&w2, &w1, &w0, x[5], x[6]);
- z[11] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
- word3_muladd(&w2, &w1, &w0, x[6], x[6]);
- z[12] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[6], x[7]);
- z[13] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[7], x[7]);
- z[14] = w0;
- z[15] = w1;
+ word3_muladd(&w2, &w1, &w0, x[ 0], x[ 0]);
+ z[ 0] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
+ z[ 1] = w1; w1 = 0;
+
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], x[ 1]);
+ z[ 2] = w2; w2 = 0;
+
+ word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
+ word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
+ z[ 3] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 4]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], x[ 2]);
+ z[ 4] = w1; w1 = 0;
+
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 5]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 4]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
+ z[ 5] = w2; w2 = 0;
+
+ word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 6]);
+ word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 5]);
+ word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 4]);
+ word3_muladd(&w2, &w1, &w0, x[ 3], x[ 3]);
+ z[ 6] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 7]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 6]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 5]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 4]);
+ z[ 7] = w1; w1 = 0;
+
+ word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 7]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 6]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], x[ 4]);
+ z[ 8] = w2; w2 = 0;
+
+ word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 7]);
+ word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 6]);
+ word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 5]);
+ z[ 9] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 7]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 4], x[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], x[ 5]);
+ z[10] = w1; w1 = 0;
+
+ word3_muladd_2(&w1, &w0, &w2, x[ 4], x[ 7]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 5], x[ 6]);
+ z[11] = w2; w2 = 0;
+
+ word3_muladd_2(&w2, &w1, &w0, x[ 5], x[ 7]);
+ word3_muladd(&w2, &w1, &w0, x[ 6], x[ 6]);
+ z[12] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 6], x[ 7]);
+ z[13] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 7], x[ 7]);
+ z[14] = w2;
+ z[15] = w0;
}
/*
@@ -285,100 +285,100 @@ void bigint_comba_mul8(word z[16], const word x[8], const word y[8])
{
word w2 = 0, w1 = 0, w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[0], y[0]);
- z[0] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[1]);
- word3_muladd(&w2, &w1, &w0, x[1], y[0]);
- z[1] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[2]);
- word3_muladd(&w2, &w1, &w0, x[1], y[1]);
- word3_muladd(&w2, &w1, &w0, x[2], y[0]);
- z[2] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[3]);
- word3_muladd(&w2, &w1, &w0, x[1], y[2]);
- word3_muladd(&w2, &w1, &w0, x[2], y[1]);
- word3_muladd(&w2, &w1, &w0, x[3], y[0]);
- z[3] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[4]);
- word3_muladd(&w2, &w1, &w0, x[1], y[3]);
- word3_muladd(&w2, &w1, &w0, x[2], y[2]);
- word3_muladd(&w2, &w1, &w0, x[3], y[1]);
- word3_muladd(&w2, &w1, &w0, x[4], y[0]);
- z[4] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[5]);
- word3_muladd(&w2, &w1, &w0, x[1], y[4]);
- word3_muladd(&w2, &w1, &w0, x[2], y[3]);
- word3_muladd(&w2, &w1, &w0, x[3], y[2]);
- word3_muladd(&w2, &w1, &w0, x[4], y[1]);
- word3_muladd(&w2, &w1, &w0, x[5], y[0]);
- z[5] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[6]);
- word3_muladd(&w2, &w1, &w0, x[1], y[5]);
- word3_muladd(&w2, &w1, &w0, x[2], y[4]);
- word3_muladd(&w2, &w1, &w0, x[3], y[3]);
- word3_muladd(&w2, &w1, &w0, x[4], y[2]);
- word3_muladd(&w2, &w1, &w0, x[5], y[1]);
- word3_muladd(&w2, &w1, &w0, x[6], y[0]);
- z[6] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[0], y[7]);
- word3_muladd(&w2, &w1, &w0, x[1], y[6]);
- word3_muladd(&w2, &w1, &w0, x[2], y[5]);
- word3_muladd(&w2, &w1, &w0, x[3], y[4]);
- word3_muladd(&w2, &w1, &w0, x[4], y[3]);
- word3_muladd(&w2, &w1, &w0, x[5], y[2]);
- word3_muladd(&w2, &w1, &w0, x[6], y[1]);
- word3_muladd(&w2, &w1, &w0, x[7], y[0]);
- z[7] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[1], y[7]);
- word3_muladd(&w2, &w1, &w0, x[2], y[6]);
- word3_muladd(&w2, &w1, &w0, x[3], y[5]);
- word3_muladd(&w2, &w1, &w0, x[4], y[4]);
- word3_muladd(&w2, &w1, &w0, x[5], y[3]);
- word3_muladd(&w2, &w1, &w0, x[6], y[2]);
- word3_muladd(&w2, &w1, &w0, x[7], y[1]);
- z[8] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[2], y[7]);
- word3_muladd(&w2, &w1, &w0, x[3], y[6]);
- word3_muladd(&w2, &w1, &w0, x[4], y[5]);
- word3_muladd(&w2, &w1, &w0, x[5], y[4]);
- word3_muladd(&w2, &w1, &w0, x[6], y[3]);
- word3_muladd(&w2, &w1, &w0, x[7], y[2]);
- z[9] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[3], y[7]);
- word3_muladd(&w2, &w1, &w0, x[4], y[6]);
- word3_muladd(&w2, &w1, &w0, x[5], y[5]);
- word3_muladd(&w2, &w1, &w0, x[6], y[4]);
- word3_muladd(&w2, &w1, &w0, x[7], y[3]);
- z[10] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[4], y[7]);
- word3_muladd(&w2, &w1, &w0, x[5], y[6]);
- word3_muladd(&w2, &w1, &w0, x[6], y[5]);
- word3_muladd(&w2, &w1, &w0, x[7], y[4]);
- z[11] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[5], y[7]);
- word3_muladd(&w2, &w1, &w0, x[6], y[6]);
- word3_muladd(&w2, &w1, &w0, x[7], y[5]);
- z[12] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[6], y[7]);
- word3_muladd(&w2, &w1, &w0, x[7], y[6]);
- z[13] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[7], y[7]);
- z[14] = w0;
- z[15] = w1;
+ word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
+ z[ 0] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
+ z[ 1] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
+ z[ 2] = w2; w2 = 0;
+
+ word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
+ word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
+ word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
+ word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
+ z[ 3] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 0]);
+ z[ 4] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 0]);
+ z[ 5] = w2; w2 = 0;
+
+ word3_muladd(&w2, &w1, &w0, x[ 0], y[ 6]);
+ word3_muladd(&w2, &w1, &w0, x[ 1], y[ 5]);
+ word3_muladd(&w2, &w1, &w0, x[ 2], y[ 4]);
+ word3_muladd(&w2, &w1, &w0, x[ 3], y[ 3]);
+ word3_muladd(&w2, &w1, &w0, x[ 4], y[ 2]);
+ word3_muladd(&w2, &w1, &w0, x[ 5], y[ 1]);
+ word3_muladd(&w2, &w1, &w0, x[ 6], y[ 0]);
+ z[ 6] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 7]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[ 5]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[ 6], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[ 0]);
+ z[ 7] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 7]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 6]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[ 6], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 7], y[ 1]);
+ z[ 8] = w2; w2 = 0;
+
+ word3_muladd(&w2, &w1, &w0, x[ 2], y[ 7]);
+ word3_muladd(&w2, &w1, &w0, x[ 3], y[ 6]);
+ word3_muladd(&w2, &w1, &w0, x[ 4], y[ 5]);
+ word3_muladd(&w2, &w1, &w0, x[ 5], y[ 4]);
+ word3_muladd(&w2, &w1, &w0, x[ 6], y[ 3]);
+ word3_muladd(&w2, &w1, &w0, x[ 7], y[ 2]);
+ z[ 9] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 7]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[ 5]);
+ word3_muladd(&w0, &w2, &w1, x[ 6], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[ 3]);
+ z[10] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[ 7]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 6]);
+ word3_muladd(&w1, &w0, &w2, x[ 6], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 7], y[ 4]);
+ z[11] = w2; w2 = 0;
+
+ word3_muladd(&w2, &w1, &w0, x[ 5], y[ 7]);
+ word3_muladd(&w2, &w1, &w0, x[ 6], y[ 6]);
+ word3_muladd(&w2, &w1, &w0, x[ 7], y[ 5]);
+ z[12] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 6], y[ 7]);
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[ 6]);
+ z[13] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 7], y[ 7]);
+ z[14] = w2;
+ z[15] = w0;
}
/*
@@ -389,70 +389,70 @@ void bigint_comba_sqr16(word z[32], const word x[16])
word w2 = 0, w1 = 0, w0 = 0;
word3_muladd(&w2, &w1, &w0, x[ 0], x[ 0]);
- z[ 0] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[ 0] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 1]);
- z[ 1] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 1]);
+ z[ 1] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 2]);
- word3_muladd(&w2, &w1, &w0, x[ 1], x[ 1]);
- z[ 2] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], x[ 1]);
+ z[ 2] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 3]);
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 2]);
- z[ 3] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[ 3] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 4]);
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 3]);
- word3_muladd(&w2, &w1, &w0, x[ 2], x[ 2]);
- z[ 4] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 4]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], x[ 2]);
+ z[ 4] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 5]);
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 4]);
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 3]);
- z[ 5] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 5]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 4]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 3]);
+ z[ 5] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 6]);
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 5]);
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 4]);
word3_muladd(&w2, &w1, &w0, x[ 3], x[ 3]);
- z[ 6] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[ 6] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 7]);
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 6]);
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 5]);
- word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 4]);
- z[ 7] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[ 7]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 6]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 5]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 4]);
+ z[ 7] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 8]);
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 7]);
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 6]);
- word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 5]);
- word3_muladd(&w2, &w1, &w0, x[ 4], x[ 4]);
- z[ 8] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[ 8]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 1], x[ 7]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 6]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], x[ 4]);
+ z[ 8] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[ 9]);
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 8]);
word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 7]);
word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 6]);
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 5]);
- z[ 9] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[10]);
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[ 9]);
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 8]);
- word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 7]);
- word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 6]);
- word3_muladd(&w2, &w1, &w0, x[ 5], x[ 5]);
- z[10] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[11]);
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[10]);
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[ 9]);
- word3_muladd_2(&w2, &w1, &w0, x[ 3], x[ 8]);
- word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 7]);
- word3_muladd_2(&w2, &w1, &w0, x[ 5], x[ 6]);
- z[11] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[ 9] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[10]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[ 9]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 2], x[ 8]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 3], x[ 7]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 4], x[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], x[ 5]);
+ z[10] = w1; w1 = 0;
+
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[11]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 1], x[10]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[ 9]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 3], x[ 8]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 4], x[ 7]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 5], x[ 6]);
+ z[11] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[12]);
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[11]);
@@ -461,26 +461,26 @@ void bigint_comba_sqr16(word z[32], const word x[16])
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 8]);
word3_muladd_2(&w2, &w1, &w0, x[ 5], x[ 7]);
word3_muladd(&w2, &w1, &w0, x[ 6], x[ 6]);
- z[12] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[13]);
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[12]);
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[11]);
- word3_muladd_2(&w2, &w1, &w0, x[ 3], x[10]);
- word3_muladd_2(&w2, &w1, &w0, x[ 4], x[ 9]);
- word3_muladd_2(&w2, &w1, &w0, x[ 5], x[ 8]);
- word3_muladd_2(&w2, &w1, &w0, x[ 6], x[ 7]);
- z[13] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[ 0], x[14]);
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[13]);
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[12]);
- word3_muladd_2(&w2, &w1, &w0, x[ 3], x[11]);
- word3_muladd_2(&w2, &w1, &w0, x[ 4], x[10]);
- word3_muladd_2(&w2, &w1, &w0, x[ 5], x[ 9]);
- word3_muladd_2(&w2, &w1, &w0, x[ 6], x[ 8]);
- word3_muladd(&w2, &w1, &w0, x[ 7], x[ 7]);
- z[14] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[12] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 0], x[13]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[12]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 2], x[11]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 3], x[10]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 4], x[ 9]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 5], x[ 8]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 6], x[ 7]);
+ z[13] = w1; w1 = 0;
+
+ word3_muladd_2(&w1, &w0, &w2, x[ 0], x[14]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 1], x[13]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[12]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 3], x[11]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 4], x[10]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 5], x[ 9]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 6], x[ 8]);
+ word3_muladd(&w1, &w0, &w2, x[ 7], x[ 7]);
+ z[14] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[ 0], x[15]);
word3_muladd_2(&w2, &w1, &w0, x[ 1], x[14]);
@@ -490,26 +490,26 @@ void bigint_comba_sqr16(word z[32], const word x[16])
word3_muladd_2(&w2, &w1, &w0, x[ 5], x[10]);
word3_muladd_2(&w2, &w1, &w0, x[ 6], x[ 9]);
word3_muladd_2(&w2, &w1, &w0, x[ 7], x[ 8]);
- z[15] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[ 1], x[15]);
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[14]);
- word3_muladd_2(&w2, &w1, &w0, x[ 3], x[13]);
- word3_muladd_2(&w2, &w1, &w0, x[ 4], x[12]);
- word3_muladd_2(&w2, &w1, &w0, x[ 5], x[11]);
- word3_muladd_2(&w2, &w1, &w0, x[ 6], x[10]);
- word3_muladd_2(&w2, &w1, &w0, x[ 7], x[ 9]);
- word3_muladd(&w2, &w1, &w0, x[ 8], x[ 8]);
- z[16] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[ 2], x[15]);
- word3_muladd_2(&w2, &w1, &w0, x[ 3], x[14]);
- word3_muladd_2(&w2, &w1, &w0, x[ 4], x[13]);
- word3_muladd_2(&w2, &w1, &w0, x[ 5], x[12]);
- word3_muladd_2(&w2, &w1, &w0, x[ 6], x[11]);
- word3_muladd_2(&w2, &w1, &w0, x[ 7], x[10]);
- word3_muladd_2(&w2, &w1, &w0, x[ 8], x[ 9]);
- z[17] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[15] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 1], x[15]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 2], x[14]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 3], x[13]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 4], x[12]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 5], x[11]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 6], x[10]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 7], x[ 9]);
+ word3_muladd(&w0, &w2, &w1, x[ 8], x[ 8]);
+ z[16] = w1; w1 = 0;
+
+ word3_muladd_2(&w1, &w0, &w2, x[ 2], x[15]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 3], x[14]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 4], x[13]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 5], x[12]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 6], x[11]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 7], x[10]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 8], x[ 9]);
+ z[17] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[ 3], x[15]);
word3_muladd_2(&w2, &w1, &w0, x[ 4], x[14]);
@@ -518,70 +518,70 @@ void bigint_comba_sqr16(word z[32], const word x[16])
word3_muladd_2(&w2, &w1, &w0, x[ 7], x[11]);
word3_muladd_2(&w2, &w1, &w0, x[ 8], x[10]);
word3_muladd(&w2, &w1, &w0, x[ 9], x[ 9]);
- z[18] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[ 4], x[15]);
- word3_muladd_2(&w2, &w1, &w0, x[ 5], x[14]);
- word3_muladd_2(&w2, &w1, &w0, x[ 6], x[13]);
- word3_muladd_2(&w2, &w1, &w0, x[ 7], x[12]);
- word3_muladd_2(&w2, &w1, &w0, x[ 8], x[11]);
- word3_muladd_2(&w2, &w1, &w0, x[ 9], x[10]);
- z[19] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd_2(&w2, &w1, &w0, x[ 5], x[15]);
- word3_muladd_2(&w2, &w1, &w0, x[ 6], x[14]);
- word3_muladd_2(&w2, &w1, &w0, x[ 7], x[13]);
- word3_muladd_2(&w2, &w1, &w0, x[ 8], x[12]);
- word3_muladd_2(&w2, &w1, &w0, x[ 9], x[11]);
- word3_muladd(&w2, &w1, &w0, x[10], x[10]);
- z[20] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[18] = w0; w0 = 0;
+
+ word3_muladd_2(&w0, &w2, &w1, x[ 4], x[15]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 5], x[14]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 6], x[13]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 7], x[12]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 8], x[11]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 9], x[10]);
+ z[19] = w1; w1 = 0;
+
+ word3_muladd_2(&w1, &w0, &w2, x[ 5], x[15]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 6], x[14]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 7], x[13]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 8], x[12]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 9], x[11]);
+ word3_muladd(&w1, &w0, &w2, x[10], x[10]);
+ z[20] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[ 6], x[15]);
word3_muladd_2(&w2, &w1, &w0, x[ 7], x[14]);
word3_muladd_2(&w2, &w1, &w0, x[ 8], x[13]);
word3_muladd_2(&w2, &w1, &w0, x[ 9], x[12]);
word3_muladd_2(&w2, &w1, &w0, x[10], x[11]);
- z[21] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[21] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[ 7], x[15]);
- word3_muladd_2(&w2, &w1, &w0, x[ 8], x[14]);
- word3_muladd_2(&w2, &w1, &w0, x[ 9], x[13]);
- word3_muladd_2(&w2, &w1, &w0, x[10], x[12]);
- word3_muladd(&w2, &w1, &w0, x[11], x[11]);
- z[22] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[ 7], x[15]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 8], x[14]);
+ word3_muladd_2(&w0, &w2, &w1, x[ 9], x[13]);
+ word3_muladd_2(&w0, &w2, &w1, x[10], x[12]);
+ word3_muladd(&w0, &w2, &w1, x[11], x[11]);
+ z[22] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[ 8], x[15]);
- word3_muladd_2(&w2, &w1, &w0, x[ 9], x[14]);
- word3_muladd_2(&w2, &w1, &w0, x[10], x[13]);
- word3_muladd_2(&w2, &w1, &w0, x[11], x[12]);
- z[23] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[ 8], x[15]);
+ word3_muladd_2(&w1, &w0, &w2, x[ 9], x[14]);
+ word3_muladd_2(&w1, &w0, &w2, x[10], x[13]);
+ word3_muladd_2(&w1, &w0, &w2, x[11], x[12]);
+ z[23] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[ 9], x[15]);
word3_muladd_2(&w2, &w1, &w0, x[10], x[14]);
word3_muladd_2(&w2, &w1, &w0, x[11], x[13]);
word3_muladd(&w2, &w1, &w0, x[12], x[12]);
- z[24] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[24] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[10], x[15]);
- word3_muladd_2(&w2, &w1, &w0, x[11], x[14]);
- word3_muladd_2(&w2, &w1, &w0, x[12], x[13]);
- z[25] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[10], x[15]);
+ word3_muladd_2(&w0, &w2, &w1, x[11], x[14]);
+ word3_muladd_2(&w0, &w2, &w1, x[12], x[13]);
+ z[25] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[11], x[15]);
- word3_muladd_2(&w2, &w1, &w0, x[12], x[14]);
- word3_muladd(&w2, &w1, &w0, x[13], x[13]);
- z[26] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[11], x[15]);
+ word3_muladd_2(&w1, &w0, &w2, x[12], x[14]);
+ word3_muladd(&w1, &w0, &w2, x[13], x[13]);
+ z[26] = w2; w2 = 0;
word3_muladd_2(&w2, &w1, &w0, x[12], x[15]);
word3_muladd_2(&w2, &w1, &w0, x[13], x[14]);
- z[27] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[27] = w0; w0 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[13], x[15]);
- word3_muladd(&w2, &w1, &w0, x[14], x[14]);
- z[28] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w0, &w2, &w1, x[13], x[15]);
+ word3_muladd(&w0, &w2, &w1, x[14], x[14]);
+ z[28] = w1; w1 = 0;
- word3_muladd_2(&w2, &w1, &w0, x[14], x[15]);
- z[29] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd_2(&w1, &w0, &w2, x[14], x[15]);
+ z[29] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[15], x[15]);
z[30] = w0;
@@ -596,37 +596,37 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
word w2 = 0, w1 = 0, w0 = 0;
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 0]);
- z[0] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[ 0] = w0; w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[ 0], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[ 0]);
- z[1] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 0]);
+ z[ 1] = w1; w1 = 0;
- word3_muladd(&w2, &w1, &w0, x[ 0], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[ 0]);
- z[2] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 0]);
+ z[ 2] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 3]);
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 2]);
word3_muladd(&w2, &w1, &w0, x[ 2], y[ 1]);
word3_muladd(&w2, &w1, &w0, x[ 3], y[ 0]);
- z[3] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 0], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[ 0]);
- z[4] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 0], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[ 0]);
- z[5] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[ 3] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 0]);
+ z[ 4] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 0]);
+ z[ 5] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 6]);
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 5]);
@@ -635,28 +635,28 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
word3_muladd(&w2, &w1, &w0, x[ 4], y[ 2]);
word3_muladd(&w2, &w1, &w0, x[ 5], y[ 1]);
word3_muladd(&w2, &w1, &w0, x[ 6], y[ 0]);
- z[6] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 0], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[ 0]);
- z[7] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 0], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[ 0]);
- z[8] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[ 6] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[ 7]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[ 5]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[ 6], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[ 0]);
+ z[ 7] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[ 8]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[ 7]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 6]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[ 6], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[ 7], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[ 8], y[ 0]);
+ z[ 8] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[ 0], y[ 9]);
word3_muladd(&w2, &w1, &w0, x[ 1], y[ 8]);
@@ -668,34 +668,34 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
word3_muladd(&w2, &w1, &w0, x[ 7], y[ 2]);
word3_muladd(&w2, &w1, &w0, x[ 8], y[ 1]);
word3_muladd(&w2, &w1, &w0, x[ 9], y[ 0]);
- z[9] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 0], y[10]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[10], y[ 0]);
- z[10] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 0], y[11]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[10]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[10], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[11], y[ 0]);
- z[11] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[ 9] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[10]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[ 9]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[ 8]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[ 7]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[ 5]);
+ word3_muladd(&w0, &w2, &w1, x[ 6], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[ 8], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[ 9], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[10], y[ 0]);
+ z[10] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[11]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[10]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[ 9]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[ 8]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[ 7]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 6]);
+ word3_muladd(&w1, &w0, &w2, x[ 6], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[ 7], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[ 8], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[ 9], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[10], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[11], y[ 0]);
+ z[11] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[ 0], y[12]);
word3_muladd(&w2, &w1, &w0, x[ 1], y[11]);
@@ -710,40 +710,40 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
word3_muladd(&w2, &w1, &w0, x[10], y[ 2]);
word3_muladd(&w2, &w1, &w0, x[11], y[ 1]);
word3_muladd(&w2, &w1, &w0, x[12], y[ 0]);
- z[12] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 0], y[13]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[12]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[11]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[10]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[10], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[11], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[12], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[13], y[ 0]);
- z[13] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 0], y[14]);
- word3_muladd(&w2, &w1, &w0, x[ 1], y[13]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[12]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[11]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[10]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[10], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[11], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[12], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[13], y[ 1]);
- word3_muladd(&w2, &w1, &w0, x[14], y[ 0]);
- z[14] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[12] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 0], y[13]);
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[12]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[11]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[10]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[ 9]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[ 8]);
+ word3_muladd(&w0, &w2, &w1, x[ 6], y[ 7]);
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[ 8], y[ 5]);
+ word3_muladd(&w0, &w2, &w1, x[ 9], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[10], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[11], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[12], y[ 1]);
+ word3_muladd(&w0, &w2, &w1, x[13], y[ 0]);
+ z[13] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 0], y[14]);
+ word3_muladd(&w1, &w0, &w2, x[ 1], y[13]);
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[12]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[11]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[10]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[ 9]);
+ word3_muladd(&w1, &w0, &w2, x[ 6], y[ 8]);
+ word3_muladd(&w1, &w0, &w2, x[ 7], y[ 7]);
+ word3_muladd(&w1, &w0, &w2, x[ 8], y[ 6]);
+ word3_muladd(&w1, &w0, &w2, x[ 9], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[10], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[11], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[12], y[ 2]);
+ word3_muladd(&w1, &w0, &w2, x[13], y[ 1]);
+ word3_muladd(&w1, &w0, &w2, x[14], y[ 0]);
+ z[14] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[ 0], y[15]);
word3_muladd(&w2, &w1, &w0, x[ 1], y[14]);
@@ -761,40 +761,40 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
word3_muladd(&w2, &w1, &w0, x[13], y[ 2]);
word3_muladd(&w2, &w1, &w0, x[14], y[ 1]);
word3_muladd(&w2, &w1, &w0, x[15], y[ 0]);
- z[15] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 1], y[15]);
- word3_muladd(&w2, &w1, &w0, x[ 2], y[14]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[13]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[12]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[11]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[10]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[10], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[11], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[12], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[13], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[14], y[ 2]);
- word3_muladd(&w2, &w1, &w0, x[15], y[ 1]);
- z[16] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 2], y[15]);
- word3_muladd(&w2, &w1, &w0, x[ 3], y[14]);
- word3_muladd(&w2, &w1, &w0, x[ 4], y[13]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[12]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[11]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[10]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[10], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[11], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[12], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[13], y[ 4]);
- word3_muladd(&w2, &w1, &w0, x[14], y[ 3]);
- word3_muladd(&w2, &w1, &w0, x[15], y[ 2]);
- z[17] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[15] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 1], y[15]);
+ word3_muladd(&w0, &w2, &w1, x[ 2], y[14]);
+ word3_muladd(&w0, &w2, &w1, x[ 3], y[13]);
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[12]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[11]);
+ word3_muladd(&w0, &w2, &w1, x[ 6], y[10]);
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[ 9]);
+ word3_muladd(&w0, &w2, &w1, x[ 8], y[ 8]);
+ word3_muladd(&w0, &w2, &w1, x[ 9], y[ 7]);
+ word3_muladd(&w0, &w2, &w1, x[10], y[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[11], y[ 5]);
+ word3_muladd(&w0, &w2, &w1, x[12], y[ 4]);
+ word3_muladd(&w0, &w2, &w1, x[13], y[ 3]);
+ word3_muladd(&w0, &w2, &w1, x[14], y[ 2]);
+ word3_muladd(&w0, &w2, &w1, x[15], y[ 1]);
+ z[16] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 2], y[15]);
+ word3_muladd(&w1, &w0, &w2, x[ 3], y[14]);
+ word3_muladd(&w1, &w0, &w2, x[ 4], y[13]);
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[12]);
+ word3_muladd(&w1, &w0, &w2, x[ 6], y[11]);
+ word3_muladd(&w1, &w0, &w2, x[ 7], y[10]);
+ word3_muladd(&w1, &w0, &w2, x[ 8], y[ 9]);
+ word3_muladd(&w1, &w0, &w2, x[ 9], y[ 8]);
+ word3_muladd(&w1, &w0, &w2, x[10], y[ 7]);
+ word3_muladd(&w1, &w0, &w2, x[11], y[ 6]);
+ word3_muladd(&w1, &w0, &w2, x[12], y[ 5]);
+ word3_muladd(&w1, &w0, &w2, x[13], y[ 4]);
+ word3_muladd(&w1, &w0, &w2, x[14], y[ 3]);
+ word3_muladd(&w1, &w0, &w2, x[15], y[ 2]);
+ z[17] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[ 3], y[15]);
word3_muladd(&w2, &w1, &w0, x[ 4], y[14]);
@@ -809,34 +809,34 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
word3_muladd(&w2, &w1, &w0, x[13], y[ 5]);
word3_muladd(&w2, &w1, &w0, x[14], y[ 4]);
word3_muladd(&w2, &w1, &w0, x[15], y[ 3]);
- z[18] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 4], y[15]);
- word3_muladd(&w2, &w1, &w0, x[ 5], y[14]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[13]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[12]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[11]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[10]);
- word3_muladd(&w2, &w1, &w0, x[10], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[11], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[12], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[13], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[14], y[ 5]);
- word3_muladd(&w2, &w1, &w0, x[15], y[ 4]);
- z[19] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 5], y[15]);
- word3_muladd(&w2, &w1, &w0, x[ 6], y[14]);
- word3_muladd(&w2, &w1, &w0, x[ 7], y[13]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[12]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[11]);
- word3_muladd(&w2, &w1, &w0, x[10], y[10]);
- word3_muladd(&w2, &w1, &w0, x[11], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[12], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[13], y[ 7]);
- word3_muladd(&w2, &w1, &w0, x[14], y[ 6]);
- word3_muladd(&w2, &w1, &w0, x[15], y[ 5]);
- z[20] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[18] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 4], y[15]);
+ word3_muladd(&w0, &w2, &w1, x[ 5], y[14]);
+ word3_muladd(&w0, &w2, &w1, x[ 6], y[13]);
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[12]);
+ word3_muladd(&w0, &w2, &w1, x[ 8], y[11]);
+ word3_muladd(&w0, &w2, &w1, x[ 9], y[10]);
+ word3_muladd(&w0, &w2, &w1, x[10], y[ 9]);
+ word3_muladd(&w0, &w2, &w1, x[11], y[ 8]);
+ word3_muladd(&w0, &w2, &w1, x[12], y[ 7]);
+ word3_muladd(&w0, &w2, &w1, x[13], y[ 6]);
+ word3_muladd(&w0, &w2, &w1, x[14], y[ 5]);
+ word3_muladd(&w0, &w2, &w1, x[15], y[ 4]);
+ z[19] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 5], y[15]);
+ word3_muladd(&w1, &w0, &w2, x[ 6], y[14]);
+ word3_muladd(&w1, &w0, &w2, x[ 7], y[13]);
+ word3_muladd(&w1, &w0, &w2, x[ 8], y[12]);
+ word3_muladd(&w1, &w0, &w2, x[ 9], y[11]);
+ word3_muladd(&w1, &w0, &w2, x[10], y[10]);
+ word3_muladd(&w1, &w0, &w2, x[11], y[ 9]);
+ word3_muladd(&w1, &w0, &w2, x[12], y[ 8]);
+ word3_muladd(&w1, &w0, &w2, x[13], y[ 7]);
+ word3_muladd(&w1, &w0, &w2, x[14], y[ 6]);
+ word3_muladd(&w1, &w0, &w2, x[15], y[ 5]);
+ z[20] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[ 6], y[15]);
word3_muladd(&w2, &w1, &w0, x[ 7], y[14]);
@@ -848,28 +848,28 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
word3_muladd(&w2, &w1, &w0, x[13], y[ 8]);
word3_muladd(&w2, &w1, &w0, x[14], y[ 7]);
word3_muladd(&w2, &w1, &w0, x[15], y[ 6]);
- z[21] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 7], y[15]);
- word3_muladd(&w2, &w1, &w0, x[ 8], y[14]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[13]);
- word3_muladd(&w2, &w1, &w0, x[10], y[12]);
- word3_muladd(&w2, &w1, &w0, x[11], y[11]);
- word3_muladd(&w2, &w1, &w0, x[12], y[10]);
- word3_muladd(&w2, &w1, &w0, x[13], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[14], y[ 8]);
- word3_muladd(&w2, &w1, &w0, x[15], y[ 7]);
- z[22] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[ 8], y[15]);
- word3_muladd(&w2, &w1, &w0, x[ 9], y[14]);
- word3_muladd(&w2, &w1, &w0, x[10], y[13]);
- word3_muladd(&w2, &w1, &w0, x[11], y[12]);
- word3_muladd(&w2, &w1, &w0, x[12], y[11]);
- word3_muladd(&w2, &w1, &w0, x[13], y[10]);
- word3_muladd(&w2, &w1, &w0, x[14], y[ 9]);
- word3_muladd(&w2, &w1, &w0, x[15], y[ 8]);
- z[23] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[21] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[ 7], y[15]);
+ word3_muladd(&w0, &w2, &w1, x[ 8], y[14]);
+ word3_muladd(&w0, &w2, &w1, x[ 9], y[13]);
+ word3_muladd(&w0, &w2, &w1, x[10], y[12]);
+ word3_muladd(&w0, &w2, &w1, x[11], y[11]);
+ word3_muladd(&w0, &w2, &w1, x[12], y[10]);
+ word3_muladd(&w0, &w2, &w1, x[13], y[ 9]);
+ word3_muladd(&w0, &w2, &w1, x[14], y[ 8]);
+ word3_muladd(&w0, &w2, &w1, x[15], y[ 7]);
+ z[22] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[ 8], y[15]);
+ word3_muladd(&w1, &w0, &w2, x[ 9], y[14]);
+ word3_muladd(&w1, &w0, &w2, x[10], y[13]);
+ word3_muladd(&w1, &w0, &w2, x[11], y[12]);
+ word3_muladd(&w1, &w0, &w2, x[12], y[11]);
+ word3_muladd(&w1, &w0, &w2, x[13], y[10]);
+ word3_muladd(&w1, &w0, &w2, x[14], y[ 9]);
+ word3_muladd(&w1, &w0, &w2, x[15], y[ 8]);
+ z[23] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[ 9], y[15]);
word3_muladd(&w2, &w1, &w0, x[10], y[14]);
@@ -878,37 +878,37 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16])
word3_muladd(&w2, &w1, &w0, x[13], y[11]);
word3_muladd(&w2, &w1, &w0, x[14], y[10]);
word3_muladd(&w2, &w1, &w0, x[15], y[ 9]);
- z[24] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[10], y[15]);
- word3_muladd(&w2, &w1, &w0, x[11], y[14]);
- word3_muladd(&w2, &w1, &w0, x[12], y[13]);
- word3_muladd(&w2, &w1, &w0, x[13], y[12]);
- word3_muladd(&w2, &w1, &w0, x[14], y[11]);
- word3_muladd(&w2, &w1, &w0, x[15], y[10]);
- z[25] = w0; w0 = w1; w1 = w2; w2 = 0;
-
- word3_muladd(&w2, &w1, &w0, x[11], y[15]);
- word3_muladd(&w2, &w1, &w0, x[12], y[14]);
- word3_muladd(&w2, &w1, &w0, x[13], y[13]);
- word3_muladd(&w2, &w1, &w0, x[14], y[12]);
- word3_muladd(&w2, &w1, &w0, x[15], y[11]);
- z[26] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[24] = w0; w0 = 0;
+
+ word3_muladd(&w0, &w2, &w1, x[10], y[15]);
+ word3_muladd(&w0, &w2, &w1, x[11], y[14]);
+ word3_muladd(&w0, &w2, &w1, x[12], y[13]);
+ word3_muladd(&w0, &w2, &w1, x[13], y[12]);
+ word3_muladd(&w0, &w2, &w1, x[14], y[11]);
+ word3_muladd(&w0, &w2, &w1, x[15], y[10]);
+ z[25] = w1; w1 = 0;
+
+ word3_muladd(&w1, &w0, &w2, x[11], y[15]);
+ word3_muladd(&w1, &w0, &w2, x[12], y[14]);
+ word3_muladd(&w1, &w0, &w2, x[13], y[13]);
+ word3_muladd(&w1, &w0, &w2, x[14], y[12]);
+ word3_muladd(&w1, &w0, &w2, x[15], y[11]);
+ z[26] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[12], y[15]);
word3_muladd(&w2, &w1, &w0, x[13], y[14]);
word3_muladd(&w2, &w1, &w0, x[14], y[13]);
word3_muladd(&w2, &w1, &w0, x[15], y[12]);
- z[27] = w0; w0 = w1; w1 = w2; w2 = 0;
+ z[27] = w0; w0 = 0;
- word3_muladd(&w2, &w1, &w0, x[13], y[15]);
- word3_muladd(&w2, &w1, &w0, x[14], y[14]);
- word3_muladd(&w2, &w1, &w0, x[15], y[13]);
- z[28] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w0, &w2, &w1, x[13], y[15]);
+ word3_muladd(&w0, &w2, &w1, x[14], y[14]);
+ word3_muladd(&w0, &w2, &w1, x[15], y[13]);
+ z[28] = w1; w1 = 0;
- word3_muladd(&w2, &w1, &w0, x[14], y[15]);
- word3_muladd(&w2, &w1, &w0, x[15], y[14]);
- z[29] = w0; w0 = w1; w1 = w2; w2 = 0;
+ word3_muladd(&w1, &w0, &w2, x[14], y[15]);
+ word3_muladd(&w1, &w0, &w2, x[15], y[14]);
+ z[29] = w2; w2 = 0;
word3_muladd(&w2, &w1, &w0, x[15], y[15]);
z[30] = w0;
diff --git a/src/math/mp/mp_core.h b/src/math/mp/mp_core.h
index 40327b02b..82bdbad53 100644
--- a/src/math/mp/mp_core.h
+++ b/src/math/mp/mp_core.h
@@ -140,8 +140,7 @@ void bigint_comba_mul16(word z[32], const word x[16], const word y[16]);
void bigint_comba_sqr4(word out[8], const word in[4]);
void bigint_comba_sqr6(word out[12], const word in[6]);
void bigint_comba_sqr8(word out[16], const word in[8]);
-void bigint_comba_sqr8(word out[32], const word in[16]);
-void bigint_comba_sqr16(word out[64], const word in[32]);
+void bigint_comba_sqr16(word out[32], const word in[16]);
}