1#![allow(non_camel_case_types)]
2
3use crate::deps::*;
6
7extern "C" {
8 pub fn fft_combine_limbs(
9 res: *mut mp_limb_t,
10 poly: *mut *mut mp_limb_t,
11 length: mp_limb_signed_t,
12 coeff_limbs: mp_size_t,
13 output_limbs: mp_size_t,
14 total_limbs: mp_size_t,
15 );
16 pub fn fft_combine_bits(
17 res: *mut mp_limb_t,
18 poly: *mut *mut mp_limb_t,
19 length: mp_limb_signed_t,
20 bits: mp_limb_t,
21 output_limbs: mp_size_t,
22 total_limbs: mp_size_t,
23 );
24 pub fn fft_split_limbs(
25 poly: *mut *mut mp_limb_t,
26 limbs: mp_srcptr,
27 total_limbs: mp_size_t,
28 coeff_limbs: mp_size_t,
29 output_limbs: mp_size_t,
30 ) -> mp_size_t;
31 pub fn fft_split_bits(
32 poly: *mut *mut mp_limb_t,
33 limbs: mp_srcptr,
34 total_limbs: mp_size_t,
35 bits: mp_limb_t,
36 output_limbs: mp_size_t,
37 ) -> mp_size_t;
38 pub fn fermat_to_mpz(m: *mut __mpz_struct, i: *mut mp_limb_t, limbs: mp_size_t);
39 pub fn mpn_normmod_2expp1(t: *mut mp_limb_t, limbs: mp_size_t);
40 pub fn butterfly_lshB(
41 t: *mut mp_limb_t,
42 u: *mut mp_limb_t,
43 i1: *mut mp_limb_t,
44 i2: *mut mp_limb_t,
45 limbs: mp_size_t,
46 x: mp_size_t,
47 y: mp_size_t,
48 );
49 pub fn butterfly_rshB(
50 t: *mut mp_limb_t,
51 u: *mut mp_limb_t,
52 i1: *mut mp_limb_t,
53 i2: *mut mp_limb_t,
54 limbs: mp_size_t,
55 x: mp_size_t,
56 y: mp_size_t,
57 );
58 pub fn mpn_mul_2expmod_2expp1(
59 t: *mut mp_limb_t,
60 i1: *mut mp_limb_t,
61 limbs: mp_size_t,
62 d: mp_limb_t,
63 );
64 pub fn mpn_div_2expmod_2expp1(
65 t: *mut mp_limb_t,
66 i1: *mut mp_limb_t,
67 limbs: mp_size_t,
68 d: mp_limb_t,
69 );
70 pub fn fft_adjust(
71 r: *mut mp_limb_t,
72 i1: *mut mp_limb_t,
73 i: mp_size_t,
74 limbs: mp_size_t,
75 w: mp_limb_t,
76 );
77 pub fn fft_butterfly(
78 s: *mut mp_limb_t,
79 t: *mut mp_limb_t,
80 i1: *mut mp_limb_t,
81 i2: *mut mp_limb_t,
82 i: mp_size_t,
83 limbs: mp_size_t,
84 w: mp_limb_t,
85 );
86 pub fn ifft_butterfly(
87 s: *mut mp_limb_t,
88 t: *mut mp_limb_t,
89 i1: *mut mp_limb_t,
90 i2: *mut mp_limb_t,
91 i: mp_size_t,
92 limbs: mp_size_t,
93 w: mp_limb_t,
94 );
95 pub fn fft_radix2(
96 ii: *mut *mut mp_limb_t,
97 n: mp_size_t,
98 w: mp_limb_t,
99 t1: *mut *mut mp_limb_t,
100 t2: *mut *mut mp_limb_t,
101 );
102 pub fn fft_truncate1(
103 ii: *mut *mut mp_limb_t,
104 n: mp_size_t,
105 w: mp_limb_t,
106 t1: *mut *mut mp_limb_t,
107 t2: *mut *mut mp_limb_t,
108 trunc: mp_size_t,
109 );
110 pub fn fft_truncate(
111 ii: *mut *mut mp_limb_t,
112 n: mp_size_t,
113 w: mp_limb_t,
114 t1: *mut *mut mp_limb_t,
115 t2: *mut *mut mp_limb_t,
116 trunc: mp_size_t,
117 );
118 pub fn ifft_radix2(
119 ii: *mut *mut mp_limb_t,
120 n: mp_size_t,
121 w: mp_limb_t,
122 t1: *mut *mut mp_limb_t,
123 t2: *mut *mut mp_limb_t,
124 );
125 pub fn ifft_truncate1(
126 ii: *mut *mut mp_limb_t,
127 n: mp_size_t,
128 w: mp_limb_t,
129 t1: *mut *mut mp_limb_t,
130 t2: *mut *mut mp_limb_t,
131 trunc: mp_size_t,
132 );
133 pub fn ifft_truncate(
134 ii: *mut *mut mp_limb_t,
135 n: mp_size_t,
136 w: mp_limb_t,
137 t1: *mut *mut mp_limb_t,
138 t2: *mut *mut mp_limb_t,
139 trunc: mp_size_t,
140 );
141 pub fn fft_butterfly_sqrt2(
142 s: *mut mp_limb_t,
143 t: *mut mp_limb_t,
144 i1: *mut mp_limb_t,
145 i2: *mut mp_limb_t,
146 i: mp_size_t,
147 limbs: mp_size_t,
148 w: mp_limb_t,
149 temp: *mut mp_limb_t,
150 );
151 pub fn ifft_butterfly_sqrt2(
152 s: *mut mp_limb_t,
153 t: *mut mp_limb_t,
154 i1: *mut mp_limb_t,
155 i2: *mut mp_limb_t,
156 i: mp_size_t,
157 limbs: mp_size_t,
158 w: mp_limb_t,
159 temp: *mut mp_limb_t,
160 );
161 pub fn fft_adjust_sqrt2(
162 r: *mut mp_limb_t,
163 i1: *mut mp_limb_t,
164 i: mp_size_t,
165 limbs: mp_size_t,
166 w: mp_limb_t,
167 temp: *mut mp_limb_t,
168 );
169 pub fn fft_truncate_sqrt2(
170 ii: *mut *mut mp_limb_t,
171 n: mp_size_t,
172 w: mp_limb_t,
173 t1: *mut *mut mp_limb_t,
174 t2: *mut *mut mp_limb_t,
175 temp: *mut *mut mp_limb_t,
176 trunc: mp_size_t,
177 );
178 pub fn ifft_truncate_sqrt2(
179 ii: *mut *mut mp_limb_t,
180 n: mp_size_t,
181 w: mp_limb_t,
182 t1: *mut *mut mp_limb_t,
183 t2: *mut *mut mp_limb_t,
184 temp: *mut *mut mp_limb_t,
185 trunc: mp_size_t,
186 );
187 pub fn mul_truncate_sqrt2(
188 r1: mp_ptr,
189 i1: mp_srcptr,
190 n1: mp_size_t,
191 i2: mp_srcptr,
192 n2: mp_size_t,
193 depth: mp_limb_t,
194 w: mp_limb_t,
195 );
196 pub fn fft_butterfly_twiddle(
197 u: *mut mp_limb_t,
198 v: *mut mp_limb_t,
199 s: *mut mp_limb_t,
200 t: *mut mp_limb_t,
201 limbs: mp_size_t,
202 b1: mp_limb_t,
203 b2: mp_limb_t,
204 );
205 pub fn ifft_butterfly_twiddle(
206 u: *mut mp_limb_t,
207 v: *mut mp_limb_t,
208 s: *mut mp_limb_t,
209 t: *mut mp_limb_t,
210 limbs: mp_size_t,
211 b1: mp_limb_t,
212 b2: mp_limb_t,
213 );
214 pub fn fft_radix2_twiddle(
215 ii: *mut *mut mp_limb_t,
216 is: mp_size_t,
217 n: mp_size_t,
218 w: mp_limb_t,
219 t1: *mut *mut mp_limb_t,
220 t2: *mut *mut mp_limb_t,
221 ws: mp_size_t,
222 r: mp_size_t,
223 c: mp_size_t,
224 rs: mp_size_t,
225 );
226 pub fn ifft_radix2_twiddle(
227 ii: *mut *mut mp_limb_t,
228 is: mp_size_t,
229 n: mp_size_t,
230 w: mp_limb_t,
231 t1: *mut *mut mp_limb_t,
232 t2: *mut *mut mp_limb_t,
233 ws: mp_size_t,
234 r: mp_size_t,
235 c: mp_size_t,
236 rs: mp_size_t,
237 );
238 pub fn fft_truncate1_twiddle(
239 ii: *mut *mut mp_limb_t,
240 is: mp_size_t,
241 n: mp_size_t,
242 w: mp_limb_t,
243 t1: *mut *mut mp_limb_t,
244 t2: *mut *mut mp_limb_t,
245 ws: mp_size_t,
246 r: mp_size_t,
247 c: mp_size_t,
248 rs: mp_size_t,
249 trunc: mp_size_t,
250 );
251 pub fn ifft_truncate1_twiddle(
252 ii: *mut *mut mp_limb_t,
253 is: mp_size_t,
254 n: mp_size_t,
255 w: mp_limb_t,
256 t1: *mut *mut mp_limb_t,
257 t2: *mut *mut mp_limb_t,
258 ws: mp_size_t,
259 r: mp_size_t,
260 c: mp_size_t,
261 rs: mp_size_t,
262 trunc: mp_size_t,
263 );
264 pub fn fft_mfa_truncate_sqrt2(
265 ii: *mut *mut mp_limb_t,
266 n: mp_size_t,
267 w: mp_limb_t,
268 t1: *mut *mut mp_limb_t,
269 t2: *mut *mut mp_limb_t,
270 temp: *mut *mut mp_limb_t,
271 n1: mp_size_t,
272 trunc: mp_size_t,
273 );
274 pub fn ifft_mfa_truncate_sqrt2(
275 ii: *mut *mut mp_limb_t,
276 n: mp_size_t,
277 w: mp_limb_t,
278 t1: *mut *mut mp_limb_t,
279 t2: *mut *mut mp_limb_t,
280 temp: *mut *mut mp_limb_t,
281 n1: mp_size_t,
282 trunc: mp_size_t,
283 );
284 pub fn mul_mfa_truncate_sqrt2(
285 r1: mp_ptr,
286 i1: mp_srcptr,
287 n1: mp_size_t,
288 i2: mp_srcptr,
289 n2: mp_size_t,
290 depth: mp_limb_t,
291 w: mp_limb_t,
292 );
293 pub fn fft_mfa_truncate_sqrt2_outer(
294 ii: *mut *mut mp_limb_t,
295 n: mp_size_t,
296 w: mp_limb_t,
297 t1: *mut *mut mp_limb_t,
298 t2: *mut *mut mp_limb_t,
299 temp: *mut *mut mp_limb_t,
300 n1: mp_size_t,
301 trunc: mp_size_t,
302 );
303 pub fn fft_mfa_truncate_sqrt2_inner(
304 ii: *mut *mut mp_limb_t,
305 jj: *mut *mut mp_limb_t,
306 n: mp_size_t,
307 w: mp_limb_t,
308 t1: *mut *mut mp_limb_t,
309 t2: *mut *mut mp_limb_t,
310 temp: *mut *mut mp_limb_t,
311 n1: mp_size_t,
312 trunc: mp_size_t,
313 tt: *mut *mut mp_limb_t,
314 );
315 pub fn ifft_mfa_truncate_sqrt2_outer(
316 ii: *mut *mut mp_limb_t,
317 n: mp_size_t,
318 w: mp_limb_t,
319 t1: *mut *mut mp_limb_t,
320 t2: *mut *mut mp_limb_t,
321 temp: *mut *mut mp_limb_t,
322 n1: mp_size_t,
323 trunc: mp_size_t,
324 );
325 pub fn fft_negacyclic(
326 ii: *mut *mut mp_limb_t,
327 n: mp_size_t,
328 w: mp_limb_t,
329 t1: *mut *mut mp_limb_t,
330 t2: *mut *mut mp_limb_t,
331 temp: *mut *mut mp_limb_t,
332 );
333 pub fn ifft_negacyclic(
334 ii: *mut *mut mp_limb_t,
335 n: mp_size_t,
336 w: mp_limb_t,
337 t1: *mut *mut mp_limb_t,
338 t2: *mut *mut mp_limb_t,
339 temp: *mut *mut mp_limb_t,
340 );
341 pub fn fft_naive_convolution_1(
342 r: *mut mp_limb_t,
343 ii: *mut mp_limb_t,
344 jj: *mut mp_limb_t,
345 m: mp_size_t,
346 );
347 pub fn _fft_mulmod_2expp1(
348 r1: *mut mp_limb_t,
349 i1: *mut mp_limb_t,
350 i2: *mut mp_limb_t,
351 r_limbs: mp_size_t,
352 depth: mp_limb_t,
353 w: mp_limb_t,
354 );
355 pub fn fft_adjust_limbs(limbs: mp_size_t) -> mp_limb_signed_t;
356 pub fn fft_mulmod_2expp1(
357 r: *mut mp_limb_t,
358 i1: *mut mp_limb_t,
359 i2: *mut mp_limb_t,
360 n: mp_size_t,
361 w: mp_size_t,
362 tt: *mut mp_limb_t,
363 );
364 pub fn flint_mpn_mul_fft_main(
365 r1: mp_ptr,
366 i1: mp_srcptr,
367 n1: mp_size_t,
368 i2: mp_srcptr,
369 n2: mp_size_t,
370 );
371 pub fn fft_convolution_basic(
372 ii: *mut *mut mp_limb_t,
373 jj: *mut *mut mp_limb_t,
374 depth: mp_limb_signed_t,
375 limbs: mp_limb_signed_t,
376 trunc: mp_limb_signed_t,
377 t1: *mut *mut mp_limb_t,
378 t2: *mut *mut mp_limb_t,
379 s1: *mut *mut mp_limb_t,
380 tt: *mut *mut mp_limb_t,
381 );
382 pub fn fft_convolution(
383 ii: *mut *mut mp_limb_t,
384 jj: *mut *mut mp_limb_t,
385 depth: mp_limb_signed_t,
386 limbs: mp_limb_signed_t,
387 trunc: mp_limb_signed_t,
388 t1: *mut *mut mp_limb_t,
389 t2: *mut *mut mp_limb_t,
390 s1: *mut *mut mp_limb_t,
391 tt: *mut *mut mp_limb_t,
392 );
393 pub fn fft_precache(
394 jj: *mut *mut mp_limb_t,
395 depth: mp_limb_signed_t,
396 limbs: mp_limb_signed_t,
397 trunc: mp_limb_signed_t,
398 t1: *mut *mut mp_limb_t,
399 t2: *mut *mut mp_limb_t,
400 s1: *mut *mut mp_limb_t,
401 );
402 pub fn fft_convolution_precache(
403 ii: *mut *mut mp_limb_t,
404 jj: *mut *mut mp_limb_t,
405 depth: mp_limb_signed_t,
406 limbs: mp_limb_signed_t,
407 trunc: mp_limb_signed_t,
408 t1: *mut *mut mp_limb_t,
409 t2: *mut *mut mp_limb_t,
410 s1: *mut *mut mp_limb_t,
411 tt: *mut *mut mp_limb_t,
412 );
413}