FNFT
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.
18  */
19 
26 #ifndef FNFT__POLY_FMULT_H
27 #define FNFT__POLY_FMULT_H
28 
30 
40 
83  const FNFT_UINT deg,
84  FNFT_COMPLEX const * const p1,
85  FNFT_COMPLEX const * const p2,
86  FNFT_COMPLEX * const result,
87  fnft__fft_wrapper_plan_t plan_fwd,
88  fnft__fft_wrapper_plan_t plan_inv,
89  FNFT_COMPLEX * const buf0,
90  FNFT_COMPLEX * const buf1,
91  FNFT_COMPLEX * const buf2,
92  const FNFT_UINT mode);
93 
137  FNFT_COMPLEX const * const p1_11,
138  const FNFT_UINT p1_stride,
139  FNFT_COMPLEX const * const p2_11,
140  const FNFT_UINT p2_stride,
141  FNFT_COMPLEX * const result_11,
142  const FNFT_UINT result_stride,
143  fnft__fft_wrapper_plan_t plan_fwd,
144  fnft__fft_wrapper_plan_t plan_inv,
145  FNFT_COMPLEX * const buf0,
146  FNFT_COMPLEX * const buf1,
147  FNFT_COMPLEX * const buf2,
148  const FNFT_UINT mode_offset);
149 
163 
184  FNFT_INT * const W_ptr);
185 
200 
224  FNFT_COMPLEX * const result, FNFT_INT * const W_ptr);
225 
226 #ifdef FNFT_ENABLE_SHORT_NAMES
227 #define poly_fmult_two_polys_len(...) fnft__poly_fmult_two_polys_len(__VA_ARGS__)
228 #define poly_fmult_two_polys_lenmen(...) fnft__poly_fmult_two_polys_lenmen(__VA_ARGS__)
229 #define poly_fmult_two_polys(...) fnft__poly_fmult_two_polys(__VA_ARGS__)
230 #define poly_fmult_two_polys2x2(...) fnft__poly_fmult_two_polys2x2(__VA_ARGS__)
231 #define poly_fmult_numel(...) fnft__poly_fmult_numel(__VA_ARGS__)
232 #define poly_fmult2x2_numel(...) fnft__poly_fmult2x2_numel(__VA_ARGS__)
233 #define poly_fmult(...) fnft__poly_fmult(__VA_ARGS__)
234 #define poly_fmult2x2(...) fnft__poly_fmult2x2(__VA_ARGS__)
235 #endif
236 
237 #endif
fnft__poly_fmult2x2_numel
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_INT
int32_t FNFT_INT
Definition: fnft_numtypes.h:56
FNFT_UINT
size_t FNFT_UINT
Definition: fnft_numtypes.h:62
fnft__fft_wrapper_plan_t
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
fnft__poly_fmult_numel
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.
fnft__poly_fmult_two_polys2x2
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__poly_fmult_two_polys
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_COMPLEX
double complex FNFT_COMPLEX
Definition: fnft_numtypes.h:47
fnft__poly_fmult_two_polys_len
FNFT_INT fnft__poly_fmult_two_polys_len(const FNFT_UINT deg)
Length of the FFTs used by fnft__poly_fmult_two_polys.
fnft__poly_fmult2x2
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__fft_wrapper_plan_t.h
fnft__poly_fmult
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.