use super::scalar::montyred;
#[inline(always)]
pub fn pow7_last12(state: &mut [u64; 16]) {
let mut sq = [0u128; 12];
let mut i = 0;
while i < 12 {
let x = state[i + 4] as u128;
sq[i] = x * x;
i += 1;
}
let mut sq_r = [0u64; 12];
let mut i = 0;
while i < 12 {
sq_r[i] = montyred(sq[i]);
i += 1;
}
let mut qu = [0u128; 12];
let mut i = 0;
while i < 12 {
let s = sq_r[i] as u128;
qu[i] = s * s;
i += 1;
}
let mut qu_r = [0u64; 12];
let mut i = 0;
while i < 12 {
qu_r[i] = montyred(qu[i]);
i += 1;
}
let mut sq_qu = [0u128; 12];
let mut i = 0;
while i < 12 {
sq_qu[i] = (sq_r[i] as u128) * (qu_r[i] as u128);
i += 1;
}
let mut sq_qu_r = [0u64; 12];
let mut i = 0;
while i < 12 {
sq_qu_r[i] = montyred(sq_qu[i]);
i += 1;
}
let mut out = [0u128; 12];
let mut i = 0;
while i < 12 {
out[i] = (state[i + 4] as u128) * (sq_qu_r[i] as u128);
i += 1;
}
let mut i = 0;
while i < 12 {
state[i + 4] = montyred(out[i]);
i += 1;
}
}