diff --git a/src/lib/math/mp/mp_monty_n.cpp b/src/lib/math/mp/mp_monty_n.cpp index a83e4303096..82c9aad30c0 100644 --- a/src/lib/math/mp/mp_monty_n.cpp +++ b/src/lib/math/mp/mp_monty_n.cpp @@ -1,5 +1,5 @@ /* -* This file was automatically generated by ./src/scripts/dev_tools/gen_mp_monty.py on 2024-04-04 +* This file was automatically generated by ./src/scripts/dev_tools/gen_mp_monty.py on 2024-04-09 * All manual changes will be lost. Edit the script instead. * * Botan is released under the Simplified BSD License (see license.txt) @@ -12,2891 +12,2285 @@ namespace Botan { void bigint_monty_redc_4(word z[8], const word p[4], word p_dash, word ws[]) { - word w2 = 0, w1 = 0, w0 = 0; - w0 = z[0]; - ws[0] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[0], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[1]); - word3_add(&w2, &w1, &w0, z[1]); - ws[1] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[1], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[2]); - word3_muladd(&w2, &w1, &w0, ws[1], p[1]); - word3_add(&w2, &w1, &w0, z[2]); - ws[2] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[2], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[3]); - word3_muladd(&w2, &w1, &w0, ws[1], p[2]); - word3_muladd(&w2, &w1, &w0, ws[2], p[1]); - word3_add(&w2, &w1, &w0, z[3]); - ws[3] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[3], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[1], p[3]); - word3_muladd(&w2, &w1, &w0, ws[2], p[2]); - word3_muladd(&w2, &w1, &w0, ws[3], p[1]); - word3_add(&w2, &w1, &w0, z[4]); - ws[0] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[2], p[3]); - word3_muladd(&w2, &w1, &w0, ws[3], p[2]); - word3_add(&w2, &w1, &w0, z[5]); - ws[1] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[3], p[3]); - word3_add(&w2, &w1, &w0, z[6]); - ws[2] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_add(&w2, &w1, &w0, z[7]); - ws[3] = w0; + word3 accum; + accum.add(z[0]); + ws[0] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[1]); + accum.add(z[1]); + ws[1] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[2]); + accum.mul(ws[1], p[1]); + accum.add(z[2]); + ws[2] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[3]); + accum.mul(ws[1], p[2]); + accum.mul(ws[2], p[1]); + accum.add(z[3]); + ws[3] = accum.monty_step(p[0], p_dash); + accum.mul(ws[1], p[3]); + accum.mul(ws[2], p[2]); + accum.mul(ws[3], p[1]); + accum.add(z[4]); + ws[0] = accum.extract(); + accum.mul(ws[2], p[3]); + accum.mul(ws[3], p[2]); + accum.add(z[5]); + ws[1] = accum.extract(); + accum.mul(ws[3], p[3]); + accum.add(z[6]); + ws[2] = accum.extract(); + accum.add(z[7]); + ws[3] = accum.extract(); + word w1 = accum.extract(); bigint_monty_maybe_sub<4>(z, w1, ws, p); clear_mem(z + 4, 4); } void bigint_monty_redc_6(word z[12], const word p[6], word p_dash, word ws[]) { - word w2 = 0, w1 = 0, w0 = 0; - w0 = z[0]; - ws[0] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[0], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[1]); - word3_add(&w2, &w1, &w0, z[1]); - ws[1] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[1], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[2]); - word3_muladd(&w2, &w1, &w0, ws[1], p[1]); - word3_add(&w2, &w1, &w0, z[2]); - ws[2] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[2], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[3]); - word3_muladd(&w2, &w1, &w0, ws[1], p[2]); - word3_muladd(&w2, &w1, &w0, ws[2], p[1]); - word3_add(&w2, &w1, &w0, z[3]); - ws[3] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[3], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[4]); - word3_muladd(&w2, &w1, &w0, ws[1], p[3]); - word3_muladd(&w2, &w1, &w0, ws[2], p[2]); - word3_muladd(&w2, &w1, &w0, ws[3], p[1]); - word3_add(&w2, &w1, &w0, z[4]); - ws[4] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[4], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[5]); - word3_muladd(&w2, &w1, &w0, ws[1], p[4]); - word3_muladd(&w2, &w1, &w0, ws[2], p[3]); - word3_muladd(&w2, &w1, &w0, ws[3], p[2]); - word3_muladd(&w2, &w1, &w0, ws[4], p[1]); - word3_add(&w2, &w1, &w0, z[5]); - ws[5] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[5], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[1], p[5]); - word3_muladd(&w2, &w1, &w0, ws[2], p[4]); - word3_muladd(&w2, &w1, &w0, ws[3], p[3]); - word3_muladd(&w2, &w1, &w0, ws[4], p[2]); - word3_muladd(&w2, &w1, &w0, ws[5], p[1]); - word3_add(&w2, &w1, &w0, z[6]); - ws[0] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[2], p[5]); - word3_muladd(&w2, &w1, &w0, ws[3], p[4]); - word3_muladd(&w2, &w1, &w0, ws[4], p[3]); - word3_muladd(&w2, &w1, &w0, ws[5], p[2]); - word3_add(&w2, &w1, &w0, z[7]); - ws[1] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[3], p[5]); - word3_muladd(&w2, &w1, &w0, ws[4], p[4]); - word3_muladd(&w2, &w1, &w0, ws[5], p[3]); - word3_add(&w2, &w1, &w0, z[8]); - ws[2] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[4], p[5]); - word3_muladd(&w2, &w1, &w0, ws[5], p[4]); - word3_add(&w2, &w1, &w0, z[9]); - ws[3] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[5], p[5]); - word3_add(&w2, &w1, &w0, z[10]); - ws[4] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_add(&w2, &w1, &w0, z[11]); - ws[5] = w0; + word3 accum; + accum.add(z[0]); + ws[0] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[1]); + accum.add(z[1]); + ws[1] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[2]); + accum.mul(ws[1], p[1]); + accum.add(z[2]); + ws[2] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[3]); + accum.mul(ws[1], p[2]); + accum.mul(ws[2], p[1]); + accum.add(z[3]); + ws[3] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[4]); + accum.mul(ws[1], p[3]); + accum.mul(ws[2], p[2]); + accum.mul(ws[3], p[1]); + accum.add(z[4]); + ws[4] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[5]); + accum.mul(ws[1], p[4]); + accum.mul(ws[2], p[3]); + accum.mul(ws[3], p[2]); + accum.mul(ws[4], p[1]); + accum.add(z[5]); + ws[5] = accum.monty_step(p[0], p_dash); + accum.mul(ws[1], p[5]); + accum.mul(ws[2], p[4]); + accum.mul(ws[3], p[3]); + accum.mul(ws[4], p[2]); + accum.mul(ws[5], p[1]); + accum.add(z[6]); + ws[0] = accum.extract(); + accum.mul(ws[2], p[5]); + accum.mul(ws[3], p[4]); + accum.mul(ws[4], p[3]); + accum.mul(ws[5], p[2]); + accum.add(z[7]); + ws[1] = accum.extract(); + accum.mul(ws[3], p[5]); + accum.mul(ws[4], p[4]); + accum.mul(ws[5], p[3]); + accum.add(z[8]); + ws[2] = accum.extract(); + accum.mul(ws[4], p[5]); + accum.mul(ws[5], p[4]); + accum.add(z[9]); + ws[3] = accum.extract(); + accum.mul(ws[5], p[5]); + accum.add(z[10]); + ws[4] = accum.extract(); + accum.add(z[11]); + ws[5] = accum.extract(); + word w1 = accum.extract(); bigint_monty_maybe_sub<6>(z, w1, ws, p); clear_mem(z + 6, 6); } void bigint_monty_redc_8(word z[16], const word p[8], word p_dash, word ws[]) { - word w2 = 0, w1 = 0, w0 = 0; - w0 = z[0]; - ws[0] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[0], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[1]); - word3_add(&w2, &w1, &w0, z[1]); - ws[1] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[1], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[2]); - word3_muladd(&w2, &w1, &w0, ws[1], p[1]); - word3_add(&w2, &w1, &w0, z[2]); - ws[2] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[2], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[3]); - word3_muladd(&w2, &w1, &w0, ws[1], p[2]); - word3_muladd(&w2, &w1, &w0, ws[2], p[1]); - word3_add(&w2, &w1, &w0, z[3]); - ws[3] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[3], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[4]); - word3_muladd(&w2, &w1, &w0, ws[1], p[3]); - word3_muladd(&w2, &w1, &w0, ws[2], p[2]); - word3_muladd(&w2, &w1, &w0, ws[3], p[1]); - word3_add(&w2, &w1, &w0, z[4]); - ws[4] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[4], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[5]); - word3_muladd(&w2, &w1, &w0, ws[1], p[4]); - word3_muladd(&w2, &w1, &w0, ws[2], p[3]); - word3_muladd(&w2, &w1, &w0, ws[3], p[2]); - word3_muladd(&w2, &w1, &w0, ws[4], p[1]); - word3_add(&w2, &w1, &w0, z[5]); - ws[5] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[5], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[6]); - word3_muladd(&w2, &w1, &w0, ws[1], p[5]); - word3_muladd(&w2, &w1, &w0, ws[2], p[4]); - word3_muladd(&w2, &w1, &w0, ws[3], p[3]); - word3_muladd(&w2, &w1, &w0, ws[4], p[2]); - word3_muladd(&w2, &w1, &w0, ws[5], p[1]); - word3_add(&w2, &w1, &w0, z[6]); - ws[6] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[6], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[7]); - word3_muladd(&w2, &w1, &w0, ws[1], p[6]); - word3_muladd(&w2, &w1, &w0, ws[2], p[5]); - word3_muladd(&w2, &w1, &w0, ws[3], p[4]); - word3_muladd(&w2, &w1, &w0, ws[4], p[3]); - word3_muladd(&w2, &w1, &w0, ws[5], p[2]); - word3_muladd(&w2, &w1, &w0, ws[6], p[1]); - word3_add(&w2, &w1, &w0, z[7]); - ws[7] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[7], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[1], p[7]); - word3_muladd(&w2, &w1, &w0, ws[2], p[6]); - word3_muladd(&w2, &w1, &w0, ws[3], p[5]); - word3_muladd(&w2, &w1, &w0, ws[4], p[4]); - word3_muladd(&w2, &w1, &w0, ws[5], p[3]); - word3_muladd(&w2, &w1, &w0, ws[6], p[2]); - word3_muladd(&w2, &w1, &w0, ws[7], p[1]); - word3_add(&w2, &w1, &w0, z[8]); - ws[0] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[2], p[7]); - word3_muladd(&w2, &w1, &w0, ws[3], p[6]); - word3_muladd(&w2, &w1, &w0, ws[4], p[5]); - word3_muladd(&w2, &w1, &w0, ws[5], p[4]); - word3_muladd(&w2, &w1, &w0, ws[6], p[3]); - word3_muladd(&w2, &w1, &w0, ws[7], p[2]); - word3_add(&w2, &w1, &w0, z[9]); - ws[1] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[3], p[7]); - word3_muladd(&w2, &w1, &w0, ws[4], p[6]); - word3_muladd(&w2, &w1, &w0, ws[5], p[5]); - word3_muladd(&w2, &w1, &w0, ws[6], p[4]); - word3_muladd(&w2, &w1, &w0, ws[7], p[3]); - word3_add(&w2, &w1, &w0, z[10]); - ws[2] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[4], p[7]); - word3_muladd(&w2, &w1, &w0, ws[5], p[6]); - word3_muladd(&w2, &w1, &w0, ws[6], p[5]); - word3_muladd(&w2, &w1, &w0, ws[7], p[4]); - word3_add(&w2, &w1, &w0, z[11]); - ws[3] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[5], p[7]); - word3_muladd(&w2, &w1, &w0, ws[6], p[6]); - word3_muladd(&w2, &w1, &w0, ws[7], p[5]); - word3_add(&w2, &w1, &w0, z[12]); - ws[4] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[6], p[7]); - word3_muladd(&w2, &w1, &w0, ws[7], p[6]); - word3_add(&w2, &w1, &w0, z[13]); - ws[5] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[7], p[7]); - word3_add(&w2, &w1, &w0, z[14]); - ws[6] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_add(&w2, &w1, &w0, z[15]); - ws[7] = w0; + word3 accum; + accum.add(z[0]); + ws[0] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[1]); + accum.add(z[1]); + ws[1] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[2]); + accum.mul(ws[1], p[1]); + accum.add(z[2]); + ws[2] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[3]); + accum.mul(ws[1], p[2]); + accum.mul(ws[2], p[1]); + accum.add(z[3]); + ws[3] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[4]); + accum.mul(ws[1], p[3]); + accum.mul(ws[2], p[2]); + accum.mul(ws[3], p[1]); + accum.add(z[4]); + ws[4] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[5]); + accum.mul(ws[1], p[4]); + accum.mul(ws[2], p[3]); + accum.mul(ws[3], p[2]); + accum.mul(ws[4], p[1]); + accum.add(z[5]); + ws[5] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[6]); + accum.mul(ws[1], p[5]); + accum.mul(ws[2], p[4]); + accum.mul(ws[3], p[3]); + accum.mul(ws[4], p[2]); + accum.mul(ws[5], p[1]); + accum.add(z[6]); + ws[6] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[7]); + accum.mul(ws[1], p[6]); + accum.mul(ws[2], p[5]); + accum.mul(ws[3], p[4]); + accum.mul(ws[4], p[3]); + accum.mul(ws[5], p[2]); + accum.mul(ws[6], p[1]); + accum.add(z[7]); + ws[7] = accum.monty_step(p[0], p_dash); + accum.mul(ws[1], p[7]); + accum.mul(ws[2], p[6]); + accum.mul(ws[3], p[5]); + accum.mul(ws[4], p[4]); + accum.mul(ws[5], p[3]); + accum.mul(ws[6], p[2]); + accum.mul(ws[7], p[1]); + accum.add(z[8]); + ws[0] = accum.extract(); + accum.mul(ws[2], p[7]); + accum.mul(ws[3], p[6]); + accum.mul(ws[4], p[5]); + accum.mul(ws[5], p[4]); + accum.mul(ws[6], p[3]); + accum.mul(ws[7], p[2]); + accum.add(z[9]); + ws[1] = accum.extract(); + accum.mul(ws[3], p[7]); + accum.mul(ws[4], p[6]); + accum.mul(ws[5], p[5]); + accum.mul(ws[6], p[4]); + accum.mul(ws[7], p[3]); + accum.add(z[10]); + ws[2] = accum.extract(); + accum.mul(ws[4], p[7]); + accum.mul(ws[5], p[6]); + accum.mul(ws[6], p[5]); + accum.mul(ws[7], p[4]); + accum.add(z[11]); + ws[3] = accum.extract(); + accum.mul(ws[5], p[7]); + accum.mul(ws[6], p[6]); + accum.mul(ws[7], p[5]); + accum.add(z[12]); + ws[4] = accum.extract(); + accum.mul(ws[6], p[7]); + accum.mul(ws[7], p[6]); + accum.add(z[13]); + ws[5] = accum.extract(); + accum.mul(ws[7], p[7]); + accum.add(z[14]); + ws[6] = accum.extract(); + accum.add(z[15]); + ws[7] = accum.extract(); + word w1 = accum.extract(); bigint_monty_maybe_sub<8>(z, w1, ws, p); clear_mem(z + 8, 8); } void bigint_monty_redc_16(word z[32], const word p[16], word p_dash, word ws[]) { - word w2 = 0, w1 = 0, w0 = 0; - w0 = z[0]; - ws[0] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[0], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[1]); - word3_add(&w2, &w1, &w0, z[1]); - ws[1] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[1], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[2]); - word3_muladd(&w2, &w1, &w0, ws[1], p[1]); - word3_add(&w2, &w1, &w0, z[2]); - ws[2] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[2], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[3]); - word3_muladd(&w2, &w1, &w0, ws[1], p[2]); - word3_muladd(&w2, &w1, &w0, ws[2], p[1]); - word3_add(&w2, &w1, &w0, z[3]); - ws[3] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[3], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[4]); - word3_muladd(&w2, &w1, &w0, ws[1], p[3]); - word3_muladd(&w2, &w1, &w0, ws[2], p[2]); - word3_muladd(&w2, &w1, &w0, ws[3], p[1]); - word3_add(&w2, &w1, &w0, z[4]); - ws[4] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[4], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[5]); - word3_muladd(&w2, &w1, &w0, ws[1], p[4]); - word3_muladd(&w2, &w1, &w0, ws[2], p[3]); - word3_muladd(&w2, &w1, &w0, ws[3], p[2]); - word3_muladd(&w2, &w1, &w0, ws[4], p[1]); - word3_add(&w2, &w1, &w0, z[5]); - ws[5] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[5], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[6]); - word3_muladd(&w2, &w1, &w0, ws[1], p[5]); - word3_muladd(&w2, &w1, &w0, ws[2], p[4]); - word3_muladd(&w2, &w1, &w0, ws[3], p[3]); - word3_muladd(&w2, &w1, &w0, ws[4], p[2]); - word3_muladd(&w2, &w1, &w0, ws[5], p[1]); - word3_add(&w2, &w1, &w0, z[6]); - ws[6] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[6], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[7]); - word3_muladd(&w2, &w1, &w0, ws[1], p[6]); - word3_muladd(&w2, &w1, &w0, ws[2], p[5]); - word3_muladd(&w2, &w1, &w0, ws[3], p[4]); - word3_muladd(&w2, &w1, &w0, ws[4], p[3]); - word3_muladd(&w2, &w1, &w0, ws[5], p[2]); - word3_muladd(&w2, &w1, &w0, ws[6], p[1]); - word3_add(&w2, &w1, &w0, z[7]); - ws[7] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[7], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[8]); - word3_muladd(&w2, &w1, &w0, ws[1], p[7]); - word3_muladd(&w2, &w1, &w0, ws[2], p[6]); - word3_muladd(&w2, &w1, &w0, ws[3], p[5]); - word3_muladd(&w2, &w1, &w0, ws[4], p[4]); - word3_muladd(&w2, &w1, &w0, ws[5], p[3]); - word3_muladd(&w2, &w1, &w0, ws[6], p[2]); - word3_muladd(&w2, &w1, &w0, ws[7], p[1]); - word3_add(&w2, &w1, &w0, z[8]); - ws[8] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[8], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[9]); - word3_muladd(&w2, &w1, &w0, ws[1], p[8]); - word3_muladd(&w2, &w1, &w0, ws[2], p[7]); - word3_muladd(&w2, &w1, &w0, ws[3], p[6]); - word3_muladd(&w2, &w1, &w0, ws[4], p[5]); - word3_muladd(&w2, &w1, &w0, ws[5], p[4]); - word3_muladd(&w2, &w1, &w0, ws[6], p[3]); - word3_muladd(&w2, &w1, &w0, ws[7], p[2]); - word3_muladd(&w2, &w1, &w0, ws[8], p[1]); - word3_add(&w2, &w1, &w0, z[9]); - ws[9] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[9], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[10]); - word3_muladd(&w2, &w1, &w0, ws[1], p[9]); - word3_muladd(&w2, &w1, &w0, ws[2], p[8]); - word3_muladd(&w2, &w1, &w0, ws[3], p[7]); - word3_muladd(&w2, &w1, &w0, ws[4], p[6]); - word3_muladd(&w2, &w1, &w0, ws[5], p[5]); - word3_muladd(&w2, &w1, &w0, ws[6], p[4]); - word3_muladd(&w2, &w1, &w0, ws[7], p[3]); - word3_muladd(&w2, &w1, &w0, ws[8], p[2]); - word3_muladd(&w2, &w1, &w0, ws[9], p[1]); - word3_add(&w2, &w1, &w0, z[10]); - ws[10] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[10], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[11]); - word3_muladd(&w2, &w1, &w0, ws[1], p[10]); - word3_muladd(&w2, &w1, &w0, ws[2], p[9]); - word3_muladd(&w2, &w1, &w0, ws[3], p[8]); - word3_muladd(&w2, &w1, &w0, ws[4], p[7]); - word3_muladd(&w2, &w1, &w0, ws[5], p[6]); - word3_muladd(&w2, &w1, &w0, ws[6], p[5]); - word3_muladd(&w2, &w1, &w0, ws[7], p[4]); - word3_muladd(&w2, &w1, &w0, ws[8], p[3]); - word3_muladd(&w2, &w1, &w0, ws[9], p[2]); - word3_muladd(&w2, &w1, &w0, ws[10], p[1]); - word3_add(&w2, &w1, &w0, z[11]); - ws[11] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[11], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[12]); - word3_muladd(&w2, &w1, &w0, ws[1], p[11]); - word3_muladd(&w2, &w1, &w0, ws[2], p[10]); - word3_muladd(&w2, &w1, &w0, ws[3], p[9]); - word3_muladd(&w2, &w1, &w0, ws[4], p[8]); - word3_muladd(&w2, &w1, &w0, ws[5], p[7]); - word3_muladd(&w2, &w1, &w0, ws[6], p[6]); - word3_muladd(&w2, &w1, &w0, ws[7], p[5]); - word3_muladd(&w2, &w1, &w0, ws[8], p[4]); - word3_muladd(&w2, &w1, &w0, ws[9], p[3]); - word3_muladd(&w2, &w1, &w0, ws[10], p[2]); - word3_muladd(&w2, &w1, &w0, ws[11], p[1]); - word3_add(&w2, &w1, &w0, z[12]); - ws[12] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[12], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[13]); - word3_muladd(&w2, &w1, &w0, ws[1], p[12]); - word3_muladd(&w2, &w1, &w0, ws[2], p[11]); - word3_muladd(&w2, &w1, &w0, ws[3], p[10]); - word3_muladd(&w2, &w1, &w0, ws[4], p[9]); - word3_muladd(&w2, &w1, &w0, ws[5], p[8]); - word3_muladd(&w2, &w1, &w0, ws[6], p[7]); - word3_muladd(&w2, &w1, &w0, ws[7], p[6]); - word3_muladd(&w2, &w1, &w0, ws[8], p[5]); - word3_muladd(&w2, &w1, &w0, ws[9], p[4]); - word3_muladd(&w2, &w1, &w0, ws[10], p[3]); - word3_muladd(&w2, &w1, &w0, ws[11], p[2]); - word3_muladd(&w2, &w1, &w0, ws[12], p[1]); - word3_add(&w2, &w1, &w0, z[13]); - ws[13] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[13], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[14]); - word3_muladd(&w2, &w1, &w0, ws[1], p[13]); - word3_muladd(&w2, &w1, &w0, ws[2], p[12]); - word3_muladd(&w2, &w1, &w0, ws[3], p[11]); - word3_muladd(&w2, &w1, &w0, ws[4], p[10]); - word3_muladd(&w2, &w1, &w0, ws[5], p[9]); - word3_muladd(&w2, &w1, &w0, ws[6], p[8]); - word3_muladd(&w2, &w1, &w0, ws[7], p[7]); - word3_muladd(&w2, &w1, &w0, ws[8], p[6]); - word3_muladd(&w2, &w1, &w0, ws[9], p[5]); - word3_muladd(&w2, &w1, &w0, ws[10], p[4]); - word3_muladd(&w2, &w1, &w0, ws[11], p[3]); - word3_muladd(&w2, &w1, &w0, ws[12], p[2]); - word3_muladd(&w2, &w1, &w0, ws[13], p[1]); - word3_add(&w2, &w1, &w0, z[14]); - ws[14] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[14], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[15]); - word3_muladd(&w2, &w1, &w0, ws[1], p[14]); - word3_muladd(&w2, &w1, &w0, ws[2], p[13]); - word3_muladd(&w2, &w1, &w0, ws[3], p[12]); - word3_muladd(&w2, &w1, &w0, ws[4], p[11]); - word3_muladd(&w2, &w1, &w0, ws[5], p[10]); - word3_muladd(&w2, &w1, &w0, ws[6], p[9]); - word3_muladd(&w2, &w1, &w0, ws[7], p[8]); - word3_muladd(&w2, &w1, &w0, ws[8], p[7]); - word3_muladd(&w2, &w1, &w0, ws[9], p[6]); - word3_muladd(&w2, &w1, &w0, ws[10], p[5]); - word3_muladd(&w2, &w1, &w0, ws[11], p[4]); - word3_muladd(&w2, &w1, &w0, ws[12], p[3]); - word3_muladd(&w2, &w1, &w0, ws[13], p[2]); - word3_muladd(&w2, &w1, &w0, ws[14], p[1]); - word3_add(&w2, &w1, &w0, z[15]); - ws[15] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[15], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[1], p[15]); - word3_muladd(&w2, &w1, &w0, ws[2], p[14]); - word3_muladd(&w2, &w1, &w0, ws[3], p[13]); - word3_muladd(&w2, &w1, &w0, ws[4], p[12]); - word3_muladd(&w2, &w1, &w0, ws[5], p[11]); - word3_muladd(&w2, &w1, &w0, ws[6], p[10]); - word3_muladd(&w2, &w1, &w0, ws[7], p[9]); - word3_muladd(&w2, &w1, &w0, ws[8], p[8]); - word3_muladd(&w2, &w1, &w0, ws[9], p[7]); - word3_muladd(&w2, &w1, &w0, ws[10], p[6]); - word3_muladd(&w2, &w1, &w0, ws[11], p[5]); - word3_muladd(&w2, &w1, &w0, ws[12], p[4]); - word3_muladd(&w2, &w1, &w0, ws[13], p[3]); - word3_muladd(&w2, &w1, &w0, ws[14], p[2]); - word3_muladd(&w2, &w1, &w0, ws[15], p[1]); - word3_add(&w2, &w1, &w0, z[16]); - ws[0] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[2], p[15]); - word3_muladd(&w2, &w1, &w0, ws[3], p[14]); - word3_muladd(&w2, &w1, &w0, ws[4], p[13]); - word3_muladd(&w2, &w1, &w0, ws[5], p[12]); - word3_muladd(&w2, &w1, &w0, ws[6], p[11]); - word3_muladd(&w2, &w1, &w0, ws[7], p[10]); - word3_muladd(&w2, &w1, &w0, ws[8], p[9]); - word3_muladd(&w2, &w1, &w0, ws[9], p[8]); - word3_muladd(&w2, &w1, &w0, ws[10], p[7]); - word3_muladd(&w2, &w1, &w0, ws[11], p[6]); - word3_muladd(&w2, &w1, &w0, ws[12], p[5]); - word3_muladd(&w2, &w1, &w0, ws[13], p[4]); - word3_muladd(&w2, &w1, &w0, ws[14], p[3]); - word3_muladd(&w2, &w1, &w0, ws[15], p[2]); - word3_add(&w2, &w1, &w0, z[17]); - ws[1] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[3], p[15]); - word3_muladd(&w2, &w1, &w0, ws[4], p[14]); - word3_muladd(&w2, &w1, &w0, ws[5], p[13]); - word3_muladd(&w2, &w1, &w0, ws[6], p[12]); - word3_muladd(&w2, &w1, &w0, ws[7], p[11]); - word3_muladd(&w2, &w1, &w0, ws[8], p[10]); - word3_muladd(&w2, &w1, &w0, ws[9], p[9]); - word3_muladd(&w2, &w1, &w0, ws[10], p[8]); - word3_muladd(&w2, &w1, &w0, ws[11], p[7]); - word3_muladd(&w2, &w1, &w0, ws[12], p[6]); - word3_muladd(&w2, &w1, &w0, ws[13], p[5]); - word3_muladd(&w2, &w1, &w0, ws[14], p[4]); - word3_muladd(&w2, &w1, &w0, ws[15], p[3]); - word3_add(&w2, &w1, &w0, z[18]); - ws[2] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[4], p[15]); - word3_muladd(&w2, &w1, &w0, ws[5], p[14]); - word3_muladd(&w2, &w1, &w0, ws[6], p[13]); - word3_muladd(&w2, &w1, &w0, ws[7], p[12]); - word3_muladd(&w2, &w1, &w0, ws[8], p[11]); - word3_muladd(&w2, &w1, &w0, ws[9], p[10]); - word3_muladd(&w2, &w1, &w0, ws[10], p[9]); - word3_muladd(&w2, &w1, &w0, ws[11], p[8]); - word3_muladd(&w2, &w1, &w0, ws[12], p[7]); - word3_muladd(&w2, &w1, &w0, ws[13], p[6]); - word3_muladd(&w2, &w1, &w0, ws[14], p[5]); - word3_muladd(&w2, &w1, &w0, ws[15], p[4]); - word3_add(&w2, &w1, &w0, z[19]); - ws[3] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[5], p[15]); - word3_muladd(&w2, &w1, &w0, ws[6], p[14]); - word3_muladd(&w2, &w1, &w0, ws[7], p[13]); - word3_muladd(&w2, &w1, &w0, ws[8], p[12]); - word3_muladd(&w2, &w1, &w0, ws[9], p[11]); - word3_muladd(&w2, &w1, &w0, ws[10], p[10]); - word3_muladd(&w2, &w1, &w0, ws[11], p[9]); - word3_muladd(&w2, &w1, &w0, ws[12], p[8]); - word3_muladd(&w2, &w1, &w0, ws[13], p[7]); - word3_muladd(&w2, &w1, &w0, ws[14], p[6]); - word3_muladd(&w2, &w1, &w0, ws[15], p[5]); - word3_add(&w2, &w1, &w0, z[20]); - ws[4] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[6], p[15]); - word3_muladd(&w2, &w1, &w0, ws[7], p[14]); - word3_muladd(&w2, &w1, &w0, ws[8], p[13]); - word3_muladd(&w2, &w1, &w0, ws[9], p[12]); - word3_muladd(&w2, &w1, &w0, ws[10], p[11]); - word3_muladd(&w2, &w1, &w0, ws[11], p[10]); - word3_muladd(&w2, &w1, &w0, ws[12], p[9]); - word3_muladd(&w2, &w1, &w0, ws[13], p[8]); - word3_muladd(&w2, &w1, &w0, ws[14], p[7]); - word3_muladd(&w2, &w1, &w0, ws[15], p[6]); - word3_add(&w2, &w1, &w0, z[21]); - ws[5] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[7], p[15]); - word3_muladd(&w2, &w1, &w0, ws[8], p[14]); - word3_muladd(&w2, &w1, &w0, ws[9], p[13]); - word3_muladd(&w2, &w1, &w0, ws[10], p[12]); - word3_muladd(&w2, &w1, &w0, ws[11], p[11]); - word3_muladd(&w2, &w1, &w0, ws[12], p[10]); - word3_muladd(&w2, &w1, &w0, ws[13], p[9]); - word3_muladd(&w2, &w1, &w0, ws[14], p[8]); - word3_muladd(&w2, &w1, &w0, ws[15], p[7]); - word3_add(&w2, &w1, &w0, z[22]); - ws[6] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[8], p[15]); - word3_muladd(&w2, &w1, &w0, ws[9], p[14]); - word3_muladd(&w2, &w1, &w0, ws[10], p[13]); - word3_muladd(&w2, &w1, &w0, ws[11], p[12]); - word3_muladd(&w2, &w1, &w0, ws[12], p[11]); - word3_muladd(&w2, &w1, &w0, ws[13], p[10]); - word3_muladd(&w2, &w1, &w0, ws[14], p[9]); - word3_muladd(&w2, &w1, &w0, ws[15], p[8]); - word3_add(&w2, &w1, &w0, z[23]); - ws[7] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[9], p[15]); - word3_muladd(&w2, &w1, &w0, ws[10], p[14]); - word3_muladd(&w2, &w1, &w0, ws[11], p[13]); - word3_muladd(&w2, &w1, &w0, ws[12], p[12]); - word3_muladd(&w2, &w1, &w0, ws[13], p[11]); - word3_muladd(&w2, &w1, &w0, ws[14], p[10]); - word3_muladd(&w2, &w1, &w0, ws[15], p[9]); - word3_add(&w2, &w1, &w0, z[24]); - ws[8] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[10], p[15]); - word3_muladd(&w2, &w1, &w0, ws[11], p[14]); - word3_muladd(&w2, &w1, &w0, ws[12], p[13]); - word3_muladd(&w2, &w1, &w0, ws[13], p[12]); - word3_muladd(&w2, &w1, &w0, ws[14], p[11]); - word3_muladd(&w2, &w1, &w0, ws[15], p[10]); - word3_add(&w2, &w1, &w0, z[25]); - ws[9] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[11], p[15]); - word3_muladd(&w2, &w1, &w0, ws[12], p[14]); - word3_muladd(&w2, &w1, &w0, ws[13], p[13]); - word3_muladd(&w2, &w1, &w0, ws[14], p[12]); - word3_muladd(&w2, &w1, &w0, ws[15], p[11]); - word3_add(&w2, &w1, &w0, z[26]); - ws[10] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[12], p[15]); - word3_muladd(&w2, &w1, &w0, ws[13], p[14]); - word3_muladd(&w2, &w1, &w0, ws[14], p[13]); - word3_muladd(&w2, &w1, &w0, ws[15], p[12]); - word3_add(&w2, &w1, &w0, z[27]); - ws[11] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[13], p[15]); - word3_muladd(&w2, &w1, &w0, ws[14], p[14]); - word3_muladd(&w2, &w1, &w0, ws[15], p[13]); - word3_add(&w2, &w1, &w0, z[28]); - ws[12] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[14], p[15]); - word3_muladd(&w2, &w1, &w0, ws[15], p[14]); - word3_add(&w2, &w1, &w0, z[29]); - ws[13] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[15], p[15]); - word3_add(&w2, &w1, &w0, z[30]); - ws[14] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_add(&w2, &w1, &w0, z[31]); - ws[15] = w0; + word3 accum; + accum.add(z[0]); + ws[0] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[1]); + accum.add(z[1]); + ws[1] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[2]); + accum.mul(ws[1], p[1]); + accum.add(z[2]); + ws[2] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[3]); + accum.mul(ws[1], p[2]); + accum.mul(ws[2], p[1]); + accum.add(z[3]); + ws[3] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[4]); + accum.mul(ws[1], p[3]); + accum.mul(ws[2], p[2]); + accum.mul(ws[3], p[1]); + accum.add(z[4]); + ws[4] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[5]); + accum.mul(ws[1], p[4]); + accum.mul(ws[2], p[3]); + accum.mul(ws[3], p[2]); + accum.mul(ws[4], p[1]); + accum.add(z[5]); + ws[5] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[6]); + accum.mul(ws[1], p[5]); + accum.mul(ws[2], p[4]); + accum.mul(ws[3], p[3]); + accum.mul(ws[4], p[2]); + accum.mul(ws[5], p[1]); + accum.add(z[6]); + ws[6] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[7]); + accum.mul(ws[1], p[6]); + accum.mul(ws[2], p[5]); + accum.mul(ws[3], p[4]); + accum.mul(ws[4], p[3]); + accum.mul(ws[5], p[2]); + accum.mul(ws[6], p[1]); + accum.add(z[7]); + ws[7] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[8]); + accum.mul(ws[1], p[7]); + accum.mul(ws[2], p[6]); + accum.mul(ws[3], p[5]); + accum.mul(ws[4], p[4]); + accum.mul(ws[5], p[3]); + accum.mul(ws[6], p[2]); + accum.mul(ws[7], p[1]); + accum.add(z[8]); + ws[8] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[9]); + accum.mul(ws[1], p[8]); + accum.mul(ws[2], p[7]); + accum.mul(ws[3], p[6]); + accum.mul(ws[4], p[5]); + accum.mul(ws[5], p[4]); + accum.mul(ws[6], p[3]); + accum.mul(ws[7], p[2]); + accum.mul(ws[8], p[1]); + accum.add(z[9]); + ws[9] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[10]); + accum.mul(ws[1], p[9]); + accum.mul(ws[2], p[8]); + accum.mul(ws[3], p[7]); + accum.mul(ws[4], p[6]); + accum.mul(ws[5], p[5]); + accum.mul(ws[6], p[4]); + accum.mul(ws[7], p[3]); + accum.mul(ws[8], p[2]); + accum.mul(ws[9], p[1]); + accum.add(z[10]); + ws[10] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[11]); + accum.mul(ws[1], p[10]); + accum.mul(ws[2], p[9]); + accum.mul(ws[3], p[8]); + accum.mul(ws[4], p[7]); + accum.mul(ws[5], p[6]); + accum.mul(ws[6], p[5]); + accum.mul(ws[7], p[4]); + accum.mul(ws[8], p[3]); + accum.mul(ws[9], p[2]); + accum.mul(ws[10], p[1]); + accum.add(z[11]); + ws[11] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[12]); + accum.mul(ws[1], p[11]); + accum.mul(ws[2], p[10]); + accum.mul(ws[3], p[9]); + accum.mul(ws[4], p[8]); + accum.mul(ws[5], p[7]); + accum.mul(ws[6], p[6]); + accum.mul(ws[7], p[5]); + accum.mul(ws[8], p[4]); + accum.mul(ws[9], p[3]); + accum.mul(ws[10], p[2]); + accum.mul(ws[11], p[1]); + accum.add(z[12]); + ws[12] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[13]); + accum.mul(ws[1], p[12]); + accum.mul(ws[2], p[11]); + accum.mul(ws[3], p[10]); + accum.mul(ws[4], p[9]); + accum.mul(ws[5], p[8]); + accum.mul(ws[6], p[7]); + accum.mul(ws[7], p[6]); + accum.mul(ws[8], p[5]); + accum.mul(ws[9], p[4]); + accum.mul(ws[10], p[3]); + accum.mul(ws[11], p[2]); + accum.mul(ws[12], p[1]); + accum.add(z[13]); + ws[13] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[14]); + accum.mul(ws[1], p[13]); + accum.mul(ws[2], p[12]); + accum.mul(ws[3], p[11]); + accum.mul(ws[4], p[10]); + accum.mul(ws[5], p[9]); + accum.mul(ws[6], p[8]); + accum.mul(ws[7], p[7]); + accum.mul(ws[8], p[6]); + accum.mul(ws[9], p[5]); + accum.mul(ws[10], p[4]); + accum.mul(ws[11], p[3]); + accum.mul(ws[12], p[2]); + accum.mul(ws[13], p[1]); + accum.add(z[14]); + ws[14] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[15]); + accum.mul(ws[1], p[14]); + accum.mul(ws[2], p[13]); + accum.mul(ws[3], p[12]); + accum.mul(ws[4], p[11]); + accum.mul(ws[5], p[10]); + accum.mul(ws[6], p[9]); + accum.mul(ws[7], p[8]); + accum.mul(ws[8], p[7]); + accum.mul(ws[9], p[6]); + accum.mul(ws[10], p[5]); + accum.mul(ws[11], p[4]); + accum.mul(ws[12], p[3]); + accum.mul(ws[13], p[2]); + accum.mul(ws[14], p[1]); + accum.add(z[15]); + ws[15] = accum.monty_step(p[0], p_dash); + accum.mul(ws[1], p[15]); + accum.mul(ws[2], p[14]); + accum.mul(ws[3], p[13]); + accum.mul(ws[4], p[12]); + accum.mul(ws[5], p[11]); + accum.mul(ws[6], p[10]); + accum.mul(ws[7], p[9]); + accum.mul(ws[8], p[8]); + accum.mul(ws[9], p[7]); + accum.mul(ws[10], p[6]); + accum.mul(ws[11], p[5]); + accum.mul(ws[12], p[4]); + accum.mul(ws[13], p[3]); + accum.mul(ws[14], p[2]); + accum.mul(ws[15], p[1]); + accum.add(z[16]); + ws[0] = accum.extract(); + accum.mul(ws[2], p[15]); + accum.mul(ws[3], p[14]); + accum.mul(ws[4], p[13]); + accum.mul(ws[5], p[12]); + accum.mul(ws[6], p[11]); + accum.mul(ws[7], p[10]); + accum.mul(ws[8], p[9]); + accum.mul(ws[9], p[8]); + accum.mul(ws[10], p[7]); + accum.mul(ws[11], p[6]); + accum.mul(ws[12], p[5]); + accum.mul(ws[13], p[4]); + accum.mul(ws[14], p[3]); + accum.mul(ws[15], p[2]); + accum.add(z[17]); + ws[1] = accum.extract(); + accum.mul(ws[3], p[15]); + accum.mul(ws[4], p[14]); + accum.mul(ws[5], p[13]); + accum.mul(ws[6], p[12]); + accum.mul(ws[7], p[11]); + accum.mul(ws[8], p[10]); + accum.mul(ws[9], p[9]); + accum.mul(ws[10], p[8]); + accum.mul(ws[11], p[7]); + accum.mul(ws[12], p[6]); + accum.mul(ws[13], p[5]); + accum.mul(ws[14], p[4]); + accum.mul(ws[15], p[3]); + accum.add(z[18]); + ws[2] = accum.extract(); + accum.mul(ws[4], p[15]); + accum.mul(ws[5], p[14]); + accum.mul(ws[6], p[13]); + accum.mul(ws[7], p[12]); + accum.mul(ws[8], p[11]); + accum.mul(ws[9], p[10]); + accum.mul(ws[10], p[9]); + accum.mul(ws[11], p[8]); + accum.mul(ws[12], p[7]); + accum.mul(ws[13], p[6]); + accum.mul(ws[14], p[5]); + accum.mul(ws[15], p[4]); + accum.add(z[19]); + ws[3] = accum.extract(); + accum.mul(ws[5], p[15]); + accum.mul(ws[6], p[14]); + accum.mul(ws[7], p[13]); + accum.mul(ws[8], p[12]); + accum.mul(ws[9], p[11]); + accum.mul(ws[10], p[10]); + accum.mul(ws[11], p[9]); + accum.mul(ws[12], p[8]); + accum.mul(ws[13], p[7]); + accum.mul(ws[14], p[6]); + accum.mul(ws[15], p[5]); + accum.add(z[20]); + ws[4] = accum.extract(); + accum.mul(ws[6], p[15]); + accum.mul(ws[7], p[14]); + accum.mul(ws[8], p[13]); + accum.mul(ws[9], p[12]); + accum.mul(ws[10], p[11]); + accum.mul(ws[11], p[10]); + accum.mul(ws[12], p[9]); + accum.mul(ws[13], p[8]); + accum.mul(ws[14], p[7]); + accum.mul(ws[15], p[6]); + accum.add(z[21]); + ws[5] = accum.extract(); + accum.mul(ws[7], p[15]); + accum.mul(ws[8], p[14]); + accum.mul(ws[9], p[13]); + accum.mul(ws[10], p[12]); + accum.mul(ws[11], p[11]); + accum.mul(ws[12], p[10]); + accum.mul(ws[13], p[9]); + accum.mul(ws[14], p[8]); + accum.mul(ws[15], p[7]); + accum.add(z[22]); + ws[6] = accum.extract(); + accum.mul(ws[8], p[15]); + accum.mul(ws[9], p[14]); + accum.mul(ws[10], p[13]); + accum.mul(ws[11], p[12]); + accum.mul(ws[12], p[11]); + accum.mul(ws[13], p[10]); + accum.mul(ws[14], p[9]); + accum.mul(ws[15], p[8]); + accum.add(z[23]); + ws[7] = accum.extract(); + accum.mul(ws[9], p[15]); + accum.mul(ws[10], p[14]); + accum.mul(ws[11], p[13]); + accum.mul(ws[12], p[12]); + accum.mul(ws[13], p[11]); + accum.mul(ws[14], p[10]); + accum.mul(ws[15], p[9]); + accum.add(z[24]); + ws[8] = accum.extract(); + accum.mul(ws[10], p[15]); + accum.mul(ws[11], p[14]); + accum.mul(ws[12], p[13]); + accum.mul(ws[13], p[12]); + accum.mul(ws[14], p[11]); + accum.mul(ws[15], p[10]); + accum.add(z[25]); + ws[9] = accum.extract(); + accum.mul(ws[11], p[15]); + accum.mul(ws[12], p[14]); + accum.mul(ws[13], p[13]); + accum.mul(ws[14], p[12]); + accum.mul(ws[15], p[11]); + accum.add(z[26]); + ws[10] = accum.extract(); + accum.mul(ws[12], p[15]); + accum.mul(ws[13], p[14]); + accum.mul(ws[14], p[13]); + accum.mul(ws[15], p[12]); + accum.add(z[27]); + ws[11] = accum.extract(); + accum.mul(ws[13], p[15]); + accum.mul(ws[14], p[14]); + accum.mul(ws[15], p[13]); + accum.add(z[28]); + ws[12] = accum.extract(); + accum.mul(ws[14], p[15]); + accum.mul(ws[15], p[14]); + accum.add(z[29]); + ws[13] = accum.extract(); + accum.mul(ws[15], p[15]); + accum.add(z[30]); + ws[14] = accum.extract(); + accum.add(z[31]); + ws[15] = accum.extract(); + word w1 = accum.extract(); bigint_monty_maybe_sub<16>(z, w1, ws, p); clear_mem(z + 16, 16); } void bigint_monty_redc_24(word z[48], const word p[24], word p_dash, word ws[]) { - word w2 = 0, w1 = 0, w0 = 0; - w0 = z[0]; - ws[0] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[0], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[1]); - word3_add(&w2, &w1, &w0, z[1]); - ws[1] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[1], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[2]); - word3_muladd(&w2, &w1, &w0, ws[1], p[1]); - word3_add(&w2, &w1, &w0, z[2]); - ws[2] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[2], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[3]); - word3_muladd(&w2, &w1, &w0, ws[1], p[2]); - word3_muladd(&w2, &w1, &w0, ws[2], p[1]); - word3_add(&w2, &w1, &w0, z[3]); - ws[3] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[3], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[4]); - word3_muladd(&w2, &w1, &w0, ws[1], p[3]); - word3_muladd(&w2, &w1, &w0, ws[2], p[2]); - word3_muladd(&w2, &w1, &w0, ws[3], p[1]); - word3_add(&w2, &w1, &w0, z[4]); - ws[4] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[4], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[5]); - word3_muladd(&w2, &w1, &w0, ws[1], p[4]); - word3_muladd(&w2, &w1, &w0, ws[2], p[3]); - word3_muladd(&w2, &w1, &w0, ws[3], p[2]); - word3_muladd(&w2, &w1, &w0, ws[4], p[1]); - word3_add(&w2, &w1, &w0, z[5]); - ws[5] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[5], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[6]); - word3_muladd(&w2, &w1, &w0, ws[1], p[5]); - word3_muladd(&w2, &w1, &w0, ws[2], p[4]); - word3_muladd(&w2, &w1, &w0, ws[3], p[3]); - word3_muladd(&w2, &w1, &w0, ws[4], p[2]); - word3_muladd(&w2, &w1, &w0, ws[5], p[1]); - word3_add(&w2, &w1, &w0, z[6]); - ws[6] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[6], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[7]); - word3_muladd(&w2, &w1, &w0, ws[1], p[6]); - word3_muladd(&w2, &w1, &w0, ws[2], p[5]); - word3_muladd(&w2, &w1, &w0, ws[3], p[4]); - word3_muladd(&w2, &w1, &w0, ws[4], p[3]); - word3_muladd(&w2, &w1, &w0, ws[5], p[2]); - word3_muladd(&w2, &w1, &w0, ws[6], p[1]); - word3_add(&w2, &w1, &w0, z[7]); - ws[7] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[7], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[8]); - word3_muladd(&w2, &w1, &w0, ws[1], p[7]); - word3_muladd(&w2, &w1, &w0, ws[2], p[6]); - word3_muladd(&w2, &w1, &w0, ws[3], p[5]); - word3_muladd(&w2, &w1, &w0, ws[4], p[4]); - word3_muladd(&w2, &w1, &w0, ws[5], p[3]); - word3_muladd(&w2, &w1, &w0, ws[6], p[2]); - word3_muladd(&w2, &w1, &w0, ws[7], p[1]); - word3_add(&w2, &w1, &w0, z[8]); - ws[8] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[8], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[9]); - word3_muladd(&w2, &w1, &w0, ws[1], p[8]); - word3_muladd(&w2, &w1, &w0, ws[2], p[7]); - word3_muladd(&w2, &w1, &w0, ws[3], p[6]); - word3_muladd(&w2, &w1, &w0, ws[4], p[5]); - word3_muladd(&w2, &w1, &w0, ws[5], p[4]); - word3_muladd(&w2, &w1, &w0, ws[6], p[3]); - word3_muladd(&w2, &w1, &w0, ws[7], p[2]); - word3_muladd(&w2, &w1, &w0, ws[8], p[1]); - word3_add(&w2, &w1, &w0, z[9]); - ws[9] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[9], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[10]); - word3_muladd(&w2, &w1, &w0, ws[1], p[9]); - word3_muladd(&w2, &w1, &w0, ws[2], p[8]); - word3_muladd(&w2, &w1, &w0, ws[3], p[7]); - word3_muladd(&w2, &w1, &w0, ws[4], p[6]); - word3_muladd(&w2, &w1, &w0, ws[5], p[5]); - word3_muladd(&w2, &w1, &w0, ws[6], p[4]); - word3_muladd(&w2, &w1, &w0, ws[7], p[3]); - word3_muladd(&w2, &w1, &w0, ws[8], p[2]); - word3_muladd(&w2, &w1, &w0, ws[9], p[1]); - word3_add(&w2, &w1, &w0, z[10]); - ws[10] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[10], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[11]); - word3_muladd(&w2, &w1, &w0, ws[1], p[10]); - word3_muladd(&w2, &w1, &w0, ws[2], p[9]); - word3_muladd(&w2, &w1, &w0, ws[3], p[8]); - word3_muladd(&w2, &w1, &w0, ws[4], p[7]); - word3_muladd(&w2, &w1, &w0, ws[5], p[6]); - word3_muladd(&w2, &w1, &w0, ws[6], p[5]); - word3_muladd(&w2, &w1, &w0, ws[7], p[4]); - word3_muladd(&w2, &w1, &w0, ws[8], p[3]); - word3_muladd(&w2, &w1, &w0, ws[9], p[2]); - word3_muladd(&w2, &w1, &w0, ws[10], p[1]); - word3_add(&w2, &w1, &w0, z[11]); - ws[11] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[11], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[12]); - word3_muladd(&w2, &w1, &w0, ws[1], p[11]); - word3_muladd(&w2, &w1, &w0, ws[2], p[10]); - word3_muladd(&w2, &w1, &w0, ws[3], p[9]); - word3_muladd(&w2, &w1, &w0, ws[4], p[8]); - word3_muladd(&w2, &w1, &w0, ws[5], p[7]); - word3_muladd(&w2, &w1, &w0, ws[6], p[6]); - word3_muladd(&w2, &w1, &w0, ws[7], p[5]); - word3_muladd(&w2, &w1, &w0, ws[8], p[4]); - word3_muladd(&w2, &w1, &w0, ws[9], p[3]); - word3_muladd(&w2, &w1, &w0, ws[10], p[2]); - word3_muladd(&w2, &w1, &w0, ws[11], p[1]); - word3_add(&w2, &w1, &w0, z[12]); - ws[12] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[12], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[13]); - word3_muladd(&w2, &w1, &w0, ws[1], p[12]); - word3_muladd(&w2, &w1, &w0, ws[2], p[11]); - word3_muladd(&w2, &w1, &w0, ws[3], p[10]); - word3_muladd(&w2, &w1, &w0, ws[4], p[9]); - word3_muladd(&w2, &w1, &w0, ws[5], p[8]); - word3_muladd(&w2, &w1, &w0, ws[6], p[7]); - word3_muladd(&w2, &w1, &w0, ws[7], p[6]); - word3_muladd(&w2, &w1, &w0, ws[8], p[5]); - word3_muladd(&w2, &w1, &w0, ws[9], p[4]); - word3_muladd(&w2, &w1, &w0, ws[10], p[3]); - word3_muladd(&w2, &w1, &w0, ws[11], p[2]); - word3_muladd(&w2, &w1, &w0, ws[12], p[1]); - word3_add(&w2, &w1, &w0, z[13]); - ws[13] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[13], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[14]); - word3_muladd(&w2, &w1, &w0, ws[1], p[13]); - word3_muladd(&w2, &w1, &w0, ws[2], p[12]); - word3_muladd(&w2, &w1, &w0, ws[3], p[11]); - word3_muladd(&w2, &w1, &w0, ws[4], p[10]); - word3_muladd(&w2, &w1, &w0, ws[5], p[9]); - word3_muladd(&w2, &w1, &w0, ws[6], p[8]); - word3_muladd(&w2, &w1, &w0, ws[7], p[7]); - word3_muladd(&w2, &w1, &w0, ws[8], p[6]); - word3_muladd(&w2, &w1, &w0, ws[9], p[5]); - word3_muladd(&w2, &w1, &w0, ws[10], p[4]); - word3_muladd(&w2, &w1, &w0, ws[11], p[3]); - word3_muladd(&w2, &w1, &w0, ws[12], p[2]); - word3_muladd(&w2, &w1, &w0, ws[13], p[1]); - word3_add(&w2, &w1, &w0, z[14]); - ws[14] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[14], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[15]); - word3_muladd(&w2, &w1, &w0, ws[1], p[14]); - word3_muladd(&w2, &w1, &w0, ws[2], p[13]); - word3_muladd(&w2, &w1, &w0, ws[3], p[12]); - word3_muladd(&w2, &w1, &w0, ws[4], p[11]); - word3_muladd(&w2, &w1, &w0, ws[5], p[10]); - word3_muladd(&w2, &w1, &w0, ws[6], p[9]); - word3_muladd(&w2, &w1, &w0, ws[7], p[8]); - word3_muladd(&w2, &w1, &w0, ws[8], p[7]); - word3_muladd(&w2, &w1, &w0, ws[9], p[6]); - word3_muladd(&w2, &w1, &w0, ws[10], p[5]); - word3_muladd(&w2, &w1, &w0, ws[11], p[4]); - word3_muladd(&w2, &w1, &w0, ws[12], p[3]); - word3_muladd(&w2, &w1, &w0, ws[13], p[2]); - word3_muladd(&w2, &w1, &w0, ws[14], p[1]); - word3_add(&w2, &w1, &w0, z[15]); - ws[15] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[15], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[16]); - word3_muladd(&w2, &w1, &w0, ws[1], p[15]); - word3_muladd(&w2, &w1, &w0, ws[2], p[14]); - word3_muladd(&w2, &w1, &w0, ws[3], p[13]); - word3_muladd(&w2, &w1, &w0, ws[4], p[12]); - word3_muladd(&w2, &w1, &w0, ws[5], p[11]); - word3_muladd(&w2, &w1, &w0, ws[6], p[10]); - word3_muladd(&w2, &w1, &w0, ws[7], p[9]); - word3_muladd(&w2, &w1, &w0, ws[8], p[8]); - word3_muladd(&w2, &w1, &w0, ws[9], p[7]); - word3_muladd(&w2, &w1, &w0, ws[10], p[6]); - word3_muladd(&w2, &w1, &w0, ws[11], p[5]); - word3_muladd(&w2, &w1, &w0, ws[12], p[4]); - word3_muladd(&w2, &w1, &w0, ws[13], p[3]); - word3_muladd(&w2, &w1, &w0, ws[14], p[2]); - word3_muladd(&w2, &w1, &w0, ws[15], p[1]); - word3_add(&w2, &w1, &w0, z[16]); - ws[16] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[16], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[17]); - word3_muladd(&w2, &w1, &w0, ws[1], p[16]); - word3_muladd(&w2, &w1, &w0, ws[2], p[15]); - word3_muladd(&w2, &w1, &w0, ws[3], p[14]); - word3_muladd(&w2, &w1, &w0, ws[4], p[13]); - word3_muladd(&w2, &w1, &w0, ws[5], p[12]); - word3_muladd(&w2, &w1, &w0, ws[6], p[11]); - word3_muladd(&w2, &w1, &w0, ws[7], p[10]); - word3_muladd(&w2, &w1, &w0, ws[8], p[9]); - word3_muladd(&w2, &w1, &w0, ws[9], p[8]); - word3_muladd(&w2, &w1, &w0, ws[10], p[7]); - word3_muladd(&w2, &w1, &w0, ws[11], p[6]); - word3_muladd(&w2, &w1, &w0, ws[12], p[5]); - word3_muladd(&w2, &w1, &w0, ws[13], p[4]); - word3_muladd(&w2, &w1, &w0, ws[14], p[3]); - word3_muladd(&w2, &w1, &w0, ws[15], p[2]); - word3_muladd(&w2, &w1, &w0, ws[16], p[1]); - word3_add(&w2, &w1, &w0, z[17]); - ws[17] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[17], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[18]); - word3_muladd(&w2, &w1, &w0, ws[1], p[17]); - word3_muladd(&w2, &w1, &w0, ws[2], p[16]); - word3_muladd(&w2, &w1, &w0, ws[3], p[15]); - word3_muladd(&w2, &w1, &w0, ws[4], p[14]); - word3_muladd(&w2, &w1, &w0, ws[5], p[13]); - word3_muladd(&w2, &w1, &w0, ws[6], p[12]); - word3_muladd(&w2, &w1, &w0, ws[7], p[11]); - word3_muladd(&w2, &w1, &w0, ws[8], p[10]); - word3_muladd(&w2, &w1, &w0, ws[9], p[9]); - word3_muladd(&w2, &w1, &w0, ws[10], p[8]); - word3_muladd(&w2, &w1, &w0, ws[11], p[7]); - word3_muladd(&w2, &w1, &w0, ws[12], p[6]); - word3_muladd(&w2, &w1, &w0, ws[13], p[5]); - word3_muladd(&w2, &w1, &w0, ws[14], p[4]); - word3_muladd(&w2, &w1, &w0, ws[15], p[3]); - word3_muladd(&w2, &w1, &w0, ws[16], p[2]); - word3_muladd(&w2, &w1, &w0, ws[17], p[1]); - word3_add(&w2, &w1, &w0, z[18]); - ws[18] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[18], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[19]); - word3_muladd(&w2, &w1, &w0, ws[1], p[18]); - word3_muladd(&w2, &w1, &w0, ws[2], p[17]); - word3_muladd(&w2, &w1, &w0, ws[3], p[16]); - word3_muladd(&w2, &w1, &w0, ws[4], p[15]); - word3_muladd(&w2, &w1, &w0, ws[5], p[14]); - word3_muladd(&w2, &w1, &w0, ws[6], p[13]); - word3_muladd(&w2, &w1, &w0, ws[7], p[12]); - word3_muladd(&w2, &w1, &w0, ws[8], p[11]); - word3_muladd(&w2, &w1, &w0, ws[9], p[10]); - word3_muladd(&w2, &w1, &w0, ws[10], p[9]); - word3_muladd(&w2, &w1, &w0, ws[11], p[8]); - word3_muladd(&w2, &w1, &w0, ws[12], p[7]); - word3_muladd(&w2, &w1, &w0, ws[13], p[6]); - word3_muladd(&w2, &w1, &w0, ws[14], p[5]); - word3_muladd(&w2, &w1, &w0, ws[15], p[4]); - word3_muladd(&w2, &w1, &w0, ws[16], p[3]); - word3_muladd(&w2, &w1, &w0, ws[17], p[2]); - word3_muladd(&w2, &w1, &w0, ws[18], p[1]); - word3_add(&w2, &w1, &w0, z[19]); - ws[19] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[19], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[20]); - word3_muladd(&w2, &w1, &w0, ws[1], p[19]); - word3_muladd(&w2, &w1, &w0, ws[2], p[18]); - word3_muladd(&w2, &w1, &w0, ws[3], p[17]); - word3_muladd(&w2, &w1, &w0, ws[4], p[16]); - word3_muladd(&w2, &w1, &w0, ws[5], p[15]); - word3_muladd(&w2, &w1, &w0, ws[6], p[14]); - word3_muladd(&w2, &w1, &w0, ws[7], p[13]); - word3_muladd(&w2, &w1, &w0, ws[8], p[12]); - word3_muladd(&w2, &w1, &w0, ws[9], p[11]); - word3_muladd(&w2, &w1, &w0, ws[10], p[10]); - word3_muladd(&w2, &w1, &w0, ws[11], p[9]); - word3_muladd(&w2, &w1, &w0, ws[12], p[8]); - word3_muladd(&w2, &w1, &w0, ws[13], p[7]); - word3_muladd(&w2, &w1, &w0, ws[14], p[6]); - word3_muladd(&w2, &w1, &w0, ws[15], p[5]); - word3_muladd(&w2, &w1, &w0, ws[16], p[4]); - word3_muladd(&w2, &w1, &w0, ws[17], p[3]); - word3_muladd(&w2, &w1, &w0, ws[18], p[2]); - word3_muladd(&w2, &w1, &w0, ws[19], p[1]); - word3_add(&w2, &w1, &w0, z[20]); - ws[20] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[20], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[21]); - word3_muladd(&w2, &w1, &w0, ws[1], p[20]); - word3_muladd(&w2, &w1, &w0, ws[2], p[19]); - word3_muladd(&w2, &w1, &w0, ws[3], p[18]); - word3_muladd(&w2, &w1, &w0, ws[4], p[17]); - word3_muladd(&w2, &w1, &w0, ws[5], p[16]); - word3_muladd(&w2, &w1, &w0, ws[6], p[15]); - word3_muladd(&w2, &w1, &w0, ws[7], p[14]); - word3_muladd(&w2, &w1, &w0, ws[8], p[13]); - word3_muladd(&w2, &w1, &w0, ws[9], p[12]); - word3_muladd(&w2, &w1, &w0, ws[10], p[11]); - word3_muladd(&w2, &w1, &w0, ws[11], p[10]); - word3_muladd(&w2, &w1, &w0, ws[12], p[9]); - word3_muladd(&w2, &w1, &w0, ws[13], p[8]); - word3_muladd(&w2, &w1, &w0, ws[14], p[7]); - word3_muladd(&w2, &w1, &w0, ws[15], p[6]); - word3_muladd(&w2, &w1, &w0, ws[16], p[5]); - word3_muladd(&w2, &w1, &w0, ws[17], p[4]); - word3_muladd(&w2, &w1, &w0, ws[18], p[3]); - word3_muladd(&w2, &w1, &w0, ws[19], p[2]); - word3_muladd(&w2, &w1, &w0, ws[20], p[1]); - word3_add(&w2, &w1, &w0, z[21]); - ws[21] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[21], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[22]); - word3_muladd(&w2, &w1, &w0, ws[1], p[21]); - word3_muladd(&w2, &w1, &w0, ws[2], p[20]); - word3_muladd(&w2, &w1, &w0, ws[3], p[19]); - word3_muladd(&w2, &w1, &w0, ws[4], p[18]); - word3_muladd(&w2, &w1, &w0, ws[5], p[17]); - word3_muladd(&w2, &w1, &w0, ws[6], p[16]); - word3_muladd(&w2, &w1, &w0, ws[7], p[15]); - word3_muladd(&w2, &w1, &w0, ws[8], p[14]); - word3_muladd(&w2, &w1, &w0, ws[9], p[13]); - word3_muladd(&w2, &w1, &w0, ws[10], p[12]); - word3_muladd(&w2, &w1, &w0, ws[11], p[11]); - word3_muladd(&w2, &w1, &w0, ws[12], p[10]); - word3_muladd(&w2, &w1, &w0, ws[13], p[9]); - word3_muladd(&w2, &w1, &w0, ws[14], p[8]); - word3_muladd(&w2, &w1, &w0, ws[15], p[7]); - word3_muladd(&w2, &w1, &w0, ws[16], p[6]); - word3_muladd(&w2, &w1, &w0, ws[17], p[5]); - word3_muladd(&w2, &w1, &w0, ws[18], p[4]); - word3_muladd(&w2, &w1, &w0, ws[19], p[3]); - word3_muladd(&w2, &w1, &w0, ws[20], p[2]); - word3_muladd(&w2, &w1, &w0, ws[21], p[1]); - word3_add(&w2, &w1, &w0, z[22]); - ws[22] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[22], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[23]); - word3_muladd(&w2, &w1, &w0, ws[1], p[22]); - word3_muladd(&w2, &w1, &w0, ws[2], p[21]); - word3_muladd(&w2, &w1, &w0, ws[3], p[20]); - word3_muladd(&w2, &w1, &w0, ws[4], p[19]); - word3_muladd(&w2, &w1, &w0, ws[5], p[18]); - word3_muladd(&w2, &w1, &w0, ws[6], p[17]); - word3_muladd(&w2, &w1, &w0, ws[7], p[16]); - word3_muladd(&w2, &w1, &w0, ws[8], p[15]); - word3_muladd(&w2, &w1, &w0, ws[9], p[14]); - word3_muladd(&w2, &w1, &w0, ws[10], p[13]); - word3_muladd(&w2, &w1, &w0, ws[11], p[12]); - word3_muladd(&w2, &w1, &w0, ws[12], p[11]); - word3_muladd(&w2, &w1, &w0, ws[13], p[10]); - word3_muladd(&w2, &w1, &w0, ws[14], p[9]); - word3_muladd(&w2, &w1, &w0, ws[15], p[8]); - word3_muladd(&w2, &w1, &w0, ws[16], p[7]); - word3_muladd(&w2, &w1, &w0, ws[17], p[6]); - word3_muladd(&w2, &w1, &w0, ws[18], p[5]); - word3_muladd(&w2, &w1, &w0, ws[19], p[4]); - word3_muladd(&w2, &w1, &w0, ws[20], p[3]); - word3_muladd(&w2, &w1, &w0, ws[21], p[2]); - word3_muladd(&w2, &w1, &w0, ws[22], p[1]); - word3_add(&w2, &w1, &w0, z[23]); - ws[23] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[23], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[1], p[23]); - word3_muladd(&w2, &w1, &w0, ws[2], p[22]); - word3_muladd(&w2, &w1, &w0, ws[3], p[21]); - word3_muladd(&w2, &w1, &w0, ws[4], p[20]); - word3_muladd(&w2, &w1, &w0, ws[5], p[19]); - word3_muladd(&w2, &w1, &w0, ws[6], p[18]); - word3_muladd(&w2, &w1, &w0, ws[7], p[17]); - word3_muladd(&w2, &w1, &w0, ws[8], p[16]); - word3_muladd(&w2, &w1, &w0, ws[9], p[15]); - word3_muladd(&w2, &w1, &w0, ws[10], p[14]); - word3_muladd(&w2, &w1, &w0, ws[11], p[13]); - word3_muladd(&w2, &w1, &w0, ws[12], p[12]); - word3_muladd(&w2, &w1, &w0, ws[13], p[11]); - word3_muladd(&w2, &w1, &w0, ws[14], p[10]); - word3_muladd(&w2, &w1, &w0, ws[15], p[9]); - word3_muladd(&w2, &w1, &w0, ws[16], p[8]); - word3_muladd(&w2, &w1, &w0, ws[17], p[7]); - word3_muladd(&w2, &w1, &w0, ws[18], p[6]); - word3_muladd(&w2, &w1, &w0, ws[19], p[5]); - word3_muladd(&w2, &w1, &w0, ws[20], p[4]); - word3_muladd(&w2, &w1, &w0, ws[21], p[3]); - word3_muladd(&w2, &w1, &w0, ws[22], p[2]); - word3_muladd(&w2, &w1, &w0, ws[23], p[1]); - word3_add(&w2, &w1, &w0, z[24]); - ws[0] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[2], p[23]); - word3_muladd(&w2, &w1, &w0, ws[3], p[22]); - word3_muladd(&w2, &w1, &w0, ws[4], p[21]); - word3_muladd(&w2, &w1, &w0, ws[5], p[20]); - word3_muladd(&w2, &w1, &w0, ws[6], p[19]); - word3_muladd(&w2, &w1, &w0, ws[7], p[18]); - word3_muladd(&w2, &w1, &w0, ws[8], p[17]); - word3_muladd(&w2, &w1, &w0, ws[9], p[16]); - word3_muladd(&w2, &w1, &w0, ws[10], p[15]); - word3_muladd(&w2, &w1, &w0, ws[11], p[14]); - word3_muladd(&w2, &w1, &w0, ws[12], p[13]); - word3_muladd(&w2, &w1, &w0, ws[13], p[12]); - word3_muladd(&w2, &w1, &w0, ws[14], p[11]); - word3_muladd(&w2, &w1, &w0, ws[15], p[10]); - word3_muladd(&w2, &w1, &w0, ws[16], p[9]); - word3_muladd(&w2, &w1, &w0, ws[17], p[8]); - word3_muladd(&w2, &w1, &w0, ws[18], p[7]); - word3_muladd(&w2, &w1, &w0, ws[19], p[6]); - word3_muladd(&w2, &w1, &w0, ws[20], p[5]); - word3_muladd(&w2, &w1, &w0, ws[21], p[4]); - word3_muladd(&w2, &w1, &w0, ws[22], p[3]); - word3_muladd(&w2, &w1, &w0, ws[23], p[2]); - word3_add(&w2, &w1, &w0, z[25]); - ws[1] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[3], p[23]); - word3_muladd(&w2, &w1, &w0, ws[4], p[22]); - word3_muladd(&w2, &w1, &w0, ws[5], p[21]); - word3_muladd(&w2, &w1, &w0, ws[6], p[20]); - word3_muladd(&w2, &w1, &w0, ws[7], p[19]); - word3_muladd(&w2, &w1, &w0, ws[8], p[18]); - word3_muladd(&w2, &w1, &w0, ws[9], p[17]); - word3_muladd(&w2, &w1, &w0, ws[10], p[16]); - word3_muladd(&w2, &w1, &w0, ws[11], p[15]); - word3_muladd(&w2, &w1, &w0, ws[12], p[14]); - word3_muladd(&w2, &w1, &w0, ws[13], p[13]); - word3_muladd(&w2, &w1, &w0, ws[14], p[12]); - word3_muladd(&w2, &w1, &w0, ws[15], p[11]); - word3_muladd(&w2, &w1, &w0, ws[16], p[10]); - word3_muladd(&w2, &w1, &w0, ws[17], p[9]); - word3_muladd(&w2, &w1, &w0, ws[18], p[8]); - word3_muladd(&w2, &w1, &w0, ws[19], p[7]); - word3_muladd(&w2, &w1, &w0, ws[20], p[6]); - word3_muladd(&w2, &w1, &w0, ws[21], p[5]); - word3_muladd(&w2, &w1, &w0, ws[22], p[4]); - word3_muladd(&w2, &w1, &w0, ws[23], p[3]); - word3_add(&w2, &w1, &w0, z[26]); - ws[2] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[4], p[23]); - word3_muladd(&w2, &w1, &w0, ws[5], p[22]); - word3_muladd(&w2, &w1, &w0, ws[6], p[21]); - word3_muladd(&w2, &w1, &w0, ws[7], p[20]); - word3_muladd(&w2, &w1, &w0, ws[8], p[19]); - word3_muladd(&w2, &w1, &w0, ws[9], p[18]); - word3_muladd(&w2, &w1, &w0, ws[10], p[17]); - word3_muladd(&w2, &w1, &w0, ws[11], p[16]); - word3_muladd(&w2, &w1, &w0, ws[12], p[15]); - word3_muladd(&w2, &w1, &w0, ws[13], p[14]); - word3_muladd(&w2, &w1, &w0, ws[14], p[13]); - word3_muladd(&w2, &w1, &w0, ws[15], p[12]); - word3_muladd(&w2, &w1, &w0, ws[16], p[11]); - word3_muladd(&w2, &w1, &w0, ws[17], p[10]); - word3_muladd(&w2, &w1, &w0, ws[18], p[9]); - word3_muladd(&w2, &w1, &w0, ws[19], p[8]); - word3_muladd(&w2, &w1, &w0, ws[20], p[7]); - word3_muladd(&w2, &w1, &w0, ws[21], p[6]); - word3_muladd(&w2, &w1, &w0, ws[22], p[5]); - word3_muladd(&w2, &w1, &w0, ws[23], p[4]); - word3_add(&w2, &w1, &w0, z[27]); - ws[3] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[5], p[23]); - word3_muladd(&w2, &w1, &w0, ws[6], p[22]); - word3_muladd(&w2, &w1, &w0, ws[7], p[21]); - word3_muladd(&w2, &w1, &w0, ws[8], p[20]); - word3_muladd(&w2, &w1, &w0, ws[9], p[19]); - word3_muladd(&w2, &w1, &w0, ws[10], p[18]); - word3_muladd(&w2, &w1, &w0, ws[11], p[17]); - word3_muladd(&w2, &w1, &w0, ws[12], p[16]); - word3_muladd(&w2, &w1, &w0, ws[13], p[15]); - word3_muladd(&w2, &w1, &w0, ws[14], p[14]); - word3_muladd(&w2, &w1, &w0, ws[15], p[13]); - word3_muladd(&w2, &w1, &w0, ws[16], p[12]); - word3_muladd(&w2, &w1, &w0, ws[17], p[11]); - word3_muladd(&w2, &w1, &w0, ws[18], p[10]); - word3_muladd(&w2, &w1, &w0, ws[19], p[9]); - word3_muladd(&w2, &w1, &w0, ws[20], p[8]); - word3_muladd(&w2, &w1, &w0, ws[21], p[7]); - word3_muladd(&w2, &w1, &w0, ws[22], p[6]); - word3_muladd(&w2, &w1, &w0, ws[23], p[5]); - word3_add(&w2, &w1, &w0, z[28]); - ws[4] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[6], p[23]); - word3_muladd(&w2, &w1, &w0, ws[7], p[22]); - word3_muladd(&w2, &w1, &w0, ws[8], p[21]); - word3_muladd(&w2, &w1, &w0, ws[9], p[20]); - word3_muladd(&w2, &w1, &w0, ws[10], p[19]); - word3_muladd(&w2, &w1, &w0, ws[11], p[18]); - word3_muladd(&w2, &w1, &w0, ws[12], p[17]); - word3_muladd(&w2, &w1, &w0, ws[13], p[16]); - word3_muladd(&w2, &w1, &w0, ws[14], p[15]); - word3_muladd(&w2, &w1, &w0, ws[15], p[14]); - word3_muladd(&w2, &w1, &w0, ws[16], p[13]); - word3_muladd(&w2, &w1, &w0, ws[17], p[12]); - word3_muladd(&w2, &w1, &w0, ws[18], p[11]); - word3_muladd(&w2, &w1, &w0, ws[19], p[10]); - word3_muladd(&w2, &w1, &w0, ws[20], p[9]); - word3_muladd(&w2, &w1, &w0, ws[21], p[8]); - word3_muladd(&w2, &w1, &w0, ws[22], p[7]); - word3_muladd(&w2, &w1, &w0, ws[23], p[6]); - word3_add(&w2, &w1, &w0, z[29]); - ws[5] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[7], p[23]); - word3_muladd(&w2, &w1, &w0, ws[8], p[22]); - word3_muladd(&w2, &w1, &w0, ws[9], p[21]); - word3_muladd(&w2, &w1, &w0, ws[10], p[20]); - word3_muladd(&w2, &w1, &w0, ws[11], p[19]); - word3_muladd(&w2, &w1, &w0, ws[12], p[18]); - word3_muladd(&w2, &w1, &w0, ws[13], p[17]); - word3_muladd(&w2, &w1, &w0, ws[14], p[16]); - word3_muladd(&w2, &w1, &w0, ws[15], p[15]); - word3_muladd(&w2, &w1, &w0, ws[16], p[14]); - word3_muladd(&w2, &w1, &w0, ws[17], p[13]); - word3_muladd(&w2, &w1, &w0, ws[18], p[12]); - word3_muladd(&w2, &w1, &w0, ws[19], p[11]); - word3_muladd(&w2, &w1, &w0, ws[20], p[10]); - word3_muladd(&w2, &w1, &w0, ws[21], p[9]); - word3_muladd(&w2, &w1, &w0, ws[22], p[8]); - word3_muladd(&w2, &w1, &w0, ws[23], p[7]); - word3_add(&w2, &w1, &w0, z[30]); - ws[6] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[8], p[23]); - word3_muladd(&w2, &w1, &w0, ws[9], p[22]); - word3_muladd(&w2, &w1, &w0, ws[10], p[21]); - word3_muladd(&w2, &w1, &w0, ws[11], p[20]); - word3_muladd(&w2, &w1, &w0, ws[12], p[19]); - word3_muladd(&w2, &w1, &w0, ws[13], p[18]); - word3_muladd(&w2, &w1, &w0, ws[14], p[17]); - word3_muladd(&w2, &w1, &w0, ws[15], p[16]); - word3_muladd(&w2, &w1, &w0, ws[16], p[15]); - word3_muladd(&w2, &w1, &w0, ws[17], p[14]); - word3_muladd(&w2, &w1, &w0, ws[18], p[13]); - word3_muladd(&w2, &w1, &w0, ws[19], p[12]); - word3_muladd(&w2, &w1, &w0, ws[20], p[11]); - word3_muladd(&w2, &w1, &w0, ws[21], p[10]); - word3_muladd(&w2, &w1, &w0, ws[22], p[9]); - word3_muladd(&w2, &w1, &w0, ws[23], p[8]); - word3_add(&w2, &w1, &w0, z[31]); - ws[7] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[9], p[23]); - word3_muladd(&w2, &w1, &w0, ws[10], p[22]); - word3_muladd(&w2, &w1, &w0, ws[11], p[21]); - word3_muladd(&w2, &w1, &w0, ws[12], p[20]); - word3_muladd(&w2, &w1, &w0, ws[13], p[19]); - word3_muladd(&w2, &w1, &w0, ws[14], p[18]); - word3_muladd(&w2, &w1, &w0, ws[15], p[17]); - word3_muladd(&w2, &w1, &w0, ws[16], p[16]); - word3_muladd(&w2, &w1, &w0, ws[17], p[15]); - word3_muladd(&w2, &w1, &w0, ws[18], p[14]); - word3_muladd(&w2, &w1, &w0, ws[19], p[13]); - word3_muladd(&w2, &w1, &w0, ws[20], p[12]); - word3_muladd(&w2, &w1, &w0, ws[21], p[11]); - word3_muladd(&w2, &w1, &w0, ws[22], p[10]); - word3_muladd(&w2, &w1, &w0, ws[23], p[9]); - word3_add(&w2, &w1, &w0, z[32]); - ws[8] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[10], p[23]); - word3_muladd(&w2, &w1, &w0, ws[11], p[22]); - word3_muladd(&w2, &w1, &w0, ws[12], p[21]); - word3_muladd(&w2, &w1, &w0, ws[13], p[20]); - word3_muladd(&w2, &w1, &w0, ws[14], p[19]); - word3_muladd(&w2, &w1, &w0, ws[15], p[18]); - word3_muladd(&w2, &w1, &w0, ws[16], p[17]); - word3_muladd(&w2, &w1, &w0, ws[17], p[16]); - word3_muladd(&w2, &w1, &w0, ws[18], p[15]); - word3_muladd(&w2, &w1, &w0, ws[19], p[14]); - word3_muladd(&w2, &w1, &w0, ws[20], p[13]); - word3_muladd(&w2, &w1, &w0, ws[21], p[12]); - word3_muladd(&w2, &w1, &w0, ws[22], p[11]); - word3_muladd(&w2, &w1, &w0, ws[23], p[10]); - word3_add(&w2, &w1, &w0, z[33]); - ws[9] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[11], p[23]); - word3_muladd(&w2, &w1, &w0, ws[12], p[22]); - word3_muladd(&w2, &w1, &w0, ws[13], p[21]); - word3_muladd(&w2, &w1, &w0, ws[14], p[20]); - word3_muladd(&w2, &w1, &w0, ws[15], p[19]); - word3_muladd(&w2, &w1, &w0, ws[16], p[18]); - word3_muladd(&w2, &w1, &w0, ws[17], p[17]); - word3_muladd(&w2, &w1, &w0, ws[18], p[16]); - word3_muladd(&w2, &w1, &w0, ws[19], p[15]); - word3_muladd(&w2, &w1, &w0, ws[20], p[14]); - word3_muladd(&w2, &w1, &w0, ws[21], p[13]); - word3_muladd(&w2, &w1, &w0, ws[22], p[12]); - word3_muladd(&w2, &w1, &w0, ws[23], p[11]); - word3_add(&w2, &w1, &w0, z[34]); - ws[10] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[12], p[23]); - word3_muladd(&w2, &w1, &w0, ws[13], p[22]); - word3_muladd(&w2, &w1, &w0, ws[14], p[21]); - word3_muladd(&w2, &w1, &w0, ws[15], p[20]); - word3_muladd(&w2, &w1, &w0, ws[16], p[19]); - word3_muladd(&w2, &w1, &w0, ws[17], p[18]); - word3_muladd(&w2, &w1, &w0, ws[18], p[17]); - word3_muladd(&w2, &w1, &w0, ws[19], p[16]); - word3_muladd(&w2, &w1, &w0, ws[20], p[15]); - word3_muladd(&w2, &w1, &w0, ws[21], p[14]); - word3_muladd(&w2, &w1, &w0, ws[22], p[13]); - word3_muladd(&w2, &w1, &w0, ws[23], p[12]); - word3_add(&w2, &w1, &w0, z[35]); - ws[11] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[13], p[23]); - word3_muladd(&w2, &w1, &w0, ws[14], p[22]); - word3_muladd(&w2, &w1, &w0, ws[15], p[21]); - word3_muladd(&w2, &w1, &w0, ws[16], p[20]); - word3_muladd(&w2, &w1, &w0, ws[17], p[19]); - word3_muladd(&w2, &w1, &w0, ws[18], p[18]); - word3_muladd(&w2, &w1, &w0, ws[19], p[17]); - word3_muladd(&w2, &w1, &w0, ws[20], p[16]); - word3_muladd(&w2, &w1, &w0, ws[21], p[15]); - word3_muladd(&w2, &w1, &w0, ws[22], p[14]); - word3_muladd(&w2, &w1, &w0, ws[23], p[13]); - word3_add(&w2, &w1, &w0, z[36]); - ws[12] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[14], p[23]); - word3_muladd(&w2, &w1, &w0, ws[15], p[22]); - word3_muladd(&w2, &w1, &w0, ws[16], p[21]); - word3_muladd(&w2, &w1, &w0, ws[17], p[20]); - word3_muladd(&w2, &w1, &w0, ws[18], p[19]); - word3_muladd(&w2, &w1, &w0, ws[19], p[18]); - word3_muladd(&w2, &w1, &w0, ws[20], p[17]); - word3_muladd(&w2, &w1, &w0, ws[21], p[16]); - word3_muladd(&w2, &w1, &w0, ws[22], p[15]); - word3_muladd(&w2, &w1, &w0, ws[23], p[14]); - word3_add(&w2, &w1, &w0, z[37]); - ws[13] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[15], p[23]); - word3_muladd(&w2, &w1, &w0, ws[16], p[22]); - word3_muladd(&w2, &w1, &w0, ws[17], p[21]); - word3_muladd(&w2, &w1, &w0, ws[18], p[20]); - word3_muladd(&w2, &w1, &w0, ws[19], p[19]); - word3_muladd(&w2, &w1, &w0, ws[20], p[18]); - word3_muladd(&w2, &w1, &w0, ws[21], p[17]); - word3_muladd(&w2, &w1, &w0, ws[22], p[16]); - word3_muladd(&w2, &w1, &w0, ws[23], p[15]); - word3_add(&w2, &w1, &w0, z[38]); - ws[14] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[16], p[23]); - word3_muladd(&w2, &w1, &w0, ws[17], p[22]); - word3_muladd(&w2, &w1, &w0, ws[18], p[21]); - word3_muladd(&w2, &w1, &w0, ws[19], p[20]); - word3_muladd(&w2, &w1, &w0, ws[20], p[19]); - word3_muladd(&w2, &w1, &w0, ws[21], p[18]); - word3_muladd(&w2, &w1, &w0, ws[22], p[17]); - word3_muladd(&w2, &w1, &w0, ws[23], p[16]); - word3_add(&w2, &w1, &w0, z[39]); - ws[15] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[17], p[23]); - word3_muladd(&w2, &w1, &w0, ws[18], p[22]); - word3_muladd(&w2, &w1, &w0, ws[19], p[21]); - word3_muladd(&w2, &w1, &w0, ws[20], p[20]); - word3_muladd(&w2, &w1, &w0, ws[21], p[19]); - word3_muladd(&w2, &w1, &w0, ws[22], p[18]); - word3_muladd(&w2, &w1, &w0, ws[23], p[17]); - word3_add(&w2, &w1, &w0, z[40]); - ws[16] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[18], p[23]); - word3_muladd(&w2, &w1, &w0, ws[19], p[22]); - word3_muladd(&w2, &w1, &w0, ws[20], p[21]); - word3_muladd(&w2, &w1, &w0, ws[21], p[20]); - word3_muladd(&w2, &w1, &w0, ws[22], p[19]); - word3_muladd(&w2, &w1, &w0, ws[23], p[18]); - word3_add(&w2, &w1, &w0, z[41]); - ws[17] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[19], p[23]); - word3_muladd(&w2, &w1, &w0, ws[20], p[22]); - word3_muladd(&w2, &w1, &w0, ws[21], p[21]); - word3_muladd(&w2, &w1, &w0, ws[22], p[20]); - word3_muladd(&w2, &w1, &w0, ws[23], p[19]); - word3_add(&w2, &w1, &w0, z[42]); - ws[18] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[20], p[23]); - word3_muladd(&w2, &w1, &w0, ws[21], p[22]); - word3_muladd(&w2, &w1, &w0, ws[22], p[21]); - word3_muladd(&w2, &w1, &w0, ws[23], p[20]); - word3_add(&w2, &w1, &w0, z[43]); - ws[19] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[21], p[23]); - word3_muladd(&w2, &w1, &w0, ws[22], p[22]); - word3_muladd(&w2, &w1, &w0, ws[23], p[21]); - word3_add(&w2, &w1, &w0, z[44]); - ws[20] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[22], p[23]); - word3_muladd(&w2, &w1, &w0, ws[23], p[22]); - word3_add(&w2, &w1, &w0, z[45]); - ws[21] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[23], p[23]); - word3_add(&w2, &w1, &w0, z[46]); - ws[22] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_add(&w2, &w1, &w0, z[47]); - ws[23] = w0; + word3 accum; + accum.add(z[0]); + ws[0] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[1]); + accum.add(z[1]); + ws[1] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[2]); + accum.mul(ws[1], p[1]); + accum.add(z[2]); + ws[2] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[3]); + accum.mul(ws[1], p[2]); + accum.mul(ws[2], p[1]); + accum.add(z[3]); + ws[3] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[4]); + accum.mul(ws[1], p[3]); + accum.mul(ws[2], p[2]); + accum.mul(ws[3], p[1]); + accum.add(z[4]); + ws[4] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[5]); + accum.mul(ws[1], p[4]); + accum.mul(ws[2], p[3]); + accum.mul(ws[3], p[2]); + accum.mul(ws[4], p[1]); + accum.add(z[5]); + ws[5] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[6]); + accum.mul(ws[1], p[5]); + accum.mul(ws[2], p[4]); + accum.mul(ws[3], p[3]); + accum.mul(ws[4], p[2]); + accum.mul(ws[5], p[1]); + accum.add(z[6]); + ws[6] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[7]); + accum.mul(ws[1], p[6]); + accum.mul(ws[2], p[5]); + accum.mul(ws[3], p[4]); + accum.mul(ws[4], p[3]); + accum.mul(ws[5], p[2]); + accum.mul(ws[6], p[1]); + accum.add(z[7]); + ws[7] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[8]); + accum.mul(ws[1], p[7]); + accum.mul(ws[2], p[6]); + accum.mul(ws[3], p[5]); + accum.mul(ws[4], p[4]); + accum.mul(ws[5], p[3]); + accum.mul(ws[6], p[2]); + accum.mul(ws[7], p[1]); + accum.add(z[8]); + ws[8] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[9]); + accum.mul(ws[1], p[8]); + accum.mul(ws[2], p[7]); + accum.mul(ws[3], p[6]); + accum.mul(ws[4], p[5]); + accum.mul(ws[5], p[4]); + accum.mul(ws[6], p[3]); + accum.mul(ws[7], p[2]); + accum.mul(ws[8], p[1]); + accum.add(z[9]); + ws[9] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[10]); + accum.mul(ws[1], p[9]); + accum.mul(ws[2], p[8]); + accum.mul(ws[3], p[7]); + accum.mul(ws[4], p[6]); + accum.mul(ws[5], p[5]); + accum.mul(ws[6], p[4]); + accum.mul(ws[7], p[3]); + accum.mul(ws[8], p[2]); + accum.mul(ws[9], p[1]); + accum.add(z[10]); + ws[10] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[11]); + accum.mul(ws[1], p[10]); + accum.mul(ws[2], p[9]); + accum.mul(ws[3], p[8]); + accum.mul(ws[4], p[7]); + accum.mul(ws[5], p[6]); + accum.mul(ws[6], p[5]); + accum.mul(ws[7], p[4]); + accum.mul(ws[8], p[3]); + accum.mul(ws[9], p[2]); + accum.mul(ws[10], p[1]); + accum.add(z[11]); + ws[11] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[12]); + accum.mul(ws[1], p[11]); + accum.mul(ws[2], p[10]); + accum.mul(ws[3], p[9]); + accum.mul(ws[4], p[8]); + accum.mul(ws[5], p[7]); + accum.mul(ws[6], p[6]); + accum.mul(ws[7], p[5]); + accum.mul(ws[8], p[4]); + accum.mul(ws[9], p[3]); + accum.mul(ws[10], p[2]); + accum.mul(ws[11], p[1]); + accum.add(z[12]); + ws[12] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[13]); + accum.mul(ws[1], p[12]); + accum.mul(ws[2], p[11]); + accum.mul(ws[3], p[10]); + accum.mul(ws[4], p[9]); + accum.mul(ws[5], p[8]); + accum.mul(ws[6], p[7]); + accum.mul(ws[7], p[6]); + accum.mul(ws[8], p[5]); + accum.mul(ws[9], p[4]); + accum.mul(ws[10], p[3]); + accum.mul(ws[11], p[2]); + accum.mul(ws[12], p[1]); + accum.add(z[13]); + ws[13] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[14]); + accum.mul(ws[1], p[13]); + accum.mul(ws[2], p[12]); + accum.mul(ws[3], p[11]); + accum.mul(ws[4], p[10]); + accum.mul(ws[5], p[9]); + accum.mul(ws[6], p[8]); + accum.mul(ws[7], p[7]); + accum.mul(ws[8], p[6]); + accum.mul(ws[9], p[5]); + accum.mul(ws[10], p[4]); + accum.mul(ws[11], p[3]); + accum.mul(ws[12], p[2]); + accum.mul(ws[13], p[1]); + accum.add(z[14]); + ws[14] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[15]); + accum.mul(ws[1], p[14]); + accum.mul(ws[2], p[13]); + accum.mul(ws[3], p[12]); + accum.mul(ws[4], p[11]); + accum.mul(ws[5], p[10]); + accum.mul(ws[6], p[9]); + accum.mul(ws[7], p[8]); + accum.mul(ws[8], p[7]); + accum.mul(ws[9], p[6]); + accum.mul(ws[10], p[5]); + accum.mul(ws[11], p[4]); + accum.mul(ws[12], p[3]); + accum.mul(ws[13], p[2]); + accum.mul(ws[14], p[1]); + accum.add(z[15]); + ws[15] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[16]); + accum.mul(ws[1], p[15]); + accum.mul(ws[2], p[14]); + accum.mul(ws[3], p[13]); + accum.mul(ws[4], p[12]); + accum.mul(ws[5], p[11]); + accum.mul(ws[6], p[10]); + accum.mul(ws[7], p[9]); + accum.mul(ws[8], p[8]); + accum.mul(ws[9], p[7]); + accum.mul(ws[10], p[6]); + accum.mul(ws[11], p[5]); + accum.mul(ws[12], p[4]); + accum.mul(ws[13], p[3]); + accum.mul(ws[14], p[2]); + accum.mul(ws[15], p[1]); + accum.add(z[16]); + ws[16] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[17]); + accum.mul(ws[1], p[16]); + accum.mul(ws[2], p[15]); + accum.mul(ws[3], p[14]); + accum.mul(ws[4], p[13]); + accum.mul(ws[5], p[12]); + accum.mul(ws[6], p[11]); + accum.mul(ws[7], p[10]); + accum.mul(ws[8], p[9]); + accum.mul(ws[9], p[8]); + accum.mul(ws[10], p[7]); + accum.mul(ws[11], p[6]); + accum.mul(ws[12], p[5]); + accum.mul(ws[13], p[4]); + accum.mul(ws[14], p[3]); + accum.mul(ws[15], p[2]); + accum.mul(ws[16], p[1]); + accum.add(z[17]); + ws[17] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[18]); + accum.mul(ws[1], p[17]); + accum.mul(ws[2], p[16]); + accum.mul(ws[3], p[15]); + accum.mul(ws[4], p[14]); + accum.mul(ws[5], p[13]); + accum.mul(ws[6], p[12]); + accum.mul(ws[7], p[11]); + accum.mul(ws[8], p[10]); + accum.mul(ws[9], p[9]); + accum.mul(ws[10], p[8]); + accum.mul(ws[11], p[7]); + accum.mul(ws[12], p[6]); + accum.mul(ws[13], p[5]); + accum.mul(ws[14], p[4]); + accum.mul(ws[15], p[3]); + accum.mul(ws[16], p[2]); + accum.mul(ws[17], p[1]); + accum.add(z[18]); + ws[18] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[19]); + accum.mul(ws[1], p[18]); + accum.mul(ws[2], p[17]); + accum.mul(ws[3], p[16]); + accum.mul(ws[4], p[15]); + accum.mul(ws[5], p[14]); + accum.mul(ws[6], p[13]); + accum.mul(ws[7], p[12]); + accum.mul(ws[8], p[11]); + accum.mul(ws[9], p[10]); + accum.mul(ws[10], p[9]); + accum.mul(ws[11], p[8]); + accum.mul(ws[12], p[7]); + accum.mul(ws[13], p[6]); + accum.mul(ws[14], p[5]); + accum.mul(ws[15], p[4]); + accum.mul(ws[16], p[3]); + accum.mul(ws[17], p[2]); + accum.mul(ws[18], p[1]); + accum.add(z[19]); + ws[19] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[20]); + accum.mul(ws[1], p[19]); + accum.mul(ws[2], p[18]); + accum.mul(ws[3], p[17]); + accum.mul(ws[4], p[16]); + accum.mul(ws[5], p[15]); + accum.mul(ws[6], p[14]); + accum.mul(ws[7], p[13]); + accum.mul(ws[8], p[12]); + accum.mul(ws[9], p[11]); + accum.mul(ws[10], p[10]); + accum.mul(ws[11], p[9]); + accum.mul(ws[12], p[8]); + accum.mul(ws[13], p[7]); + accum.mul(ws[14], p[6]); + accum.mul(ws[15], p[5]); + accum.mul(ws[16], p[4]); + accum.mul(ws[17], p[3]); + accum.mul(ws[18], p[2]); + accum.mul(ws[19], p[1]); + accum.add(z[20]); + ws[20] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[21]); + accum.mul(ws[1], p[20]); + accum.mul(ws[2], p[19]); + accum.mul(ws[3], p[18]); + accum.mul(ws[4], p[17]); + accum.mul(ws[5], p[16]); + accum.mul(ws[6], p[15]); + accum.mul(ws[7], p[14]); + accum.mul(ws[8], p[13]); + accum.mul(ws[9], p[12]); + accum.mul(ws[10], p[11]); + accum.mul(ws[11], p[10]); + accum.mul(ws[12], p[9]); + accum.mul(ws[13], p[8]); + accum.mul(ws[14], p[7]); + accum.mul(ws[15], p[6]); + accum.mul(ws[16], p[5]); + accum.mul(ws[17], p[4]); + accum.mul(ws[18], p[3]); + accum.mul(ws[19], p[2]); + accum.mul(ws[20], p[1]); + accum.add(z[21]); + ws[21] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[22]); + accum.mul(ws[1], p[21]); + accum.mul(ws[2], p[20]); + accum.mul(ws[3], p[19]); + accum.mul(ws[4], p[18]); + accum.mul(ws[5], p[17]); + accum.mul(ws[6], p[16]); + accum.mul(ws[7], p[15]); + accum.mul(ws[8], p[14]); + accum.mul(ws[9], p[13]); + accum.mul(ws[10], p[12]); + accum.mul(ws[11], p[11]); + accum.mul(ws[12], p[10]); + accum.mul(ws[13], p[9]); + accum.mul(ws[14], p[8]); + accum.mul(ws[15], p[7]); + accum.mul(ws[16], p[6]); + accum.mul(ws[17], p[5]); + accum.mul(ws[18], p[4]); + accum.mul(ws[19], p[3]); + accum.mul(ws[20], p[2]); + accum.mul(ws[21], p[1]); + accum.add(z[22]); + ws[22] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[23]); + accum.mul(ws[1], p[22]); + accum.mul(ws[2], p[21]); + accum.mul(ws[3], p[20]); + accum.mul(ws[4], p[19]); + accum.mul(ws[5], p[18]); + accum.mul(ws[6], p[17]); + accum.mul(ws[7], p[16]); + accum.mul(ws[8], p[15]); + accum.mul(ws[9], p[14]); + accum.mul(ws[10], p[13]); + accum.mul(ws[11], p[12]); + accum.mul(ws[12], p[11]); + accum.mul(ws[13], p[10]); + accum.mul(ws[14], p[9]); + accum.mul(ws[15], p[8]); + accum.mul(ws[16], p[7]); + accum.mul(ws[17], p[6]); + accum.mul(ws[18], p[5]); + accum.mul(ws[19], p[4]); + accum.mul(ws[20], p[3]); + accum.mul(ws[21], p[2]); + accum.mul(ws[22], p[1]); + accum.add(z[23]); + ws[23] = accum.monty_step(p[0], p_dash); + accum.mul(ws[1], p[23]); + accum.mul(ws[2], p[22]); + accum.mul(ws[3], p[21]); + accum.mul(ws[4], p[20]); + accum.mul(ws[5], p[19]); + accum.mul(ws[6], p[18]); + accum.mul(ws[7], p[17]); + accum.mul(ws[8], p[16]); + accum.mul(ws[9], p[15]); + accum.mul(ws[10], p[14]); + accum.mul(ws[11], p[13]); + accum.mul(ws[12], p[12]); + accum.mul(ws[13], p[11]); + accum.mul(ws[14], p[10]); + accum.mul(ws[15], p[9]); + accum.mul(ws[16], p[8]); + accum.mul(ws[17], p[7]); + accum.mul(ws[18], p[6]); + accum.mul(ws[19], p[5]); + accum.mul(ws[20], p[4]); + accum.mul(ws[21], p[3]); + accum.mul(ws[22], p[2]); + accum.mul(ws[23], p[1]); + accum.add(z[24]); + ws[0] = accum.extract(); + accum.mul(ws[2], p[23]); + accum.mul(ws[3], p[22]); + accum.mul(ws[4], p[21]); + accum.mul(ws[5], p[20]); + accum.mul(ws[6], p[19]); + accum.mul(ws[7], p[18]); + accum.mul(ws[8], p[17]); + accum.mul(ws[9], p[16]); + accum.mul(ws[10], p[15]); + accum.mul(ws[11], p[14]); + accum.mul(ws[12], p[13]); + accum.mul(ws[13], p[12]); + accum.mul(ws[14], p[11]); + accum.mul(ws[15], p[10]); + accum.mul(ws[16], p[9]); + accum.mul(ws[17], p[8]); + accum.mul(ws[18], p[7]); + accum.mul(ws[19], p[6]); + accum.mul(ws[20], p[5]); + accum.mul(ws[21], p[4]); + accum.mul(ws[22], p[3]); + accum.mul(ws[23], p[2]); + accum.add(z[25]); + ws[1] = accum.extract(); + accum.mul(ws[3], p[23]); + accum.mul(ws[4], p[22]); + accum.mul(ws[5], p[21]); + accum.mul(ws[6], p[20]); + accum.mul(ws[7], p[19]); + accum.mul(ws[8], p[18]); + accum.mul(ws[9], p[17]); + accum.mul(ws[10], p[16]); + accum.mul(ws[11], p[15]); + accum.mul(ws[12], p[14]); + accum.mul(ws[13], p[13]); + accum.mul(ws[14], p[12]); + accum.mul(ws[15], p[11]); + accum.mul(ws[16], p[10]); + accum.mul(ws[17], p[9]); + accum.mul(ws[18], p[8]); + accum.mul(ws[19], p[7]); + accum.mul(ws[20], p[6]); + accum.mul(ws[21], p[5]); + accum.mul(ws[22], p[4]); + accum.mul(ws[23], p[3]); + accum.add(z[26]); + ws[2] = accum.extract(); + accum.mul(ws[4], p[23]); + accum.mul(ws[5], p[22]); + accum.mul(ws[6], p[21]); + accum.mul(ws[7], p[20]); + accum.mul(ws[8], p[19]); + accum.mul(ws[9], p[18]); + accum.mul(ws[10], p[17]); + accum.mul(ws[11], p[16]); + accum.mul(ws[12], p[15]); + accum.mul(ws[13], p[14]); + accum.mul(ws[14], p[13]); + accum.mul(ws[15], p[12]); + accum.mul(ws[16], p[11]); + accum.mul(ws[17], p[10]); + accum.mul(ws[18], p[9]); + accum.mul(ws[19], p[8]); + accum.mul(ws[20], p[7]); + accum.mul(ws[21], p[6]); + accum.mul(ws[22], p[5]); + accum.mul(ws[23], p[4]); + accum.add(z[27]); + ws[3] = accum.extract(); + accum.mul(ws[5], p[23]); + accum.mul(ws[6], p[22]); + accum.mul(ws[7], p[21]); + accum.mul(ws[8], p[20]); + accum.mul(ws[9], p[19]); + accum.mul(ws[10], p[18]); + accum.mul(ws[11], p[17]); + accum.mul(ws[12], p[16]); + accum.mul(ws[13], p[15]); + accum.mul(ws[14], p[14]); + accum.mul(ws[15], p[13]); + accum.mul(ws[16], p[12]); + accum.mul(ws[17], p[11]); + accum.mul(ws[18], p[10]); + accum.mul(ws[19], p[9]); + accum.mul(ws[20], p[8]); + accum.mul(ws[21], p[7]); + accum.mul(ws[22], p[6]); + accum.mul(ws[23], p[5]); + accum.add(z[28]); + ws[4] = accum.extract(); + accum.mul(ws[6], p[23]); + accum.mul(ws[7], p[22]); + accum.mul(ws[8], p[21]); + accum.mul(ws[9], p[20]); + accum.mul(ws[10], p[19]); + accum.mul(ws[11], p[18]); + accum.mul(ws[12], p[17]); + accum.mul(ws[13], p[16]); + accum.mul(ws[14], p[15]); + accum.mul(ws[15], p[14]); + accum.mul(ws[16], p[13]); + accum.mul(ws[17], p[12]); + accum.mul(ws[18], p[11]); + accum.mul(ws[19], p[10]); + accum.mul(ws[20], p[9]); + accum.mul(ws[21], p[8]); + accum.mul(ws[22], p[7]); + accum.mul(ws[23], p[6]); + accum.add(z[29]); + ws[5] = accum.extract(); + accum.mul(ws[7], p[23]); + accum.mul(ws[8], p[22]); + accum.mul(ws[9], p[21]); + accum.mul(ws[10], p[20]); + accum.mul(ws[11], p[19]); + accum.mul(ws[12], p[18]); + accum.mul(ws[13], p[17]); + accum.mul(ws[14], p[16]); + accum.mul(ws[15], p[15]); + accum.mul(ws[16], p[14]); + accum.mul(ws[17], p[13]); + accum.mul(ws[18], p[12]); + accum.mul(ws[19], p[11]); + accum.mul(ws[20], p[10]); + accum.mul(ws[21], p[9]); + accum.mul(ws[22], p[8]); + accum.mul(ws[23], p[7]); + accum.add(z[30]); + ws[6] = accum.extract(); + accum.mul(ws[8], p[23]); + accum.mul(ws[9], p[22]); + accum.mul(ws[10], p[21]); + accum.mul(ws[11], p[20]); + accum.mul(ws[12], p[19]); + accum.mul(ws[13], p[18]); + accum.mul(ws[14], p[17]); + accum.mul(ws[15], p[16]); + accum.mul(ws[16], p[15]); + accum.mul(ws[17], p[14]); + accum.mul(ws[18], p[13]); + accum.mul(ws[19], p[12]); + accum.mul(ws[20], p[11]); + accum.mul(ws[21], p[10]); + accum.mul(ws[22], p[9]); + accum.mul(ws[23], p[8]); + accum.add(z[31]); + ws[7] = accum.extract(); + accum.mul(ws[9], p[23]); + accum.mul(ws[10], p[22]); + accum.mul(ws[11], p[21]); + accum.mul(ws[12], p[20]); + accum.mul(ws[13], p[19]); + accum.mul(ws[14], p[18]); + accum.mul(ws[15], p[17]); + accum.mul(ws[16], p[16]); + accum.mul(ws[17], p[15]); + accum.mul(ws[18], p[14]); + accum.mul(ws[19], p[13]); + accum.mul(ws[20], p[12]); + accum.mul(ws[21], p[11]); + accum.mul(ws[22], p[10]); + accum.mul(ws[23], p[9]); + accum.add(z[32]); + ws[8] = accum.extract(); + accum.mul(ws[10], p[23]); + accum.mul(ws[11], p[22]); + accum.mul(ws[12], p[21]); + accum.mul(ws[13], p[20]); + accum.mul(ws[14], p[19]); + accum.mul(ws[15], p[18]); + accum.mul(ws[16], p[17]); + accum.mul(ws[17], p[16]); + accum.mul(ws[18], p[15]); + accum.mul(ws[19], p[14]); + accum.mul(ws[20], p[13]); + accum.mul(ws[21], p[12]); + accum.mul(ws[22], p[11]); + accum.mul(ws[23], p[10]); + accum.add(z[33]); + ws[9] = accum.extract(); + accum.mul(ws[11], p[23]); + accum.mul(ws[12], p[22]); + accum.mul(ws[13], p[21]); + accum.mul(ws[14], p[20]); + accum.mul(ws[15], p[19]); + accum.mul(ws[16], p[18]); + accum.mul(ws[17], p[17]); + accum.mul(ws[18], p[16]); + accum.mul(ws[19], p[15]); + accum.mul(ws[20], p[14]); + accum.mul(ws[21], p[13]); + accum.mul(ws[22], p[12]); + accum.mul(ws[23], p[11]); + accum.add(z[34]); + ws[10] = accum.extract(); + accum.mul(ws[12], p[23]); + accum.mul(ws[13], p[22]); + accum.mul(ws[14], p[21]); + accum.mul(ws[15], p[20]); + accum.mul(ws[16], p[19]); + accum.mul(ws[17], p[18]); + accum.mul(ws[18], p[17]); + accum.mul(ws[19], p[16]); + accum.mul(ws[20], p[15]); + accum.mul(ws[21], p[14]); + accum.mul(ws[22], p[13]); + accum.mul(ws[23], p[12]); + accum.add(z[35]); + ws[11] = accum.extract(); + accum.mul(ws[13], p[23]); + accum.mul(ws[14], p[22]); + accum.mul(ws[15], p[21]); + accum.mul(ws[16], p[20]); + accum.mul(ws[17], p[19]); + accum.mul(ws[18], p[18]); + accum.mul(ws[19], p[17]); + accum.mul(ws[20], p[16]); + accum.mul(ws[21], p[15]); + accum.mul(ws[22], p[14]); + accum.mul(ws[23], p[13]); + accum.add(z[36]); + ws[12] = accum.extract(); + accum.mul(ws[14], p[23]); + accum.mul(ws[15], p[22]); + accum.mul(ws[16], p[21]); + accum.mul(ws[17], p[20]); + accum.mul(ws[18], p[19]); + accum.mul(ws[19], p[18]); + accum.mul(ws[20], p[17]); + accum.mul(ws[21], p[16]); + accum.mul(ws[22], p[15]); + accum.mul(ws[23], p[14]); + accum.add(z[37]); + ws[13] = accum.extract(); + accum.mul(ws[15], p[23]); + accum.mul(ws[16], p[22]); + accum.mul(ws[17], p[21]); + accum.mul(ws[18], p[20]); + accum.mul(ws[19], p[19]); + accum.mul(ws[20], p[18]); + accum.mul(ws[21], p[17]); + accum.mul(ws[22], p[16]); + accum.mul(ws[23], p[15]); + accum.add(z[38]); + ws[14] = accum.extract(); + accum.mul(ws[16], p[23]); + accum.mul(ws[17], p[22]); + accum.mul(ws[18], p[21]); + accum.mul(ws[19], p[20]); + accum.mul(ws[20], p[19]); + accum.mul(ws[21], p[18]); + accum.mul(ws[22], p[17]); + accum.mul(ws[23], p[16]); + accum.add(z[39]); + ws[15] = accum.extract(); + accum.mul(ws[17], p[23]); + accum.mul(ws[18], p[22]); + accum.mul(ws[19], p[21]); + accum.mul(ws[20], p[20]); + accum.mul(ws[21], p[19]); + accum.mul(ws[22], p[18]); + accum.mul(ws[23], p[17]); + accum.add(z[40]); + ws[16] = accum.extract(); + accum.mul(ws[18], p[23]); + accum.mul(ws[19], p[22]); + accum.mul(ws[20], p[21]); + accum.mul(ws[21], p[20]); + accum.mul(ws[22], p[19]); + accum.mul(ws[23], p[18]); + accum.add(z[41]); + ws[17] = accum.extract(); + accum.mul(ws[19], p[23]); + accum.mul(ws[20], p[22]); + accum.mul(ws[21], p[21]); + accum.mul(ws[22], p[20]); + accum.mul(ws[23], p[19]); + accum.add(z[42]); + ws[18] = accum.extract(); + accum.mul(ws[20], p[23]); + accum.mul(ws[21], p[22]); + accum.mul(ws[22], p[21]); + accum.mul(ws[23], p[20]); + accum.add(z[43]); + ws[19] = accum.extract(); + accum.mul(ws[21], p[23]); + accum.mul(ws[22], p[22]); + accum.mul(ws[23], p[21]); + accum.add(z[44]); + ws[20] = accum.extract(); + accum.mul(ws[22], p[23]); + accum.mul(ws[23], p[22]); + accum.add(z[45]); + ws[21] = accum.extract(); + accum.mul(ws[23], p[23]); + accum.add(z[46]); + ws[22] = accum.extract(); + accum.add(z[47]); + ws[23] = accum.extract(); + word w1 = accum.extract(); bigint_monty_maybe_sub<24>(z, w1, ws, p); clear_mem(z + 24, 24); } void bigint_monty_redc_32(word z[64], const word p[32], word p_dash, word ws[]) { - word w2 = 0, w1 = 0, w0 = 0; - w0 = z[0]; - ws[0] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[0], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[1]); - word3_add(&w2, &w1, &w0, z[1]); - ws[1] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[1], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[2]); - word3_muladd(&w2, &w1, &w0, ws[1], p[1]); - word3_add(&w2, &w1, &w0, z[2]); - ws[2] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[2], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[3]); - word3_muladd(&w2, &w1, &w0, ws[1], p[2]); - word3_muladd(&w2, &w1, &w0, ws[2], p[1]); - word3_add(&w2, &w1, &w0, z[3]); - ws[3] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[3], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[4]); - word3_muladd(&w2, &w1, &w0, ws[1], p[3]); - word3_muladd(&w2, &w1, &w0, ws[2], p[2]); - word3_muladd(&w2, &w1, &w0, ws[3], p[1]); - word3_add(&w2, &w1, &w0, z[4]); - ws[4] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[4], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[5]); - word3_muladd(&w2, &w1, &w0, ws[1], p[4]); - word3_muladd(&w2, &w1, &w0, ws[2], p[3]); - word3_muladd(&w2, &w1, &w0, ws[3], p[2]); - word3_muladd(&w2, &w1, &w0, ws[4], p[1]); - word3_add(&w2, &w1, &w0, z[5]); - ws[5] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[5], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[6]); - word3_muladd(&w2, &w1, &w0, ws[1], p[5]); - word3_muladd(&w2, &w1, &w0, ws[2], p[4]); - word3_muladd(&w2, &w1, &w0, ws[3], p[3]); - word3_muladd(&w2, &w1, &w0, ws[4], p[2]); - word3_muladd(&w2, &w1, &w0, ws[5], p[1]); - word3_add(&w2, &w1, &w0, z[6]); - ws[6] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[6], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[7]); - word3_muladd(&w2, &w1, &w0, ws[1], p[6]); - word3_muladd(&w2, &w1, &w0, ws[2], p[5]); - word3_muladd(&w2, &w1, &w0, ws[3], p[4]); - word3_muladd(&w2, &w1, &w0, ws[4], p[3]); - word3_muladd(&w2, &w1, &w0, ws[5], p[2]); - word3_muladd(&w2, &w1, &w0, ws[6], p[1]); - word3_add(&w2, &w1, &w0, z[7]); - ws[7] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[7], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[8]); - word3_muladd(&w2, &w1, &w0, ws[1], p[7]); - word3_muladd(&w2, &w1, &w0, ws[2], p[6]); - word3_muladd(&w2, &w1, &w0, ws[3], p[5]); - word3_muladd(&w2, &w1, &w0, ws[4], p[4]); - word3_muladd(&w2, &w1, &w0, ws[5], p[3]); - word3_muladd(&w2, &w1, &w0, ws[6], p[2]); - word3_muladd(&w2, &w1, &w0, ws[7], p[1]); - word3_add(&w2, &w1, &w0, z[8]); - ws[8] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[8], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[9]); - word3_muladd(&w2, &w1, &w0, ws[1], p[8]); - word3_muladd(&w2, &w1, &w0, ws[2], p[7]); - word3_muladd(&w2, &w1, &w0, ws[3], p[6]); - word3_muladd(&w2, &w1, &w0, ws[4], p[5]); - word3_muladd(&w2, &w1, &w0, ws[5], p[4]); - word3_muladd(&w2, &w1, &w0, ws[6], p[3]); - word3_muladd(&w2, &w1, &w0, ws[7], p[2]); - word3_muladd(&w2, &w1, &w0, ws[8], p[1]); - word3_add(&w2, &w1, &w0, z[9]); - ws[9] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[9], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[10]); - word3_muladd(&w2, &w1, &w0, ws[1], p[9]); - word3_muladd(&w2, &w1, &w0, ws[2], p[8]); - word3_muladd(&w2, &w1, &w0, ws[3], p[7]); - word3_muladd(&w2, &w1, &w0, ws[4], p[6]); - word3_muladd(&w2, &w1, &w0, ws[5], p[5]); - word3_muladd(&w2, &w1, &w0, ws[6], p[4]); - word3_muladd(&w2, &w1, &w0, ws[7], p[3]); - word3_muladd(&w2, &w1, &w0, ws[8], p[2]); - word3_muladd(&w2, &w1, &w0, ws[9], p[1]); - word3_add(&w2, &w1, &w0, z[10]); - ws[10] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[10], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[11]); - word3_muladd(&w2, &w1, &w0, ws[1], p[10]); - word3_muladd(&w2, &w1, &w0, ws[2], p[9]); - word3_muladd(&w2, &w1, &w0, ws[3], p[8]); - word3_muladd(&w2, &w1, &w0, ws[4], p[7]); - word3_muladd(&w2, &w1, &w0, ws[5], p[6]); - word3_muladd(&w2, &w1, &w0, ws[6], p[5]); - word3_muladd(&w2, &w1, &w0, ws[7], p[4]); - word3_muladd(&w2, &w1, &w0, ws[8], p[3]); - word3_muladd(&w2, &w1, &w0, ws[9], p[2]); - word3_muladd(&w2, &w1, &w0, ws[10], p[1]); - word3_add(&w2, &w1, &w0, z[11]); - ws[11] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[11], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[12]); - word3_muladd(&w2, &w1, &w0, ws[1], p[11]); - word3_muladd(&w2, &w1, &w0, ws[2], p[10]); - word3_muladd(&w2, &w1, &w0, ws[3], p[9]); - word3_muladd(&w2, &w1, &w0, ws[4], p[8]); - word3_muladd(&w2, &w1, &w0, ws[5], p[7]); - word3_muladd(&w2, &w1, &w0, ws[6], p[6]); - word3_muladd(&w2, &w1, &w0, ws[7], p[5]); - word3_muladd(&w2, &w1, &w0, ws[8], p[4]); - word3_muladd(&w2, &w1, &w0, ws[9], p[3]); - word3_muladd(&w2, &w1, &w0, ws[10], p[2]); - word3_muladd(&w2, &w1, &w0, ws[11], p[1]); - word3_add(&w2, &w1, &w0, z[12]); - ws[12] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[12], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[13]); - word3_muladd(&w2, &w1, &w0, ws[1], p[12]); - word3_muladd(&w2, &w1, &w0, ws[2], p[11]); - word3_muladd(&w2, &w1, &w0, ws[3], p[10]); - word3_muladd(&w2, &w1, &w0, ws[4], p[9]); - word3_muladd(&w2, &w1, &w0, ws[5], p[8]); - word3_muladd(&w2, &w1, &w0, ws[6], p[7]); - word3_muladd(&w2, &w1, &w0, ws[7], p[6]); - word3_muladd(&w2, &w1, &w0, ws[8], p[5]); - word3_muladd(&w2, &w1, &w0, ws[9], p[4]); - word3_muladd(&w2, &w1, &w0, ws[10], p[3]); - word3_muladd(&w2, &w1, &w0, ws[11], p[2]); - word3_muladd(&w2, &w1, &w0, ws[12], p[1]); - word3_add(&w2, &w1, &w0, z[13]); - ws[13] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[13], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[14]); - word3_muladd(&w2, &w1, &w0, ws[1], p[13]); - word3_muladd(&w2, &w1, &w0, ws[2], p[12]); - word3_muladd(&w2, &w1, &w0, ws[3], p[11]); - word3_muladd(&w2, &w1, &w0, ws[4], p[10]); - word3_muladd(&w2, &w1, &w0, ws[5], p[9]); - word3_muladd(&w2, &w1, &w0, ws[6], p[8]); - word3_muladd(&w2, &w1, &w0, ws[7], p[7]); - word3_muladd(&w2, &w1, &w0, ws[8], p[6]); - word3_muladd(&w2, &w1, &w0, ws[9], p[5]); - word3_muladd(&w2, &w1, &w0, ws[10], p[4]); - word3_muladd(&w2, &w1, &w0, ws[11], p[3]); - word3_muladd(&w2, &w1, &w0, ws[12], p[2]); - word3_muladd(&w2, &w1, &w0, ws[13], p[1]); - word3_add(&w2, &w1, &w0, z[14]); - ws[14] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[14], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[15]); - word3_muladd(&w2, &w1, &w0, ws[1], p[14]); - word3_muladd(&w2, &w1, &w0, ws[2], p[13]); - word3_muladd(&w2, &w1, &w0, ws[3], p[12]); - word3_muladd(&w2, &w1, &w0, ws[4], p[11]); - word3_muladd(&w2, &w1, &w0, ws[5], p[10]); - word3_muladd(&w2, &w1, &w0, ws[6], p[9]); - word3_muladd(&w2, &w1, &w0, ws[7], p[8]); - word3_muladd(&w2, &w1, &w0, ws[8], p[7]); - word3_muladd(&w2, &w1, &w0, ws[9], p[6]); - word3_muladd(&w2, &w1, &w0, ws[10], p[5]); - word3_muladd(&w2, &w1, &w0, ws[11], p[4]); - word3_muladd(&w2, &w1, &w0, ws[12], p[3]); - word3_muladd(&w2, &w1, &w0, ws[13], p[2]); - word3_muladd(&w2, &w1, &w0, ws[14], p[1]); - word3_add(&w2, &w1, &w0, z[15]); - ws[15] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[15], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[16]); - word3_muladd(&w2, &w1, &w0, ws[1], p[15]); - word3_muladd(&w2, &w1, &w0, ws[2], p[14]); - word3_muladd(&w2, &w1, &w0, ws[3], p[13]); - word3_muladd(&w2, &w1, &w0, ws[4], p[12]); - word3_muladd(&w2, &w1, &w0, ws[5], p[11]); - word3_muladd(&w2, &w1, &w0, ws[6], p[10]); - word3_muladd(&w2, &w1, &w0, ws[7], p[9]); - word3_muladd(&w2, &w1, &w0, ws[8], p[8]); - word3_muladd(&w2, &w1, &w0, ws[9], p[7]); - word3_muladd(&w2, &w1, &w0, ws[10], p[6]); - word3_muladd(&w2, &w1, &w0, ws[11], p[5]); - word3_muladd(&w2, &w1, &w0, ws[12], p[4]); - word3_muladd(&w2, &w1, &w0, ws[13], p[3]); - word3_muladd(&w2, &w1, &w0, ws[14], p[2]); - word3_muladd(&w2, &w1, &w0, ws[15], p[1]); - word3_add(&w2, &w1, &w0, z[16]); - ws[16] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[16], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[17]); - word3_muladd(&w2, &w1, &w0, ws[1], p[16]); - word3_muladd(&w2, &w1, &w0, ws[2], p[15]); - word3_muladd(&w2, &w1, &w0, ws[3], p[14]); - word3_muladd(&w2, &w1, &w0, ws[4], p[13]); - word3_muladd(&w2, &w1, &w0, ws[5], p[12]); - word3_muladd(&w2, &w1, &w0, ws[6], p[11]); - word3_muladd(&w2, &w1, &w0, ws[7], p[10]); - word3_muladd(&w2, &w1, &w0, ws[8], p[9]); - word3_muladd(&w2, &w1, &w0, ws[9], p[8]); - word3_muladd(&w2, &w1, &w0, ws[10], p[7]); - word3_muladd(&w2, &w1, &w0, ws[11], p[6]); - word3_muladd(&w2, &w1, &w0, ws[12], p[5]); - word3_muladd(&w2, &w1, &w0, ws[13], p[4]); - word3_muladd(&w2, &w1, &w0, ws[14], p[3]); - word3_muladd(&w2, &w1, &w0, ws[15], p[2]); - word3_muladd(&w2, &w1, &w0, ws[16], p[1]); - word3_add(&w2, &w1, &w0, z[17]); - ws[17] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[17], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[18]); - word3_muladd(&w2, &w1, &w0, ws[1], p[17]); - word3_muladd(&w2, &w1, &w0, ws[2], p[16]); - word3_muladd(&w2, &w1, &w0, ws[3], p[15]); - word3_muladd(&w2, &w1, &w0, ws[4], p[14]); - word3_muladd(&w2, &w1, &w0, ws[5], p[13]); - word3_muladd(&w2, &w1, &w0, ws[6], p[12]); - word3_muladd(&w2, &w1, &w0, ws[7], p[11]); - word3_muladd(&w2, &w1, &w0, ws[8], p[10]); - word3_muladd(&w2, &w1, &w0, ws[9], p[9]); - word3_muladd(&w2, &w1, &w0, ws[10], p[8]); - word3_muladd(&w2, &w1, &w0, ws[11], p[7]); - word3_muladd(&w2, &w1, &w0, ws[12], p[6]); - word3_muladd(&w2, &w1, &w0, ws[13], p[5]); - word3_muladd(&w2, &w1, &w0, ws[14], p[4]); - word3_muladd(&w2, &w1, &w0, ws[15], p[3]); - word3_muladd(&w2, &w1, &w0, ws[16], p[2]); - word3_muladd(&w2, &w1, &w0, ws[17], p[1]); - word3_add(&w2, &w1, &w0, z[18]); - ws[18] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[18], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[19]); - word3_muladd(&w2, &w1, &w0, ws[1], p[18]); - word3_muladd(&w2, &w1, &w0, ws[2], p[17]); - word3_muladd(&w2, &w1, &w0, ws[3], p[16]); - word3_muladd(&w2, &w1, &w0, ws[4], p[15]); - word3_muladd(&w2, &w1, &w0, ws[5], p[14]); - word3_muladd(&w2, &w1, &w0, ws[6], p[13]); - word3_muladd(&w2, &w1, &w0, ws[7], p[12]); - word3_muladd(&w2, &w1, &w0, ws[8], p[11]); - word3_muladd(&w2, &w1, &w0, ws[9], p[10]); - word3_muladd(&w2, &w1, &w0, ws[10], p[9]); - word3_muladd(&w2, &w1, &w0, ws[11], p[8]); - word3_muladd(&w2, &w1, &w0, ws[12], p[7]); - word3_muladd(&w2, &w1, &w0, ws[13], p[6]); - word3_muladd(&w2, &w1, &w0, ws[14], p[5]); - word3_muladd(&w2, &w1, &w0, ws[15], p[4]); - word3_muladd(&w2, &w1, &w0, ws[16], p[3]); - word3_muladd(&w2, &w1, &w0, ws[17], p[2]); - word3_muladd(&w2, &w1, &w0, ws[18], p[1]); - word3_add(&w2, &w1, &w0, z[19]); - ws[19] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[19], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[20]); - word3_muladd(&w2, &w1, &w0, ws[1], p[19]); - word3_muladd(&w2, &w1, &w0, ws[2], p[18]); - word3_muladd(&w2, &w1, &w0, ws[3], p[17]); - word3_muladd(&w2, &w1, &w0, ws[4], p[16]); - word3_muladd(&w2, &w1, &w0, ws[5], p[15]); - word3_muladd(&w2, &w1, &w0, ws[6], p[14]); - word3_muladd(&w2, &w1, &w0, ws[7], p[13]); - word3_muladd(&w2, &w1, &w0, ws[8], p[12]); - word3_muladd(&w2, &w1, &w0, ws[9], p[11]); - word3_muladd(&w2, &w1, &w0, ws[10], p[10]); - word3_muladd(&w2, &w1, &w0, ws[11], p[9]); - word3_muladd(&w2, &w1, &w0, ws[12], p[8]); - word3_muladd(&w2, &w1, &w0, ws[13], p[7]); - word3_muladd(&w2, &w1, &w0, ws[14], p[6]); - word3_muladd(&w2, &w1, &w0, ws[15], p[5]); - word3_muladd(&w2, &w1, &w0, ws[16], p[4]); - word3_muladd(&w2, &w1, &w0, ws[17], p[3]); - word3_muladd(&w2, &w1, &w0, ws[18], p[2]); - word3_muladd(&w2, &w1, &w0, ws[19], p[1]); - word3_add(&w2, &w1, &w0, z[20]); - ws[20] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[20], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[21]); - word3_muladd(&w2, &w1, &w0, ws[1], p[20]); - word3_muladd(&w2, &w1, &w0, ws[2], p[19]); - word3_muladd(&w2, &w1, &w0, ws[3], p[18]); - word3_muladd(&w2, &w1, &w0, ws[4], p[17]); - word3_muladd(&w2, &w1, &w0, ws[5], p[16]); - word3_muladd(&w2, &w1, &w0, ws[6], p[15]); - word3_muladd(&w2, &w1, &w0, ws[7], p[14]); - word3_muladd(&w2, &w1, &w0, ws[8], p[13]); - word3_muladd(&w2, &w1, &w0, ws[9], p[12]); - word3_muladd(&w2, &w1, &w0, ws[10], p[11]); - word3_muladd(&w2, &w1, &w0, ws[11], p[10]); - word3_muladd(&w2, &w1, &w0, ws[12], p[9]); - word3_muladd(&w2, &w1, &w0, ws[13], p[8]); - word3_muladd(&w2, &w1, &w0, ws[14], p[7]); - word3_muladd(&w2, &w1, &w0, ws[15], p[6]); - word3_muladd(&w2, &w1, &w0, ws[16], p[5]); - word3_muladd(&w2, &w1, &w0, ws[17], p[4]); - word3_muladd(&w2, &w1, &w0, ws[18], p[3]); - word3_muladd(&w2, &w1, &w0, ws[19], p[2]); - word3_muladd(&w2, &w1, &w0, ws[20], p[1]); - word3_add(&w2, &w1, &w0, z[21]); - ws[21] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[21], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[22]); - word3_muladd(&w2, &w1, &w0, ws[1], p[21]); - word3_muladd(&w2, &w1, &w0, ws[2], p[20]); - word3_muladd(&w2, &w1, &w0, ws[3], p[19]); - word3_muladd(&w2, &w1, &w0, ws[4], p[18]); - word3_muladd(&w2, &w1, &w0, ws[5], p[17]); - word3_muladd(&w2, &w1, &w0, ws[6], p[16]); - word3_muladd(&w2, &w1, &w0, ws[7], p[15]); - word3_muladd(&w2, &w1, &w0, ws[8], p[14]); - word3_muladd(&w2, &w1, &w0, ws[9], p[13]); - word3_muladd(&w2, &w1, &w0, ws[10], p[12]); - word3_muladd(&w2, &w1, &w0, ws[11], p[11]); - word3_muladd(&w2, &w1, &w0, ws[12], p[10]); - word3_muladd(&w2, &w1, &w0, ws[13], p[9]); - word3_muladd(&w2, &w1, &w0, ws[14], p[8]); - word3_muladd(&w2, &w1, &w0, ws[15], p[7]); - word3_muladd(&w2, &w1, &w0, ws[16], p[6]); - word3_muladd(&w2, &w1, &w0, ws[17], p[5]); - word3_muladd(&w2, &w1, &w0, ws[18], p[4]); - word3_muladd(&w2, &w1, &w0, ws[19], p[3]); - word3_muladd(&w2, &w1, &w0, ws[20], p[2]); - word3_muladd(&w2, &w1, &w0, ws[21], p[1]); - word3_add(&w2, &w1, &w0, z[22]); - ws[22] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[22], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[23]); - word3_muladd(&w2, &w1, &w0, ws[1], p[22]); - word3_muladd(&w2, &w1, &w0, ws[2], p[21]); - word3_muladd(&w2, &w1, &w0, ws[3], p[20]); - word3_muladd(&w2, &w1, &w0, ws[4], p[19]); - word3_muladd(&w2, &w1, &w0, ws[5], p[18]); - word3_muladd(&w2, &w1, &w0, ws[6], p[17]); - word3_muladd(&w2, &w1, &w0, ws[7], p[16]); - word3_muladd(&w2, &w1, &w0, ws[8], p[15]); - word3_muladd(&w2, &w1, &w0, ws[9], p[14]); - word3_muladd(&w2, &w1, &w0, ws[10], p[13]); - word3_muladd(&w2, &w1, &w0, ws[11], p[12]); - word3_muladd(&w2, &w1, &w0, ws[12], p[11]); - word3_muladd(&w2, &w1, &w0, ws[13], p[10]); - word3_muladd(&w2, &w1, &w0, ws[14], p[9]); - word3_muladd(&w2, &w1, &w0, ws[15], p[8]); - word3_muladd(&w2, &w1, &w0, ws[16], p[7]); - word3_muladd(&w2, &w1, &w0, ws[17], p[6]); - word3_muladd(&w2, &w1, &w0, ws[18], p[5]); - word3_muladd(&w2, &w1, &w0, ws[19], p[4]); - word3_muladd(&w2, &w1, &w0, ws[20], p[3]); - word3_muladd(&w2, &w1, &w0, ws[21], p[2]); - word3_muladd(&w2, &w1, &w0, ws[22], p[1]); - word3_add(&w2, &w1, &w0, z[23]); - ws[23] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[23], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[24]); - word3_muladd(&w2, &w1, &w0, ws[1], p[23]); - word3_muladd(&w2, &w1, &w0, ws[2], p[22]); - word3_muladd(&w2, &w1, &w0, ws[3], p[21]); - word3_muladd(&w2, &w1, &w0, ws[4], p[20]); - word3_muladd(&w2, &w1, &w0, ws[5], p[19]); - word3_muladd(&w2, &w1, &w0, ws[6], p[18]); - word3_muladd(&w2, &w1, &w0, ws[7], p[17]); - word3_muladd(&w2, &w1, &w0, ws[8], p[16]); - word3_muladd(&w2, &w1, &w0, ws[9], p[15]); - word3_muladd(&w2, &w1, &w0, ws[10], p[14]); - word3_muladd(&w2, &w1, &w0, ws[11], p[13]); - word3_muladd(&w2, &w1, &w0, ws[12], p[12]); - word3_muladd(&w2, &w1, &w0, ws[13], p[11]); - word3_muladd(&w2, &w1, &w0, ws[14], p[10]); - word3_muladd(&w2, &w1, &w0, ws[15], p[9]); - word3_muladd(&w2, &w1, &w0, ws[16], p[8]); - word3_muladd(&w2, &w1, &w0, ws[17], p[7]); - word3_muladd(&w2, &w1, &w0, ws[18], p[6]); - word3_muladd(&w2, &w1, &w0, ws[19], p[5]); - word3_muladd(&w2, &w1, &w0, ws[20], p[4]); - word3_muladd(&w2, &w1, &w0, ws[21], p[3]); - word3_muladd(&w2, &w1, &w0, ws[22], p[2]); - word3_muladd(&w2, &w1, &w0, ws[23], p[1]); - word3_add(&w2, &w1, &w0, z[24]); - ws[24] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[24], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[25]); - word3_muladd(&w2, &w1, &w0, ws[1], p[24]); - word3_muladd(&w2, &w1, &w0, ws[2], p[23]); - word3_muladd(&w2, &w1, &w0, ws[3], p[22]); - word3_muladd(&w2, &w1, &w0, ws[4], p[21]); - word3_muladd(&w2, &w1, &w0, ws[5], p[20]); - word3_muladd(&w2, &w1, &w0, ws[6], p[19]); - word3_muladd(&w2, &w1, &w0, ws[7], p[18]); - word3_muladd(&w2, &w1, &w0, ws[8], p[17]); - word3_muladd(&w2, &w1, &w0, ws[9], p[16]); - word3_muladd(&w2, &w1, &w0, ws[10], p[15]); - word3_muladd(&w2, &w1, &w0, ws[11], p[14]); - word3_muladd(&w2, &w1, &w0, ws[12], p[13]); - word3_muladd(&w2, &w1, &w0, ws[13], p[12]); - word3_muladd(&w2, &w1, &w0, ws[14], p[11]); - word3_muladd(&w2, &w1, &w0, ws[15], p[10]); - word3_muladd(&w2, &w1, &w0, ws[16], p[9]); - word3_muladd(&w2, &w1, &w0, ws[17], p[8]); - word3_muladd(&w2, &w1, &w0, ws[18], p[7]); - word3_muladd(&w2, &w1, &w0, ws[19], p[6]); - word3_muladd(&w2, &w1, &w0, ws[20], p[5]); - word3_muladd(&w2, &w1, &w0, ws[21], p[4]); - word3_muladd(&w2, &w1, &w0, ws[22], p[3]); - word3_muladd(&w2, &w1, &w0, ws[23], p[2]); - word3_muladd(&w2, &w1, &w0, ws[24], p[1]); - word3_add(&w2, &w1, &w0, z[25]); - ws[25] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[25], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[26]); - word3_muladd(&w2, &w1, &w0, ws[1], p[25]); - word3_muladd(&w2, &w1, &w0, ws[2], p[24]); - word3_muladd(&w2, &w1, &w0, ws[3], p[23]); - word3_muladd(&w2, &w1, &w0, ws[4], p[22]); - word3_muladd(&w2, &w1, &w0, ws[5], p[21]); - word3_muladd(&w2, &w1, &w0, ws[6], p[20]); - word3_muladd(&w2, &w1, &w0, ws[7], p[19]); - word3_muladd(&w2, &w1, &w0, ws[8], p[18]); - word3_muladd(&w2, &w1, &w0, ws[9], p[17]); - word3_muladd(&w2, &w1, &w0, ws[10], p[16]); - word3_muladd(&w2, &w1, &w0, ws[11], p[15]); - word3_muladd(&w2, &w1, &w0, ws[12], p[14]); - word3_muladd(&w2, &w1, &w0, ws[13], p[13]); - word3_muladd(&w2, &w1, &w0, ws[14], p[12]); - word3_muladd(&w2, &w1, &w0, ws[15], p[11]); - word3_muladd(&w2, &w1, &w0, ws[16], p[10]); - word3_muladd(&w2, &w1, &w0, ws[17], p[9]); - word3_muladd(&w2, &w1, &w0, ws[18], p[8]); - word3_muladd(&w2, &w1, &w0, ws[19], p[7]); - word3_muladd(&w2, &w1, &w0, ws[20], p[6]); - word3_muladd(&w2, &w1, &w0, ws[21], p[5]); - word3_muladd(&w2, &w1, &w0, ws[22], p[4]); - word3_muladd(&w2, &w1, &w0, ws[23], p[3]); - word3_muladd(&w2, &w1, &w0, ws[24], p[2]); - word3_muladd(&w2, &w1, &w0, ws[25], p[1]); - word3_add(&w2, &w1, &w0, z[26]); - ws[26] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[26], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[27]); - word3_muladd(&w2, &w1, &w0, ws[1], p[26]); - word3_muladd(&w2, &w1, &w0, ws[2], p[25]); - word3_muladd(&w2, &w1, &w0, ws[3], p[24]); - word3_muladd(&w2, &w1, &w0, ws[4], p[23]); - word3_muladd(&w2, &w1, &w0, ws[5], p[22]); - word3_muladd(&w2, &w1, &w0, ws[6], p[21]); - word3_muladd(&w2, &w1, &w0, ws[7], p[20]); - word3_muladd(&w2, &w1, &w0, ws[8], p[19]); - word3_muladd(&w2, &w1, &w0, ws[9], p[18]); - word3_muladd(&w2, &w1, &w0, ws[10], p[17]); - word3_muladd(&w2, &w1, &w0, ws[11], p[16]); - word3_muladd(&w2, &w1, &w0, ws[12], p[15]); - word3_muladd(&w2, &w1, &w0, ws[13], p[14]); - word3_muladd(&w2, &w1, &w0, ws[14], p[13]); - word3_muladd(&w2, &w1, &w0, ws[15], p[12]); - word3_muladd(&w2, &w1, &w0, ws[16], p[11]); - word3_muladd(&w2, &w1, &w0, ws[17], p[10]); - word3_muladd(&w2, &w1, &w0, ws[18], p[9]); - word3_muladd(&w2, &w1, &w0, ws[19], p[8]); - word3_muladd(&w2, &w1, &w0, ws[20], p[7]); - word3_muladd(&w2, &w1, &w0, ws[21], p[6]); - word3_muladd(&w2, &w1, &w0, ws[22], p[5]); - word3_muladd(&w2, &w1, &w0, ws[23], p[4]); - word3_muladd(&w2, &w1, &w0, ws[24], p[3]); - word3_muladd(&w2, &w1, &w0, ws[25], p[2]); - word3_muladd(&w2, &w1, &w0, ws[26], p[1]); - word3_add(&w2, &w1, &w0, z[27]); - ws[27] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[27], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[28]); - word3_muladd(&w2, &w1, &w0, ws[1], p[27]); - word3_muladd(&w2, &w1, &w0, ws[2], p[26]); - word3_muladd(&w2, &w1, &w0, ws[3], p[25]); - word3_muladd(&w2, &w1, &w0, ws[4], p[24]); - word3_muladd(&w2, &w1, &w0, ws[5], p[23]); - word3_muladd(&w2, &w1, &w0, ws[6], p[22]); - word3_muladd(&w2, &w1, &w0, ws[7], p[21]); - word3_muladd(&w2, &w1, &w0, ws[8], p[20]); - word3_muladd(&w2, &w1, &w0, ws[9], p[19]); - word3_muladd(&w2, &w1, &w0, ws[10], p[18]); - word3_muladd(&w2, &w1, &w0, ws[11], p[17]); - word3_muladd(&w2, &w1, &w0, ws[12], p[16]); - word3_muladd(&w2, &w1, &w0, ws[13], p[15]); - word3_muladd(&w2, &w1, &w0, ws[14], p[14]); - word3_muladd(&w2, &w1, &w0, ws[15], p[13]); - word3_muladd(&w2, &w1, &w0, ws[16], p[12]); - word3_muladd(&w2, &w1, &w0, ws[17], p[11]); - word3_muladd(&w2, &w1, &w0, ws[18], p[10]); - word3_muladd(&w2, &w1, &w0, ws[19], p[9]); - word3_muladd(&w2, &w1, &w0, ws[20], p[8]); - word3_muladd(&w2, &w1, &w0, ws[21], p[7]); - word3_muladd(&w2, &w1, &w0, ws[22], p[6]); - word3_muladd(&w2, &w1, &w0, ws[23], p[5]); - word3_muladd(&w2, &w1, &w0, ws[24], p[4]); - word3_muladd(&w2, &w1, &w0, ws[25], p[3]); - word3_muladd(&w2, &w1, &w0, ws[26], p[2]); - word3_muladd(&w2, &w1, &w0, ws[27], p[1]); - word3_add(&w2, &w1, &w0, z[28]); - ws[28] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[28], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[29]); - word3_muladd(&w2, &w1, &w0, ws[1], p[28]); - word3_muladd(&w2, &w1, &w0, ws[2], p[27]); - word3_muladd(&w2, &w1, &w0, ws[3], p[26]); - word3_muladd(&w2, &w1, &w0, ws[4], p[25]); - word3_muladd(&w2, &w1, &w0, ws[5], p[24]); - word3_muladd(&w2, &w1, &w0, ws[6], p[23]); - word3_muladd(&w2, &w1, &w0, ws[7], p[22]); - word3_muladd(&w2, &w1, &w0, ws[8], p[21]); - word3_muladd(&w2, &w1, &w0, ws[9], p[20]); - word3_muladd(&w2, &w1, &w0, ws[10], p[19]); - word3_muladd(&w2, &w1, &w0, ws[11], p[18]); - word3_muladd(&w2, &w1, &w0, ws[12], p[17]); - word3_muladd(&w2, &w1, &w0, ws[13], p[16]); - word3_muladd(&w2, &w1, &w0, ws[14], p[15]); - word3_muladd(&w2, &w1, &w0, ws[15], p[14]); - word3_muladd(&w2, &w1, &w0, ws[16], p[13]); - word3_muladd(&w2, &w1, &w0, ws[17], p[12]); - word3_muladd(&w2, &w1, &w0, ws[18], p[11]); - word3_muladd(&w2, &w1, &w0, ws[19], p[10]); - word3_muladd(&w2, &w1, &w0, ws[20], p[9]); - word3_muladd(&w2, &w1, &w0, ws[21], p[8]); - word3_muladd(&w2, &w1, &w0, ws[22], p[7]); - word3_muladd(&w2, &w1, &w0, ws[23], p[6]); - word3_muladd(&w2, &w1, &w0, ws[24], p[5]); - word3_muladd(&w2, &w1, &w0, ws[25], p[4]); - word3_muladd(&w2, &w1, &w0, ws[26], p[3]); - word3_muladd(&w2, &w1, &w0, ws[27], p[2]); - word3_muladd(&w2, &w1, &w0, ws[28], p[1]); - word3_add(&w2, &w1, &w0, z[29]); - ws[29] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[29], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[30]); - word3_muladd(&w2, &w1, &w0, ws[1], p[29]); - word3_muladd(&w2, &w1, &w0, ws[2], p[28]); - word3_muladd(&w2, &w1, &w0, ws[3], p[27]); - word3_muladd(&w2, &w1, &w0, ws[4], p[26]); - word3_muladd(&w2, &w1, &w0, ws[5], p[25]); - word3_muladd(&w2, &w1, &w0, ws[6], p[24]); - word3_muladd(&w2, &w1, &w0, ws[7], p[23]); - word3_muladd(&w2, &w1, &w0, ws[8], p[22]); - word3_muladd(&w2, &w1, &w0, ws[9], p[21]); - word3_muladd(&w2, &w1, &w0, ws[10], p[20]); - word3_muladd(&w2, &w1, &w0, ws[11], p[19]); - word3_muladd(&w2, &w1, &w0, ws[12], p[18]); - word3_muladd(&w2, &w1, &w0, ws[13], p[17]); - word3_muladd(&w2, &w1, &w0, ws[14], p[16]); - word3_muladd(&w2, &w1, &w0, ws[15], p[15]); - word3_muladd(&w2, &w1, &w0, ws[16], p[14]); - word3_muladd(&w2, &w1, &w0, ws[17], p[13]); - word3_muladd(&w2, &w1, &w0, ws[18], p[12]); - word3_muladd(&w2, &w1, &w0, ws[19], p[11]); - word3_muladd(&w2, &w1, &w0, ws[20], p[10]); - word3_muladd(&w2, &w1, &w0, ws[21], p[9]); - word3_muladd(&w2, &w1, &w0, ws[22], p[8]); - word3_muladd(&w2, &w1, &w0, ws[23], p[7]); - word3_muladd(&w2, &w1, &w0, ws[24], p[6]); - word3_muladd(&w2, &w1, &w0, ws[25], p[5]); - word3_muladd(&w2, &w1, &w0, ws[26], p[4]); - word3_muladd(&w2, &w1, &w0, ws[27], p[3]); - word3_muladd(&w2, &w1, &w0, ws[28], p[2]); - word3_muladd(&w2, &w1, &w0, ws[29], p[1]); - word3_add(&w2, &w1, &w0, z[30]); - ws[30] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[30], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[0], p[31]); - word3_muladd(&w2, &w1, &w0, ws[1], p[30]); - word3_muladd(&w2, &w1, &w0, ws[2], p[29]); - word3_muladd(&w2, &w1, &w0, ws[3], p[28]); - word3_muladd(&w2, &w1, &w0, ws[4], p[27]); - word3_muladd(&w2, &w1, &w0, ws[5], p[26]); - word3_muladd(&w2, &w1, &w0, ws[6], p[25]); - word3_muladd(&w2, &w1, &w0, ws[7], p[24]); - word3_muladd(&w2, &w1, &w0, ws[8], p[23]); - word3_muladd(&w2, &w1, &w0, ws[9], p[22]); - word3_muladd(&w2, &w1, &w0, ws[10], p[21]); - word3_muladd(&w2, &w1, &w0, ws[11], p[20]); - word3_muladd(&w2, &w1, &w0, ws[12], p[19]); - word3_muladd(&w2, &w1, &w0, ws[13], p[18]); - word3_muladd(&w2, &w1, &w0, ws[14], p[17]); - word3_muladd(&w2, &w1, &w0, ws[15], p[16]); - word3_muladd(&w2, &w1, &w0, ws[16], p[15]); - word3_muladd(&w2, &w1, &w0, ws[17], p[14]); - word3_muladd(&w2, &w1, &w0, ws[18], p[13]); - word3_muladd(&w2, &w1, &w0, ws[19], p[12]); - word3_muladd(&w2, &w1, &w0, ws[20], p[11]); - word3_muladd(&w2, &w1, &w0, ws[21], p[10]); - word3_muladd(&w2, &w1, &w0, ws[22], p[9]); - word3_muladd(&w2, &w1, &w0, ws[23], p[8]); - word3_muladd(&w2, &w1, &w0, ws[24], p[7]); - word3_muladd(&w2, &w1, &w0, ws[25], p[6]); - word3_muladd(&w2, &w1, &w0, ws[26], p[5]); - word3_muladd(&w2, &w1, &w0, ws[27], p[4]); - word3_muladd(&w2, &w1, &w0, ws[28], p[3]); - word3_muladd(&w2, &w1, &w0, ws[29], p[2]); - word3_muladd(&w2, &w1, &w0, ws[30], p[1]); - word3_add(&w2, &w1, &w0, z[31]); - ws[31] = w0 * p_dash; - word3_muladd(&w2, &w1, &w0, ws[31], p[0]); - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[1], p[31]); - word3_muladd(&w2, &w1, &w0, ws[2], p[30]); - word3_muladd(&w2, &w1, &w0, ws[3], p[29]); - word3_muladd(&w2, &w1, &w0, ws[4], p[28]); - word3_muladd(&w2, &w1, &w0, ws[5], p[27]); - word3_muladd(&w2, &w1, &w0, ws[6], p[26]); - word3_muladd(&w2, &w1, &w0, ws[7], p[25]); - word3_muladd(&w2, &w1, &w0, ws[8], p[24]); - word3_muladd(&w2, &w1, &w0, ws[9], p[23]); - word3_muladd(&w2, &w1, &w0, ws[10], p[22]); - word3_muladd(&w2, &w1, &w0, ws[11], p[21]); - word3_muladd(&w2, &w1, &w0, ws[12], p[20]); - word3_muladd(&w2, &w1, &w0, ws[13], p[19]); - word3_muladd(&w2, &w1, &w0, ws[14], p[18]); - word3_muladd(&w2, &w1, &w0, ws[15], p[17]); - word3_muladd(&w2, &w1, &w0, ws[16], p[16]); - word3_muladd(&w2, &w1, &w0, ws[17], p[15]); - word3_muladd(&w2, &w1, &w0, ws[18], p[14]); - word3_muladd(&w2, &w1, &w0, ws[19], p[13]); - word3_muladd(&w2, &w1, &w0, ws[20], p[12]); - word3_muladd(&w2, &w1, &w0, ws[21], p[11]); - word3_muladd(&w2, &w1, &w0, ws[22], p[10]); - word3_muladd(&w2, &w1, &w0, ws[23], p[9]); - word3_muladd(&w2, &w1, &w0, ws[24], p[8]); - word3_muladd(&w2, &w1, &w0, ws[25], p[7]); - word3_muladd(&w2, &w1, &w0, ws[26], p[6]); - word3_muladd(&w2, &w1, &w0, ws[27], p[5]); - word3_muladd(&w2, &w1, &w0, ws[28], p[4]); - word3_muladd(&w2, &w1, &w0, ws[29], p[3]); - word3_muladd(&w2, &w1, &w0, ws[30], p[2]); - word3_muladd(&w2, &w1, &w0, ws[31], p[1]); - word3_add(&w2, &w1, &w0, z[32]); - ws[0] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[2], p[31]); - word3_muladd(&w2, &w1, &w0, ws[3], p[30]); - word3_muladd(&w2, &w1, &w0, ws[4], p[29]); - word3_muladd(&w2, &w1, &w0, ws[5], p[28]); - word3_muladd(&w2, &w1, &w0, ws[6], p[27]); - word3_muladd(&w2, &w1, &w0, ws[7], p[26]); - word3_muladd(&w2, &w1, &w0, ws[8], p[25]); - word3_muladd(&w2, &w1, &w0, ws[9], p[24]); - word3_muladd(&w2, &w1, &w0, ws[10], p[23]); - word3_muladd(&w2, &w1, &w0, ws[11], p[22]); - word3_muladd(&w2, &w1, &w0, ws[12], p[21]); - word3_muladd(&w2, &w1, &w0, ws[13], p[20]); - word3_muladd(&w2, &w1, &w0, ws[14], p[19]); - word3_muladd(&w2, &w1, &w0, ws[15], p[18]); - word3_muladd(&w2, &w1, &w0, ws[16], p[17]); - word3_muladd(&w2, &w1, &w0, ws[17], p[16]); - word3_muladd(&w2, &w1, &w0, ws[18], p[15]); - word3_muladd(&w2, &w1, &w0, ws[19], p[14]); - word3_muladd(&w2, &w1, &w0, ws[20], p[13]); - word3_muladd(&w2, &w1, &w0, ws[21], p[12]); - word3_muladd(&w2, &w1, &w0, ws[22], p[11]); - word3_muladd(&w2, &w1, &w0, ws[23], p[10]); - word3_muladd(&w2, &w1, &w0, ws[24], p[9]); - word3_muladd(&w2, &w1, &w0, ws[25], p[8]); - word3_muladd(&w2, &w1, &w0, ws[26], p[7]); - word3_muladd(&w2, &w1, &w0, ws[27], p[6]); - word3_muladd(&w2, &w1, &w0, ws[28], p[5]); - word3_muladd(&w2, &w1, &w0, ws[29], p[4]); - word3_muladd(&w2, &w1, &w0, ws[30], p[3]); - word3_muladd(&w2, &w1, &w0, ws[31], p[2]); - word3_add(&w2, &w1, &w0, z[33]); - ws[1] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[3], p[31]); - word3_muladd(&w2, &w1, &w0, ws[4], p[30]); - word3_muladd(&w2, &w1, &w0, ws[5], p[29]); - word3_muladd(&w2, &w1, &w0, ws[6], p[28]); - word3_muladd(&w2, &w1, &w0, ws[7], p[27]); - word3_muladd(&w2, &w1, &w0, ws[8], p[26]); - word3_muladd(&w2, &w1, &w0, ws[9], p[25]); - word3_muladd(&w2, &w1, &w0, ws[10], p[24]); - word3_muladd(&w2, &w1, &w0, ws[11], p[23]); - word3_muladd(&w2, &w1, &w0, ws[12], p[22]); - word3_muladd(&w2, &w1, &w0, ws[13], p[21]); - word3_muladd(&w2, &w1, &w0, ws[14], p[20]); - word3_muladd(&w2, &w1, &w0, ws[15], p[19]); - word3_muladd(&w2, &w1, &w0, ws[16], p[18]); - word3_muladd(&w2, &w1, &w0, ws[17], p[17]); - word3_muladd(&w2, &w1, &w0, ws[18], p[16]); - word3_muladd(&w2, &w1, &w0, ws[19], p[15]); - word3_muladd(&w2, &w1, &w0, ws[20], p[14]); - word3_muladd(&w2, &w1, &w0, ws[21], p[13]); - word3_muladd(&w2, &w1, &w0, ws[22], p[12]); - word3_muladd(&w2, &w1, &w0, ws[23], p[11]); - word3_muladd(&w2, &w1, &w0, ws[24], p[10]); - word3_muladd(&w2, &w1, &w0, ws[25], p[9]); - word3_muladd(&w2, &w1, &w0, ws[26], p[8]); - word3_muladd(&w2, &w1, &w0, ws[27], p[7]); - word3_muladd(&w2, &w1, &w0, ws[28], p[6]); - word3_muladd(&w2, &w1, &w0, ws[29], p[5]); - word3_muladd(&w2, &w1, &w0, ws[30], p[4]); - word3_muladd(&w2, &w1, &w0, ws[31], p[3]); - word3_add(&w2, &w1, &w0, z[34]); - ws[2] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[4], p[31]); - word3_muladd(&w2, &w1, &w0, ws[5], p[30]); - word3_muladd(&w2, &w1, &w0, ws[6], p[29]); - word3_muladd(&w2, &w1, &w0, ws[7], p[28]); - word3_muladd(&w2, &w1, &w0, ws[8], p[27]); - word3_muladd(&w2, &w1, &w0, ws[9], p[26]); - word3_muladd(&w2, &w1, &w0, ws[10], p[25]); - word3_muladd(&w2, &w1, &w0, ws[11], p[24]); - word3_muladd(&w2, &w1, &w0, ws[12], p[23]); - word3_muladd(&w2, &w1, &w0, ws[13], p[22]); - word3_muladd(&w2, &w1, &w0, ws[14], p[21]); - word3_muladd(&w2, &w1, &w0, ws[15], p[20]); - word3_muladd(&w2, &w1, &w0, ws[16], p[19]); - word3_muladd(&w2, &w1, &w0, ws[17], p[18]); - word3_muladd(&w2, &w1, &w0, ws[18], p[17]); - word3_muladd(&w2, &w1, &w0, ws[19], p[16]); - word3_muladd(&w2, &w1, &w0, ws[20], p[15]); - word3_muladd(&w2, &w1, &w0, ws[21], p[14]); - word3_muladd(&w2, &w1, &w0, ws[22], p[13]); - word3_muladd(&w2, &w1, &w0, ws[23], p[12]); - word3_muladd(&w2, &w1, &w0, ws[24], p[11]); - word3_muladd(&w2, &w1, &w0, ws[25], p[10]); - word3_muladd(&w2, &w1, &w0, ws[26], p[9]); - word3_muladd(&w2, &w1, &w0, ws[27], p[8]); - word3_muladd(&w2, &w1, &w0, ws[28], p[7]); - word3_muladd(&w2, &w1, &w0, ws[29], p[6]); - word3_muladd(&w2, &w1, &w0, ws[30], p[5]); - word3_muladd(&w2, &w1, &w0, ws[31], p[4]); - word3_add(&w2, &w1, &w0, z[35]); - ws[3] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[5], p[31]); - word3_muladd(&w2, &w1, &w0, ws[6], p[30]); - word3_muladd(&w2, &w1, &w0, ws[7], p[29]); - word3_muladd(&w2, &w1, &w0, ws[8], p[28]); - word3_muladd(&w2, &w1, &w0, ws[9], p[27]); - word3_muladd(&w2, &w1, &w0, ws[10], p[26]); - word3_muladd(&w2, &w1, &w0, ws[11], p[25]); - word3_muladd(&w2, &w1, &w0, ws[12], p[24]); - word3_muladd(&w2, &w1, &w0, ws[13], p[23]); - word3_muladd(&w2, &w1, &w0, ws[14], p[22]); - word3_muladd(&w2, &w1, &w0, ws[15], p[21]); - word3_muladd(&w2, &w1, &w0, ws[16], p[20]); - word3_muladd(&w2, &w1, &w0, ws[17], p[19]); - word3_muladd(&w2, &w1, &w0, ws[18], p[18]); - word3_muladd(&w2, &w1, &w0, ws[19], p[17]); - word3_muladd(&w2, &w1, &w0, ws[20], p[16]); - word3_muladd(&w2, &w1, &w0, ws[21], p[15]); - word3_muladd(&w2, &w1, &w0, ws[22], p[14]); - word3_muladd(&w2, &w1, &w0, ws[23], p[13]); - word3_muladd(&w2, &w1, &w0, ws[24], p[12]); - word3_muladd(&w2, &w1, &w0, ws[25], p[11]); - word3_muladd(&w2, &w1, &w0, ws[26], p[10]); - word3_muladd(&w2, &w1, &w0, ws[27], p[9]); - word3_muladd(&w2, &w1, &w0, ws[28], p[8]); - word3_muladd(&w2, &w1, &w0, ws[29], p[7]); - word3_muladd(&w2, &w1, &w0, ws[30], p[6]); - word3_muladd(&w2, &w1, &w0, ws[31], p[5]); - word3_add(&w2, &w1, &w0, z[36]); - ws[4] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[6], p[31]); - word3_muladd(&w2, &w1, &w0, ws[7], p[30]); - word3_muladd(&w2, &w1, &w0, ws[8], p[29]); - word3_muladd(&w2, &w1, &w0, ws[9], p[28]); - word3_muladd(&w2, &w1, &w0, ws[10], p[27]); - word3_muladd(&w2, &w1, &w0, ws[11], p[26]); - word3_muladd(&w2, &w1, &w0, ws[12], p[25]); - word3_muladd(&w2, &w1, &w0, ws[13], p[24]); - word3_muladd(&w2, &w1, &w0, ws[14], p[23]); - word3_muladd(&w2, &w1, &w0, ws[15], p[22]); - word3_muladd(&w2, &w1, &w0, ws[16], p[21]); - word3_muladd(&w2, &w1, &w0, ws[17], p[20]); - word3_muladd(&w2, &w1, &w0, ws[18], p[19]); - word3_muladd(&w2, &w1, &w0, ws[19], p[18]); - word3_muladd(&w2, &w1, &w0, ws[20], p[17]); - word3_muladd(&w2, &w1, &w0, ws[21], p[16]); - word3_muladd(&w2, &w1, &w0, ws[22], p[15]); - word3_muladd(&w2, &w1, &w0, ws[23], p[14]); - word3_muladd(&w2, &w1, &w0, ws[24], p[13]); - word3_muladd(&w2, &w1, &w0, ws[25], p[12]); - word3_muladd(&w2, &w1, &w0, ws[26], p[11]); - word3_muladd(&w2, &w1, &w0, ws[27], p[10]); - word3_muladd(&w2, &w1, &w0, ws[28], p[9]); - word3_muladd(&w2, &w1, &w0, ws[29], p[8]); - word3_muladd(&w2, &w1, &w0, ws[30], p[7]); - word3_muladd(&w2, &w1, &w0, ws[31], p[6]); - word3_add(&w2, &w1, &w0, z[37]); - ws[5] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[7], p[31]); - word3_muladd(&w2, &w1, &w0, ws[8], p[30]); - word3_muladd(&w2, &w1, &w0, ws[9], p[29]); - word3_muladd(&w2, &w1, &w0, ws[10], p[28]); - word3_muladd(&w2, &w1, &w0, ws[11], p[27]); - word3_muladd(&w2, &w1, &w0, ws[12], p[26]); - word3_muladd(&w2, &w1, &w0, ws[13], p[25]); - word3_muladd(&w2, &w1, &w0, ws[14], p[24]); - word3_muladd(&w2, &w1, &w0, ws[15], p[23]); - word3_muladd(&w2, &w1, &w0, ws[16], p[22]); - word3_muladd(&w2, &w1, &w0, ws[17], p[21]); - word3_muladd(&w2, &w1, &w0, ws[18], p[20]); - word3_muladd(&w2, &w1, &w0, ws[19], p[19]); - word3_muladd(&w2, &w1, &w0, ws[20], p[18]); - word3_muladd(&w2, &w1, &w0, ws[21], p[17]); - word3_muladd(&w2, &w1, &w0, ws[22], p[16]); - word3_muladd(&w2, &w1, &w0, ws[23], p[15]); - word3_muladd(&w2, &w1, &w0, ws[24], p[14]); - word3_muladd(&w2, &w1, &w0, ws[25], p[13]); - word3_muladd(&w2, &w1, &w0, ws[26], p[12]); - word3_muladd(&w2, &w1, &w0, ws[27], p[11]); - word3_muladd(&w2, &w1, &w0, ws[28], p[10]); - word3_muladd(&w2, &w1, &w0, ws[29], p[9]); - word3_muladd(&w2, &w1, &w0, ws[30], p[8]); - word3_muladd(&w2, &w1, &w0, ws[31], p[7]); - word3_add(&w2, &w1, &w0, z[38]); - ws[6] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[8], p[31]); - word3_muladd(&w2, &w1, &w0, ws[9], p[30]); - word3_muladd(&w2, &w1, &w0, ws[10], p[29]); - word3_muladd(&w2, &w1, &w0, ws[11], p[28]); - word3_muladd(&w2, &w1, &w0, ws[12], p[27]); - word3_muladd(&w2, &w1, &w0, ws[13], p[26]); - word3_muladd(&w2, &w1, &w0, ws[14], p[25]); - word3_muladd(&w2, &w1, &w0, ws[15], p[24]); - word3_muladd(&w2, &w1, &w0, ws[16], p[23]); - word3_muladd(&w2, &w1, &w0, ws[17], p[22]); - word3_muladd(&w2, &w1, &w0, ws[18], p[21]); - word3_muladd(&w2, &w1, &w0, ws[19], p[20]); - word3_muladd(&w2, &w1, &w0, ws[20], p[19]); - word3_muladd(&w2, &w1, &w0, ws[21], p[18]); - word3_muladd(&w2, &w1, &w0, ws[22], p[17]); - word3_muladd(&w2, &w1, &w0, ws[23], p[16]); - word3_muladd(&w2, &w1, &w0, ws[24], p[15]); - word3_muladd(&w2, &w1, &w0, ws[25], p[14]); - word3_muladd(&w2, &w1, &w0, ws[26], p[13]); - word3_muladd(&w2, &w1, &w0, ws[27], p[12]); - word3_muladd(&w2, &w1, &w0, ws[28], p[11]); - word3_muladd(&w2, &w1, &w0, ws[29], p[10]); - word3_muladd(&w2, &w1, &w0, ws[30], p[9]); - word3_muladd(&w2, &w1, &w0, ws[31], p[8]); - word3_add(&w2, &w1, &w0, z[39]); - ws[7] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[9], p[31]); - word3_muladd(&w2, &w1, &w0, ws[10], p[30]); - word3_muladd(&w2, &w1, &w0, ws[11], p[29]); - word3_muladd(&w2, &w1, &w0, ws[12], p[28]); - word3_muladd(&w2, &w1, &w0, ws[13], p[27]); - word3_muladd(&w2, &w1, &w0, ws[14], p[26]); - word3_muladd(&w2, &w1, &w0, ws[15], p[25]); - word3_muladd(&w2, &w1, &w0, ws[16], p[24]); - word3_muladd(&w2, &w1, &w0, ws[17], p[23]); - word3_muladd(&w2, &w1, &w0, ws[18], p[22]); - word3_muladd(&w2, &w1, &w0, ws[19], p[21]); - word3_muladd(&w2, &w1, &w0, ws[20], p[20]); - word3_muladd(&w2, &w1, &w0, ws[21], p[19]); - word3_muladd(&w2, &w1, &w0, ws[22], p[18]); - word3_muladd(&w2, &w1, &w0, ws[23], p[17]); - word3_muladd(&w2, &w1, &w0, ws[24], p[16]); - word3_muladd(&w2, &w1, &w0, ws[25], p[15]); - word3_muladd(&w2, &w1, &w0, ws[26], p[14]); - word3_muladd(&w2, &w1, &w0, ws[27], p[13]); - word3_muladd(&w2, &w1, &w0, ws[28], p[12]); - word3_muladd(&w2, &w1, &w0, ws[29], p[11]); - word3_muladd(&w2, &w1, &w0, ws[30], p[10]); - word3_muladd(&w2, &w1, &w0, ws[31], p[9]); - word3_add(&w2, &w1, &w0, z[40]); - ws[8] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[10], p[31]); - word3_muladd(&w2, &w1, &w0, ws[11], p[30]); - word3_muladd(&w2, &w1, &w0, ws[12], p[29]); - word3_muladd(&w2, &w1, &w0, ws[13], p[28]); - word3_muladd(&w2, &w1, &w0, ws[14], p[27]); - word3_muladd(&w2, &w1, &w0, ws[15], p[26]); - word3_muladd(&w2, &w1, &w0, ws[16], p[25]); - word3_muladd(&w2, &w1, &w0, ws[17], p[24]); - word3_muladd(&w2, &w1, &w0, ws[18], p[23]); - word3_muladd(&w2, &w1, &w0, ws[19], p[22]); - word3_muladd(&w2, &w1, &w0, ws[20], p[21]); - word3_muladd(&w2, &w1, &w0, ws[21], p[20]); - word3_muladd(&w2, &w1, &w0, ws[22], p[19]); - word3_muladd(&w2, &w1, &w0, ws[23], p[18]); - word3_muladd(&w2, &w1, &w0, ws[24], p[17]); - word3_muladd(&w2, &w1, &w0, ws[25], p[16]); - word3_muladd(&w2, &w1, &w0, ws[26], p[15]); - word3_muladd(&w2, &w1, &w0, ws[27], p[14]); - word3_muladd(&w2, &w1, &w0, ws[28], p[13]); - word3_muladd(&w2, &w1, &w0, ws[29], p[12]); - word3_muladd(&w2, &w1, &w0, ws[30], p[11]); - word3_muladd(&w2, &w1, &w0, ws[31], p[10]); - word3_add(&w2, &w1, &w0, z[41]); - ws[9] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[11], p[31]); - word3_muladd(&w2, &w1, &w0, ws[12], p[30]); - word3_muladd(&w2, &w1, &w0, ws[13], p[29]); - word3_muladd(&w2, &w1, &w0, ws[14], p[28]); - word3_muladd(&w2, &w1, &w0, ws[15], p[27]); - word3_muladd(&w2, &w1, &w0, ws[16], p[26]); - word3_muladd(&w2, &w1, &w0, ws[17], p[25]); - word3_muladd(&w2, &w1, &w0, ws[18], p[24]); - word3_muladd(&w2, &w1, &w0, ws[19], p[23]); - word3_muladd(&w2, &w1, &w0, ws[20], p[22]); - word3_muladd(&w2, &w1, &w0, ws[21], p[21]); - word3_muladd(&w2, &w1, &w0, ws[22], p[20]); - word3_muladd(&w2, &w1, &w0, ws[23], p[19]); - word3_muladd(&w2, &w1, &w0, ws[24], p[18]); - word3_muladd(&w2, &w1, &w0, ws[25], p[17]); - word3_muladd(&w2, &w1, &w0, ws[26], p[16]); - word3_muladd(&w2, &w1, &w0, ws[27], p[15]); - word3_muladd(&w2, &w1, &w0, ws[28], p[14]); - word3_muladd(&w2, &w1, &w0, ws[29], p[13]); - word3_muladd(&w2, &w1, &w0, ws[30], p[12]); - word3_muladd(&w2, &w1, &w0, ws[31], p[11]); - word3_add(&w2, &w1, &w0, z[42]); - ws[10] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[12], p[31]); - word3_muladd(&w2, &w1, &w0, ws[13], p[30]); - word3_muladd(&w2, &w1, &w0, ws[14], p[29]); - word3_muladd(&w2, &w1, &w0, ws[15], p[28]); - word3_muladd(&w2, &w1, &w0, ws[16], p[27]); - word3_muladd(&w2, &w1, &w0, ws[17], p[26]); - word3_muladd(&w2, &w1, &w0, ws[18], p[25]); - word3_muladd(&w2, &w1, &w0, ws[19], p[24]); - word3_muladd(&w2, &w1, &w0, ws[20], p[23]); - word3_muladd(&w2, &w1, &w0, ws[21], p[22]); - word3_muladd(&w2, &w1, &w0, ws[22], p[21]); - word3_muladd(&w2, &w1, &w0, ws[23], p[20]); - word3_muladd(&w2, &w1, &w0, ws[24], p[19]); - word3_muladd(&w2, &w1, &w0, ws[25], p[18]); - word3_muladd(&w2, &w1, &w0, ws[26], p[17]); - word3_muladd(&w2, &w1, &w0, ws[27], p[16]); - word3_muladd(&w2, &w1, &w0, ws[28], p[15]); - word3_muladd(&w2, &w1, &w0, ws[29], p[14]); - word3_muladd(&w2, &w1, &w0, ws[30], p[13]); - word3_muladd(&w2, &w1, &w0, ws[31], p[12]); - word3_add(&w2, &w1, &w0, z[43]); - ws[11] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[13], p[31]); - word3_muladd(&w2, &w1, &w0, ws[14], p[30]); - word3_muladd(&w2, &w1, &w0, ws[15], p[29]); - word3_muladd(&w2, &w1, &w0, ws[16], p[28]); - word3_muladd(&w2, &w1, &w0, ws[17], p[27]); - word3_muladd(&w2, &w1, &w0, ws[18], p[26]); - word3_muladd(&w2, &w1, &w0, ws[19], p[25]); - word3_muladd(&w2, &w1, &w0, ws[20], p[24]); - word3_muladd(&w2, &w1, &w0, ws[21], p[23]); - word3_muladd(&w2, &w1, &w0, ws[22], p[22]); - word3_muladd(&w2, &w1, &w0, ws[23], p[21]); - word3_muladd(&w2, &w1, &w0, ws[24], p[20]); - word3_muladd(&w2, &w1, &w0, ws[25], p[19]); - word3_muladd(&w2, &w1, &w0, ws[26], p[18]); - word3_muladd(&w2, &w1, &w0, ws[27], p[17]); - word3_muladd(&w2, &w1, &w0, ws[28], p[16]); - word3_muladd(&w2, &w1, &w0, ws[29], p[15]); - word3_muladd(&w2, &w1, &w0, ws[30], p[14]); - word3_muladd(&w2, &w1, &w0, ws[31], p[13]); - word3_add(&w2, &w1, &w0, z[44]); - ws[12] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[14], p[31]); - word3_muladd(&w2, &w1, &w0, ws[15], p[30]); - word3_muladd(&w2, &w1, &w0, ws[16], p[29]); - word3_muladd(&w2, &w1, &w0, ws[17], p[28]); - word3_muladd(&w2, &w1, &w0, ws[18], p[27]); - word3_muladd(&w2, &w1, &w0, ws[19], p[26]); - word3_muladd(&w2, &w1, &w0, ws[20], p[25]); - word3_muladd(&w2, &w1, &w0, ws[21], p[24]); - word3_muladd(&w2, &w1, &w0, ws[22], p[23]); - word3_muladd(&w2, &w1, &w0, ws[23], p[22]); - word3_muladd(&w2, &w1, &w0, ws[24], p[21]); - word3_muladd(&w2, &w1, &w0, ws[25], p[20]); - word3_muladd(&w2, &w1, &w0, ws[26], p[19]); - word3_muladd(&w2, &w1, &w0, ws[27], p[18]); - word3_muladd(&w2, &w1, &w0, ws[28], p[17]); - word3_muladd(&w2, &w1, &w0, ws[29], p[16]); - word3_muladd(&w2, &w1, &w0, ws[30], p[15]); - word3_muladd(&w2, &w1, &w0, ws[31], p[14]); - word3_add(&w2, &w1, &w0, z[45]); - ws[13] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[15], p[31]); - word3_muladd(&w2, &w1, &w0, ws[16], p[30]); - word3_muladd(&w2, &w1, &w0, ws[17], p[29]); - word3_muladd(&w2, &w1, &w0, ws[18], p[28]); - word3_muladd(&w2, &w1, &w0, ws[19], p[27]); - word3_muladd(&w2, &w1, &w0, ws[20], p[26]); - word3_muladd(&w2, &w1, &w0, ws[21], p[25]); - word3_muladd(&w2, &w1, &w0, ws[22], p[24]); - word3_muladd(&w2, &w1, &w0, ws[23], p[23]); - word3_muladd(&w2, &w1, &w0, ws[24], p[22]); - word3_muladd(&w2, &w1, &w0, ws[25], p[21]); - word3_muladd(&w2, &w1, &w0, ws[26], p[20]); - word3_muladd(&w2, &w1, &w0, ws[27], p[19]); - word3_muladd(&w2, &w1, &w0, ws[28], p[18]); - word3_muladd(&w2, &w1, &w0, ws[29], p[17]); - word3_muladd(&w2, &w1, &w0, ws[30], p[16]); - word3_muladd(&w2, &w1, &w0, ws[31], p[15]); - word3_add(&w2, &w1, &w0, z[46]); - ws[14] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[16], p[31]); - word3_muladd(&w2, &w1, &w0, ws[17], p[30]); - word3_muladd(&w2, &w1, &w0, ws[18], p[29]); - word3_muladd(&w2, &w1, &w0, ws[19], p[28]); - word3_muladd(&w2, &w1, &w0, ws[20], p[27]); - word3_muladd(&w2, &w1, &w0, ws[21], p[26]); - word3_muladd(&w2, &w1, &w0, ws[22], p[25]); - word3_muladd(&w2, &w1, &w0, ws[23], p[24]); - word3_muladd(&w2, &w1, &w0, ws[24], p[23]); - word3_muladd(&w2, &w1, &w0, ws[25], p[22]); - word3_muladd(&w2, &w1, &w0, ws[26], p[21]); - word3_muladd(&w2, &w1, &w0, ws[27], p[20]); - word3_muladd(&w2, &w1, &w0, ws[28], p[19]); - word3_muladd(&w2, &w1, &w0, ws[29], p[18]); - word3_muladd(&w2, &w1, &w0, ws[30], p[17]); - word3_muladd(&w2, &w1, &w0, ws[31], p[16]); - word3_add(&w2, &w1, &w0, z[47]); - ws[15] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[17], p[31]); - word3_muladd(&w2, &w1, &w0, ws[18], p[30]); - word3_muladd(&w2, &w1, &w0, ws[19], p[29]); - word3_muladd(&w2, &w1, &w0, ws[20], p[28]); - word3_muladd(&w2, &w1, &w0, ws[21], p[27]); - word3_muladd(&w2, &w1, &w0, ws[22], p[26]); - word3_muladd(&w2, &w1, &w0, ws[23], p[25]); - word3_muladd(&w2, &w1, &w0, ws[24], p[24]); - word3_muladd(&w2, &w1, &w0, ws[25], p[23]); - word3_muladd(&w2, &w1, &w0, ws[26], p[22]); - word3_muladd(&w2, &w1, &w0, ws[27], p[21]); - word3_muladd(&w2, &w1, &w0, ws[28], p[20]); - word3_muladd(&w2, &w1, &w0, ws[29], p[19]); - word3_muladd(&w2, &w1, &w0, ws[30], p[18]); - word3_muladd(&w2, &w1, &w0, ws[31], p[17]); - word3_add(&w2, &w1, &w0, z[48]); - ws[16] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[18], p[31]); - word3_muladd(&w2, &w1, &w0, ws[19], p[30]); - word3_muladd(&w2, &w1, &w0, ws[20], p[29]); - word3_muladd(&w2, &w1, &w0, ws[21], p[28]); - word3_muladd(&w2, &w1, &w0, ws[22], p[27]); - word3_muladd(&w2, &w1, &w0, ws[23], p[26]); - word3_muladd(&w2, &w1, &w0, ws[24], p[25]); - word3_muladd(&w2, &w1, &w0, ws[25], p[24]); - word3_muladd(&w2, &w1, &w0, ws[26], p[23]); - word3_muladd(&w2, &w1, &w0, ws[27], p[22]); - word3_muladd(&w2, &w1, &w0, ws[28], p[21]); - word3_muladd(&w2, &w1, &w0, ws[29], p[20]); - word3_muladd(&w2, &w1, &w0, ws[30], p[19]); - word3_muladd(&w2, &w1, &w0, ws[31], p[18]); - word3_add(&w2, &w1, &w0, z[49]); - ws[17] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[19], p[31]); - word3_muladd(&w2, &w1, &w0, ws[20], p[30]); - word3_muladd(&w2, &w1, &w0, ws[21], p[29]); - word3_muladd(&w2, &w1, &w0, ws[22], p[28]); - word3_muladd(&w2, &w1, &w0, ws[23], p[27]); - word3_muladd(&w2, &w1, &w0, ws[24], p[26]); - word3_muladd(&w2, &w1, &w0, ws[25], p[25]); - word3_muladd(&w2, &w1, &w0, ws[26], p[24]); - word3_muladd(&w2, &w1, &w0, ws[27], p[23]); - word3_muladd(&w2, &w1, &w0, ws[28], p[22]); - word3_muladd(&w2, &w1, &w0, ws[29], p[21]); - word3_muladd(&w2, &w1, &w0, ws[30], p[20]); - word3_muladd(&w2, &w1, &w0, ws[31], p[19]); - word3_add(&w2, &w1, &w0, z[50]); - ws[18] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[20], p[31]); - word3_muladd(&w2, &w1, &w0, ws[21], p[30]); - word3_muladd(&w2, &w1, &w0, ws[22], p[29]); - word3_muladd(&w2, &w1, &w0, ws[23], p[28]); - word3_muladd(&w2, &w1, &w0, ws[24], p[27]); - word3_muladd(&w2, &w1, &w0, ws[25], p[26]); - word3_muladd(&w2, &w1, &w0, ws[26], p[25]); - word3_muladd(&w2, &w1, &w0, ws[27], p[24]); - word3_muladd(&w2, &w1, &w0, ws[28], p[23]); - word3_muladd(&w2, &w1, &w0, ws[29], p[22]); - word3_muladd(&w2, &w1, &w0, ws[30], p[21]); - word3_muladd(&w2, &w1, &w0, ws[31], p[20]); - word3_add(&w2, &w1, &w0, z[51]); - ws[19] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[21], p[31]); - word3_muladd(&w2, &w1, &w0, ws[22], p[30]); - word3_muladd(&w2, &w1, &w0, ws[23], p[29]); - word3_muladd(&w2, &w1, &w0, ws[24], p[28]); - word3_muladd(&w2, &w1, &w0, ws[25], p[27]); - word3_muladd(&w2, &w1, &w0, ws[26], p[26]); - word3_muladd(&w2, &w1, &w0, ws[27], p[25]); - word3_muladd(&w2, &w1, &w0, ws[28], p[24]); - word3_muladd(&w2, &w1, &w0, ws[29], p[23]); - word3_muladd(&w2, &w1, &w0, ws[30], p[22]); - word3_muladd(&w2, &w1, &w0, ws[31], p[21]); - word3_add(&w2, &w1, &w0, z[52]); - ws[20] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[22], p[31]); - word3_muladd(&w2, &w1, &w0, ws[23], p[30]); - word3_muladd(&w2, &w1, &w0, ws[24], p[29]); - word3_muladd(&w2, &w1, &w0, ws[25], p[28]); - word3_muladd(&w2, &w1, &w0, ws[26], p[27]); - word3_muladd(&w2, &w1, &w0, ws[27], p[26]); - word3_muladd(&w2, &w1, &w0, ws[28], p[25]); - word3_muladd(&w2, &w1, &w0, ws[29], p[24]); - word3_muladd(&w2, &w1, &w0, ws[30], p[23]); - word3_muladd(&w2, &w1, &w0, ws[31], p[22]); - word3_add(&w2, &w1, &w0, z[53]); - ws[21] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[23], p[31]); - word3_muladd(&w2, &w1, &w0, ws[24], p[30]); - word3_muladd(&w2, &w1, &w0, ws[25], p[29]); - word3_muladd(&w2, &w1, &w0, ws[26], p[28]); - word3_muladd(&w2, &w1, &w0, ws[27], p[27]); - word3_muladd(&w2, &w1, &w0, ws[28], p[26]); - word3_muladd(&w2, &w1, &w0, ws[29], p[25]); - word3_muladd(&w2, &w1, &w0, ws[30], p[24]); - word3_muladd(&w2, &w1, &w0, ws[31], p[23]); - word3_add(&w2, &w1, &w0, z[54]); - ws[22] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[24], p[31]); - word3_muladd(&w2, &w1, &w0, ws[25], p[30]); - word3_muladd(&w2, &w1, &w0, ws[26], p[29]); - word3_muladd(&w2, &w1, &w0, ws[27], p[28]); - word3_muladd(&w2, &w1, &w0, ws[28], p[27]); - word3_muladd(&w2, &w1, &w0, ws[29], p[26]); - word3_muladd(&w2, &w1, &w0, ws[30], p[25]); - word3_muladd(&w2, &w1, &w0, ws[31], p[24]); - word3_add(&w2, &w1, &w0, z[55]); - ws[23] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[25], p[31]); - word3_muladd(&w2, &w1, &w0, ws[26], p[30]); - word3_muladd(&w2, &w1, &w0, ws[27], p[29]); - word3_muladd(&w2, &w1, &w0, ws[28], p[28]); - word3_muladd(&w2, &w1, &w0, ws[29], p[27]); - word3_muladd(&w2, &w1, &w0, ws[30], p[26]); - word3_muladd(&w2, &w1, &w0, ws[31], p[25]); - word3_add(&w2, &w1, &w0, z[56]); - ws[24] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[26], p[31]); - word3_muladd(&w2, &w1, &w0, ws[27], p[30]); - word3_muladd(&w2, &w1, &w0, ws[28], p[29]); - word3_muladd(&w2, &w1, &w0, ws[29], p[28]); - word3_muladd(&w2, &w1, &w0, ws[30], p[27]); - word3_muladd(&w2, &w1, &w0, ws[31], p[26]); - word3_add(&w2, &w1, &w0, z[57]); - ws[25] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[27], p[31]); - word3_muladd(&w2, &w1, &w0, ws[28], p[30]); - word3_muladd(&w2, &w1, &w0, ws[29], p[29]); - word3_muladd(&w2, &w1, &w0, ws[30], p[28]); - word3_muladd(&w2, &w1, &w0, ws[31], p[27]); - word3_add(&w2, &w1, &w0, z[58]); - ws[26] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[28], p[31]); - word3_muladd(&w2, &w1, &w0, ws[29], p[30]); - word3_muladd(&w2, &w1, &w0, ws[30], p[29]); - word3_muladd(&w2, &w1, &w0, ws[31], p[28]); - word3_add(&w2, &w1, &w0, z[59]); - ws[27] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[29], p[31]); - word3_muladd(&w2, &w1, &w0, ws[30], p[30]); - word3_muladd(&w2, &w1, &w0, ws[31], p[29]); - word3_add(&w2, &w1, &w0, z[60]); - ws[28] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[30], p[31]); - word3_muladd(&w2, &w1, &w0, ws[31], p[30]); - word3_add(&w2, &w1, &w0, z[61]); - ws[29] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_muladd(&w2, &w1, &w0, ws[31], p[31]); - word3_add(&w2, &w1, &w0, z[62]); - ws[30] = w0; - w0 = w1; - w1 = w2; - w2 = 0; - word3_add(&w2, &w1, &w0, z[63]); - ws[31] = w0; + word3 accum; + accum.add(z[0]); + ws[0] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[1]); + accum.add(z[1]); + ws[1] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[2]); + accum.mul(ws[1], p[1]); + accum.add(z[2]); + ws[2] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[3]); + accum.mul(ws[1], p[2]); + accum.mul(ws[2], p[1]); + accum.add(z[3]); + ws[3] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[4]); + accum.mul(ws[1], p[3]); + accum.mul(ws[2], p[2]); + accum.mul(ws[3], p[1]); + accum.add(z[4]); + ws[4] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[5]); + accum.mul(ws[1], p[4]); + accum.mul(ws[2], p[3]); + accum.mul(ws[3], p[2]); + accum.mul(ws[4], p[1]); + accum.add(z[5]); + ws[5] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[6]); + accum.mul(ws[1], p[5]); + accum.mul(ws[2], p[4]); + accum.mul(ws[3], p[3]); + accum.mul(ws[4], p[2]); + accum.mul(ws[5], p[1]); + accum.add(z[6]); + ws[6] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[7]); + accum.mul(ws[1], p[6]); + accum.mul(ws[2], p[5]); + accum.mul(ws[3], p[4]); + accum.mul(ws[4], p[3]); + accum.mul(ws[5], p[2]); + accum.mul(ws[6], p[1]); + accum.add(z[7]); + ws[7] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[8]); + accum.mul(ws[1], p[7]); + accum.mul(ws[2], p[6]); + accum.mul(ws[3], p[5]); + accum.mul(ws[4], p[4]); + accum.mul(ws[5], p[3]); + accum.mul(ws[6], p[2]); + accum.mul(ws[7], p[1]); + accum.add(z[8]); + ws[8] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[9]); + accum.mul(ws[1], p[8]); + accum.mul(ws[2], p[7]); + accum.mul(ws[3], p[6]); + accum.mul(ws[4], p[5]); + accum.mul(ws[5], p[4]); + accum.mul(ws[6], p[3]); + accum.mul(ws[7], p[2]); + accum.mul(ws[8], p[1]); + accum.add(z[9]); + ws[9] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[10]); + accum.mul(ws[1], p[9]); + accum.mul(ws[2], p[8]); + accum.mul(ws[3], p[7]); + accum.mul(ws[4], p[6]); + accum.mul(ws[5], p[5]); + accum.mul(ws[6], p[4]); + accum.mul(ws[7], p[3]); + accum.mul(ws[8], p[2]); + accum.mul(ws[9], p[1]); + accum.add(z[10]); + ws[10] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[11]); + accum.mul(ws[1], p[10]); + accum.mul(ws[2], p[9]); + accum.mul(ws[3], p[8]); + accum.mul(ws[4], p[7]); + accum.mul(ws[5], p[6]); + accum.mul(ws[6], p[5]); + accum.mul(ws[7], p[4]); + accum.mul(ws[8], p[3]); + accum.mul(ws[9], p[2]); + accum.mul(ws[10], p[1]); + accum.add(z[11]); + ws[11] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[12]); + accum.mul(ws[1], p[11]); + accum.mul(ws[2], p[10]); + accum.mul(ws[3], p[9]); + accum.mul(ws[4], p[8]); + accum.mul(ws[5], p[7]); + accum.mul(ws[6], p[6]); + accum.mul(ws[7], p[5]); + accum.mul(ws[8], p[4]); + accum.mul(ws[9], p[3]); + accum.mul(ws[10], p[2]); + accum.mul(ws[11], p[1]); + accum.add(z[12]); + ws[12] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[13]); + accum.mul(ws[1], p[12]); + accum.mul(ws[2], p[11]); + accum.mul(ws[3], p[10]); + accum.mul(ws[4], p[9]); + accum.mul(ws[5], p[8]); + accum.mul(ws[6], p[7]); + accum.mul(ws[7], p[6]); + accum.mul(ws[8], p[5]); + accum.mul(ws[9], p[4]); + accum.mul(ws[10], p[3]); + accum.mul(ws[11], p[2]); + accum.mul(ws[12], p[1]); + accum.add(z[13]); + ws[13] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[14]); + accum.mul(ws[1], p[13]); + accum.mul(ws[2], p[12]); + accum.mul(ws[3], p[11]); + accum.mul(ws[4], p[10]); + accum.mul(ws[5], p[9]); + accum.mul(ws[6], p[8]); + accum.mul(ws[7], p[7]); + accum.mul(ws[8], p[6]); + accum.mul(ws[9], p[5]); + accum.mul(ws[10], p[4]); + accum.mul(ws[11], p[3]); + accum.mul(ws[12], p[2]); + accum.mul(ws[13], p[1]); + accum.add(z[14]); + ws[14] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[15]); + accum.mul(ws[1], p[14]); + accum.mul(ws[2], p[13]); + accum.mul(ws[3], p[12]); + accum.mul(ws[4], p[11]); + accum.mul(ws[5], p[10]); + accum.mul(ws[6], p[9]); + accum.mul(ws[7], p[8]); + accum.mul(ws[8], p[7]); + accum.mul(ws[9], p[6]); + accum.mul(ws[10], p[5]); + accum.mul(ws[11], p[4]); + accum.mul(ws[12], p[3]); + accum.mul(ws[13], p[2]); + accum.mul(ws[14], p[1]); + accum.add(z[15]); + ws[15] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[16]); + accum.mul(ws[1], p[15]); + accum.mul(ws[2], p[14]); + accum.mul(ws[3], p[13]); + accum.mul(ws[4], p[12]); + accum.mul(ws[5], p[11]); + accum.mul(ws[6], p[10]); + accum.mul(ws[7], p[9]); + accum.mul(ws[8], p[8]); + accum.mul(ws[9], p[7]); + accum.mul(ws[10], p[6]); + accum.mul(ws[11], p[5]); + accum.mul(ws[12], p[4]); + accum.mul(ws[13], p[3]); + accum.mul(ws[14], p[2]); + accum.mul(ws[15], p[1]); + accum.add(z[16]); + ws[16] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[17]); + accum.mul(ws[1], p[16]); + accum.mul(ws[2], p[15]); + accum.mul(ws[3], p[14]); + accum.mul(ws[4], p[13]); + accum.mul(ws[5], p[12]); + accum.mul(ws[6], p[11]); + accum.mul(ws[7], p[10]); + accum.mul(ws[8], p[9]); + accum.mul(ws[9], p[8]); + accum.mul(ws[10], p[7]); + accum.mul(ws[11], p[6]); + accum.mul(ws[12], p[5]); + accum.mul(ws[13], p[4]); + accum.mul(ws[14], p[3]); + accum.mul(ws[15], p[2]); + accum.mul(ws[16], p[1]); + accum.add(z[17]); + ws[17] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[18]); + accum.mul(ws[1], p[17]); + accum.mul(ws[2], p[16]); + accum.mul(ws[3], p[15]); + accum.mul(ws[4], p[14]); + accum.mul(ws[5], p[13]); + accum.mul(ws[6], p[12]); + accum.mul(ws[7], p[11]); + accum.mul(ws[8], p[10]); + accum.mul(ws[9], p[9]); + accum.mul(ws[10], p[8]); + accum.mul(ws[11], p[7]); + accum.mul(ws[12], p[6]); + accum.mul(ws[13], p[5]); + accum.mul(ws[14], p[4]); + accum.mul(ws[15], p[3]); + accum.mul(ws[16], p[2]); + accum.mul(ws[17], p[1]); + accum.add(z[18]); + ws[18] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[19]); + accum.mul(ws[1], p[18]); + accum.mul(ws[2], p[17]); + accum.mul(ws[3], p[16]); + accum.mul(ws[4], p[15]); + accum.mul(ws[5], p[14]); + accum.mul(ws[6], p[13]); + accum.mul(ws[7], p[12]); + accum.mul(ws[8], p[11]); + accum.mul(ws[9], p[10]); + accum.mul(ws[10], p[9]); + accum.mul(ws[11], p[8]); + accum.mul(ws[12], p[7]); + accum.mul(ws[13], p[6]); + accum.mul(ws[14], p[5]); + accum.mul(ws[15], p[4]); + accum.mul(ws[16], p[3]); + accum.mul(ws[17], p[2]); + accum.mul(ws[18], p[1]); + accum.add(z[19]); + ws[19] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[20]); + accum.mul(ws[1], p[19]); + accum.mul(ws[2], p[18]); + accum.mul(ws[3], p[17]); + accum.mul(ws[4], p[16]); + accum.mul(ws[5], p[15]); + accum.mul(ws[6], p[14]); + accum.mul(ws[7], p[13]); + accum.mul(ws[8], p[12]); + accum.mul(ws[9], p[11]); + accum.mul(ws[10], p[10]); + accum.mul(ws[11], p[9]); + accum.mul(ws[12], p[8]); + accum.mul(ws[13], p[7]); + accum.mul(ws[14], p[6]); + accum.mul(ws[15], p[5]); + accum.mul(ws[16], p[4]); + accum.mul(ws[17], p[3]); + accum.mul(ws[18], p[2]); + accum.mul(ws[19], p[1]); + accum.add(z[20]); + ws[20] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[21]); + accum.mul(ws[1], p[20]); + accum.mul(ws[2], p[19]); + accum.mul(ws[3], p[18]); + accum.mul(ws[4], p[17]); + accum.mul(ws[5], p[16]); + accum.mul(ws[6], p[15]); + accum.mul(ws[7], p[14]); + accum.mul(ws[8], p[13]); + accum.mul(ws[9], p[12]); + accum.mul(ws[10], p[11]); + accum.mul(ws[11], p[10]); + accum.mul(ws[12], p[9]); + accum.mul(ws[13], p[8]); + accum.mul(ws[14], p[7]); + accum.mul(ws[15], p[6]); + accum.mul(ws[16], p[5]); + accum.mul(ws[17], p[4]); + accum.mul(ws[18], p[3]); + accum.mul(ws[19], p[2]); + accum.mul(ws[20], p[1]); + accum.add(z[21]); + ws[21] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[22]); + accum.mul(ws[1], p[21]); + accum.mul(ws[2], p[20]); + accum.mul(ws[3], p[19]); + accum.mul(ws[4], p[18]); + accum.mul(ws[5], p[17]); + accum.mul(ws[6], p[16]); + accum.mul(ws[7], p[15]); + accum.mul(ws[8], p[14]); + accum.mul(ws[9], p[13]); + accum.mul(ws[10], p[12]); + accum.mul(ws[11], p[11]); + accum.mul(ws[12], p[10]); + accum.mul(ws[13], p[9]); + accum.mul(ws[14], p[8]); + accum.mul(ws[15], p[7]); + accum.mul(ws[16], p[6]); + accum.mul(ws[17], p[5]); + accum.mul(ws[18], p[4]); + accum.mul(ws[19], p[3]); + accum.mul(ws[20], p[2]); + accum.mul(ws[21], p[1]); + accum.add(z[22]); + ws[22] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[23]); + accum.mul(ws[1], p[22]); + accum.mul(ws[2], p[21]); + accum.mul(ws[3], p[20]); + accum.mul(ws[4], p[19]); + accum.mul(ws[5], p[18]); + accum.mul(ws[6], p[17]); + accum.mul(ws[7], p[16]); + accum.mul(ws[8], p[15]); + accum.mul(ws[9], p[14]); + accum.mul(ws[10], p[13]); + accum.mul(ws[11], p[12]); + accum.mul(ws[12], p[11]); + accum.mul(ws[13], p[10]); + accum.mul(ws[14], p[9]); + accum.mul(ws[15], p[8]); + accum.mul(ws[16], p[7]); + accum.mul(ws[17], p[6]); + accum.mul(ws[18], p[5]); + accum.mul(ws[19], p[4]); + accum.mul(ws[20], p[3]); + accum.mul(ws[21], p[2]); + accum.mul(ws[22], p[1]); + accum.add(z[23]); + ws[23] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[24]); + accum.mul(ws[1], p[23]); + accum.mul(ws[2], p[22]); + accum.mul(ws[3], p[21]); + accum.mul(ws[4], p[20]); + accum.mul(ws[5], p[19]); + accum.mul(ws[6], p[18]); + accum.mul(ws[7], p[17]); + accum.mul(ws[8], p[16]); + accum.mul(ws[9], p[15]); + accum.mul(ws[10], p[14]); + accum.mul(ws[11], p[13]); + accum.mul(ws[12], p[12]); + accum.mul(ws[13], p[11]); + accum.mul(ws[14], p[10]); + accum.mul(ws[15], p[9]); + accum.mul(ws[16], p[8]); + accum.mul(ws[17], p[7]); + accum.mul(ws[18], p[6]); + accum.mul(ws[19], p[5]); + accum.mul(ws[20], p[4]); + accum.mul(ws[21], p[3]); + accum.mul(ws[22], p[2]); + accum.mul(ws[23], p[1]); + accum.add(z[24]); + ws[24] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[25]); + accum.mul(ws[1], p[24]); + accum.mul(ws[2], p[23]); + accum.mul(ws[3], p[22]); + accum.mul(ws[4], p[21]); + accum.mul(ws[5], p[20]); + accum.mul(ws[6], p[19]); + accum.mul(ws[7], p[18]); + accum.mul(ws[8], p[17]); + accum.mul(ws[9], p[16]); + accum.mul(ws[10], p[15]); + accum.mul(ws[11], p[14]); + accum.mul(ws[12], p[13]); + accum.mul(ws[13], p[12]); + accum.mul(ws[14], p[11]); + accum.mul(ws[15], p[10]); + accum.mul(ws[16], p[9]); + accum.mul(ws[17], p[8]); + accum.mul(ws[18], p[7]); + accum.mul(ws[19], p[6]); + accum.mul(ws[20], p[5]); + accum.mul(ws[21], p[4]); + accum.mul(ws[22], p[3]); + accum.mul(ws[23], p[2]); + accum.mul(ws[24], p[1]); + accum.add(z[25]); + ws[25] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[26]); + accum.mul(ws[1], p[25]); + accum.mul(ws[2], p[24]); + accum.mul(ws[3], p[23]); + accum.mul(ws[4], p[22]); + accum.mul(ws[5], p[21]); + accum.mul(ws[6], p[20]); + accum.mul(ws[7], p[19]); + accum.mul(ws[8], p[18]); + accum.mul(ws[9], p[17]); + accum.mul(ws[10], p[16]); + accum.mul(ws[11], p[15]); + accum.mul(ws[12], p[14]); + accum.mul(ws[13], p[13]); + accum.mul(ws[14], p[12]); + accum.mul(ws[15], p[11]); + accum.mul(ws[16], p[10]); + accum.mul(ws[17], p[9]); + accum.mul(ws[18], p[8]); + accum.mul(ws[19], p[7]); + accum.mul(ws[20], p[6]); + accum.mul(ws[21], p[5]); + accum.mul(ws[22], p[4]); + accum.mul(ws[23], p[3]); + accum.mul(ws[24], p[2]); + accum.mul(ws[25], p[1]); + accum.add(z[26]); + ws[26] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[27]); + accum.mul(ws[1], p[26]); + accum.mul(ws[2], p[25]); + accum.mul(ws[3], p[24]); + accum.mul(ws[4], p[23]); + accum.mul(ws[5], p[22]); + accum.mul(ws[6], p[21]); + accum.mul(ws[7], p[20]); + accum.mul(ws[8], p[19]); + accum.mul(ws[9], p[18]); + accum.mul(ws[10], p[17]); + accum.mul(ws[11], p[16]); + accum.mul(ws[12], p[15]); + accum.mul(ws[13], p[14]); + accum.mul(ws[14], p[13]); + accum.mul(ws[15], p[12]); + accum.mul(ws[16], p[11]); + accum.mul(ws[17], p[10]); + accum.mul(ws[18], p[9]); + accum.mul(ws[19], p[8]); + accum.mul(ws[20], p[7]); + accum.mul(ws[21], p[6]); + accum.mul(ws[22], p[5]); + accum.mul(ws[23], p[4]); + accum.mul(ws[24], p[3]); + accum.mul(ws[25], p[2]); + accum.mul(ws[26], p[1]); + accum.add(z[27]); + ws[27] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[28]); + accum.mul(ws[1], p[27]); + accum.mul(ws[2], p[26]); + accum.mul(ws[3], p[25]); + accum.mul(ws[4], p[24]); + accum.mul(ws[5], p[23]); + accum.mul(ws[6], p[22]); + accum.mul(ws[7], p[21]); + accum.mul(ws[8], p[20]); + accum.mul(ws[9], p[19]); + accum.mul(ws[10], p[18]); + accum.mul(ws[11], p[17]); + accum.mul(ws[12], p[16]); + accum.mul(ws[13], p[15]); + accum.mul(ws[14], p[14]); + accum.mul(ws[15], p[13]); + accum.mul(ws[16], p[12]); + accum.mul(ws[17], p[11]); + accum.mul(ws[18], p[10]); + accum.mul(ws[19], p[9]); + accum.mul(ws[20], p[8]); + accum.mul(ws[21], p[7]); + accum.mul(ws[22], p[6]); + accum.mul(ws[23], p[5]); + accum.mul(ws[24], p[4]); + accum.mul(ws[25], p[3]); + accum.mul(ws[26], p[2]); + accum.mul(ws[27], p[1]); + accum.add(z[28]); + ws[28] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[29]); + accum.mul(ws[1], p[28]); + accum.mul(ws[2], p[27]); + accum.mul(ws[3], p[26]); + accum.mul(ws[4], p[25]); + accum.mul(ws[5], p[24]); + accum.mul(ws[6], p[23]); + accum.mul(ws[7], p[22]); + accum.mul(ws[8], p[21]); + accum.mul(ws[9], p[20]); + accum.mul(ws[10], p[19]); + accum.mul(ws[11], p[18]); + accum.mul(ws[12], p[17]); + accum.mul(ws[13], p[16]); + accum.mul(ws[14], p[15]); + accum.mul(ws[15], p[14]); + accum.mul(ws[16], p[13]); + accum.mul(ws[17], p[12]); + accum.mul(ws[18], p[11]); + accum.mul(ws[19], p[10]); + accum.mul(ws[20], p[9]); + accum.mul(ws[21], p[8]); + accum.mul(ws[22], p[7]); + accum.mul(ws[23], p[6]); + accum.mul(ws[24], p[5]); + accum.mul(ws[25], p[4]); + accum.mul(ws[26], p[3]); + accum.mul(ws[27], p[2]); + accum.mul(ws[28], p[1]); + accum.add(z[29]); + ws[29] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[30]); + accum.mul(ws[1], p[29]); + accum.mul(ws[2], p[28]); + accum.mul(ws[3], p[27]); + accum.mul(ws[4], p[26]); + accum.mul(ws[5], p[25]); + accum.mul(ws[6], p[24]); + accum.mul(ws[7], p[23]); + accum.mul(ws[8], p[22]); + accum.mul(ws[9], p[21]); + accum.mul(ws[10], p[20]); + accum.mul(ws[11], p[19]); + accum.mul(ws[12], p[18]); + accum.mul(ws[13], p[17]); + accum.mul(ws[14], p[16]); + accum.mul(ws[15], p[15]); + accum.mul(ws[16], p[14]); + accum.mul(ws[17], p[13]); + accum.mul(ws[18], p[12]); + accum.mul(ws[19], p[11]); + accum.mul(ws[20], p[10]); + accum.mul(ws[21], p[9]); + accum.mul(ws[22], p[8]); + accum.mul(ws[23], p[7]); + accum.mul(ws[24], p[6]); + accum.mul(ws[25], p[5]); + accum.mul(ws[26], p[4]); + accum.mul(ws[27], p[3]); + accum.mul(ws[28], p[2]); + accum.mul(ws[29], p[1]); + accum.add(z[30]); + ws[30] = accum.monty_step(p[0], p_dash); + accum.mul(ws[0], p[31]); + accum.mul(ws[1], p[30]); + accum.mul(ws[2], p[29]); + accum.mul(ws[3], p[28]); + accum.mul(ws[4], p[27]); + accum.mul(ws[5], p[26]); + accum.mul(ws[6], p[25]); + accum.mul(ws[7], p[24]); + accum.mul(ws[8], p[23]); + accum.mul(ws[9], p[22]); + accum.mul(ws[10], p[21]); + accum.mul(ws[11], p[20]); + accum.mul(ws[12], p[19]); + accum.mul(ws[13], p[18]); + accum.mul(ws[14], p[17]); + accum.mul(ws[15], p[16]); + accum.mul(ws[16], p[15]); + accum.mul(ws[17], p[14]); + accum.mul(ws[18], p[13]); + accum.mul(ws[19], p[12]); + accum.mul(ws[20], p[11]); + accum.mul(ws[21], p[10]); + accum.mul(ws[22], p[9]); + accum.mul(ws[23], p[8]); + accum.mul(ws[24], p[7]); + accum.mul(ws[25], p[6]); + accum.mul(ws[26], p[5]); + accum.mul(ws[27], p[4]); + accum.mul(ws[28], p[3]); + accum.mul(ws[29], p[2]); + accum.mul(ws[30], p[1]); + accum.add(z[31]); + ws[31] = accum.monty_step(p[0], p_dash); + accum.mul(ws[1], p[31]); + accum.mul(ws[2], p[30]); + accum.mul(ws[3], p[29]); + accum.mul(ws[4], p[28]); + accum.mul(ws[5], p[27]); + accum.mul(ws[6], p[26]); + accum.mul(ws[7], p[25]); + accum.mul(ws[8], p[24]); + accum.mul(ws[9], p[23]); + accum.mul(ws[10], p[22]); + accum.mul(ws[11], p[21]); + accum.mul(ws[12], p[20]); + accum.mul(ws[13], p[19]); + accum.mul(ws[14], p[18]); + accum.mul(ws[15], p[17]); + accum.mul(ws[16], p[16]); + accum.mul(ws[17], p[15]); + accum.mul(ws[18], p[14]); + accum.mul(ws[19], p[13]); + accum.mul(ws[20], p[12]); + accum.mul(ws[21], p[11]); + accum.mul(ws[22], p[10]); + accum.mul(ws[23], p[9]); + accum.mul(ws[24], p[8]); + accum.mul(ws[25], p[7]); + accum.mul(ws[26], p[6]); + accum.mul(ws[27], p[5]); + accum.mul(ws[28], p[4]); + accum.mul(ws[29], p[3]); + accum.mul(ws[30], p[2]); + accum.mul(ws[31], p[1]); + accum.add(z[32]); + ws[0] = accum.extract(); + accum.mul(ws[2], p[31]); + accum.mul(ws[3], p[30]); + accum.mul(ws[4], p[29]); + accum.mul(ws[5], p[28]); + accum.mul(ws[6], p[27]); + accum.mul(ws[7], p[26]); + accum.mul(ws[8], p[25]); + accum.mul(ws[9], p[24]); + accum.mul(ws[10], p[23]); + accum.mul(ws[11], p[22]); + accum.mul(ws[12], p[21]); + accum.mul(ws[13], p[20]); + accum.mul(ws[14], p[19]); + accum.mul(ws[15], p[18]); + accum.mul(ws[16], p[17]); + accum.mul(ws[17], p[16]); + accum.mul(ws[18], p[15]); + accum.mul(ws[19], p[14]); + accum.mul(ws[20], p[13]); + accum.mul(ws[21], p[12]); + accum.mul(ws[22], p[11]); + accum.mul(ws[23], p[10]); + accum.mul(ws[24], p[9]); + accum.mul(ws[25], p[8]); + accum.mul(ws[26], p[7]); + accum.mul(ws[27], p[6]); + accum.mul(ws[28], p[5]); + accum.mul(ws[29], p[4]); + accum.mul(ws[30], p[3]); + accum.mul(ws[31], p[2]); + accum.add(z[33]); + ws[1] = accum.extract(); + accum.mul(ws[3], p[31]); + accum.mul(ws[4], p[30]); + accum.mul(ws[5], p[29]); + accum.mul(ws[6], p[28]); + accum.mul(ws[7], p[27]); + accum.mul(ws[8], p[26]); + accum.mul(ws[9], p[25]); + accum.mul(ws[10], p[24]); + accum.mul(ws[11], p[23]); + accum.mul(ws[12], p[22]); + accum.mul(ws[13], p[21]); + accum.mul(ws[14], p[20]); + accum.mul(ws[15], p[19]); + accum.mul(ws[16], p[18]); + accum.mul(ws[17], p[17]); + accum.mul(ws[18], p[16]); + accum.mul(ws[19], p[15]); + accum.mul(ws[20], p[14]); + accum.mul(ws[21], p[13]); + accum.mul(ws[22], p[12]); + accum.mul(ws[23], p[11]); + accum.mul(ws[24], p[10]); + accum.mul(ws[25], p[9]); + accum.mul(ws[26], p[8]); + accum.mul(ws[27], p[7]); + accum.mul(ws[28], p[6]); + accum.mul(ws[29], p[5]); + accum.mul(ws[30], p[4]); + accum.mul(ws[31], p[3]); + accum.add(z[34]); + ws[2] = accum.extract(); + accum.mul(ws[4], p[31]); + accum.mul(ws[5], p[30]); + accum.mul(ws[6], p[29]); + accum.mul(ws[7], p[28]); + accum.mul(ws[8], p[27]); + accum.mul(ws[9], p[26]); + accum.mul(ws[10], p[25]); + accum.mul(ws[11], p[24]); + accum.mul(ws[12], p[23]); + accum.mul(ws[13], p[22]); + accum.mul(ws[14], p[21]); + accum.mul(ws[15], p[20]); + accum.mul(ws[16], p[19]); + accum.mul(ws[17], p[18]); + accum.mul(ws[18], p[17]); + accum.mul(ws[19], p[16]); + accum.mul(ws[20], p[15]); + accum.mul(ws[21], p[14]); + accum.mul(ws[22], p[13]); + accum.mul(ws[23], p[12]); + accum.mul(ws[24], p[11]); + accum.mul(ws[25], p[10]); + accum.mul(ws[26], p[9]); + accum.mul(ws[27], p[8]); + accum.mul(ws[28], p[7]); + accum.mul(ws[29], p[6]); + accum.mul(ws[30], p[5]); + accum.mul(ws[31], p[4]); + accum.add(z[35]); + ws[3] = accum.extract(); + accum.mul(ws[5], p[31]); + accum.mul(ws[6], p[30]); + accum.mul(ws[7], p[29]); + accum.mul(ws[8], p[28]); + accum.mul(ws[9], p[27]); + accum.mul(ws[10], p[26]); + accum.mul(ws[11], p[25]); + accum.mul(ws[12], p[24]); + accum.mul(ws[13], p[23]); + accum.mul(ws[14], p[22]); + accum.mul(ws[15], p[21]); + accum.mul(ws[16], p[20]); + accum.mul(ws[17], p[19]); + accum.mul(ws[18], p[18]); + accum.mul(ws[19], p[17]); + accum.mul(ws[20], p[16]); + accum.mul(ws[21], p[15]); + accum.mul(ws[22], p[14]); + accum.mul(ws[23], p[13]); + accum.mul(ws[24], p[12]); + accum.mul(ws[25], p[11]); + accum.mul(ws[26], p[10]); + accum.mul(ws[27], p[9]); + accum.mul(ws[28], p[8]); + accum.mul(ws[29], p[7]); + accum.mul(ws[30], p[6]); + accum.mul(ws[31], p[5]); + accum.add(z[36]); + ws[4] = accum.extract(); + accum.mul(ws[6], p[31]); + accum.mul(ws[7], p[30]); + accum.mul(ws[8], p[29]); + accum.mul(ws[9], p[28]); + accum.mul(ws[10], p[27]); + accum.mul(ws[11], p[26]); + accum.mul(ws[12], p[25]); + accum.mul(ws[13], p[24]); + accum.mul(ws[14], p[23]); + accum.mul(ws[15], p[22]); + accum.mul(ws[16], p[21]); + accum.mul(ws[17], p[20]); + accum.mul(ws[18], p[19]); + accum.mul(ws[19], p[18]); + accum.mul(ws[20], p[17]); + accum.mul(ws[21], p[16]); + accum.mul(ws[22], p[15]); + accum.mul(ws[23], p[14]); + accum.mul(ws[24], p[13]); + accum.mul(ws[25], p[12]); + accum.mul(ws[26], p[11]); + accum.mul(ws[27], p[10]); + accum.mul(ws[28], p[9]); + accum.mul(ws[29], p[8]); + accum.mul(ws[30], p[7]); + accum.mul(ws[31], p[6]); + accum.add(z[37]); + ws[5] = accum.extract(); + accum.mul(ws[7], p[31]); + accum.mul(ws[8], p[30]); + accum.mul(ws[9], p[29]); + accum.mul(ws[10], p[28]); + accum.mul(ws[11], p[27]); + accum.mul(ws[12], p[26]); + accum.mul(ws[13], p[25]); + accum.mul(ws[14], p[24]); + accum.mul(ws[15], p[23]); + accum.mul(ws[16], p[22]); + accum.mul(ws[17], p[21]); + accum.mul(ws[18], p[20]); + accum.mul(ws[19], p[19]); + accum.mul(ws[20], p[18]); + accum.mul(ws[21], p[17]); + accum.mul(ws[22], p[16]); + accum.mul(ws[23], p[15]); + accum.mul(ws[24], p[14]); + accum.mul(ws[25], p[13]); + accum.mul(ws[26], p[12]); + accum.mul(ws[27], p[11]); + accum.mul(ws[28], p[10]); + accum.mul(ws[29], p[9]); + accum.mul(ws[30], p[8]); + accum.mul(ws[31], p[7]); + accum.add(z[38]); + ws[6] = accum.extract(); + accum.mul(ws[8], p[31]); + accum.mul(ws[9], p[30]); + accum.mul(ws[10], p[29]); + accum.mul(ws[11], p[28]); + accum.mul(ws[12], p[27]); + accum.mul(ws[13], p[26]); + accum.mul(ws[14], p[25]); + accum.mul(ws[15], p[24]); + accum.mul(ws[16], p[23]); + accum.mul(ws[17], p[22]); + accum.mul(ws[18], p[21]); + accum.mul(ws[19], p[20]); + accum.mul(ws[20], p[19]); + accum.mul(ws[21], p[18]); + accum.mul(ws[22], p[17]); + accum.mul(ws[23], p[16]); + accum.mul(ws[24], p[15]); + accum.mul(ws[25], p[14]); + accum.mul(ws[26], p[13]); + accum.mul(ws[27], p[12]); + accum.mul(ws[28], p[11]); + accum.mul(ws[29], p[10]); + accum.mul(ws[30], p[9]); + accum.mul(ws[31], p[8]); + accum.add(z[39]); + ws[7] = accum.extract(); + accum.mul(ws[9], p[31]); + accum.mul(ws[10], p[30]); + accum.mul(ws[11], p[29]); + accum.mul(ws[12], p[28]); + accum.mul(ws[13], p[27]); + accum.mul(ws[14], p[26]); + accum.mul(ws[15], p[25]); + accum.mul(ws[16], p[24]); + accum.mul(ws[17], p[23]); + accum.mul(ws[18], p[22]); + accum.mul(ws[19], p[21]); + accum.mul(ws[20], p[20]); + accum.mul(ws[21], p[19]); + accum.mul(ws[22], p[18]); + accum.mul(ws[23], p[17]); + accum.mul(ws[24], p[16]); + accum.mul(ws[25], p[15]); + accum.mul(ws[26], p[14]); + accum.mul(ws[27], p[13]); + accum.mul(ws[28], p[12]); + accum.mul(ws[29], p[11]); + accum.mul(ws[30], p[10]); + accum.mul(ws[31], p[9]); + accum.add(z[40]); + ws[8] = accum.extract(); + accum.mul(ws[10], p[31]); + accum.mul(ws[11], p[30]); + accum.mul(ws[12], p[29]); + accum.mul(ws[13], p[28]); + accum.mul(ws[14], p[27]); + accum.mul(ws[15], p[26]); + accum.mul(ws[16], p[25]); + accum.mul(ws[17], p[24]); + accum.mul(ws[18], p[23]); + accum.mul(ws[19], p[22]); + accum.mul(ws[20], p[21]); + accum.mul(ws[21], p[20]); + accum.mul(ws[22], p[19]); + accum.mul(ws[23], p[18]); + accum.mul(ws[24], p[17]); + accum.mul(ws[25], p[16]); + accum.mul(ws[26], p[15]); + accum.mul(ws[27], p[14]); + accum.mul(ws[28], p[13]); + accum.mul(ws[29], p[12]); + accum.mul(ws[30], p[11]); + accum.mul(ws[31], p[10]); + accum.add(z[41]); + ws[9] = accum.extract(); + accum.mul(ws[11], p[31]); + accum.mul(ws[12], p[30]); + accum.mul(ws[13], p[29]); + accum.mul(ws[14], p[28]); + accum.mul(ws[15], p[27]); + accum.mul(ws[16], p[26]); + accum.mul(ws[17], p[25]); + accum.mul(ws[18], p[24]); + accum.mul(ws[19], p[23]); + accum.mul(ws[20], p[22]); + accum.mul(ws[21], p[21]); + accum.mul(ws[22], p[20]); + accum.mul(ws[23], p[19]); + accum.mul(ws[24], p[18]); + accum.mul(ws[25], p[17]); + accum.mul(ws[26], p[16]); + accum.mul(ws[27], p[15]); + accum.mul(ws[28], p[14]); + accum.mul(ws[29], p[13]); + accum.mul(ws[30], p[12]); + accum.mul(ws[31], p[11]); + accum.add(z[42]); + ws[10] = accum.extract(); + accum.mul(ws[12], p[31]); + accum.mul(ws[13], p[30]); + accum.mul(ws[14], p[29]); + accum.mul(ws[15], p[28]); + accum.mul(ws[16], p[27]); + accum.mul(ws[17], p[26]); + accum.mul(ws[18], p[25]); + accum.mul(ws[19], p[24]); + accum.mul(ws[20], p[23]); + accum.mul(ws[21], p[22]); + accum.mul(ws[22], p[21]); + accum.mul(ws[23], p[20]); + accum.mul(ws[24], p[19]); + accum.mul(ws[25], p[18]); + accum.mul(ws[26], p[17]); + accum.mul(ws[27], p[16]); + accum.mul(ws[28], p[15]); + accum.mul(ws[29], p[14]); + accum.mul(ws[30], p[13]); + accum.mul(ws[31], p[12]); + accum.add(z[43]); + ws[11] = accum.extract(); + accum.mul(ws[13], p[31]); + accum.mul(ws[14], p[30]); + accum.mul(ws[15], p[29]); + accum.mul(ws[16], p[28]); + accum.mul(ws[17], p[27]); + accum.mul(ws[18], p[26]); + accum.mul(ws[19], p[25]); + accum.mul(ws[20], p[24]); + accum.mul(ws[21], p[23]); + accum.mul(ws[22], p[22]); + accum.mul(ws[23], p[21]); + accum.mul(ws[24], p[20]); + accum.mul(ws[25], p[19]); + accum.mul(ws[26], p[18]); + accum.mul(ws[27], p[17]); + accum.mul(ws[28], p[16]); + accum.mul(ws[29], p[15]); + accum.mul(ws[30], p[14]); + accum.mul(ws[31], p[13]); + accum.add(z[44]); + ws[12] = accum.extract(); + accum.mul(ws[14], p[31]); + accum.mul(ws[15], p[30]); + accum.mul(ws[16], p[29]); + accum.mul(ws[17], p[28]); + accum.mul(ws[18], p[27]); + accum.mul(ws[19], p[26]); + accum.mul(ws[20], p[25]); + accum.mul(ws[21], p[24]); + accum.mul(ws[22], p[23]); + accum.mul(ws[23], p[22]); + accum.mul(ws[24], p[21]); + accum.mul(ws[25], p[20]); + accum.mul(ws[26], p[19]); + accum.mul(ws[27], p[18]); + accum.mul(ws[28], p[17]); + accum.mul(ws[29], p[16]); + accum.mul(ws[30], p[15]); + accum.mul(ws[31], p[14]); + accum.add(z[45]); + ws[13] = accum.extract(); + accum.mul(ws[15], p[31]); + accum.mul(ws[16], p[30]); + accum.mul(ws[17], p[29]); + accum.mul(ws[18], p[28]); + accum.mul(ws[19], p[27]); + accum.mul(ws[20], p[26]); + accum.mul(ws[21], p[25]); + accum.mul(ws[22], p[24]); + accum.mul(ws[23], p[23]); + accum.mul(ws[24], p[22]); + accum.mul(ws[25], p[21]); + accum.mul(ws[26], p[20]); + accum.mul(ws[27], p[19]); + accum.mul(ws[28], p[18]); + accum.mul(ws[29], p[17]); + accum.mul(ws[30], p[16]); + accum.mul(ws[31], p[15]); + accum.add(z[46]); + ws[14] = accum.extract(); + accum.mul(ws[16], p[31]); + accum.mul(ws[17], p[30]); + accum.mul(ws[18], p[29]); + accum.mul(ws[19], p[28]); + accum.mul(ws[20], p[27]); + accum.mul(ws[21], p[26]); + accum.mul(ws[22], p[25]); + accum.mul(ws[23], p[24]); + accum.mul(ws[24], p[23]); + accum.mul(ws[25], p[22]); + accum.mul(ws[26], p[21]); + accum.mul(ws[27], p[20]); + accum.mul(ws[28], p[19]); + accum.mul(ws[29], p[18]); + accum.mul(ws[30], p[17]); + accum.mul(ws[31], p[16]); + accum.add(z[47]); + ws[15] = accum.extract(); + accum.mul(ws[17], p[31]); + accum.mul(ws[18], p[30]); + accum.mul(ws[19], p[29]); + accum.mul(ws[20], p[28]); + accum.mul(ws[21], p[27]); + accum.mul(ws[22], p[26]); + accum.mul(ws[23], p[25]); + accum.mul(ws[24], p[24]); + accum.mul(ws[25], p[23]); + accum.mul(ws[26], p[22]); + accum.mul(ws[27], p[21]); + accum.mul(ws[28], p[20]); + accum.mul(ws[29], p[19]); + accum.mul(ws[30], p[18]); + accum.mul(ws[31], p[17]); + accum.add(z[48]); + ws[16] = accum.extract(); + accum.mul(ws[18], p[31]); + accum.mul(ws[19], p[30]); + accum.mul(ws[20], p[29]); + accum.mul(ws[21], p[28]); + accum.mul(ws[22], p[27]); + accum.mul(ws[23], p[26]); + accum.mul(ws[24], p[25]); + accum.mul(ws[25], p[24]); + accum.mul(ws[26], p[23]); + accum.mul(ws[27], p[22]); + accum.mul(ws[28], p[21]); + accum.mul(ws[29], p[20]); + accum.mul(ws[30], p[19]); + accum.mul(ws[31], p[18]); + accum.add(z[49]); + ws[17] = accum.extract(); + accum.mul(ws[19], p[31]); + accum.mul(ws[20], p[30]); + accum.mul(ws[21], p[29]); + accum.mul(ws[22], p[28]); + accum.mul(ws[23], p[27]); + accum.mul(ws[24], p[26]); + accum.mul(ws[25], p[25]); + accum.mul(ws[26], p[24]); + accum.mul(ws[27], p[23]); + accum.mul(ws[28], p[22]); + accum.mul(ws[29], p[21]); + accum.mul(ws[30], p[20]); + accum.mul(ws[31], p[19]); + accum.add(z[50]); + ws[18] = accum.extract(); + accum.mul(ws[20], p[31]); + accum.mul(ws[21], p[30]); + accum.mul(ws[22], p[29]); + accum.mul(ws[23], p[28]); + accum.mul(ws[24], p[27]); + accum.mul(ws[25], p[26]); + accum.mul(ws[26], p[25]); + accum.mul(ws[27], p[24]); + accum.mul(ws[28], p[23]); + accum.mul(ws[29], p[22]); + accum.mul(ws[30], p[21]); + accum.mul(ws[31], p[20]); + accum.add(z[51]); + ws[19] = accum.extract(); + accum.mul(ws[21], p[31]); + accum.mul(ws[22], p[30]); + accum.mul(ws[23], p[29]); + accum.mul(ws[24], p[28]); + accum.mul(ws[25], p[27]); + accum.mul(ws[26], p[26]); + accum.mul(ws[27], p[25]); + accum.mul(ws[28], p[24]); + accum.mul(ws[29], p[23]); + accum.mul(ws[30], p[22]); + accum.mul(ws[31], p[21]); + accum.add(z[52]); + ws[20] = accum.extract(); + accum.mul(ws[22], p[31]); + accum.mul(ws[23], p[30]); + accum.mul(ws[24], p[29]); + accum.mul(ws[25], p[28]); + accum.mul(ws[26], p[27]); + accum.mul(ws[27], p[26]); + accum.mul(ws[28], p[25]); + accum.mul(ws[29], p[24]); + accum.mul(ws[30], p[23]); + accum.mul(ws[31], p[22]); + accum.add(z[53]); + ws[21] = accum.extract(); + accum.mul(ws[23], p[31]); + accum.mul(ws[24], p[30]); + accum.mul(ws[25], p[29]); + accum.mul(ws[26], p[28]); + accum.mul(ws[27], p[27]); + accum.mul(ws[28], p[26]); + accum.mul(ws[29], p[25]); + accum.mul(ws[30], p[24]); + accum.mul(ws[31], p[23]); + accum.add(z[54]); + ws[22] = accum.extract(); + accum.mul(ws[24], p[31]); + accum.mul(ws[25], p[30]); + accum.mul(ws[26], p[29]); + accum.mul(ws[27], p[28]); + accum.mul(ws[28], p[27]); + accum.mul(ws[29], p[26]); + accum.mul(ws[30], p[25]); + accum.mul(ws[31], p[24]); + accum.add(z[55]); + ws[23] = accum.extract(); + accum.mul(ws[25], p[31]); + accum.mul(ws[26], p[30]); + accum.mul(ws[27], p[29]); + accum.mul(ws[28], p[28]); + accum.mul(ws[29], p[27]); + accum.mul(ws[30], p[26]); + accum.mul(ws[31], p[25]); + accum.add(z[56]); + ws[24] = accum.extract(); + accum.mul(ws[26], p[31]); + accum.mul(ws[27], p[30]); + accum.mul(ws[28], p[29]); + accum.mul(ws[29], p[28]); + accum.mul(ws[30], p[27]); + accum.mul(ws[31], p[26]); + accum.add(z[57]); + ws[25] = accum.extract(); + accum.mul(ws[27], p[31]); + accum.mul(ws[28], p[30]); + accum.mul(ws[29], p[29]); + accum.mul(ws[30], p[28]); + accum.mul(ws[31], p[27]); + accum.add(z[58]); + ws[26] = accum.extract(); + accum.mul(ws[28], p[31]); + accum.mul(ws[29], p[30]); + accum.mul(ws[30], p[29]); + accum.mul(ws[31], p[28]); + accum.add(z[59]); + ws[27] = accum.extract(); + accum.mul(ws[29], p[31]); + accum.mul(ws[30], p[30]); + accum.mul(ws[31], p[29]); + accum.add(z[60]); + ws[28] = accum.extract(); + accum.mul(ws[30], p[31]); + accum.mul(ws[31], p[30]); + accum.add(z[61]); + ws[29] = accum.extract(); + accum.mul(ws[31], p[31]); + accum.add(z[62]); + ws[30] = accum.extract(); + accum.add(z[63]); + ws[31] = accum.extract(); + word w1 = accum.extract(); bigint_monty_maybe_sub<32>(z, w1, ws, p); clear_mem(z + 32, 32); } diff --git a/src/scripts/dev_tools/gen_mp_monty.py b/src/scripts/dev_tools/gen_mp_monty.py index 158a458bd84..894e1da57f2 100755 --- a/src/scripts/dev_tools/gen_mp_monty.py +++ b/src/scripts/dev_tools/gen_mp_monty.py @@ -12,41 +12,28 @@ def monty_redc_code(n): lines = [] - lines.append("word w2 = 0, w1 = 0, w0 = 0;") - lines.append("w0 = z[0];") - lines.append("ws[0] = w0 * p_dash;") - - lines.append("word3_muladd(&w2, &w1, &w0, ws[0], p[0]);") - lines.append("w0 = w1;") - lines.append("w1 = w2;") - lines.append("w2 = 0;") + lines.append("word3 accum;") + lines.append("accum.add(z[0]);") + lines.append("ws[0] = accum.monty_step(p[0], p_dash);") for i in range(1, n): for j in range(0, i): - lines.append("word3_muladd(&w2, &w1, &w0, ws[%d], p[%d]);" % (j, i-j)) - - lines.append("word3_add(&w2, &w1, &w0, z[%d]);" % (i)) - lines.append("ws[%d] = w0 * p_dash;" % (i)) + lines.append("accum.mul(ws[%d], p[%d]);" % (j, i-j)) - lines.append("word3_muladd(&w2, &w1, &w0, ws[%d], p[0]);" % (i)) - lines.append("w0 = w1;") - lines.append("w1 = w2;") - lines.append("w2 = 0;") + lines.append("accum.add(z[%d]);" % (i)) + lines.append("ws[%d] = accum.monty_step(p[0], p_dash);" % (i)) for i in range(0, n - 1): for j in range(i + 1, n): - lines.append("word3_muladd(&w2, &w1, &w0, ws[%d], p[%d]);" % (j, n + i-j)) + lines.append("accum.mul(ws[%d], p[%d]);" % (j, n + i-j)) - lines.append("word3_add(&w2, &w1, &w0, z[%d]);" % (n+i)) - lines.append("ws[%d] = w0;" % (i)) - lines.append("w0 = w1;") - lines.append("w1 = w2;") - lines.append("w2 = 0;") + lines.append("accum.add(z[%d]);" % (n+i)) + lines.append("ws[%d] = accum.extract();" % (i)) - lines.append("word3_add(&w2, &w1, &w0, z[%d]);" % (2*n-1)); + lines.append("accum.add(z[%d]);" % (2*n-1)); - lines.append("ws[%d] = w0;" % (n - 1)) - #lines.append("ws[%d] = w1;" % (n)) + lines.append("ws[%d] = accum.extract();" % (n - 1)) + lines.append("word w1 = accum.extract();") lines.append("bigint_monty_maybe_sub<%d>(z, w1, ws, p);" % (n))