1use crate::deps::*;
4use crate::flint::*;
5
6
7pub const FLINT_HAVE_NATIVE_mpn_2add_n_inplace: u32 = 1;
8pub const FLINT_HAVE_NATIVE_mpn_addlsh1_n_ip1: u32 = 2;
9pub const FLINT_MPN_MUL_FUNC_TAB_WIDTH: u32 = 17;
10pub const FLINT_MPN_SQR_FUNC_TAB_WIDTH: u32 = 14;
11pub const FLINT_MUL_USE_FUNC_TAB: u32 = 1;
12pub const FLINT_MPN_MULLOW_FUNC_TAB_WIDTH: u32 = 8;
13pub const FLINT_MPN_MULHIGH_FUNC_TAB_WIDTH: u32 = 13;
14pub const FLINT_MPN_MULHIGH_BEST_TAB_N: u32 = 9;
15pub const FLINT_MPN_SQRHIGH_FUNC_TAB_WIDTH: u32 = 8;
16pub const FLINT_MPN_MULHIGH_NORMALISED_FUNC_TAB_WIDTH: u32 = 9;
17pub const FLINT_MPN_SQRHIGH_NORMALISED_FUNC_TAB_WIDTH: u32 = 8;
18pub const FLINT_HAVE_NATIVE_mpn_mullow_basecase: u32 = 1;
19pub const FLINT_HAVE_NATIVE_mpn_mulhigh_basecase: u32 = 1;
20pub const FLINT_HAVE_NATIVE_mpn_sqrhigh_basecase: u32 = 1;
21pub const FLINT_MPN_MULLOW_MULDERS_CUTOFF: u32 = 50;
22pub const FLINT_MPN_MULHIGH_MULDERS_CUTOFF: u32 = 40;
23pub const FLINT_MPN_MULHIGH_MUL_CUTOFF: u32 = 2000;
24pub const FLINT_MPN_MULHIGH_K_TAB_SIZE: u32 = 2048;
25pub const FLINT_MPN_SQRHIGH_MULDERS_CUTOFF: u32 = 90;
26pub const FLINT_MPN_SQRHIGH_SQR_CUTOFF: u32 = 2000;
27pub const FLINT_MPN_SQRHIGH_K_TAB_SIZE: u32 = 2048;
28pub const MPN_MULMOD_PRECOND_NONE: u32 = 0;
29pub const MPN_MULMOD_PRECOND_SHOUP: u32 = 1;
30pub const MPN_MULMOD_PRECOND_MATRIX: u32 = 2;
31pub type flint_mpn_mul_func_t = ::std::option::Option<
32 unsafe extern "C" fn(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr) -> mp_limb_t,
33>;
34pub type flint_mpn_mul_func_n_t = ::std::option::Option<
35 unsafe extern "C" fn(
36 arg1: mp_ptr,
37 arg2: mp_srcptr,
38 arg3: mp_srcptr,
39 arg4: mp_size_t,
40 ) -> mp_limb_t,
41>;
42pub type flint_mpn_sqr_func_t =
43 ::std::option::Option<unsafe extern "C" fn(arg1: mp_ptr, arg2: mp_srcptr) -> mp_limb_t>;
44#[repr(C)]
45pub struct mp_limb_pair_t {
46 pub m1: mp_limb_t,
47 pub m2: mp_limb_t,
48}
49#[allow(clippy::unnecessary_operation, clippy::identity_op)]
50const _: () = {
51 ["Size of mp_limb_pair_t"][::std::mem::size_of::<mp_limb_pair_t>() - 16usize];
52 ["Alignment of mp_limb_pair_t"][::std::mem::align_of::<mp_limb_pair_t>() - 8usize];
53 ["Offset of field: mp_limb_pair_t::m1"][::std::mem::offset_of!(mp_limb_pair_t, m1) - 0usize];
54 ["Offset of field: mp_limb_pair_t::m2"][::std::mem::offset_of!(mp_limb_pair_t, m2) - 8usize];
55};
56impl Default for mp_limb_pair_t {
57 fn default() -> Self {
58 let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
59 unsafe {
60 ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
61 s.assume_init()
62 }
63 }
64}
65pub type flint_mpn_sqrhigh_normalised_func_t =
66 ::std::option::Option<unsafe extern "C" fn(arg1: mp_ptr, arg2: mp_srcptr) -> mp_limb_pair_t>;
67pub type flint_mpn_mulhigh_normalised_func_t = ::std::option::Option<
68 unsafe extern "C" fn(arg1: mp_ptr, arg2: mp_srcptr, arg3: mp_srcptr) -> mp_limb_pair_t,
69>;
70extern "C" {
71 #[link_name = "flint_mpn_zero__extern"]
72 pub fn flint_mpn_zero(xp: mp_ptr, n: mp_size_t);
73 #[link_name = "flint_mpn_copyi__extern"]
74 pub fn flint_mpn_copyi(xp: mp_ptr, yp: mp_srcptr, n: mp_size_t);
75 #[link_name = "flint_mpn_copyd__extern"]
76 pub fn flint_mpn_copyd(xp: mp_ptr, yp: mp_srcptr, n: mp_size_t);
77 #[link_name = "flint_mpn_store__extern"]
78 pub fn flint_mpn_store(xp: mp_ptr, n: mp_size_t, y: mp_limb_t);
79 #[link_name = "flint_mpn_zero_p__extern"]
80 pub fn flint_mpn_zero_p(x: mp_srcptr, xsize: mp_size_t) -> libc::c_int;
81 #[link_name = "flint_mpn_equal_p__extern"]
82 pub fn flint_mpn_equal_p(x: mp_srcptr, y: mp_srcptr, xsize: mp_size_t) -> libc::c_int;
83 #[link_name = "flint_mpn_negmod_n__extern"]
84 pub fn flint_mpn_negmod_n(res: mp_ptr, x: mp_srcptr, m: mp_srcptr, n: mp_size_t);
85 #[link_name = "flint_mpn_addmod_n__extern"]
86 pub fn flint_mpn_addmod_n(res: mp_ptr, x: mp_srcptr, y: mp_srcptr, m: mp_srcptr, n: mp_size_t);
87 #[link_name = "flint_mpn_submod_n__extern"]
88 pub fn flint_mpn_submod_n(res: mp_ptr, x: mp_srcptr, y: mp_srcptr, m: mp_srcptr, n: mp_size_t);
89 #[link_name = "flint_mpn_addmod_n_m__extern"]
90 pub fn flint_mpn_addmod_n_m(
91 res: mp_ptr,
92 x: mp_srcptr,
93 y: mp_srcptr,
94 yn: mp_size_t,
95 m: mp_srcptr,
96 n: mp_size_t,
97 );
98 #[link_name = "flint_mpn_submod_n_m__extern"]
99 pub fn flint_mpn_submod_n_m(
100 res: mp_ptr,
101 x: mp_srcptr,
102 y: mp_srcptr,
103 yn: mp_size_t,
104 m: mp_srcptr,
105 n: mp_size_t,
106 );
107 #[link_name = "flint_mpn_negmod_2__extern"]
108 pub fn flint_mpn_negmod_2(res: mp_ptr, x: mp_srcptr, m: mp_srcptr);
109 #[link_name = "flint_mpn_addmod_2__extern"]
110 pub fn flint_mpn_addmod_2(res: mp_ptr, x: mp_srcptr, y: mp_srcptr, m: mp_srcptr);
111 #[link_name = "_flint_mpn_addmod_2__extern"]
112 pub fn _flint_mpn_addmod_2(res: mp_ptr, x: mp_srcptr, y: mp_srcptr, m: mp_srcptr);
113 #[link_name = "flint_mpn_submod_2__extern"]
114 pub fn flint_mpn_submod_2(res: mp_ptr, x: mp_srcptr, y: mp_srcptr, m: mp_srcptr);
115 #[link_name = "flint_mpn_signed_sub_n__extern"]
116 pub fn flint_mpn_signed_sub_n(
117 res: mp_ptr,
118 x: mp_srcptr,
119 y: mp_srcptr,
120 n: mp_size_t,
121 ) -> libc::c_int;
122 #[link_name = "flint_mpn_signed_sub_2__extern"]
123 pub fn flint_mpn_signed_sub_2(res: mp_ptr, x: mp_srcptr, y: mp_srcptr) -> libc::c_int;
124 #[link_name = "flint_mpn_signed_sub_3__extern"]
125 pub fn flint_mpn_signed_sub_3(res: mp_ptr, x: mp_srcptr, y: mp_srcptr) -> libc::c_int;
126 #[link_name = "flint_mpn_signed_sub_4__extern"]
127 pub fn flint_mpn_signed_sub_4(res: mp_ptr, x: mp_srcptr, y: mp_srcptr) -> libc::c_int;
128 #[link_name = "flint_mpn_signed_sub_5__extern"]
129 pub fn flint_mpn_signed_sub_5(res: mp_ptr, x: mp_srcptr, y: mp_srcptr) -> libc::c_int;
130 #[link_name = "flint_mpn_signed_sub_6__extern"]
131 pub fn flint_mpn_signed_sub_6(res: mp_ptr, x: mp_srcptr, y: mp_srcptr) -> libc::c_int;
132 #[link_name = "flint_mpn_signed_sub_7__extern"]
133 pub fn flint_mpn_signed_sub_7(res: mp_ptr, x: mp_srcptr, y: mp_srcptr) -> libc::c_int;
134 #[link_name = "flint_mpn_signed_sub_8__extern"]
135 pub fn flint_mpn_signed_sub_8(res: mp_ptr, x: mp_srcptr, y: mp_srcptr) -> libc::c_int;
136 #[link_name = "flint_mpn_signed_div2__extern"]
137 pub fn flint_mpn_signed_div2(res: mp_ptr, x: mp_srcptr, n: mp_size_t);
138 pub fn flint_mpn_mulmod_preinvn_2(
139 r: mp_ptr,
140 a: mp_srcptr,
141 b: mp_srcptr,
142 d: mp_srcptr,
143 dinv: mp_srcptr,
144 norm: ulong,
145 );
146 pub fn flint_mpn_get_str(
147 res: *mut libc::c_char,
148 base: libc::c_int,
149 x: mp_srcptr,
150 xn: mp_size_t,
151 negative: libc::c_int,
152 ) -> *mut libc::c_char;
153 pub fn flint_mpn_2add_n_inplace(
154 arg1: mp_ptr,
155 arg2: mp_srcptr,
156 arg3: mp_srcptr,
157 arg4: mp_size_t,
158 ) -> mp_limb_t;
159 #[link_name = "mpn_add_nc__extern"]
160 pub fn mpn_add_nc(
161 rp: mp_ptr,
162 up: mp_srcptr,
163 vp: mp_srcptr,
164 n: mp_size_t,
165 ci: mp_limb_t,
166 ) -> mp_limb_t;
167 #[link_name = "mpn_sub_nc__extern"]
168 pub fn mpn_sub_nc(
169 rp: mp_ptr,
170 up: mp_srcptr,
171 vp: mp_srcptr,
172 n: mp_size_t,
173 ci: mp_limb_t,
174 ) -> mp_limb_t;
175 pub fn flint_mpn_sumdiff_n(
176 s: mp_ptr,
177 d: mp_ptr,
178 x: mp_srcptr,
179 y: mp_srcptr,
180 n: mp_size_t,
181 ) -> mp_limb_t;
182 pub fn __gmpn_addlsh1_n(
183 arg1: mp_ptr,
184 arg2: mp_srcptr,
185 arg3: mp_srcptr,
186 arg4: mp_size_t,
187 ) -> mp_limb_t;
188 pub fn __gmpn_rsh1add_n(
189 arg1: mp_ptr,
190 arg2: mp_srcptr,
191 arg3: mp_srcptr,
192 arg4: mp_size_t,
193 ) -> mp_limb_t;
194 pub fn __gmpn_rsh1sub_n(
195 arg1: mp_ptr,
196 arg2: mp_srcptr,
197 arg3: mp_srcptr,
198 arg4: mp_size_t,
199 ) -> mp_limb_t;
200 pub static mut flint_mpn_mul_func_tab: [[flint_mpn_mul_func_t; 17usize]; 0usize];
201 pub static flint_mpn_mul_n_func_tab: [flint_mpn_mul_func_t; 0usize];
202 pub static flint_mpn_sqr_func_tab: [flint_mpn_sqr_func_t; 0usize];
203 pub fn flint_mpn_mul_toom22(
204 pp: mp_ptr,
205 ap: mp_srcptr,
206 an: mp_size_t,
207 bp: mp_srcptr,
208 bn: mp_size_t,
209 scratch: mp_ptr,
210 );
211 pub fn flint_mpn_mul_toom32(
212 pp: mp_ptr,
213 ap: mp_srcptr,
214 an: mp_size_t,
215 bp: mp_srcptr,
216 bn: mp_size_t,
217 scratch: mp_ptr,
218 );
219 pub fn _flint_mpn_mul(
220 r: mp_ptr,
221 x: mp_srcptr,
222 xn: mp_size_t,
223 y: mp_srcptr,
224 yn: mp_size_t,
225 ) -> mp_limb_t;
226 pub fn _flint_mpn_mul_n(r: mp_ptr, x: mp_srcptr, y: mp_srcptr, n: mp_size_t);
227 pub fn _flint_mpn_sqr(r: mp_ptr, x: mp_srcptr, n: mp_size_t) -> mp_limb_t;
228 #[link_name = "flint_mpn_mul__extern"]
229 pub fn flint_mpn_mul(
230 r: mp_ptr,
231 x: mp_srcptr,
232 xn: mp_size_t,
233 y: mp_srcptr,
234 yn: mp_size_t,
235 ) -> mp_limb_t;
236 #[link_name = "flint_mpn_mul_n__extern"]
237 pub fn flint_mpn_mul_n(r: mp_ptr, x: mp_srcptr, y: mp_srcptr, n: mp_size_t);
238 #[link_name = "flint_mpn_sqr__extern"]
239 pub fn flint_mpn_sqr(r: mp_ptr, x: mp_srcptr, n: mp_size_t) -> mp_limb_t;
240 pub static flint_mpn_mullow_func_tab: [flint_mpn_mul_func_t; 0usize];
241 pub static flint_mpn_mulhigh_func_tab: [flint_mpn_mul_func_t; 0usize];
242 pub static flint_mpn_sqrhigh_func_tab: [flint_mpn_sqr_func_t; 0usize];
243 pub static flint_mpn_mulhigh_normalised_func_tab: [flint_mpn_mulhigh_normalised_func_t; 0usize];
244 pub static flint_mpn_sqrhigh_normalised_func_tab: [flint_mpn_sqrhigh_normalised_func_t; 0usize];
245 pub static flint_mpn_mulhigh_k_tab: [libc::c_short; 2048usize];
246 pub fn flint_mpn_mullow_basecase(
247 res: mp_ptr,
248 u: mp_srcptr,
249 v: mp_srcptr,
250 n: mp_size_t,
251 ) -> mp_limb_t;
252 pub fn _flint_mpn_mullow_n_mulders_recursive(
253 rp: mp_ptr,
254 np: mp_srcptr,
255 mp: mp_srcptr,
256 n: mp_size_t,
257 );
258 pub fn _flint_mpn_mullow_n_mulders(
259 res: mp_ptr,
260 u: mp_srcptr,
261 v: mp_srcptr,
262 n: mp_size_t,
263 ) -> mp_limb_t;
264 pub fn _flint_mpn_mullow_n_mul(
265 res: mp_ptr,
266 u: mp_srcptr,
267 v: mp_srcptr,
268 n: mp_size_t,
269 ) -> mp_limb_t;
270 pub fn _flint_mpn_mullow_n(res: mp_ptr, u: mp_srcptr, v: mp_srcptr, n: mp_size_t) -> mp_limb_t;
271 pub fn _flint_mpn_mulhigh_basecase(
272 res: mp_ptr,
273 u: mp_srcptr,
274 v: mp_srcptr,
275 n: mp_size_t,
276 ) -> mp_limb_t;
277 pub fn _flint_mpn_mulhigh_n_mulders_recursive(
278 rp: mp_ptr,
279 np: mp_srcptr,
280 mp: mp_srcptr,
281 n: mp_size_t,
282 );
283 pub fn _flint_mpn_mulhigh_n_naive(
284 rp: mp_ptr,
285 up: mp_srcptr,
286 vp: mp_srcptr,
287 n: mp_size_t,
288 ) -> mp_limb_t;
289 pub fn _flint_mpn_mulhigh_n_recursive(
290 r: mp_ptr,
291 x: mp_srcptr,
292 y: mp_srcptr,
293 n: mp_size_t,
294 ) -> mp_limb_t;
295 pub fn _flint_mpn_mulhigh_n_mulders(
296 res: mp_ptr,
297 u: mp_srcptr,
298 v: mp_srcptr,
299 n: mp_size_t,
300 ) -> mp_limb_t;
301 pub fn _flint_mpn_mulhigh_n_mul(
302 res: mp_ptr,
303 u: mp_srcptr,
304 v: mp_srcptr,
305 n: mp_size_t,
306 ) -> mp_limb_t;
307 pub fn _flint_mpn_mulhigh_n(res: mp_ptr, u: mp_srcptr, v: mp_srcptr, n: mp_size_t)
308 -> mp_limb_t;
309 #[link_name = "_flint_mpn_mulhigh_n_basecase2__extern"]
310 pub fn _flint_mpn_mulhigh_n_basecase2(
311 rp: mp_ptr,
312 xp: mp_srcptr,
313 yp: mp_srcptr,
314 n: mp_size_t,
315 ) -> mp_limb_t;
316 #[link_name = "flint_mpn_mullow_n__extern"]
317 pub fn flint_mpn_mullow_n(rp: mp_ptr, xp: mp_srcptr, yp: mp_srcptr, n: mp_size_t) -> mp_limb_t;
318 #[link_name = "flint_mpn_mulhigh_n__extern"]
319 pub fn flint_mpn_mulhigh_n(rp: mp_ptr, xp: mp_srcptr, yp: mp_srcptr, n: mp_size_t)
320 -> mp_limb_t;
321 #[link_name = "flint_mpn_mul_or_mullow_n__extern"]
322 pub fn flint_mpn_mul_or_mullow_n(rp: mp_ptr, xp: mp_srcptr, yp: mp_srcptr, n: mp_size_t);
323 #[link_name = "flint_mpn_mul_or_mulhigh_n__extern"]
324 pub fn flint_mpn_mul_or_mulhigh_n(rp: mp_ptr, xp: mp_srcptr, yp: mp_srcptr, n: mp_size_t);
325 pub fn _flint_mpn_sqrhigh_basecase_even(
326 arg1: mp_ptr,
327 arg2: mp_srcptr,
328 arg3: mp_size_t,
329 ) -> mp_limb_t;
330 pub fn _flint_mpn_sqrhigh_basecase_odd(
331 arg1: mp_ptr,
332 arg2: mp_srcptr,
333 arg3: mp_size_t,
334 ) -> mp_limb_t;
335 #[link_name = "_flint_mpn_sqrhigh_basecase__extern"]
336 pub fn _flint_mpn_sqrhigh_basecase(rp: mp_ptr, xp: mp_srcptr, n: mp_size_t) -> mp_limb_t;
337 pub fn _flint_mpn_sqrhigh_mulders_recursive(rp: mp_ptr, np: mp_srcptr, n: mp_size_t);
338 pub fn _flint_mpn_sqrhigh_mulders(res: mp_ptr, u: mp_srcptr, n: mp_size_t) -> mp_limb_t;
339 pub fn _flint_mpn_sqrhigh_sqr(res: mp_ptr, u: mp_srcptr, n: mp_size_t) -> mp_limb_t;
340 pub fn _flint_mpn_sqrhigh(res: mp_ptr, u: mp_srcptr, n: mp_size_t) -> mp_limb_t;
341 #[link_name = "flint_mpn_sqrhigh__extern"]
342 pub fn flint_mpn_sqrhigh(rp: mp_ptr, xp: mp_srcptr, n: mp_size_t) -> mp_limb_t;
343 pub fn _flint_mpn_mulhigh_normalised(
344 rp: mp_ptr,
345 xp: mp_srcptr,
346 yp: mp_srcptr,
347 n: mp_size_t,
348 ) -> mp_limb_pair_t;
349 #[link_name = "flint_mpn_mulhigh_normalised__extern"]
350 pub fn flint_mpn_mulhigh_normalised(
351 rp: mp_ptr,
352 xp: mp_srcptr,
353 yp: mp_srcptr,
354 n: mp_size_t,
355 ) -> mp_limb_pair_t;
356 pub fn _flint_mpn_sqrhigh_normalised(rp: mp_ptr, xp: mp_srcptr, n: mp_size_t)
357 -> mp_limb_pair_t;
358 #[link_name = "flint_mpn_sqrhigh_normalised__extern"]
359 pub fn flint_mpn_sqrhigh_normalised(rp: mp_ptr, xp: mp_srcptr, n: mp_size_t) -> mp_limb_pair_t;
360 pub fn flint_mpn_preinv1(d: mp_limb_t, d2: mp_limb_t) -> mp_limb_t;
361 pub fn flint_mpn_preinvn(dinv: mp_ptr, d: mp_srcptr, n: mp_size_t);
362 #[link_name = "flint_mpn_divisible_1_odd__extern"]
363 pub fn flint_mpn_divisible_1_odd(x: mp_srcptr, xsize: mp_size_t, d: mp_limb_t) -> libc::c_int;
364 #[link_name = "mpn_tdiv_q__extern"]
365 pub fn mpn_tdiv_q(qp: mp_ptr, np: mp_srcptr, nn: mp_size_t, dp: mp_srcptr, dn: mp_size_t);
366 pub fn flint_mpn_divides(
367 q: mp_ptr,
368 ap: mp_srcptr,
369 an: mp_size_t,
370 bp: mp_srcptr,
371 bn: mp_size_t,
372 scr: mp_ptr,
373 ) -> libc::c_int;
374 pub fn flint_mpn_mod_preinvn(
375 r: mp_ptr,
376 a: mp_srcptr,
377 m: mp_size_t,
378 d: mp_srcptr,
379 n: mp_size_t,
380 dinv: mp_srcptr,
381 );
382 pub fn flint_mpn_divrem_preinv1(
383 q: mp_ptr,
384 a: mp_ptr,
385 m: mp_size_t,
386 b: mp_srcptr,
387 n: mp_size_t,
388 dinv: mp_limb_t,
389 ) -> mp_limb_t;
390 pub fn flint_mpn_divrem_preinvn(
391 q: mp_ptr,
392 r: mp_ptr,
393 a: mp_srcptr,
394 m: mp_size_t,
395 d: mp_srcptr,
396 n: mp_size_t,
397 dinv: mp_srcptr,
398 ) -> mp_limb_t;
399 pub fn flint_mpn_divrem_1_preinv(
400 qp: mp_ptr,
401 up: mp_srcptr,
402 n: mp_size_t,
403 d: mp_limb_t,
404 dinv: mp_limb_t,
405 norm: libc::c_uint,
406 ) -> mp_limb_t;
407 pub fn flint_mpn_divrem_2_1_preinv_norm(
408 qp: mp_ptr,
409 up: mp_srcptr,
410 d: mp_limb_t,
411 dinv: mp_limb_t,
412 ) -> mp_limb_t;
413 pub fn flint_mpn_divrem_2_1_preinv_unnorm(
414 qp: mp_ptr,
415 up: mp_srcptr,
416 d: mp_limb_t,
417 dinv: mp_limb_t,
418 norm: libc::c_uint,
419 ) -> mp_limb_t;
420 pub fn flint_mpn_divrem_3_1_preinv_norm(
421 qp: mp_ptr,
422 up: mp_srcptr,
423 d: mp_limb_t,
424 dinv: mp_limb_t,
425 ) -> mp_limb_t;
426 pub fn flint_mpn_divrem_3_1_preinv_unnorm(
427 qp: mp_ptr,
428 up: mp_srcptr,
429 d: mp_limb_t,
430 dinv: mp_limb_t,
431 norm: libc::c_uint,
432 ) -> mp_limb_t;
433 pub fn flint_mpn_fmms1(
434 y: mp_ptr,
435 a1: mp_limb_t,
436 x1: mp_srcptr,
437 a2: mp_limb_t,
438 x2: mp_srcptr,
439 n: mp_size_t,
440 ) -> mp_size_t;
441 pub fn flint_mpn_debug(x: mp_srcptr, xsize: mp_size_t);
442 pub fn flint_mpn_remove_2exp(
443 x: mp_ptr,
444 xsize: mp_size_t,
445 bits: *mut flint_bitcnt_t,
446 ) -> mp_size_t;
447 pub fn flint_mpn_remove_power_ascending(
448 x: mp_ptr,
449 xsize: mp_size_t,
450 p: mp_ptr,
451 psize: mp_size_t,
452 exp: *mut ulong,
453 ) -> mp_size_t;
454 pub fn flint_mpn_factor_trial(
455 x: mp_srcptr,
456 xsize: mp_size_t,
457 start: slong,
458 stop: slong,
459 ) -> libc::c_int;
460 pub fn flint_mpn_factor_trial_tree(
461 factors: *mut slong,
462 x: mp_srcptr,
463 xsize: mp_size_t,
464 num_primes: slong,
465 ) -> libc::c_int;
466 pub fn flint_mpn_gcd_full2(
467 gp: mp_ptr,
468 ap: mp_srcptr,
469 an: mp_size_t,
470 bp: mp_srcptr,
471 bn: mp_size_t,
472 scr: mp_ptr,
473 ) -> mp_size_t;
474 pub fn flint_mpn_gcd_full(
475 gp: mp_ptr,
476 ap: mp_srcptr,
477 an: mp_size_t,
478 bp: mp_srcptr,
479 bn: mp_size_t,
480 ) -> mp_size_t;
481 pub fn flint_mpn_mulmod_preinv1(
482 r: mp_ptr,
483 a: mp_srcptr,
484 b: mp_srcptr,
485 n: mp_size_t,
486 d: mp_srcptr,
487 dinv: mp_limb_t,
488 norm: ulong,
489 );
490 pub fn flint_mpn_mulmod_preinvn(
491 r: mp_ptr,
492 a: mp_srcptr,
493 b: mp_srcptr,
494 n: mp_size_t,
495 d: mp_srcptr,
496 dinv: mp_srcptr,
497 norm: ulong,
498 );
499 pub fn flint_mpn_mulmod_want_precond(n: mp_size_t, num: slong, norm: ulong) -> libc::c_int;
500 pub fn flint_mpn_mulmod_precond_matrix_precompute(
501 apre: mp_ptr,
502 a: mp_srcptr,
503 n: mp_size_t,
504 d: mp_srcptr,
505 dinv: mp_srcptr,
506 norm: ulong,
507 );
508 pub fn flint_mpn_mulmod_precond_matrix_alloc(n: mp_size_t) -> mp_size_t;
509 pub fn flint_mpn_mulmod_precond_matrix(
510 rp: mp_ptr,
511 apre: mp_srcptr,
512 b: mp_srcptr,
513 n: mp_size_t,
514 d: mp_srcptr,
515 dinv: mp_srcptr,
516 norm: ulong,
517 );
518 pub fn flint_mpn_mulmod_precond_shoup_precompute(
519 apre: mp_ptr,
520 a: mp_srcptr,
521 n: mp_size_t,
522 dnormed: mp_srcptr,
523 dinv: mp_srcptr,
524 norm: ulong,
525 );
526 pub fn flint_mpn_mulmod_precond_shoup(
527 res: mp_ptr,
528 a: mp_srcptr,
529 apre: mp_srcptr,
530 b: mp_srcptr,
531 n: mp_size_t,
532 d: mp_srcptr,
533 norm: ulong,
534 );
535 pub fn flint_mpn_fmmamod_preinvn(
536 r: mp_ptr,
537 a: mp_srcptr,
538 b: mp_srcptr,
539 e: mp_srcptr,
540 f: mp_srcptr,
541 n: mp_size_t,
542 d: mp_srcptr,
543 dinv: mp_srcptr,
544 norm: ulong,
545 );
546 pub fn flint_mpn_fmmamod_preinvn_2(
547 r: mp_ptr,
548 a: mp_srcptr,
549 b: mp_srcptr,
550 e: mp_srcptr,
551 f: mp_srcptr,
552 d: mp_srcptr,
553 dinv: mp_srcptr,
554 norm: ulong,
555 );
556 pub fn flint_mpn_fmmamod_precond_matrix(
557 rp: mp_ptr,
558 apre1: mp_srcptr,
559 b1: mp_srcptr,
560 apre2: mp_srcptr,
561 b2: mp_srcptr,
562 n: mp_size_t,
563 d: mp_srcptr,
564 dinv: mp_srcptr,
565 norm: ulong,
566 );
567 pub fn flint_mpn_mulmod_2expp1_basecase(
568 xp: mp_ptr,
569 yp: mp_srcptr,
570 zp: mp_srcptr,
571 c: libc::c_int,
572 b: flint_bitcnt_t,
573 tp: mp_ptr,
574 ) -> libc::c_int;
575 pub fn flint_mpn_get_d(
576 ptr: mp_srcptr,
577 size: mp_size_t,
578 sign: mp_size_t,
579 exp: libc::c_long,
580 ) -> f64;
581 pub fn flint_mpn_rrandom(rp: mp_ptr, state: *mut flint_rand_struct, n: mp_size_t);
582 pub fn flint_mpn_rrandomb(rp: mp_ptr, state: *mut flint_rand_struct, n: flint_bitcnt_t);
583 pub fn flint_mpn_urandomb(rp: mp_ptr, state: *mut flint_rand_struct, n: flint_bitcnt_t);
584 pub fn flint_mpn_urandomm(
585 rp: mp_ptr,
586 state: *mut flint_rand_struct,
587 xp: mp_srcptr,
588 xn: mp_size_t,
589 );
590}