@@ -38,84 +38,114 @@ namespace quadiron {
3838namespace gf {
3939
4040template <>
41- void RingModN<uint16_t >::neg(size_t n, uint16_t * x ) const
41+ void RingModN<uint16_t >::neg(vec::Buffers< uint16_t >& buf, unsigned buf_id ) const
4242{
43- simd::neg (n, x, this ->_card );
44- }
43+ size_t size = buf.get_size ();
44+ const unsigned ratio = simd::countof<uint16_t >();
45+ const size_t simd_vec_len = size / ratio;
46+ const size_t simd_trailing_len = size - simd_vec_len * ratio;
4547
46- template <>
47- void RingModN<uint32_t >::neg(size_t n, uint32_t * x) const
48- {
49- simd::neg (n, x, this ->_card );
50- }
48+ simd::neg (buf, buf_id, simd_vec_len, this ->_card );
5149
52- template <>
53- void RingModN< uint32_t >::mul_coef_to_buf(
54- uint32_t a,
55- uint32_t * src,
56- uint32_t * dest,
57- size_t len) const
58- {
59- simd::mul_coef_to_buf (a, src, dest, len, this -> _card );
50+ if (simd_trailing_len) {
51+ const size_t simd_offset = simd_vec_len * ratio;
52+ for ( size_t i = simd_offset; i < size; ++i) {
53+ uint16_t hi, lo;
54+ buf. get (buf_id, i, hi, lo);
55+ buf. set (buf_id, i, neg (hi), neg (lo));
56+ }
57+ }
6058}
6159
6260template <>
63- void RingModN<uint32_t >::add_two_bufs(uint32_t * src, uint32_t * dest, size_t len)
64- const
61+ void RingModN<uint32_t >::neg(vec::Buffers<uint32_t >& buf, unsigned buf_id) const
6562{
66- simd::add_two_bufs (src, dest, len, this ->_card );
67- }
63+ size_t size = buf.get_size ();
64+ const unsigned ratio = simd::countof<uint32_t >();
65+ const size_t simd_vec_len = size / ratio;
66+ const size_t simd_trailing_len = size - simd_vec_len * ratio;
6867
69- template <>
70- void RingModN<uint32_t >::sub_two_bufs(
71- uint32_t * bufa,
72- uint32_t * bufb,
73- uint32_t * res,
74- size_t len) const
75- {
76- simd::sub_two_bufs (bufa, bufb, res, len, this ->_card );
77- }
68+ if (simd_vec_len) {
69+ simd::neg (buf, buf_id, simd_vec_len, this ->_card );
70+ }
7871
79- template <>
80- void RingModN< uint16_t >::mul_coef_to_buf(
81- uint16_t a,
82- uint16_t * src,
83- uint16_t * dest,
84- size_t len) const
85- {
86- simd::mul_coef_to_buf (a, src, dest, len, this -> _card );
72+ if (simd_trailing_len) {
73+ const size_t simd_offset = simd_vec_len * ratio;
74+ for ( size_t i = simd_offset; i < size; ++i) {
75+ uint32_t hi, lo;
76+ buf. get (buf_id, i, hi, lo);
77+ buf. set (buf_id, i, neg (hi), neg (lo));
78+ }
79+ }
8780}
8881
89- template <>
90- void RingModN<uint16_t >::add_two_bufs(uint16_t * src, uint16_t * dest, size_t len)
91- const
92- {
93- simd::add_two_bufs (src, dest, len, this ->_card );
94- }
95-
96- template <>
97- void RingModN<uint16_t >::sub_two_bufs(
98- uint16_t * bufa,
99- uint16_t * bufb,
100- uint16_t * res,
101- size_t len) const
102- {
103- simd::sub_two_bufs (bufa, bufb, res, len, this ->_card );
104- }
105-
106- template <>
107- void RingModN<uint16_t >::hadamard_mul(int n, uint16_t * x_u16, uint16_t * y_u16)
108- const
109- {
110- simd::mul_two_bufs (y_u16, x_u16, n, this ->_card );
111- }
112-
113- template <>
114- void RingModN<uint32_t >::hadamard_mul(int n, uint32_t * x_u32, uint32_t * y_u32)
115- const
116- {
117- simd::mul_two_bufs (y_u32, x_u32, n, this ->_card );
118- }
82+ // template <>
83+ // void RingModN<uint32_t>::mul_coef_to_buf(
84+ // uint32_t a,
85+ // uint32_t* src,
86+ // uint32_t* dest,
87+ // size_t len) const
88+ // {
89+ // simd::mul_coef_to_buf(a, src, dest, len, this->_card);
90+ // }
91+ //
92+ // template <>
93+ // void RingModN<uint32_t>::add_two_bufs(uint32_t* src, uint32_t* dest, size_t len)
94+ // const
95+ // {
96+ // simd::add_two_bufs(src, dest, len, this->_card);
97+ // }
98+ //
99+ // template <>
100+ // void RingModN<uint32_t>::sub_two_bufs(
101+ // uint32_t* bufa,
102+ // uint32_t* bufb,
103+ // uint32_t* res,
104+ // size_t len) const
105+ // {
106+ // simd::sub_two_bufs(bufa, bufb, res, len, this->_card);
107+ // }
108+ //
109+ // template <>
110+ // void RingModN<uint16_t>::mul_coef_to_buf(
111+ // uint16_t a,
112+ // uint16_t* src,
113+ // uint16_t* dest,
114+ // size_t len) const
115+ // {
116+ // simd::mul_coef_to_buf(a, src, dest, len, this->_card);
117+ // }
118+ //
119+ // template <>
120+ // void RingModN<uint16_t>::add_two_bufs(uint16_t* src, uint16_t* dest, size_t len)
121+ // const
122+ // {
123+ // simd::add_two_bufs(src, dest, len, this->_card);
124+ // }
125+ //
126+ // template <>
127+ // void RingModN<uint16_t>::sub_two_bufs(
128+ // uint16_t* bufa,
129+ // uint16_t* bufb,
130+ // uint16_t* res,
131+ // size_t len) const
132+ // {
133+ // simd::sub_two_bufs(bufa, bufb, res, len, this->_card);
134+ // }
135+ //
136+ // template <>
137+ // void RingModN<uint16_t>::hadamard_mul(int n, uint16_t* x_u16, uint16_t* y_u16)
138+ // const
139+ // {
140+ // simd::mul_two_bufs(y_u16, x_u16, n, this->_card);
141+ // }
142+ //
143+ // template <>
144+ // void RingModN<uint32_t>::hadamard_mul(int n, uint32_t* x_u32, uint32_t* y_u32)
145+ // const
146+ // {
147+ // simd::mul_two_bufs(y_u32, x_u32, n, this->_card);
148+ // }
119149
120150} // namespace gf
121151} // namespace quadiron
0 commit comments