135{
137 int u;
142 ya = twiddles[fstride*m];
143 yb = twiddles[fstride*2*m];
144
145 Fout0=Fout;
146 Fout1=Fout0+m;
147 Fout2=Fout0+2*m;
148 Fout3=Fout0+3*m;
149 Fout4=Fout0+4*m;
150
152 for ( u=0; u<m; ++u ) {
154 scratch[0] = *Fout0;
155
156 C_MUL(scratch[1] ,*Fout1, tw[u*fstride]);
157 C_MUL(scratch[2] ,*Fout2, tw[2*u*fstride]);
158 C_MUL(scratch[3] ,*Fout3, tw[3*u*fstride]);
159 C_MUL(scratch[4] ,*Fout4, tw[4*u*fstride]);
160
161 C_ADD( scratch[7],scratch[1],scratch[4]);
162 C_SUB( scratch[10],scratch[1],scratch[4]);
163 C_ADD( scratch[8],scratch[2],scratch[3]);
164 C_SUB( scratch[9],scratch[2],scratch[3]);
165
166 Fout0->
r += scratch[7].
r + scratch[8].
r;
167 Fout0->
i += scratch[7].
i + scratch[8].
i;
168
169 scratch[5].
r = scratch[0].
r +
S_MUL(scratch[7].r,ya.
r) +
S_MUL(scratch[8].r,yb.
r);
170 scratch[5].
i = scratch[0].
i +
S_MUL(scratch[7].i,ya.
r) +
S_MUL(scratch[8].i,yb.
r);
171
172 scratch[6].
r =
S_MUL(scratch[10].i,ya.
i) +
S_MUL(scratch[9].i,yb.
i);
173 scratch[6].
i = -
S_MUL(scratch[10].r,ya.
i) -
S_MUL(scratch[9].r,yb.
i);
174
175 C_SUB(*Fout1,scratch[5],scratch[6]);
176 C_ADD(*Fout4,scratch[5],scratch[6]);
177
178 scratch[11].
r = scratch[0].
r +
S_MUL(scratch[7].r,yb.
r) +
S_MUL(scratch[8].r,ya.
r);
179 scratch[11].
i = scratch[0].
i +
S_MUL(scratch[7].i,yb.
r) +
S_MUL(scratch[8].i,ya.
r);
180 scratch[12].
r = -
S_MUL(scratch[10].i,yb.
i) +
S_MUL(scratch[9].i,ya.
i);
181 scratch[12].
i =
S_MUL(scratch[10].r,yb.
i) -
S_MUL(scratch[9].r,ya.
i);
182
183 C_ADD(*Fout2,scratch[11],scratch[12]);
184 C_SUB(*Fout3,scratch[11],scratch[12]);
185
186 ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4;
187 }
188}