1use libc::*;
4use crate::deps::*;
5use crate::flint::*;
6use crate::nmod_types::*;
7
8
9pub const DOT_SPLIT_BITS: u32 = 56;
10extern "C" {
11 #[link_name = "_nmod_vec_init__extern"]
12 pub fn _nmod_vec_init(len: slong) -> nn_ptr;
13 #[link_name = "_nmod_vec_clear__extern"]
14 pub fn _nmod_vec_clear(vec: nn_ptr);
15 pub fn _nmod_vec_randtest(vec: nn_ptr, state: *mut flint_rand_struct, len: slong, mod_: nmod_t);
16 pub fn _nmod_vec_rand(vec: nn_ptr, state: *mut flint_rand_struct, len: slong, mod_: nmod_t);
17 #[link_name = "_nmod_vec_zero__extern"]
18 pub fn _nmod_vec_zero(vec: nn_ptr, len: slong);
19 pub fn _nmod_vec_max_bits(vec: nn_srcptr, len: slong) -> flint_bitcnt_t;
20 #[link_name = "_nmod_vec_set__extern"]
21 pub fn _nmod_vec_set(res: nn_ptr, vec: nn_srcptr, len: slong);
22 #[link_name = "_nmod_vec_swap__extern"]
23 pub fn _nmod_vec_swap(a: nn_ptr, b: nn_ptr, length: slong);
24 #[link_name = "_nmod_vec_equal__extern"]
25 pub fn _nmod_vec_equal(vec: nn_srcptr, vec2: nn_srcptr, len: slong) -> libc::c_int;
26 #[link_name = "_nmod_vec_is_zero__extern"]
27 pub fn _nmod_vec_is_zero(vec: nn_srcptr, len: slong) -> libc::c_int;
28 pub fn _nmod_vec_fprint_pretty(
29 file: *mut FILE,
30 vec: nn_srcptr,
31 len: slong,
32 mod_: nmod_t,
33 ) -> libc::c_int;
34 pub fn _nmod_vec_fprint(f: *mut FILE, vec: nn_srcptr, len: slong, mod_: nmod_t) -> libc::c_int;
35 pub fn _nmod_vec_print_pretty(vec: nn_srcptr, len: slong, mod_: nmod_t);
36 pub fn _nmod_vec_print(vec: nn_srcptr, len: slong, mod_: nmod_t) -> libc::c_int;
37 pub fn _nmod_vec_reduce(res: nn_ptr, vec: nn_srcptr, len: slong, mod_: nmod_t);
38 pub fn _nmod_vec_add(res: nn_ptr, vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t);
39 pub fn _nmod_vec_sub(res: nn_ptr, vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t);
40 pub fn _nmod_vec_neg(res: nn_ptr, vec: nn_srcptr, len: slong, mod_: nmod_t);
41 pub fn _nmod_vec_scalar_mul_nmod(
42 res: nn_ptr,
43 vec: nn_srcptr,
44 len: slong,
45 c: ulong,
46 mod_: nmod_t,
47 );
48 pub fn _nmod_vec_scalar_mul_nmod_redc(
49 res: nn_ptr,
50 vec: nn_srcptr,
51 len: slong,
52 c: ulong,
53 mod_: nmod_t,
54 );
55 pub fn _nmod_vec_scalar_mul_nmod_generic(
56 res: nn_ptr,
57 vec: nn_srcptr,
58 len: slong,
59 c: ulong,
60 mod_: nmod_t,
61 );
62 pub fn _nmod_vec_scalar_mul_nmod_shoup(
63 res: nn_ptr,
64 vec: nn_srcptr,
65 len: slong,
66 c: ulong,
67 mod_: nmod_t,
68 );
69 pub fn _nmod_vec_scalar_addmul_nmod(
70 res: nn_ptr,
71 vec: nn_srcptr,
72 len: slong,
73 c: ulong,
74 mod_: nmod_t,
75 );
76 pub fn _nmod_vec_scalar_addmul_nmod_generic(
77 res: nn_ptr,
78 vec: nn_srcptr,
79 len: slong,
80 c: ulong,
81 mod_: nmod_t,
82 );
83 pub fn _nmod_vec_scalar_addmul_nmod_shoup(
84 res: nn_ptr,
85 vec: nn_srcptr,
86 len: slong,
87 c: ulong,
88 mod_: nmod_t,
89 );
90 #[link_name = "_nmod_vec_nored_scalar_addmul_halflimb__extern"]
91 pub fn _nmod_vec_nored_scalar_addmul_halflimb(
92 res: nn_ptr,
93 vec: nn_srcptr,
94 len: slong,
95 c: ulong,
96 );
97 pub fn _nmod_vec_nored_ll_scalar_addmul_halflimb(
98 res: nn_ptr,
99 vec: nn_srcptr,
100 len: slong,
101 c: ulong,
102 );
103 pub fn _nmod_vec_nored_ll_scalar_addmul(res: nn_ptr, vec: nn_srcptr, len: slong, c: ulong);
104 pub fn _nmod_vec_nored_lll_scalar_addmul(res: nn_ptr, vec: nn_srcptr, len: slong, c: ulong);
105 pub fn _nmod_vec_invert(res: nn_ptr, vec: nn_srcptr, len: ulong, mod_: nmod_t);
106 pub fn _nmod_vec_invert_naive(res: nn_ptr, vec: nn_srcptr, len: ulong, mod_: nmod_t);
107 pub fn _nmod_vec_invert_generic(res: nn_ptr, vec: nn_srcptr, len: ulong, mod_: nmod_t);
108 pub fn _nmod_vec_invert_shoup(res: nn_ptr, vec: nn_srcptr, len: ulong, mod_: nmod_t);
109 #[link_name = "_nmod_vec_dot_params__extern"]
110 pub fn _nmod_vec_dot_params(len: ulong, mod_: nmod_t) -> dot_params_t;
111 pub fn _nmod_vec_dot_bound_limbs(len: slong, mod_: nmod_t) -> libc::c_int;
112 pub fn _nmod_vec_dot_bound_limbs_from_params(
113 len: slong,
114 mod_: nmod_t,
115 params: dot_params_t,
116 ) -> libc::c_int;
117 pub fn _nmod_vec_dot_pow2(vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
118 pub fn _nmod_vec_dot1(vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
119 pub fn _nmod_vec_dot2_half(
120 vec1: nn_srcptr,
121 vec2: nn_srcptr,
122 len: slong,
123 mod_: nmod_t,
124 pow2_precomp: ulong,
125 ) -> ulong;
126 pub fn _nmod_vec_dot2(vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
127 pub fn _nmod_vec_dot3_acc(vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
128 pub fn _nmod_vec_dot3(vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
129 pub fn _nmod_vec_dot2_split(
130 vec1: nn_srcptr,
131 vec2: nn_srcptr,
132 len: slong,
133 mod_: nmod_t,
134 pow2_precomp: ulong,
135 ) -> ulong;
136 pub fn _nmod_vec_dot_pow2_rev(
137 vec1: nn_srcptr,
138 vec2: nn_srcptr,
139 len: slong,
140 mod_: nmod_t,
141 ) -> ulong;
142 pub fn _nmod_vec_dot1_rev(vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
143 pub fn _nmod_vec_dot2_half_rev(
144 vec1: nn_srcptr,
145 vec2: nn_srcptr,
146 len: slong,
147 mod_: nmod_t,
148 ) -> ulong;
149 pub fn _nmod_vec_dot2_rev(vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
150 pub fn _nmod_vec_dot3_acc_rev(
151 vec1: nn_srcptr,
152 vec2: nn_srcptr,
153 len: slong,
154 mod_: nmod_t,
155 ) -> ulong;
156 pub fn _nmod_vec_dot3_rev(vec1: nn_srcptr, vec2: nn_srcptr, len: slong, mod_: nmod_t) -> ulong;
157 pub fn _nmod_vec_dot2_split_rev(
158 vec1: nn_srcptr,
159 vec2: nn_srcptr,
160 len: slong,
161 mod_: nmod_t,
162 pow2_precomp: ulong,
163 ) -> ulong;
164 pub fn _nmod_vec_dot_pow2_ptr(
165 vec1: nn_srcptr,
166 vec2: *const nn_ptr,
167 offset: slong,
168 len: slong,
169 mod_: nmod_t,
170 ) -> ulong;
171 pub fn _nmod_vec_dot1_ptr(
172 vec1: nn_srcptr,
173 vec2: *const nn_ptr,
174 offset: slong,
175 len: slong,
176 mod_: nmod_t,
177 ) -> ulong;
178 pub fn _nmod_vec_dot2_half_ptr(
179 vec1: nn_srcptr,
180 vec2: *const nn_ptr,
181 offset: slong,
182 len: slong,
183 mod_: nmod_t,
184 ) -> ulong;
185 pub fn _nmod_vec_dot2_ptr(
186 vec1: nn_srcptr,
187 vec2: *const nn_ptr,
188 offset: slong,
189 len: slong,
190 mod_: nmod_t,
191 ) -> ulong;
192 pub fn _nmod_vec_dot3_acc_ptr(
193 vec1: nn_srcptr,
194 vec2: *const nn_ptr,
195 offset: slong,
196 len: slong,
197 mod_: nmod_t,
198 ) -> ulong;
199 pub fn _nmod_vec_dot3_ptr(
200 vec1: nn_srcptr,
201 vec2: *const nn_ptr,
202 offset: slong,
203 len: slong,
204 mod_: nmod_t,
205 ) -> ulong;
206 pub fn _nmod_vec_dot2_split_ptr(
207 vec1: nn_srcptr,
208 vec2: *const nn_ptr,
209 offset: slong,
210 len: slong,
211 mod_: nmod_t,
212 pow2_precomp: ulong,
213 ) -> ulong;
214 #[link_name = "_nmod_vec_dot__extern"]
215 pub fn _nmod_vec_dot(
216 vec1: nn_srcptr,
217 vec2: nn_srcptr,
218 len: slong,
219 mod_: nmod_t,
220 params: dot_params_t,
221 ) -> ulong;
222 #[link_name = "_nmod_vec_dot_rev__extern"]
223 pub fn _nmod_vec_dot_rev(
224 vec1: nn_srcptr,
225 vec2: nn_srcptr,
226 len: slong,
227 mod_: nmod_t,
228 params: dot_params_t,
229 ) -> ulong;
230 #[link_name = "_nmod_vec_dot_ptr__extern"]
231 pub fn _nmod_vec_dot_ptr(
232 vec1: nn_srcptr,
233 vec2: *const nn_ptr,
234 offset: slong,
235 len: slong,
236 mod_: nmod_t,
237 params: dot_params_t,
238 ) -> ulong;
239}