TODO before FFTW-$2\pi$: * MPI version * DCT/DST codelets? which kinds? * investigate the addition-chain trig computation * I can't believe that there isn't a closed form for the omega array in Rader. * merge genfft-k7 generator with the main genfft branch. genfft-k7 was written by Stefan Kral based on the fftw-2.1 genfft. (The k7 stuff is becoming obsolete because it is not 64-bit clean. We should phase it out in the next release.) * implement rdft/problem2 for even radices other than 2. * convolution problem type(s) * Explore the idea of having n < 0 in tensors, possibly to mean inverse DFT. * better estimator: possibly, let "other" cost be coef * n, where coef is a per-solver constant determined via some big numerical optimization/fit. * vector radix, multidimensional codelets * it may be a good idea to unify all those little loops that do copying, (X[i], X[n-i]) <- (X[i] + X[n-i], X[i] - X[n-i]), and multiplication of vectors by twiddle factors. * Pruned FFTs (basically, a vecloop that skips zeros). * Try FFTPACK-style back-and-forth (Stockham) FFT. (We tried this a few years ago and it was slower, but perhaps matters have changed.) * dif, difsq simd codelets * Generate assembly directly for more processors, or maybe fork gcc. =) * ensure that threaded solvers generate (block_size % 4 == 0) to allow SIMD to be used. * consider whether it would be simpler to have a uniform description (IO, m0, m1, W) for twiddle problems, where IO always points to the beginning of the array, W always points to the beginning of the twiddle table, and the problem is solved in the range m \in [m0, m1). Currently we have a messy situation in which we sometimes use [m0, m1), sometimes we use [mstart, mstart+mcount), and we have to adjust W with the X(twiddle_shift)() hack. Codelets should obey the uniform protocol as well. * memoize triggen. * orb problems with FFTW_PRESERVE_INPUT ought to use SIMD somehow. (Currently they reduce to an r2r problem that does not use SIMD.) * eliminate alignment hacks, which ought to be obsolete by now.