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:05 EDT 1999 */
26 /* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -hc2hc-backward 9 */
29 * This function contains 181 FP additions, 120 FP multiplications,
30 * (or, 129 additions, 68 multiplications, 52 fused multiply/add),
31 * 43 stack variables, and 72 memory accesses
33 static const fftw_real K663413948
= FFTW_KONST(+0.663413948168938396205421319635891297216863310);
34 static const fftw_real K556670399
= FFTW_KONST(+0.556670399226419366452912952047023132968291906);
35 static const fftw_real K852868531
= FFTW_KONST(+0.852868531952443209628250963940074071936020296);
36 static const fftw_real K296198132
= FFTW_KONST(+0.296198132726023843175338011893050938967728390);
37 static const fftw_real K150383733
= FFTW_KONST(+0.150383733180435296639271897612501926072238258);
38 static const fftw_real K813797681
= FFTW_KONST(+0.813797681349373692844693217248393223289101568);
39 static const fftw_real K939692620
= FFTW_KONST(+0.939692620785908384054109277324731469936208134);
40 static const fftw_real K342020143
= FFTW_KONST(+0.342020143325668733044099614682259580763083368);
41 static const fftw_real K984807753
= FFTW_KONST(+0.984807753012208059366743024589523013670643252);
42 static const fftw_real K173648177
= FFTW_KONST(+0.173648177666930348851716626769314796000375677);
43 static const fftw_real K300767466
= FFTW_KONST(+0.300767466360870593278543795225003852144476517);
44 static const fftw_real K1_705737063
= FFTW_KONST(+1.705737063904886419256501927880148143872040591);
45 static const fftw_real K642787609
= FFTW_KONST(+0.642787609686539326322643409907263432907559884);
46 static const fftw_real K766044443
= FFTW_KONST(+0.766044443118978035202392650555416673935832457);
47 static const fftw_real K1_326827896
= FFTW_KONST(+1.326827896337876792410842639271782594433726619);
48 static const fftw_real K1_113340798
= FFTW_KONST(+1.113340798452838732905825904094046265936583811);
49 static const fftw_real K500000000
= FFTW_KONST(+0.500000000000000000000000000000000000000000000);
50 static const fftw_real K866025403
= FFTW_KONST(+0.866025403784438646763723170752936183471402627);
51 static const fftw_real K2_000000000
= FFTW_KONST(+2.000000000000000000000000000000000000000000000);
52 static const fftw_real K1_732050807
= FFTW_KONST(+1.732050807568877293527446341505872366942805254);
61 void fftw_hc2hc_backward_9(fftw_real
*A
, const fftw_complex
*W
, int iostride
, int m
, int dist
)
67 Y
= A
+ (9 * iostride
);
81 ASSERT_ALIGNED_DOUBLE();
88 ASSERT_ALIGNED_DOUBLE();
89 tmp175
= Y
[-3 * iostride
];
90 tmp176
= K1_732050807
* tmp175
;
92 tmp154
= X
[3 * iostride
];
93 tmp174
= tmp154
- tmp153
;
94 tmp155
= tmp153
+ (K2_000000000
* tmp154
);
95 tmp183
= tmp176
- tmp174
;
96 tmp177
= tmp174
+ tmp176
;
105 ASSERT_ALIGNED_DOUBLE();
106 tmp156
= X
[iostride
];
107 tmp162
= Y
[-iostride
];
113 ASSERT_ALIGNED_DOUBLE();
114 tmp157
= X
[4 * iostride
];
115 tmp158
= X
[2 * iostride
];
116 tmp159
= tmp157
+ tmp158
;
117 tmp170
= K866025403
* (tmp157
- tmp158
);
118 tmp163
= Y
[-2 * iostride
];
119 tmp164
= Y
[-4 * iostride
];
120 tmp165
= tmp163
- tmp164
;
121 tmp168
= K866025403
* (tmp164
+ tmp163
);
123 tmp160
= tmp156
+ tmp159
;
124 tmp167
= tmp156
- (K500000000
* tmp159
);
125 tmp169
= tmp167
- tmp168
;
126 tmp180
= tmp167
+ tmp168
;
127 tmp171
= (K500000000
* tmp165
) + tmp162
;
128 tmp172
= tmp170
+ tmp171
;
129 tmp181
= tmp171
- tmp170
;
131 X
[0] = tmp155
+ (K2_000000000
* tmp160
);
132 tmp161
= tmp155
- tmp160
;
133 tmp166
= K1_732050807
* (tmp162
- tmp165
);
134 X
[6 * iostride
] = tmp161
+ tmp166
;
135 X
[3 * iostride
] = tmp161
- tmp166
;
143 ASSERT_ALIGNED_DOUBLE();
144 tmp178
= (K1_113340798
* tmp169
) + (K1_326827896
* tmp172
);
145 tmp173
= (K766044443
* tmp169
) - (K642787609
* tmp172
);
146 tmp179
= tmp173
+ tmp177
;
147 X
[iostride
] = (K2_000000000
* tmp173
) - tmp177
;
148 X
[7 * iostride
] = tmp178
- tmp179
;
149 X
[4 * iostride
] = -(tmp178
+ tmp179
);
150 tmp185
= (K1_705737063
* tmp180
) + (K300767466
* tmp181
);
151 tmp182
= (K173648177
* tmp180
) - (K984807753
* tmp181
);
152 tmp184
= tmp183
- tmp182
;
153 X
[2 * iostride
] = (K2_000000000
* tmp182
) + tmp183
;
154 X
[8 * iostride
] = tmp185
+ tmp184
;
155 X
[5 * iostride
] = tmp184
- tmp185
;
160 for (i
= 2; i
< m
; i
= i
+ 2, X
= X
+ dist
, Y
= Y
- dist
, W
= W
+ 8) {
181 ASSERT_ALIGNED_DOUBLE();
191 ASSERT_ALIGNED_DOUBLE();
199 ASSERT_ALIGNED_DOUBLE();
200 tmp42
= X
[3 * iostride
];
201 tmp43
= Y
[-6 * iostride
];
202 tmp44
= tmp42
+ tmp43
;
203 tmp106
= K866025403
* (tmp42
- tmp43
);
204 tmp58
= Y
[-3 * iostride
];
205 tmp59
= X
[6 * iostride
];
206 tmp60
= tmp58
- tmp59
;
207 tmp87
= K866025403
* (tmp58
+ tmp59
);
209 tmp45
= tmp41
+ tmp44
;
210 tmp86
= tmp41
- (K500000000
* tmp44
);
211 tmp88
= tmp86
- tmp87
;
212 tmp136
= tmp86
+ tmp87
;
213 tmp61
= tmp57
+ tmp60
;
214 tmp107
= tmp57
- (K500000000
* tmp60
);
215 tmp108
= tmp106
+ tmp107
;
216 tmp126
= tmp107
- tmp106
;
235 ASSERT_ALIGNED_DOUBLE();
241 ASSERT_ALIGNED_DOUBLE();
243 tmp47
= X
[4 * iostride
];
244 tmp48
= Y
[-7 * iostride
];
245 tmp49
= tmp47
+ tmp48
;
246 tmp89
= tmp46
- (K500000000
* tmp49
);
247 tmp92
= K866025403
* (tmp47
- tmp48
);
248 tmp62
= Y
[-iostride
];
249 tmp63
= Y
[-4 * iostride
];
250 tmp64
= X
[7 * iostride
];
251 tmp65
= tmp63
- tmp64
;
252 tmp90
= K866025403
* (tmp63
+ tmp64
);
253 tmp93
= tmp62
- (K500000000
* tmp65
);
260 ASSERT_ALIGNED_DOUBLE();
261 tmp51
= X
[2 * iostride
];
262 tmp52
= Y
[-5 * iostride
];
263 tmp53
= Y
[-8 * iostride
];
264 tmp54
= tmp52
+ tmp53
;
265 tmp96
= tmp51
- (K500000000
* tmp54
);
266 tmp99
= K866025403
* (tmp52
- tmp53
);
267 tmp67
= Y
[-2 * iostride
];
268 tmp68
= X
[5 * iostride
];
269 tmp69
= X
[8 * iostride
];
270 tmp70
= tmp68
+ tmp69
;
271 tmp97
= K866025403
* (tmp68
- tmp69
);
272 tmp100
= tmp67
+ (K500000000
* tmp70
);
274 tmp50
= tmp46
+ tmp49
;
275 tmp55
= tmp51
+ tmp54
;
276 tmp56
= tmp50
+ tmp55
;
282 ASSERT_ALIGNED_DOUBLE();
283 tmp98
= tmp96
+ tmp97
;
284 tmp101
= tmp99
+ tmp100
;
285 tmp102
= (K173648177
* tmp98
) - (K984807753
* tmp101
);
286 tmp110
= (K984807753
* tmp98
) + (K173648177
* tmp101
);
287 tmp130
= tmp96
- tmp97
;
288 tmp131
= tmp100
- tmp99
;
289 tmp132
= (K342020143
* tmp130
) - (K939692620
* tmp131
);
290 tmp138
= (K939692620
* tmp130
) + (K342020143
* tmp131
);
297 ASSERT_ALIGNED_DOUBLE();
298 tmp127
= tmp93
- tmp92
;
299 tmp128
= tmp89
+ tmp90
;
300 tmp129
= (K173648177
* tmp127
) + (K984807753
* tmp128
);
301 tmp137
= (K173648177
* tmp128
) - (K984807753
* tmp127
);
302 tmp91
= tmp89
- tmp90
;
303 tmp94
= tmp92
+ tmp93
;
304 tmp95
= (K766044443
* tmp91
) - (K642787609
* tmp94
);
305 tmp109
= (K766044443
* tmp94
) + (K642787609
* tmp91
);
306 tmp66
= tmp62
+ tmp65
;
307 tmp71
= tmp67
- tmp70
;
308 tmp72
= tmp66
+ tmp71
;
311 X
[0] = tmp45
+ tmp56
;
317 ASSERT_ALIGNED_DOUBLE();
323 ASSERT_ALIGNED_DOUBLE();
324 tmp74
= tmp61
- (K500000000
* tmp72
);
325 tmp75
= K866025403
* (tmp50
- tmp55
);
326 tmp76
= tmp74
- tmp75
;
327 tmp82
= tmp75
+ tmp74
;
328 tmp78
= tmp45
- (K500000000
* tmp56
);
329 tmp79
= K866025403
* (tmp71
- tmp66
);
330 tmp80
= tmp78
- tmp79
;
331 tmp84
= tmp78
+ tmp79
;
338 ASSERT_ALIGNED_DOUBLE();
341 Y
[-2 * iostride
] = (tmp73
* tmp76
) - (tmp77
* tmp80
);
342 X
[6 * iostride
] = (tmp77
* tmp76
) + (tmp73
* tmp80
);
345 Y
[-5 * iostride
] = (tmp81
* tmp82
) - (tmp83
* tmp84
);
346 X
[3 * iostride
] = (tmp83
* tmp82
) + (tmp81
* tmp84
);
349 Y
[-8 * iostride
] = tmp61
+ tmp72
;
361 ASSERT_ALIGNED_DOUBLE();
362 tmp115
= K866025403
* (tmp95
- tmp102
);
363 tmp103
= tmp95
+ tmp102
;
364 tmp104
= tmp88
+ tmp103
;
365 tmp118
= tmp88
- (K500000000
* tmp103
);
366 tmp119
= K866025403
* (tmp110
- tmp109
);
367 tmp111
= tmp109
+ tmp110
;
368 tmp112
= tmp108
+ tmp111
;
369 tmp114
= tmp108
- (K500000000
* tmp111
);
372 X
[iostride
] = (tmp85
* tmp104
) + (tmp105
* tmp112
);
373 Y
[-7 * iostride
] = (tmp85
* tmp112
) - (tmp105
* tmp104
);
379 ASSERT_ALIGNED_DOUBLE();
380 tmp122
= tmp115
+ tmp114
;
381 tmp124
= tmp118
+ tmp119
;
384 Y
[-4 * iostride
] = (tmp121
* tmp122
) - (tmp123
* tmp124
);
385 X
[4 * iostride
] = (tmp123
* tmp122
) + (tmp121
* tmp124
);
392 ASSERT_ALIGNED_DOUBLE();
393 tmp116
= tmp114
- tmp115
;
394 tmp120
= tmp118
- tmp119
;
397 Y
[-iostride
] = (tmp113
* tmp116
) - (tmp117
* tmp120
);
398 X
[7 * iostride
] = (tmp117
* tmp116
) + (tmp113
* tmp120
);
412 ASSERT_ALIGNED_DOUBLE();
413 tmp143
= K866025403
* (tmp132
- tmp129
);
414 tmp133
= tmp129
+ tmp132
;
415 tmp134
= tmp126
+ tmp133
;
416 tmp146
= tmp126
- (K500000000
* tmp133
);
417 tmp147
= K866025403
* (tmp137
+ tmp138
);
418 tmp139
= tmp137
- tmp138
;
419 tmp140
= tmp136
+ tmp139
;
420 tmp142
= tmp136
- (K500000000
* tmp139
);
423 Y
[-6 * iostride
] = (tmp125
* tmp134
) - (tmp135
* tmp140
);
424 X
[2 * iostride
] = (tmp135
* tmp134
) + (tmp125
* tmp140
);
430 ASSERT_ALIGNED_DOUBLE();
431 tmp150
= tmp143
+ tmp142
;
432 tmp152
= tmp146
+ tmp147
;
435 X
[5 * iostride
] = (tmp149
* tmp150
) + (tmp151
* tmp152
);
436 Y
[-3 * iostride
] = (tmp149
* tmp152
) - (tmp151
* tmp150
);
443 ASSERT_ALIGNED_DOUBLE();
444 tmp144
= tmp142
- tmp143
;
445 tmp148
= tmp146
- tmp147
;
448 X
[8 * iostride
] = (tmp141
* tmp144
) + (tmp145
* tmp148
);
449 Y
[0] = (tmp141
* tmp148
) - (tmp145
* tmp144
);
470 ASSERT_ALIGNED_DOUBLE();
477 ASSERT_ALIGNED_DOUBLE();
478 tmp15
= Y
[-iostride
];
479 tmp16
= K1_732050807
* tmp15
;
480 tmp1
= X
[4 * iostride
];
483 tmp3
= tmp1
+ (K2_000000000
* tmp2
);
484 tmp33
= tmp14
- tmp16
;
485 tmp17
= tmp14
+ tmp16
;
501 ASSERT_ALIGNED_DOUBLE();
502 tmp4
= X
[3 * iostride
];
503 tmp6
= X
[2 * iostride
];
505 tmp24
= K866025403
* (tmp4
- tmp5
);
506 tmp22
= (K500000000
* (tmp4
+ tmp5
)) - tmp6
;
507 tmp27
= K866025403
* (tmp6
- tmp5
);
508 tmp18
= (K500000000
* (tmp5
+ tmp6
)) - tmp4
;
510 tmp12
= Y
[-2 * iostride
];
511 tmp10
= Y
[-3 * iostride
];
512 tmp11
= tmp9
+ tmp10
;
513 tmp21
= K866025403
* (tmp9
- tmp10
);
514 tmp19
= K866025403
* (tmp9
+ tmp12
);
515 tmp28
= K500000000
* (tmp12
- tmp9
);
516 tmp20
= tmp18
+ tmp19
;
517 tmp34
= tmp18
- tmp19
;
518 tmp7
= tmp4
+ tmp5
+ tmp6
;
519 tmp36
= tmp27
+ tmp28
+ tmp10
;
520 tmp35
= tmp22
+ tmp21
;
521 tmp23
= tmp21
- tmp22
;
522 tmp29
= tmp27
- (tmp28
+ tmp10
);
523 tmp25
= K500000000
* tmp11
;
524 tmp26
= tmp24
- tmp25
- tmp12
;
525 tmp37
= (tmp24
+ tmp12
) + tmp25
;
527 X
[0] = tmp3
+ (K2_000000000
* tmp7
);
529 tmp13
= K1_732050807
* (tmp11
- tmp12
);
530 X
[3 * iostride
] = tmp8
- tmp13
;
531 X
[6 * iostride
] = -(tmp8
+ tmp13
);
539 ASSERT_ALIGNED_DOUBLE();
540 tmp32
= (K813797681
* tmp26
) + (K150383733
* tmp29
) - (K296198132
* tmp23
) - (K852868531
* tmp20
);
541 tmp30
= (K173648177
* tmp20
) + (K939692620
* tmp23
) + (K342020143
* tmp26
) + (K984807753
* tmp29
);
542 tmp31
= tmp17
- (K500000000
* tmp30
);
543 X
[2 * iostride
] = -(tmp17
+ tmp30
);
544 X
[8 * iostride
] = tmp32
- tmp31
;
545 X
[5 * iostride
] = tmp31
+ tmp32
;
546 tmp40
= (K556670399
* tmp34
) + (K663413948
* tmp36
) - (K150383733
* tmp37
) - (K852868531
* tmp35
);
547 tmp38
= (K766044443
* tmp34
) + (K173648177
* tmp35
) - (K642787609
* tmp36
) - (K984807753
* tmp37
);
548 tmp39
= (K500000000
* tmp38
) - tmp33
;
549 X
[iostride
] = tmp33
+ tmp38
;
550 X
[7 * iostride
] = tmp40
- tmp39
;
551 X
[4 * iostride
] = tmp39
+ tmp40
;
556 static const int twiddle_order
[] =
557 {1, 2, 3, 4, 5, 6, 7, 8};
558 fftw_codelet_desc fftw_hc2hc_backward_9_desc
=
560 "fftw_hc2hc_backward_9",
561 (void (*)()) fftw_hc2hc_backward_9
,