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