Convert multiple square_assigns in a row to a single function

This commit is contained in:
Eirik Ogilvie-Wigley 2018-09-25 16:23:35 -06:00
parent 0b6886e9e0
commit 15ea7a5917
1 changed files with 34 additions and 247 deletions

281
src/fq.rs
View File

@ -290,6 +290,12 @@ impl Fq {
/// effect of inverting the element if it is
/// nonzero.
pub fn pow_q_minus_2(&self) -> Self {
#[inline(always)]
fn square_assign_multi(n: &mut Fq, num_times: usize) {
for _ in 0..num_times {
n.square_assign();
}
}
// found using https://github.com/kwantam/addchain
let t10 = *self;
let mut t0 = t10;
@ -342,280 +348,61 @@ impl Fq {
t0.mul_assign(&t17);
t6.mul_assign(&t0);
t2.mul_assign(&t6);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t17);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 9);
t0.mul_assign(&t16);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 9);
t0.mul_assign(&t15);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 9);
t0.mul_assign(&t15);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 7);
t0.mul_assign(&t14);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 7);
t0.mul_assign(&t13);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 10);
t0.mul_assign(&t12);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 9);
t0.mul_assign(&t11);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t8);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t10);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 14);
t0.mul_assign(&t9);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 10);
t0.mul_assign(&t8);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 15);
t0.mul_assign(&t7);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 10);
t0.mul_assign(&t6);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t5);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 16);
t0.mul_assign(&t3);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t2);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 7);
t0.mul_assign(&t4);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 9);
t0.mul_assign(&t2);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t3);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t2);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t2);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t2);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t3);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t2);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 8);
t0.mul_assign(&t2);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 5);
t0.mul_assign(&t1);
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
t0.square_assign();
square_assign_multi(&mut t0, 5);
t0.mul_assign(&t1);
t0