rearrange to use dispatch rather than function pointers for FFT steps