arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/src/modulus/impl_u64/operations.rs
src/modulus/impl_u64/operations.rsRaw
 1
 2use crate::modulus::Operations;
 3use crate::modulus::prime::Prime;
 4use crate::modulus::ReduceOnce;
 5use crate::{apply_unary, apply_binary, apply_ternary};
 6use itertools::izip;
 7
 8impl Operations<u64> for Prime<u64>{
 9
10    #[inline(always)]
11    fn add_binary_assign(&self, a: &u64, b: &u64, c: &mut u64){
12        *c = a.wrapping_add(*b).reduce_once(self.q);
13    }
14
15    #[inline(always)]
16    fn add_unary_assign(&self, a: &u64, b: &mut u64){
17        *b = a.wrapping_add(*b).reduce_once(self.q);
18    }
19
20    #[inline(always)]
21    fn add_vec_binary_assign<const CHUNK:usize>(&self, a: &[u64], b:&[u64], c:&mut [u64]){
22        apply_ternary!(self, Self::add_binary_assign, a, b, c, CHUNK);
23    }
24
25    #[inline(always)]
26    fn add_vec_unary_assign<const CHUNK:usize>(&self, a: &[u64], b:&mut [u64]){
27        apply_binary!(self, Self::add_unary_assign, a, b, CHUNK);
28    }
29
30    #[inline(always)]
31    fn sub_binary_assign(&self, a: &u64, b: &u64, c: &mut u64){
32        *c = a.wrapping_add(self.q.wrapping_sub(*b)).reduce_once(self.q);
33    }
34
35    #[inline(always)]
36    fn sub_unary_assign(&self, a: &u64, b: &mut u64){
37        *b = a.wrapping_add(self.q.wrapping_sub(*b)).reduce_once(self.q);
38    }
39
40    #[inline(always)]
41    fn sub_vec_binary_assign<const CHUNK:usize>(&self, a: &[u64], b:&[u64], c:&mut [u64]){
42        apply_ternary!(self, Self::sub_binary_assign, a, b, c, CHUNK);
43    }
44
45    #[inline(always)]
46    fn sub_vec_unary_assign<const CHUNK:usize>(&self, a: &[u64], b:&mut [u64]){
47        apply_binary!(self, Self::sub_unary_assign, a, b, CHUNK);
48    }
49
50    #[inline(always)]
51    fn neg_assign(&self, a: &mut u64){
52        *a = self.q.wrapping_sub(*a);
53    }
54
55    #[inline(always)]
56    fn neg_vec_assign<const CHUNK:usize>(&self, a: &mut [u64]){
57        apply_unary!(self, Self::neg_assign, a, CHUNK);
58    }
59}
60