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:36 EDT 1999 */
26 /* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -hc2hc-forward 10 */
29 * This function contains 168 FP additions, 84 FP multiplications,
30 * (or, 126 additions, 42 multiplications, 42 fused multiply/add),
31 * 43 stack variables, and 80 memory accesses
33 static const fftw_real K587785252
= FFTW_KONST(+0.587785252292473129168705954639072768597652438);
34 static const fftw_real K951056516
= FFTW_KONST(+0.951056516295153572116439333379382143405698634);
35 static const fftw_real K250000000
= FFTW_KONST(+0.250000000000000000000000000000000000000000000);
36 static const fftw_real K559016994
= FFTW_KONST(+0.559016994374947424102293417182819058860154590);
45 void fftw_hc2hc_forward_10(fftw_real
*A
, const fftw_complex
*W
, int iostride
, int m
, int dist
)
51 Y
= A
+ (10 * iostride
);
69 ASSERT_ALIGNED_DOUBLE();
71 tmp169
= X
[5 * iostride
];
72 tmp170
= tmp168
- tmp169
;
73 tmp181
= tmp168
+ tmp169
;
79 ASSERT_ALIGNED_DOUBLE();
80 tmp160
= X
[4 * iostride
];
81 tmp161
= X
[9 * iostride
];
82 tmp162
= tmp160
- tmp161
;
83 tmp175
= tmp160
+ tmp161
;
84 tmp163
= X
[6 * iostride
];
86 tmp165
= tmp163
- tmp164
;
87 tmp176
= tmp163
+ tmp164
;
89 tmp166
= tmp162
+ tmp165
;
90 tmp183
= tmp175
+ tmp176
;
96 ASSERT_ALIGNED_DOUBLE();
97 tmp153
= X
[2 * iostride
];
98 tmp154
= X
[7 * iostride
];
99 tmp155
= tmp153
- tmp154
;
100 tmp178
= tmp153
+ tmp154
;
101 tmp156
= X
[8 * iostride
];
102 tmp157
= X
[3 * iostride
];
103 tmp158
= tmp156
- tmp157
;
104 tmp179
= tmp156
+ tmp157
;
106 tmp159
= tmp155
+ tmp158
;
107 tmp182
= tmp178
+ tmp179
;
115 ASSERT_ALIGNED_DOUBLE();
116 tmp167
= K559016994
* (tmp159
- tmp166
);
117 tmp171
= tmp159
+ tmp166
;
118 tmp172
= tmp170
- (K250000000
* tmp171
);
119 X
[iostride
] = tmp167
+ tmp172
;
120 X
[3 * iostride
] = tmp172
- tmp167
;
121 X
[5 * iostride
] = tmp170
+ tmp171
;
122 tmp186
= K559016994
* (tmp182
- tmp183
);
123 tmp184
= tmp182
+ tmp183
;
124 tmp185
= tmp181
- (K250000000
* tmp184
);
125 X
[2 * iostride
] = tmp185
- tmp186
;
126 X
[4 * iostride
] = tmp186
+ tmp185
;
127 X
[0] = tmp181
+ tmp184
;
134 ASSERT_ALIGNED_DOUBLE();
135 tmp173
= tmp155
- tmp158
;
136 tmp174
= tmp162
- tmp165
;
137 Y
[-iostride
] = -((K951056516
* tmp173
) + (K587785252
* tmp174
));
138 Y
[-3 * iostride
] = (K587785252
* tmp173
) - (K951056516
* tmp174
);
139 tmp177
= tmp175
- tmp176
;
140 tmp180
= tmp178
- tmp179
;
141 Y
[-2 * iostride
] = (K951056516
* tmp177
) - (K587785252
* tmp180
);
142 Y
[-4 * iostride
] = (K951056516
* tmp180
) + (K587785252
* tmp177
);
147 for (i
= 2; i
< m
; i
= i
+ 2, X
= X
+ dist
, Y
= Y
- dist
, W
= W
+ 9) {
176 ASSERT_ALIGNED_DOUBLE();
182 ASSERT_ALIGNED_DOUBLE();
184 tmp131
= Y
[-9 * iostride
];
190 ASSERT_ALIGNED_DOUBLE();
191 tmp35
= X
[5 * iostride
];
192 tmp37
= Y
[-4 * iostride
];
195 tmp38
= (tmp34
* tmp35
) - (tmp36
* tmp37
);
196 tmp130
= (tmp36
* tmp35
) + (tmp34
* tmp37
);
198 tmp39
= tmp33
- tmp38
;
199 tmp87
= tmp33
+ tmp38
;
200 tmp132
= tmp130
+ tmp131
;
201 tmp144
= tmp131
- tmp130
;
212 ASSERT_ALIGNED_DOUBLE();
218 ASSERT_ALIGNED_DOUBLE();
219 tmp64
= X
[4 * iostride
];
220 tmp66
= Y
[-5 * iostride
];
223 tmp67
= (tmp63
* tmp64
) - (tmp65
* tmp66
);
224 tmp98
= (tmp65
* tmp64
) + (tmp63
* tmp66
);
231 ASSERT_ALIGNED_DOUBLE();
233 tmp82
= Y
[-8 * iostride
];
236 tmp83
= (tmp79
* tmp80
) - (tmp81
* tmp82
);
237 tmp102
= (tmp81
* tmp80
) + (tmp79
* tmp82
);
244 ASSERT_ALIGNED_DOUBLE();
245 tmp69
= X
[9 * iostride
];
249 tmp72
= (tmp68
* tmp69
) - (tmp70
* tmp71
);
250 tmp99
= (tmp70
* tmp69
) + (tmp68
* tmp71
);
257 ASSERT_ALIGNED_DOUBLE();
258 tmp75
= X
[6 * iostride
];
259 tmp77
= Y
[-3 * iostride
];
262 tmp78
= (tmp74
* tmp75
) - (tmp76
* tmp77
);
263 tmp101
= (tmp76
* tmp75
) + (tmp74
* tmp77
);
265 tmp73
= tmp67
- tmp72
;
266 tmp84
= tmp78
- tmp83
;
267 tmp85
= tmp73
+ tmp84
;
268 tmp91
= tmp67
+ tmp72
;
269 tmp92
= tmp78
+ tmp83
;
270 tmp93
= tmp91
+ tmp92
;
271 tmp100
= tmp98
+ tmp99
;
272 tmp103
= tmp101
+ tmp102
;
273 tmp128
= tmp100
+ tmp103
;
274 tmp121
= tmp98
- tmp99
;
275 tmp122
= tmp101
- tmp102
;
276 tmp142
= tmp121
+ tmp122
;
287 ASSERT_ALIGNED_DOUBLE();
293 ASSERT_ALIGNED_DOUBLE();
294 tmp41
= X
[2 * iostride
];
295 tmp43
= Y
[-7 * iostride
];
298 tmp44
= (tmp40
* tmp41
) - (tmp42
* tmp43
);
299 tmp105
= (tmp42
* tmp41
) + (tmp40
* tmp43
);
306 ASSERT_ALIGNED_DOUBLE();
307 tmp57
= X
[3 * iostride
];
308 tmp59
= Y
[-6 * iostride
];
311 tmp60
= (tmp56
* tmp57
) - (tmp58
* tmp59
);
312 tmp109
= (tmp58
* tmp57
) + (tmp56
* tmp59
);
319 ASSERT_ALIGNED_DOUBLE();
320 tmp46
= X
[7 * iostride
];
321 tmp48
= Y
[-2 * iostride
];
324 tmp49
= (tmp45
* tmp46
) - (tmp47
* tmp48
);
325 tmp106
= (tmp47
* tmp46
) + (tmp45
* tmp48
);
332 ASSERT_ALIGNED_DOUBLE();
333 tmp52
= X
[8 * iostride
];
334 tmp54
= Y
[-iostride
];
337 tmp55
= (tmp51
* tmp52
) - (tmp53
* tmp54
);
338 tmp108
= (tmp53
* tmp52
) + (tmp51
* tmp54
);
340 tmp50
= tmp44
- tmp49
;
341 tmp61
= tmp55
- tmp60
;
342 tmp62
= tmp50
+ tmp61
;
343 tmp88
= tmp44
+ tmp49
;
344 tmp89
= tmp55
+ tmp60
;
345 tmp90
= tmp88
+ tmp89
;
346 tmp107
= tmp105
+ tmp106
;
347 tmp110
= tmp108
+ tmp109
;
348 tmp127
= tmp107
+ tmp110
;
349 tmp118
= tmp105
- tmp106
;
350 tmp119
= tmp108
- tmp109
;
351 tmp141
= tmp118
+ tmp119
;
363 ASSERT_ALIGNED_DOUBLE();
364 tmp115
= K559016994
* (tmp62
- tmp85
);
365 tmp86
= tmp62
+ tmp85
;
366 tmp116
= tmp39
- (K250000000
* tmp86
);
367 tmp120
= tmp118
- tmp119
;
368 tmp123
= tmp121
- tmp122
;
369 tmp124
= (K951056516
* tmp120
) + (K587785252
* tmp123
);
370 tmp126
= (K951056516
* tmp123
) - (K587785252
* tmp120
);
371 Y
[-5 * iostride
] = tmp39
+ tmp86
;
372 tmp125
= tmp116
- tmp115
;
373 Y
[-7 * iostride
] = tmp125
- tmp126
;
374 X
[3 * iostride
] = tmp125
+ tmp126
;
375 tmp117
= tmp115
+ tmp116
;
376 Y
[-9 * iostride
] = tmp117
- tmp124
;
377 X
[iostride
] = tmp117
+ tmp124
;
389 ASSERT_ALIGNED_DOUBLE();
390 tmp148
= K559016994
* (tmp141
- tmp142
);
391 tmp143
= tmp141
+ tmp142
;
392 tmp149
= tmp144
- (K250000000
* tmp143
);
393 tmp145
= tmp50
- tmp61
;
394 tmp146
= tmp73
- tmp84
;
395 tmp147
= (K951056516
* tmp145
) + (K587785252
* tmp146
);
396 tmp151
= (K587785252
* tmp145
) - (K951056516
* tmp146
);
397 X
[5 * iostride
] = -(tmp143
+ tmp144
);
398 tmp152
= tmp149
- tmp148
;
399 X
[7 * iostride
] = tmp151
- tmp152
;
400 Y
[-3 * iostride
] = tmp151
+ tmp152
;
401 tmp150
= tmp148
+ tmp149
;
402 X
[9 * iostride
] = -(tmp147
+ tmp150
);
403 Y
[-iostride
] = tmp150
- tmp147
;
415 ASSERT_ALIGNED_DOUBLE();
416 tmp96
= K559016994
* (tmp90
- tmp93
);
417 tmp94
= tmp90
+ tmp93
;
418 tmp95
= tmp87
- (K250000000
* tmp94
);
419 tmp104
= tmp100
- tmp103
;
420 tmp111
= tmp107
- tmp110
;
421 tmp112
= (K951056516
* tmp104
) - (K587785252
* tmp111
);
422 tmp114
= (K951056516
* tmp111
) + (K587785252
* tmp104
);
423 X
[0] = tmp87
+ tmp94
;
424 tmp113
= tmp96
+ tmp95
;
425 X
[4 * iostride
] = tmp113
- tmp114
;
426 Y
[-6 * iostride
] = tmp113
+ tmp114
;
427 tmp97
= tmp95
- tmp96
;
428 X
[2 * iostride
] = tmp97
- tmp112
;
429 Y
[-8 * iostride
] = tmp97
+ tmp112
;
441 ASSERT_ALIGNED_DOUBLE();
442 tmp134
= K559016994
* (tmp127
- tmp128
);
443 tmp129
= tmp127
+ tmp128
;
444 tmp133
= tmp132
- (K250000000
* tmp129
);
445 tmp136
= tmp91
- tmp92
;
446 tmp137
= tmp88
- tmp89
;
447 tmp138
= (K951056516
* tmp136
) - (K587785252
* tmp137
);
448 tmp140
= (K951056516
* tmp137
) + (K587785252
* tmp136
);
449 Y
[0] = tmp129
+ tmp132
;
450 tmp139
= tmp134
+ tmp133
;
451 X
[6 * iostride
] = -(tmp139
- tmp140
);
452 Y
[-4 * iostride
] = tmp140
+ tmp139
;
453 tmp135
= tmp133
- tmp134
;
454 X
[8 * iostride
] = -(tmp135
- tmp138
);
455 Y
[-2 * iostride
] = tmp138
+ tmp135
;
469 ASSERT_ALIGNED_DOUBLE();
471 tmp24
= X
[5 * iostride
];
479 ASSERT_ALIGNED_DOUBLE();
480 tmp2
= X
[4 * iostride
];
481 tmp3
= X
[6 * iostride
];
483 tmp5
= X
[8 * iostride
];
484 tmp6
= X
[2 * iostride
];
487 tmp10
= K559016994
* (tmp4
- tmp7
);
498 ASSERT_ALIGNED_DOUBLE();
500 tmp13
= X
[9 * iostride
];
501 tmp22
= tmp12
+ tmp13
;
502 tmp15
= X
[3 * iostride
];
503 tmp16
= X
[7 * iostride
];
504 tmp21
= tmp15
+ tmp16
;
505 tmp14
= tmp12
- tmp13
;
506 tmp28
= K559016994
* (tmp22
+ tmp21
);
507 tmp23
= tmp21
- tmp22
;
508 tmp17
= tmp15
- tmp16
;
510 X
[2 * iostride
] = tmp1
+ tmp8
;
517 ASSERT_ALIGNED_DOUBLE();
518 tmp18
= (K587785252
* tmp14
) - (K951056516
* tmp17
);
519 tmp20
= (K951056516
* tmp14
) + (K587785252
* tmp17
);
520 tmp9
= tmp1
- (K250000000
* tmp8
);
521 tmp11
= tmp9
- tmp10
;
522 tmp19
= tmp10
+ tmp9
;
523 X
[3 * iostride
] = tmp11
- tmp18
;
524 X
[iostride
] = tmp11
+ tmp18
;
525 X
[4 * iostride
] = tmp19
- tmp20
;
526 X
[0] = tmp19
+ tmp20
;
528 Y
[-2 * iostride
] = tmp23
- tmp24
;
535 ASSERT_ALIGNED_DOUBLE();
536 tmp27
= (K951056516
* tmp25
) + (K587785252
* tmp26
);
537 tmp32
= (K951056516
* tmp26
) - (K587785252
* tmp25
);
538 tmp29
= (K250000000
* tmp23
) + tmp24
;
539 tmp30
= tmp28
+ tmp29
;
540 tmp31
= tmp29
- tmp28
;
541 Y
[0] = -(tmp27
+ tmp30
);
542 Y
[-4 * iostride
] = tmp27
- tmp30
;
543 Y
[-iostride
] = tmp31
- tmp32
;
544 Y
[-3 * iostride
] = tmp32
+ tmp31
;
549 static const int twiddle_order
[] =
550 {1, 2, 3, 4, 5, 6, 7, 8, 9};
551 fftw_codelet_desc fftw_hc2hc_forward_10_desc
=
553 "fftw_hc2hc_forward_10",
554 (void (*)()) fftw_hc2hc_forward_10
,