2 * Copyright (c) 1997-1999 Massachusetts Institute of Technology
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 /* This file was automatically generated --- DO NOT EDIT */
21 /* Generated on Tue May 18 13:55:49 EDT 1999 */
26 /* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -twiddleinv 8 */
29 * This function contains 66 FP additions, 32 FP multiplications,
30 * (or, 52 additions, 18 multiplications, 14 fused multiply/add),
31 * 28 stack variables, and 32 memory accesses
33 static const fftw_real K707106781
= FFTW_KONST(+0.707106781186547524400844362104849039284835938);
42 void fftwi_twiddle_8(fftw_complex
*A
, const fftw_complex
*W
, int iostride
, int m
, int dist
)
47 for (i
= m
; i
> 0; i
= i
- 1, inout
= inout
+ dist
, W
= W
+ 7) {
64 ASSERT_ALIGNED_DOUBLE();
70 ASSERT_ALIGNED_DOUBLE();
71 tmp1
= c_re(inout
[0]);
72 tmp70
= c_im(inout
[0]);
78 ASSERT_ALIGNED_DOUBLE();
79 tmp3
= c_re(inout
[4 * iostride
]);
80 tmp5
= c_im(inout
[4 * iostride
]);
83 tmp6
= (tmp2
* tmp3
) + (tmp4
* tmp5
);
84 tmp69
= (tmp2
* tmp5
) - (tmp4
* tmp3
);
88 tmp71
= tmp69
+ tmp70
;
89 tmp77
= tmp70
- tmp69
;
96 ASSERT_ALIGNED_DOUBLE();
102 ASSERT_ALIGNED_DOUBLE();
103 tmp32
= c_re(inout
[7 * iostride
]);
104 tmp34
= c_im(inout
[7 * iostride
]);
107 tmp35
= (tmp31
* tmp32
) + (tmp33
* tmp34
);
108 tmp54
= (tmp31
* tmp34
) - (tmp33
* tmp32
);
115 ASSERT_ALIGNED_DOUBLE();
116 tmp37
= c_re(inout
[3 * iostride
]);
117 tmp39
= c_im(inout
[3 * iostride
]);
120 tmp40
= (tmp36
* tmp37
) + (tmp38
* tmp39
);
121 tmp55
= (tmp36
* tmp39
) - (tmp38
* tmp37
);
123 tmp41
= tmp35
+ tmp40
;
124 tmp53
= tmp35
- tmp40
;
125 tmp56
= tmp54
- tmp55
;
126 tmp64
= tmp54
+ tmp55
;
133 ASSERT_ALIGNED_DOUBLE();
139 ASSERT_ALIGNED_DOUBLE();
140 tmp9
= c_re(inout
[2 * iostride
]);
141 tmp11
= c_im(inout
[2 * iostride
]);
144 tmp12
= (tmp8
* tmp9
) + (tmp10
* tmp11
);
145 tmp44
= (tmp8
* tmp11
) - (tmp10
* tmp9
);
152 ASSERT_ALIGNED_DOUBLE();
153 tmp14
= c_re(inout
[6 * iostride
]);
154 tmp16
= c_im(inout
[6 * iostride
]);
157 tmp17
= (tmp13
* tmp14
) + (tmp15
* tmp16
);
158 tmp45
= (tmp13
* tmp16
) - (tmp15
* tmp14
);
160 tmp18
= tmp12
+ tmp17
;
161 tmp76
= tmp12
- tmp17
;
162 tmp46
= tmp44
- tmp45
;
163 tmp68
= tmp44
+ tmp45
;
170 ASSERT_ALIGNED_DOUBLE();
176 ASSERT_ALIGNED_DOUBLE();
177 tmp21
= c_re(inout
[iostride
]);
178 tmp23
= c_im(inout
[iostride
]);
181 tmp24
= (tmp20
* tmp21
) + (tmp22
* tmp23
);
182 tmp49
= (tmp20
* tmp23
) - (tmp22
* tmp21
);
189 ASSERT_ALIGNED_DOUBLE();
190 tmp26
= c_re(inout
[5 * iostride
]);
191 tmp28
= c_im(inout
[5 * iostride
]);
194 tmp29
= (tmp25
* tmp26
) + (tmp27
* tmp28
);
195 tmp50
= (tmp25
* tmp28
) - (tmp27
* tmp26
);
197 tmp30
= tmp24
+ tmp29
;
198 tmp48
= tmp24
- tmp29
;
199 tmp51
= tmp49
- tmp50
;
200 tmp65
= tmp49
+ tmp50
;
207 ASSERT_ALIGNED_DOUBLE();
208 tmp19
= tmp7
+ tmp18
;
209 tmp42
= tmp30
+ tmp41
;
210 c_re(inout
[4 * iostride
]) = tmp19
- tmp42
;
211 c_re(inout
[0]) = tmp19
+ tmp42
;
217 ASSERT_ALIGNED_DOUBLE();
218 tmp73
= tmp30
- tmp41
;
219 tmp74
= tmp71
- tmp68
;
220 c_im(inout
[2 * iostride
]) = tmp73
+ tmp74
;
221 c_im(inout
[6 * iostride
]) = tmp74
- tmp73
;
222 tmp67
= tmp65
+ tmp64
;
223 tmp72
= tmp68
+ tmp71
;
224 c_im(inout
[0]) = tmp67
+ tmp72
;
225 c_im(inout
[4 * iostride
]) = tmp72
- tmp67
;
227 tmp63
= tmp7
- tmp18
;
228 tmp66
= tmp64
- tmp65
;
229 c_re(inout
[6 * iostride
]) = tmp63
- tmp66
;
230 c_re(inout
[2 * iostride
]) = tmp63
+ tmp66
;
238 ASSERT_ALIGNED_DOUBLE();
239 tmp59
= tmp43
+ tmp46
;
240 tmp78
= tmp76
+ tmp77
;
241 tmp60
= tmp56
- tmp53
;
242 tmp61
= tmp48
+ tmp51
;
243 tmp62
= K707106781
* (tmp60
- tmp61
);
244 tmp75
= K707106781
* (tmp61
+ tmp60
);
245 c_re(inout
[7 * iostride
]) = tmp59
- tmp62
;
246 c_re(inout
[3 * iostride
]) = tmp59
+ tmp62
;
247 c_im(inout
[iostride
]) = tmp75
+ tmp78
;
248 c_im(inout
[5 * iostride
]) = tmp78
- tmp75
;
257 ASSERT_ALIGNED_DOUBLE();
258 tmp47
= tmp43
- tmp46
;
259 tmp80
= tmp77
- tmp76
;
260 tmp52
= tmp48
- tmp51
;
261 tmp57
= tmp53
+ tmp56
;
262 tmp58
= K707106781
* (tmp52
+ tmp57
);
263 tmp79
= K707106781
* (tmp52
- tmp57
);
264 c_re(inout
[5 * iostride
]) = tmp47
- tmp58
;
265 c_re(inout
[iostride
]) = tmp47
+ tmp58
;
266 c_im(inout
[3 * iostride
]) = tmp79
+ tmp80
;
267 c_im(inout
[7 * iostride
]) = tmp80
- tmp79
;
273 static const int twiddle_order
[] =
274 {1, 2, 3, 4, 5, 6, 7};
275 fftw_codelet_desc fftwi_twiddle_8_desc
=
278 (void (*)()) fftwi_twiddle_8
,