289 ya = twiddles[fstride * m];
290 yb = twiddles[fstride * 2 * m];
294 Fout2 = Fout0 + 2 * m;
295 Fout3 = Fout0 + 3 * m;
296 Fout4 = Fout0 + 4 * m;
299 for(u = 0; u < m; ++u) {
307 C_MUL(scratch[1], *Fout1, tw[u * fstride]);
308 C_MUL(scratch[2], *Fout2, tw[2 * u * fstride]);
309 C_MUL(scratch[3], *Fout3, tw[3 * u * fstride]);
310 C_MUL(scratch[4], *Fout4, tw[4 * u * fstride]);
312 C_ADD(scratch[7], scratch[1], scratch[4]);
313 C_SUB(scratch[10], scratch[1], scratch[4]);
314 C_ADD(scratch[8], scratch[2], scratch[3]);
315 C_SUB(scratch[9], scratch[2], scratch[3]);
320 scratch[5] = scratch[0] +
cpx_type(
S_MUL(scratch[7].real(), ya.real()) +
S_MUL(scratch[8].real(), yb.real()),
S_MUL(scratch[7].imag(), ya.real())
321 +
S_MUL(scratch[8].imag(), yb.real()));
323 scratch[6] =
cpx_type(
S_MUL(scratch[10].imag(), ya.imag()) +
S_MUL(scratch[9].imag(), yb.imag()), -
S_MUL(scratch[10].real(), ya.imag()) -
S_MUL(
324 scratch[9].real(), yb.imag()));
326 C_SUB(*Fout1, scratch[5], scratch[6]);
327 C_ADD(*Fout4, scratch[5], scratch[6]);
329 scratch[11] = scratch[0] +
cpx_type(
S_MUL(scratch[7].real(), yb.real()) +
S_MUL(scratch[8].real(), ya.real()),
S_MUL(scratch[7].imag(), yb.real())
330 +
S_MUL(scratch[8].imag(), ya.real()));
332 scratch[12] =
cpx_type(-
S_MUL(scratch[10].imag(), yb.imag()) +
S_MUL(scratch[9].imag(), ya.imag()),
S_MUL(scratch[10].real(), yb.imag()) -
S_MUL(
333 scratch[9].real(), ya.imag()));
335 C_ADD(*Fout2, scratch[11], scratch[12]);
336 C_SUB(*Fout3, scratch[11], scratch[12]);
void C_SUB(cpx_type &c, const cpx_type &a, const cpx_type &b)
traits_type::cpx_type cpx_type
scalar_type S_MUL(const scalar_type &a, const scalar_type &b)
std::vector< cpx_type > _twiddles
void C_ADD(cpx_type &c, const cpx_type &a, const cpx_type &b)
void C_MUL(cpx_type &c, const cpx_type &a, const cpx_type &b)
void C_FIXDIV(cpx_type &, int)
void C_ADDTO(cpx_type &c, const cpx_type &a)