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:56:02 EDT 1999 */
26 /* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -hc2hc-backward 7 */
29 * This function contains 120 FP additions, 98 FP multiplications,
30 * (or, 106 additions, 84 multiplications, 14 fused multiply/add),
31 * 32 stack variables, and 56 memory accesses
33 static const fftw_real K222520933
= FFTW_KONST(+0.222520933956314404288902564496794759466355569);
34 static const fftw_real K900968867
= FFTW_KONST(+0.900968867902419126236102319507445051165919162);
35 static const fftw_real K623489801
= FFTW_KONST(+0.623489801858733530525004884004239810632274731);
36 static const fftw_real K781831482
= FFTW_KONST(+0.781831482468029808708444526674057750232334519);
37 static const fftw_real K974927912
= FFTW_KONST(+0.974927912181823607018131682993931217232785801);
38 static const fftw_real K433883739
= FFTW_KONST(+0.433883739117558120475768332848358754609990728);
39 static const fftw_real K2_000000000
= FFTW_KONST(+2.000000000000000000000000000000000000000000000);
40 static const fftw_real K1_801937735
= FFTW_KONST(+1.801937735804838252472204639014890102331838324);
41 static const fftw_real K445041867
= FFTW_KONST(+0.445041867912628808577805128993589518932711138);
42 static const fftw_real K1_246979603
= FFTW_KONST(+1.246979603717467061050009768008479621264549462);
43 static const fftw_real K867767478
= FFTW_KONST(+0.867767478235116240951536665696717509219981456);
44 static const fftw_real K1_949855824
= FFTW_KONST(+1.949855824363647214036263365987862434465571601);
45 static const fftw_real K1_563662964
= FFTW_KONST(+1.563662964936059617416889053348115500464669037);
54 void fftw_hc2hc_backward_7(fftw_real
*A
, const fftw_complex
*W
, int iostride
, int m
, int dist
)
60 Y
= A
+ (7 * iostride
);
75 ASSERT_ALIGNED_DOUBLE();
76 tmp81
= Y
[-2 * iostride
];
78 tmp82
= Y
[-3 * iostride
];
79 tmp84
= (K1_563662964
* tmp81
) - (K1_949855824
* tmp82
) - (K867767478
* tmp83
);
80 tmp88
= (K867767478
* tmp81
) + (K1_563662964
* tmp82
) - (K1_949855824
* tmp83
);
81 tmp86
= (K1_563662964
* tmp83
) + (K1_949855824
* tmp81
) + (K867767478
* tmp82
);
83 tmp79
= X
[3 * iostride
];
85 tmp78
= X
[2 * iostride
];
86 tmp80
= tmp76
+ (K1_246979603
* tmp78
) - (K445041867
* tmp79
) - (K1_801937735
* tmp77
);
87 tmp87
= tmp76
+ (K1_246979603
* tmp79
) - (K1_801937735
* tmp78
) - (K445041867
* tmp77
);
88 tmp85
= tmp76
+ (K1_246979603
* tmp77
) - (K1_801937735
* tmp79
) - (K445041867
* tmp78
);
89 X
[4 * iostride
] = tmp80
- tmp84
;
90 X
[3 * iostride
] = tmp80
+ tmp84
;
91 X
[0] = tmp76
+ (K2_000000000
* (tmp77
+ tmp78
+ tmp79
));
92 X
[2 * iostride
] = tmp87
+ tmp88
;
93 X
[5 * iostride
] = tmp87
- tmp88
;
94 X
[iostride
] = tmp85
- tmp86
;
95 X
[6 * iostride
] = tmp85
+ tmp86
;
99 for (i
= 2; i
< m
; i
= i
+ 2, X
= X
+ dist
, Y
= Y
- dist
, W
= W
+ 6) {
120 ASSERT_ALIGNED_DOUBLE();
127 ASSERT_ALIGNED_DOUBLE();
129 tmp21
= X
[3 * iostride
];
130 tmp22
= Y
[-4 * iostride
];
131 tmp23
= tmp21
+ tmp22
;
132 tmp37
= tmp21
- tmp22
;
138 ASSERT_ALIGNED_DOUBLE();
140 tmp16
= Y
[-6 * iostride
];
141 tmp17
= tmp15
+ tmp16
;
142 tmp36
= tmp15
- tmp16
;
143 tmp18
= X
[2 * iostride
];
144 tmp19
= Y
[-5 * iostride
];
145 tmp20
= tmp18
+ tmp19
;
146 tmp38
= tmp18
- tmp19
;
148 tmp39
= (K433883739
* tmp36
) + (K974927912
* tmp37
) - (K781831482
* tmp38
);
149 tmp53
= (K781831482
* tmp36
) + (K974927912
* tmp38
) + (K433883739
* tmp37
);
150 tmp66
= (K974927912
* tmp36
) - (K781831482
* tmp37
) - (K433883739
* tmp38
);
151 tmp69
= tmp14
+ (K623489801
* tmp23
) - (K900968867
* tmp20
) - (K222520933
* tmp17
);
152 tmp57
= tmp14
+ (K623489801
* tmp17
) - (K900968867
* tmp23
) - (K222520933
* tmp20
);
153 tmp42
= tmp14
+ (K623489801
* tmp20
) - (K222520933
* tmp23
) - (K900968867
* tmp17
);
161 ASSERT_ALIGNED_DOUBLE();
163 tmp31
= Y
[-3 * iostride
];
164 tmp32
= X
[4 * iostride
];
165 tmp33
= tmp31
- tmp32
;
166 tmp44
= tmp31
+ tmp32
;
172 ASSERT_ALIGNED_DOUBLE();
173 tmp25
= Y
[-iostride
];
174 tmp26
= X
[6 * iostride
];
175 tmp27
= tmp25
- tmp26
;
176 tmp45
= tmp25
+ tmp26
;
177 tmp28
= Y
[-2 * iostride
];
178 tmp29
= X
[5 * iostride
];
179 tmp30
= tmp28
- tmp29
;
180 tmp43
= tmp28
+ tmp29
;
182 tmp46
= (K781831482
* tmp43
) - (K974927912
* tmp44
) - (K433883739
* tmp45
);
183 tmp58
= (K781831482
* tmp45
) + (K974927912
* tmp43
) + (K433883739
* tmp44
);
184 tmp70
= (K433883739
* tmp43
) + (K781831482
* tmp44
) - (K974927912
* tmp45
);
185 tmp65
= tmp24
+ (K623489801
* tmp33
) - (K900968867
* tmp30
) - (K222520933
* tmp27
);
186 tmp54
= tmp24
+ (K623489801
* tmp27
) - (K900968867
* tmp33
) - (K222520933
* tmp30
);
187 tmp35
= tmp24
+ (K623489801
* tmp30
) - (K222520933
* tmp33
) - (K900968867
* tmp27
);
189 X
[0] = tmp14
+ tmp17
+ tmp20
+ tmp23
;
195 ASSERT_ALIGNED_DOUBLE();
196 tmp61
= tmp54
- tmp53
;
197 tmp63
= tmp57
+ tmp58
;
200 Y
[0] = (tmp60
* tmp61
) - (tmp62
* tmp63
);
201 X
[6 * iostride
] = (tmp62
* tmp61
) + (tmp60
* tmp63
);
208 ASSERT_ALIGNED_DOUBLE();
209 tmp73
= tmp66
+ tmp65
;
210 tmp75
= tmp69
+ tmp70
;
213 Y
[-4 * iostride
] = (tmp72
* tmp73
) - (tmp74
* tmp75
);
214 X
[2 * iostride
] = (tmp74
* tmp73
) + (tmp72
* tmp75
);
221 ASSERT_ALIGNED_DOUBLE();
222 tmp67
= tmp65
- tmp66
;
223 tmp71
= tmp69
- tmp70
;
226 Y
[-iostride
] = (tmp64
* tmp67
) - (tmp68
* tmp71
);
227 X
[5 * iostride
] = (tmp68
* tmp67
) + (tmp64
* tmp71
);
229 Y
[-6 * iostride
] = tmp24
+ tmp27
+ tmp30
+ tmp33
;
235 ASSERT_ALIGNED_DOUBLE();
236 tmp40
= tmp35
- tmp39
;
237 tmp47
= tmp42
- tmp46
;
240 Y
[-2 * iostride
] = (tmp34
* tmp40
) - (tmp41
* tmp47
);
241 X
[4 * iostride
] = (tmp41
* tmp40
) + (tmp34
* tmp47
);
248 ASSERT_ALIGNED_DOUBLE();
249 tmp49
= tmp39
+ tmp35
;
250 tmp51
= tmp42
+ tmp46
;
253 Y
[-3 * iostride
] = (tmp48
* tmp49
) - (tmp50
* tmp51
);
254 X
[3 * iostride
] = (tmp50
* tmp49
) + (tmp48
* tmp51
);
261 ASSERT_ALIGNED_DOUBLE();
262 tmp55
= tmp53
+ tmp54
;
263 tmp59
= tmp57
- tmp58
;
266 Y
[-5 * iostride
] = (tmp52
* tmp55
) - (tmp56
* tmp59
);
267 X
[iostride
] = (tmp56
* tmp55
) + (tmp52
* tmp59
);
284 ASSERT_ALIGNED_DOUBLE();
285 tmp6
= Y
[-2 * iostride
];
288 tmp9
= (K1_563662964
* tmp6
) + (K1_949855824
* tmp7
) + (K867767478
* tmp8
);
289 tmp13
= (K1_563662964
* tmp7
) - (K1_949855824
* tmp8
) - (K867767478
* tmp6
);
290 tmp11
= (K1_949855824
* tmp6
) - (K1_563662964
* tmp8
) - (K867767478
* tmp7
);
291 tmp1
= X
[3 * iostride
];
293 tmp2
= X
[2 * iostride
];
295 tmp5
= (K445041867
* tmp3
) + (K1_801937735
* tmp4
) - (K1_246979603
* tmp2
) - tmp1
;
296 tmp12
= (K1_801937735
* tmp2
) + (K445041867
* tmp4
) - (K1_246979603
* tmp3
) - tmp1
;
297 tmp10
= tmp1
+ (K1_246979603
* tmp4
) - (K1_801937735
* tmp3
) - (K445041867
* tmp2
);
298 X
[iostride
] = tmp5
- tmp9
;
299 X
[6 * iostride
] = -(tmp5
+ tmp9
);
300 X
[0] = tmp1
+ (K2_000000000
* (tmp2
+ tmp3
+ tmp4
));
301 X
[4 * iostride
] = tmp13
- tmp12
;
302 X
[3 * iostride
] = tmp12
+ tmp13
;
303 X
[5 * iostride
] = tmp11
- tmp10
;
304 X
[2 * iostride
] = tmp10
+ tmp11
;
308 static const int twiddle_order
[] =
310 fftw_codelet_desc fftw_hc2hc_backward_7_desc
=
312 "fftw_hc2hc_backward_7",
313 (void (*)()) fftw_hc2hc_backward_7
,