mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 13:16:44 +01:00
added va_mul_vb_montgomery_add_vc_into_vc
This commit is contained in:
@@ -114,6 +114,14 @@ pub trait ScalarOperations<O> {
|
||||
c: &mut O,
|
||||
);
|
||||
|
||||
// Assigns a * b + c to c.
|
||||
fn sa_mul_sb_montgomery_add_sc_into_sc<const REDUCE1: REDUCEMOD, const REDUCE2: REDUCEMOD>(
|
||||
&self,
|
||||
a: &O,
|
||||
b: &montgomery::Montgomery<O>,
|
||||
c: &mut O,
|
||||
);
|
||||
|
||||
// Assigns a * b to b.
|
||||
fn sa_mul_sb_montgomery_into_sa<const REDUCE: REDUCEMOD>(
|
||||
&self,
|
||||
@@ -288,6 +296,18 @@ pub trait VectorOperations<O> {
|
||||
c: &mut [O],
|
||||
);
|
||||
|
||||
// vec(c) <- vec(a) * vec(b) + vec(c).
|
||||
fn va_mul_vb_montgomery_add_vc_into_vc<
|
||||
const CHUNK: usize,
|
||||
const REDUCE1: REDUCEMOD,
|
||||
const REDUCE2: REDUCEMOD,
|
||||
>(
|
||||
&self,
|
||||
a: &[O],
|
||||
b: &[montgomery::Montgomery<O>],
|
||||
c: &mut [O],
|
||||
);
|
||||
|
||||
// vec(a) <- vec(a) * vec(b).
|
||||
fn va_mul_vb_montgomery_into_va<const CHUNK: usize, const REDUCE: REDUCEMOD>(
|
||||
&self,
|
||||
|
||||
@@ -4,8 +4,8 @@ use crate::modulus::prime::Prime;
|
||||
use crate::modulus::{ScalarOperations, VectorOperations};
|
||||
use crate::modulus::{NONE, REDUCEMOD};
|
||||
use crate::{
|
||||
apply_ssv, apply_sv, apply_v, apply_vsssvv, apply_vssv, apply_vsv, apply_vv,
|
||||
apply_vvssv, apply_vvsv, apply_vvv,
|
||||
apply_ssv, apply_sv, apply_v, apply_vsssvv, apply_vssv, apply_vsv, apply_vv, apply_vvssv,
|
||||
apply_vvsv, apply_vvv,
|
||||
};
|
||||
use itertools::izip;
|
||||
|
||||
@@ -118,6 +118,17 @@ impl ScalarOperations<u64> for Prime<u64> {
|
||||
*c = self.montgomery.mul_external::<REDUCE>(*a, *b);
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn sa_mul_sb_montgomery_add_sc_into_sc<const REDUCE1: REDUCEMOD, const REDUCE2: REDUCEMOD>(
|
||||
&self,
|
||||
a: &u64,
|
||||
b: &Montgomery<u64>,
|
||||
c: &mut u64,
|
||||
) {
|
||||
*c += self.montgomery.mul_external::<REDUCE1>(*a, *b);
|
||||
self.sa_reduce_into_sa::<REDUCE2>(c);
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn sa_mul_sb_montgomery_into_sa<const REDUCE: REDUCEMOD>(
|
||||
&self,
|
||||
@@ -418,6 +429,27 @@ impl VectorOperations<u64> for Prime<u64> {
|
||||
);
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn va_mul_vb_montgomery_add_vc_into_vc<
|
||||
const CHUNK: usize,
|
||||
const REDUCE1: REDUCEMOD,
|
||||
const REDUCE2: REDUCEMOD,
|
||||
>(
|
||||
&self,
|
||||
a: &[Montgomery<u64>],
|
||||
b: &[u64],
|
||||
c: &mut [u64],
|
||||
) {
|
||||
apply_vvv!(
|
||||
self,
|
||||
Self::sa_mul_sb_montgomery_add_sc_into_sc::<REDUCE1, REDUCE2>,
|
||||
a,
|
||||
b,
|
||||
c,
|
||||
CHUNK
|
||||
);
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn va_mul_vb_montgomery_into_va<const CHUNK: usize, const REDUCE: REDUCEMOD>(
|
||||
&self,
|
||||
|
||||
Reference in New Issue
Block a user