annotate src/fftw-3.3.3/rdft/codelet-rdft.h @ 83:ae30d91d2ffe

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