void XM(transpose_recurse_register)(planner *p) { int preserve_input; for (preserve_input = 0; preserve_input <= 1; ++preserve_input) { REGISTER_SOLVER(p, mksolver(preserve_input, radix_sqrt, "sqrt")); REGISTER_SOLVER(p, mksolver(preserve_input, radix_first, "first")); } }
void XM(rdft_rank1_bigvec_register)(planner *p) { rearrangement rearrange; int preserve_input; FORALL_REARRANGE(rearrange) for (preserve_input = 0; preserve_input <= 1; ++preserve_input) REGISTER_SOLVER(p, mksolver(rearrange, preserve_input)); }
void X(dft_vrank_geq1_register)(planner *p) { /* FIXME: Should we try other vecloop_dim values? */ static const int buddies[] = { 1, -1 }; size_t i; for (i = 0; i < NELEM(buddies); ++i) REGISTER_SOLVER(p, mksolver(buddies[i], buddies, NELEM(buddies))); }
void X(rdft_indirect_register)(planner *p) { unsigned i; static const ndrct_adt *const adts[] = { &adt_before, &adt_after }; for (i = 0; i < sizeof(adts) / sizeof(adts[0]); ++i) REGISTER_SOLVER(p, mksolver(adts[i])); }
void X(dft_rank0_register)(planner *p) { unsigned i; static const rnk0adt *const adts[] = { &adt_cpy1, &adt_vec, &adt_io1, &adt_io2r, &adt_io2i }; for (i = 0; i < sizeof(adts) / sizeof(adts[0]); ++i) REGISTER_SOLVER(p, mksolver(adts[i])); }
void X(dft_thr_vrank_geq1_register)(planner *p) { int i; /* FIXME: Should we try other vecloop_dim values? */ static const int buddies[] = { 1, -1 }; const int nbuddies = (int)(sizeof(buddies) / sizeof(buddies[0])); for (i = 0; i < nbuddies; ++i) REGISTER_SOLVER(p, mksolver(buddies[i], buddies, nbuddies)); }
void X(rdft_rank_geq2_register)(planner *p) { int i; static const int buddies[] = { 1, 0, -2 }; const int nbuddies = (int)(sizeof(buddies) / sizeof(buddies[0])); for (i = 0; i < nbuddies; ++i) REGISTER_SOLVER(p, mksolver(buddies[i], buddies, nbuddies)); /* FIXME: Should we try more buddies? See also dft/rank-geq2. */ }
void X(dft_rank_geq2_register)(planner *p) { int i; static const int buddies[] = { 0, 1, -2 }; const int nbuddies = sizeof(buddies) / sizeof(buddies[0]); for (i = 0; i < nbuddies; ++i) REGISTER_SOLVER(p, mksolver(buddies[i], buddies, nbuddies)); /* FIXME: Should we try more buddies? Another possible variant is to swap cld1 and cld2 (or rather, to swap their problems; they are not interchangeable because cld2 must be in-place). In past versions of FFTW, however, I seem to recall that such rearrangements have made little or no difference. */ }
void X(dft_nop_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void XM(transpose_pairwise_register)(planner *p) { int preserve_input; for (preserve_input = 0; preserve_input <= 1; ++preserve_input) REGISTER_SOLVER(p, mksolver(preserve_input)); }
void XM(dft_serial_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void X(rdft2_buffered_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void fftwf_rdft_nop_register(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void XM(transpose_alltoall_register)(planner *p) { int cti; for (cti = 0; cti <= 1; ++cti) REGISTER_SOLVER(p, mksolver(cti)); }
void X(reodft11e_r2hc_odd_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void X(dht_rader_register)(planner *p) { REGISTER_SOLVER(p, mksolver(0)); REGISTER_SOLVER(p, mksolver(1)); }
void X(dft_buffered_register)(planner *p) { size_t i; for (i = 0; i < NELEM(maxnbufs); ++i) REGISTER_SOLVER(p, mksolver(i)); }
solver *X(mksolver_rdft_r2c_directbuf)(kr2c k, const kr2c_desc *desc) { return mksolver(k, desc, 1); }
void X(dft_vrank2_transpose_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void XM(rdft2_rank_geq2_transposed_register)(planner *p) { int preserve_input; for (preserve_input = 0; preserve_input <= 1; ++preserve_input) REGISTER_SOLVER(p, mksolver(preserve_input)); }
void X(reodft00e_splitradix_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void X(rdft2_rank0_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void fftwf_dht_r2hc_register(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void X(redft00e_r2hc_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
solver *X(mksolver_dft_directbuf)(kdft k, const kdft_desc *desc) { return mksolver(k, desc, 1); }
void X(dft_bluestein_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); }
void X(dft_rader_register)(planner *p) { REGISTER_SOLVER(p, mksolver()); REGISTER_SOLVER(p, mksolver_dit()); }