flint_sys/
fft.rs

1#![allow(non_camel_case_types)]
2
3//! *See the [FLINT documentation](http://flintlib.org/doc/fft.html).
4
5use 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}