mod poseidon2;
use p3_field::extension::{octic_mul, quartic_mul, quintic_mul, trinomial_quintic_mul};
pub use poseidon2::*;
use crate::{BinomialExtensionData, FieldParameters, MontyField31};
#[inline]
pub(crate) fn quartic_mul_packed<FP, const WIDTH: usize>(
a: &[MontyField31<FP>; WIDTH],
b: &[MontyField31<FP>; WIDTH],
res: &mut [MontyField31<FP>; WIDTH],
) where
FP: FieldParameters + BinomialExtensionData<WIDTH>,
{
quartic_mul(a, b, res, FP::W);
}
#[inline]
pub(crate) fn quintic_mul_packed<FP, const WIDTH: usize>(
a: &[MontyField31<FP>; WIDTH],
b: &[MontyField31<FP>; WIDTH],
res: &mut [MontyField31<FP>; WIDTH],
) where
FP: FieldParameters + BinomialExtensionData<WIDTH>,
{
quintic_mul(a, b, res, FP::W);
}
#[inline]
pub(crate) fn octic_mul_packed<FP, const WIDTH: usize>(
a: &[MontyField31<FP>; WIDTH],
b: &[MontyField31<FP>; WIDTH],
res: &mut [MontyField31<FP>; WIDTH],
) where
FP: FieldParameters + BinomialExtensionData<WIDTH>,
{
octic_mul(a, b, res, FP::W);
}
#[inline]
pub(crate) fn quintic_mul_packed_trinomial<FP: FieldParameters>(
a: &[MontyField31<FP>; 5],
b: &[MontyField31<FP>; 5],
res: &mut [MontyField31<FP>; 5],
) {
trinomial_quintic_mul(a, b, res);
}
#[inline]
pub(crate) fn base_mul_packed<FP, const WIDTH: usize>(
a: [MontyField31<FP>; WIDTH],
b: MontyField31<FP>,
res: &mut [MontyField31<FP>; WIDTH],
) where
FP: FieldParameters + BinomialExtensionData<WIDTH>,
{
res.iter_mut().zip(a.iter()).for_each(|(r, a)| *r = *a * b);
}