Chris@42: /* Chris@42: * Copyright (c) 2003, 2007-14 Matteo Frigo Chris@42: * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology Chris@42: * Chris@42: * This program is free software; you can redistribute it and/or modify Chris@42: * it under the terms of the GNU General Public License as published by Chris@42: * the Free Software Foundation; either version 2 of the License, or Chris@42: * (at your option) any later version. Chris@42: * Chris@42: * This program is distributed in the hope that it will be useful, Chris@42: * but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@42: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@42: * GNU General Public License for more details. Chris@42: * Chris@42: * You should have received a copy of the GNU General Public License Chris@42: * along with this program; if not, write to the Free Software Chris@42: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Chris@42: * Chris@42: */ Chris@42: Chris@42: Chris@42: /* Chris@42: * This header file must include every file or define every Chris@42: * type or macro which is required to compile a codelet. Chris@42: */ Chris@42: Chris@42: #ifndef __DFT_CODELET_H__ Chris@42: #define __DFT_CODELET_H__ Chris@42: Chris@42: #include "ifftw.h" Chris@42: Chris@42: /************************************************************** Chris@42: * types of codelets Chris@42: **************************************************************/ Chris@42: Chris@42: /* DFT codelets */ Chris@42: typedef struct kdft_desc_s kdft_desc; Chris@42: Chris@42: typedef struct { Chris@42: int (*okp)( Chris@42: const kdft_desc *desc, Chris@42: const R *ri, const R *ii, const R *ro, const R *io, Chris@42: INT is, INT os, INT vl, INT ivs, INT ovs, Chris@42: const planner *plnr); Chris@42: INT vl; Chris@42: } kdft_genus; Chris@42: Chris@42: struct kdft_desc_s { Chris@42: INT sz; /* size of transform computed */ Chris@42: const char *nam; Chris@42: opcnt ops; Chris@42: const kdft_genus *genus; Chris@42: INT is; Chris@42: INT os; Chris@42: INT ivs; Chris@42: INT ovs; Chris@42: }; Chris@42: Chris@42: typedef void (*kdft) (const R *ri, const R *ii, R *ro, R *io, Chris@42: stride is, stride os, INT vl, INT ivs, INT ovs); Chris@42: void X(kdft_register)(planner *p, kdft codelet, const kdft_desc *desc); Chris@42: Chris@42: Chris@42: typedef struct ct_desc_s ct_desc; Chris@42: Chris@42: typedef struct { Chris@42: int (*okp)( Chris@42: const struct ct_desc_s *desc, Chris@42: const R *rio, const R *iio, Chris@42: INT rs, INT vs, INT m, INT mb, INT me, INT ms, Chris@42: const planner *plnr); Chris@42: INT vl; Chris@42: } ct_genus; Chris@42: Chris@42: struct ct_desc_s { Chris@42: INT radix; Chris@42: const char *nam; Chris@42: const tw_instr *tw; Chris@42: const ct_genus *genus; Chris@42: opcnt ops; Chris@42: INT rs; Chris@42: INT vs; Chris@42: INT ms; Chris@42: }; Chris@42: Chris@42: typedef void (*kdftw) (R *rioarray, R *iioarray, const R *W, Chris@42: stride ios, INT mb, INT me, INT ms); Chris@42: void X(kdft_dit_register)(planner *p, kdftw codelet, const ct_desc *desc); Chris@42: void X(kdft_dif_register)(planner *p, kdftw codelet, const ct_desc *desc); Chris@42: Chris@42: Chris@42: typedef void (*kdftwsq) (R *rioarray, R *iioarray, Chris@42: const R *W, stride is, stride vs, Chris@42: INT mb, INT me, INT ms); Chris@42: void X(kdft_difsq_register)(planner *p, kdftwsq codelet, const ct_desc *desc); Chris@42: Chris@42: Chris@42: extern const solvtab X(solvtab_dft_standard); Chris@42: extern const solvtab X(solvtab_dft_sse2); Chris@42: extern const solvtab X(solvtab_dft_avx); Chris@42: extern const solvtab X(solvtab_dft_avx_128_fma); Chris@42: extern const solvtab X(solvtab_dft_avx2); Chris@42: extern const solvtab X(solvtab_dft_avx2_128); Chris@42: extern const solvtab X(solvtab_dft_avx512); Chris@42: extern const solvtab X(solvtab_dft_kcvi); Chris@42: extern const solvtab X(solvtab_dft_altivec); Chris@42: extern const solvtab X(solvtab_dft_vsx); Chris@42: extern const solvtab X(solvtab_dft_neon); Chris@42: extern const solvtab X(solvtab_dft_generic_simd128); Chris@42: extern const solvtab X(solvtab_dft_generic_simd256); Chris@42: Chris@42: #endif /* __DFT_CODELET_H__ */