annotate src/fftw-3.3.5/rdft/codelet-rdft.h @ 84:08ae793730bd

Add null config files
author Chris Cannam
date Mon, 02 Mar 2020 14:03:47 +0000
parents 2cd0e3b3e1fd
children
rev   line source
Chris@42 1 /*
Chris@42 2 * Copyright (c) 2003, 2007-14 Matteo Frigo
Chris@42 3 * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology
Chris@42 4 *
Chris@42 5 * This program is free software; you can redistribute it and/or modify
Chris@42 6 * it under the terms of the GNU General Public License as published by
Chris@42 7 * the Free Software Foundation; either version 2 of the License, or
Chris@42 8 * (at your option) any later version.
Chris@42 9 *
Chris@42 10 * This program is distributed in the hope that it will be useful,
Chris@42 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@42 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@42 13 * GNU General Public License for more details.
Chris@42 14 *
Chris@42 15 * You should have received a copy of the GNU General Public License
Chris@42 16 * along with this program; if not, write to the Free Software
Chris@42 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Chris@42 18 *
Chris@42 19 */
Chris@42 20
Chris@42 21 /*
Chris@42 22 * This header file must include every file or define every
Chris@42 23 * type or macro which is required to compile a codelet.
Chris@42 24 */
Chris@42 25
Chris@42 26 #ifndef __RDFT_CODELET_H__
Chris@42 27 #define __RDFT_CODELET_H__
Chris@42 28
Chris@42 29 #include "ifftw.h"
Chris@42 30
Chris@42 31 /**************************************************************
Chris@42 32 * types of codelets
Chris@42 33 **************************************************************/
Chris@42 34
Chris@42 35 /* FOOab, with a,b in {0,1}, denotes the FOO transform
Chris@42 36 where a/b say whether the input/output are shifted by
Chris@42 37 half a sample/slot. */
Chris@42 38
Chris@42 39 typedef enum {
Chris@42 40 R2HC00, R2HC01, R2HC10, R2HC11,
Chris@42 41 HC2R00, HC2R01, HC2R10, HC2R11,
Chris@42 42 DHT,
Chris@42 43 REDFT00, REDFT01, REDFT10, REDFT11, /* real-even == DCT's */
Chris@42 44 RODFT00, RODFT01, RODFT10, RODFT11 /* real-odd == DST's */
Chris@42 45 } rdft_kind;
Chris@42 46
Chris@42 47 /* standard R2HC/HC2R transforms are unshifted */
Chris@42 48 #define R2HC R2HC00
Chris@42 49 #define HC2R HC2R00
Chris@42 50
Chris@42 51 #define R2HCII R2HC01
Chris@42 52 #define HC2RIII HC2R10
Chris@42 53
Chris@42 54 /* (k) >= R2HC00 produces a warning under gcc because checking x >= 0
Chris@42 55 is superfluous for unsigned values...but it is needed because other
Chris@42 56 compilers (e.g. icc) may define the enum to be a signed int...grrr. */
Chris@42 57 #define R2HC_KINDP(k) ((k) >= R2HC00 && (k) <= R2HC11) /* uses kr2hc_genus */
Chris@42 58 #define HC2R_KINDP(k) ((k) >= HC2R00 && (k) <= HC2R11) /* uses khc2r_genus */
Chris@42 59
Chris@42 60 #define R2R_KINDP(k) ((k) >= DHT) /* uses kr2r_genus */
Chris@42 61
Chris@42 62 #define REDFT_KINDP(k) ((k) >= REDFT00 && (k) <= REDFT11)
Chris@42 63 #define RODFT_KINDP(k) ((k) >= RODFT00 && (k) <= RODFT11)
Chris@42 64 #define REODFT_KINDP(k) ((k) >= REDFT00 && (k) <= RODFT11)
Chris@42 65
Chris@42 66 /* codelets with real input (output) and complex output (input) */
Chris@42 67 typedef struct kr2c_desc_s kr2c_desc;
Chris@42 68
Chris@42 69 typedef struct {
Chris@42 70 rdft_kind kind;
Chris@42 71 INT vl;
Chris@42 72 } kr2c_genus;
Chris@42 73
Chris@42 74 struct kr2c_desc_s {
Chris@42 75 INT n; /* size of transform computed */
Chris@42 76 const char *nam;
Chris@42 77 opcnt ops;
Chris@42 78 const kr2c_genus *genus;
Chris@42 79 };
Chris@42 80
Chris@42 81 typedef void (*kr2c) (R *R0, R *R1, R *Cr, R *Ci,
Chris@42 82 stride rs, stride csr, stride csi,
Chris@42 83 INT vl, INT ivs, INT ovs);
Chris@42 84 void X(kr2c_register)(planner *p, kr2c codelet, const kr2c_desc *desc);
Chris@42 85
Chris@42 86 /* half-complex to half-complex DIT/DIF codelets: */
Chris@42 87 typedef struct hc2hc_desc_s hc2hc_desc;
Chris@42 88
Chris@42 89 typedef struct {
Chris@42 90 rdft_kind kind;
Chris@42 91 INT vl;
Chris@42 92 } hc2hc_genus;
Chris@42 93
Chris@42 94 struct hc2hc_desc_s {
Chris@42 95 INT radix;
Chris@42 96 const char *nam;
Chris@42 97 const tw_instr *tw;
Chris@42 98 const hc2hc_genus *genus;
Chris@42 99 opcnt ops;
Chris@42 100 };
Chris@42 101
Chris@42 102 typedef void (*khc2hc) (R *rioarray, R *iioarray, const R *W,
Chris@42 103 stride rs, INT mb, INT me, INT ms);
Chris@42 104 void X(khc2hc_register)(planner *p, khc2hc codelet, const hc2hc_desc *desc);
Chris@42 105
Chris@42 106 /* half-complex to rdft2-complex DIT/DIF codelets: */
Chris@42 107 typedef struct hc2c_desc_s hc2c_desc;
Chris@42 108
Chris@42 109 typedef enum {
Chris@42 110 HC2C_VIA_RDFT,
Chris@42 111 HC2C_VIA_DFT
Chris@42 112 } hc2c_kind;
Chris@42 113
Chris@42 114 typedef struct {
Chris@42 115 int (*okp)(
Chris@42 116 const R *Rp, const R *Ip, const R *Rm, const R *Im,
Chris@42 117 INT rs, INT mb, INT me, INT ms,
Chris@42 118 const planner *plnr);
Chris@42 119 rdft_kind kind;
Chris@42 120 INT vl;
Chris@42 121 } hc2c_genus;
Chris@42 122
Chris@42 123 struct hc2c_desc_s {
Chris@42 124 INT radix;
Chris@42 125 const char *nam;
Chris@42 126 const tw_instr *tw;
Chris@42 127 const hc2c_genus *genus;
Chris@42 128 opcnt ops;
Chris@42 129 };
Chris@42 130
Chris@42 131 typedef void (*khc2c) (R *Rp, R *Ip, R *Rm, R *Im, const R *W,
Chris@42 132 stride rs, INT mb, INT me, INT ms);
Chris@42 133 void X(khc2c_register)(planner *p, khc2c codelet, const hc2c_desc *desc,
Chris@42 134 hc2c_kind hc2ckind);
Chris@42 135
Chris@42 136 extern const solvtab X(solvtab_rdft_r2cf);
Chris@42 137 extern const solvtab X(solvtab_rdft_r2cb);
Chris@42 138 extern const solvtab X(solvtab_rdft_sse2);
Chris@42 139 extern const solvtab X(solvtab_rdft_avx);
Chris@42 140 extern const solvtab X(solvtab_rdft_avx_128_fma);
Chris@42 141 extern const solvtab X(solvtab_rdft_avx2);
Chris@42 142 extern const solvtab X(solvtab_rdft_avx2_128);
Chris@42 143 extern const solvtab X(solvtab_rdft_avx512);
Chris@42 144 extern const solvtab X(solvtab_rdft_kcvi);
Chris@42 145 extern const solvtab X(solvtab_rdft_altivec);
Chris@42 146 extern const solvtab X(solvtab_rdft_vsx);
Chris@42 147 extern const solvtab X(solvtab_rdft_neon);
Chris@42 148 extern const solvtab X(solvtab_rdft_generic_simd128);
Chris@42 149 extern const solvtab X(solvtab_rdft_generic_simd256);
Chris@42 150
Chris@42 151 /* real-input & output DFT-like codelets (DHT, etc.) */
Chris@42 152 typedef struct kr2r_desc_s kr2r_desc;
Chris@42 153
Chris@42 154 typedef struct {
Chris@42 155 INT vl;
Chris@42 156 } kr2r_genus;
Chris@42 157
Chris@42 158 struct kr2r_desc_s {
Chris@42 159 INT n; /* size of transform computed */
Chris@42 160 const char *nam;
Chris@42 161 opcnt ops;
Chris@42 162 const kr2r_genus *genus;
Chris@42 163 rdft_kind kind;
Chris@42 164 };
Chris@42 165
Chris@42 166 typedef void (*kr2r) (const R *I, R *O, stride is, stride os,
Chris@42 167 INT vl, INT ivs, INT ovs);
Chris@42 168 void X(kr2r_register)(planner *p, kr2r codelet, const kr2r_desc *desc);
Chris@42 169
Chris@42 170 extern const solvtab X(solvtab_rdft_r2r);
Chris@42 171
Chris@42 172 #endif /* __RDFT_CODELET_H__ */