FNFT
Loading...
Searching...
No Matches
fnft__poly_fmult.h
Go to the documentation of this file.
1/*
2 * This file is part of FNFT.
3 *
4 * FNFT is free software; you can redistribute it and/or
5 * modify it under the terms of the version 2 of the GNU General
6 * Public License as published by the Free Software Foundation.
7 *
8 * FNFT is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * Contributors:
17 * Sander Wahls (TU Delft) 2017-2018, 2021.
18 * Peter J Prins (TU Delft) 2020.
19 * Lianne de Vries (TU Delft student) 2021.
20 */
21
28#ifndef FNFT__POLY_FMULT_H
29#define FNFT__POLY_FMULT_H
30
32
42
88 const FNFT_UINT deg,
89 FNFT_COMPLEX const * const p1,
90 FNFT_COMPLEX const * const p2,
91 FNFT_COMPLEX * const result,
94 FNFT_COMPLEX * const buf0,
95 FNFT_COMPLEX * const buf1,
96 FNFT_COMPLEX * const buf2,
97 const FNFT_UINT mode);
98
142 FNFT_COMPLEX const * const p1_11,
143 const FNFT_UINT p1_stride,
144 FNFT_COMPLEX const * const p2_11,
145 const FNFT_UINT p2_stride,
146 FNFT_COMPLEX * const result_11,
147 const FNFT_UINT result_stride,
150 FNFT_COMPLEX * const buf0,
151 FNFT_COMPLEX * const buf1,
152 FNFT_COMPLEX * const buf2,
153 const FNFT_UINT mode_offset);
154
155
199 FNFT_COMPLEX const * const p1_11,
200 const FNFT_UINT p1_stride,
201 FNFT_COMPLEX const * const p2_11,
202 const FNFT_UINT p2_stride,
203 FNFT_COMPLEX * const result_11,
204 const FNFT_UINT result_stride,
207 FNFT_COMPLEX * const buf0,
208 FNFT_COMPLEX * const buf1,
209 FNFT_COMPLEX * const buf2,
210 const FNFT_UINT sufficient_space_flag);
211
225
246 FNFT_INT * const W_ptr);
247
262
277
301 FNFT_COMPLEX * const result, FNFT_INT * const W_ptr);
302
326 FNFT_COMPLEX* const result, FNFT_INT* const W_ptr);
327
328#ifdef FNFT_ENABLE_SHORT_NAMES
329#define poly_fmult_two_polys_len(...) fnft__poly_fmult_two_polys_len(__VA_ARGS__)
330#define poly_fmult_two_polys_lenmen(...) fnft__poly_fmult_two_polys_lenmen(__VA_ARGS__)
331#define poly_fmult_two_polys(...) fnft__poly_fmult_two_polys(__VA_ARGS__)
332#define poly_fmult_two_polys2x2(...) fnft__poly_fmult_two_polys2x2(__VA_ARGS__)
333#define poly_fmult_two_polys3x3(...) fnft__poly_fmult_two_polys3x3(__VA_ARGS__)
334#define poly_fmult_numel(...) fnft__poly_fmult_numel(__VA_ARGS__)
335#define poly_fmult2x2_numel(...) fnft__poly_fmult2x2_numel(__VA_ARGS__)
336#define poly_fmult3x3_numel(...) fnft__poly_fmult3x3_numel(__VA_ARGS__)
337#define poly_fmult(...) fnft__poly_fmult(__VA_ARGS__)
338#define poly_fmult2x2(...) fnft__poly_fmult2x2(__VA_ARGS__)
339#define poly_fmult3x3(...) fnft__poly_fmult3x3(__VA_ARGS__)
340#endif
341
342#endif
kiss_fft_cfg fnft__fft_wrapper_plan_t
Stores information needed by fnft__fft_wrapper_execute_plan to perform a (inverse) FFT.
Definition fnft__fft_wrapper_plan_t.h:41
size_t FNFT_UINT
Definition fnft_numtypes.h:62
double complex FNFT_COMPLEX
Definition fnft_numtypes.h:47
int32_t FNFT_INT
Definition fnft_numtypes.h:56
FNFT_INT fnft__poly_fmult2x2(FNFT_UINT *d, FNFT_UINT n, FNFT_COMPLEX *const p, FNFT_COMPLEX *const result, FNFT_INT *const W_ptr)
Fast multiplication of multiple 2x2 matrix-valued polynomials of the same degree.
FNFT_INT fnft__poly_fmult3x3(FNFT_UINT *d, FNFT_UINT n, FNFT_COMPLEX *const p, FNFT_COMPLEX *const result, FNFT_INT *const W_ptr)
Fast multiplication of multiple 3x3 matrix-valued polynomials of the same degree.
FNFT_UINT fnft__poly_fmult3x3_numel(const FNFT_UINT deg, const FNFT_UINT n)
Number of elements that the inputs p and result to fnft__poly_fmult3x3 should have.
FNFT_UINT fnft__poly_fmult2x2_numel(const FNFT_UINT deg, const FNFT_UINT n)
Number of elements that the inputs p and result to fnft__poly_fmult2x2 should have.
FNFT_UINT fnft__poly_fmult_two_polys_len(const FNFT_UINT deg)
Length of the FFTs used by fnft__poly_fmult_two_polys.
FNFT_INT fnft__poly_fmult_two_polys3x3(const FNFT_UINT deg, FNFT_COMPLEX const *const p1_11, const FNFT_UINT p1_stride, FNFT_COMPLEX const *const p2_11, const FNFT_UINT p2_stride, FNFT_COMPLEX *const result_11, const FNFT_UINT result_stride, fnft__fft_wrapper_plan_t plan_fwd, fnft__fft_wrapper_plan_t plan_inv, FNFT_COMPLEX *const buf0, FNFT_COMPLEX *const buf1, FNFT_COMPLEX *const buf2, const FNFT_UINT sufficient_space_flag)
Multiplies two 3x3 matrices of polynomials.
FNFT_INT fnft__poly_fmult(FNFT_UINT *const d, FNFT_UINT n, FNFT_COMPLEX *const p, FNFT_INT *const W_ptr)
Fast multiplication of multiple polynomials of same degree.
FNFT_INT fnft__poly_fmult_two_polys2x2(const FNFT_UINT deg, FNFT_COMPLEX const *const p1_11, const FNFT_UINT p1_stride, FNFT_COMPLEX const *const p2_11, const FNFT_UINT p2_stride, FNFT_COMPLEX *const result_11, const FNFT_UINT result_stride, fnft__fft_wrapper_plan_t plan_fwd, fnft__fft_wrapper_plan_t plan_inv, FNFT_COMPLEX *const buf0, FNFT_COMPLEX *const buf1, FNFT_COMPLEX *const buf2, const FNFT_UINT mode_offset)
Multiplies two 2x2 matrices of polynomials.
FNFT_INT fnft__poly_fmult_two_polys(const FNFT_UINT deg, FNFT_COMPLEX const *const p1, FNFT_COMPLEX const *const p2, FNFT_COMPLEX *const result, fnft__fft_wrapper_plan_t plan_fwd, fnft__fft_wrapper_plan_t plan_inv, FNFT_COMPLEX *const buf0, FNFT_COMPLEX *const buf1, FNFT_COMPLEX *const buf2, const FNFT_UINT mode)
Multiplies two polynomials.
FNFT_UINT fnft__poly_fmult_numel(const FNFT_UINT deg, const FNFT_UINT n)
Number of elements that the input p to fnft__poly_fmult should have.