1 /*
2  * Copyright (c) 1997-1999, 2003 Massachusetts Institute of Technology
3  *
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.
8  *
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.
13  *
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
17  *
18  */
19 
20 /* This file was automatically generated --- DO NOT EDIT */
21 /* Generated on Mon Mar 24 02:08:11 EST 2003 */
22 
23 #include "fftw-int.h"
24 #include "fftw.h"
25 
26 /* Generated by: /homee/stevenj/cvs/fftw/gensrc/genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -hc2hc-forward 16 */
27 
28 /*
29  * This function contains 298 FP additions, 130 FP multiplications,
30  * (or, 244 additions, 76 multiplications, 54 fused multiply/add),
31  * 51 stack variables, and 128 memory accesses
32  */
33 static const fftw_real K277785116 =
34 FFTW_KONST(+0.277785116509801112371415406974266437187468595);
35 static const fftw_real K415734806 =
36 FFTW_KONST(+0.415734806151272618539394188808952878369280406);
37 static const fftw_real K490392640 =
38 FFTW_KONST(+0.490392640201615224563091118067119518486966865);
39 static const fftw_real K097545161 =
40 FFTW_KONST(+0.097545161008064133924142434238511120463845809);
41 static const fftw_real K1_414213562 =
42 FFTW_KONST(+1.414213562373095048801688724209698078569671875);
43 static const fftw_real K2_000000000 =
44 FFTW_KONST(+2.000000000000000000000000000000000000000000000);
45 static const fftw_real K707106781 =
46 FFTW_KONST(+0.707106781186547524400844362104849039284835938);
47 static const fftw_real K923879532 =
48 FFTW_KONST(+0.923879532511286756128183189396788286822416626);
49 static const fftw_real K382683432 =
50 FFTW_KONST(+0.382683432365089771728459984030398866761344562);
51 
52 /*
53  * Generator Id's :
54  * $Id: exprdag.ml,v 1.43 2003/03/16 23:43:46 stevenj Exp $
55  * $Id: fft.ml,v 1.44 2003/03/16 23:43:46 stevenj Exp $
56  * $Id: to_c.ml,v 1.26 2003/03/16 23:43:46 stevenj Exp $
57  */
58 
fftw_hc2hc_forward_16(fftw_real * A,const fftw_complex * W,int iostride,int m,int dist)59 void fftw_hc2hc_forward_16(fftw_real *A, const fftw_complex *W,
60 			   int iostride, int m, int dist)
61 {
62      int i;
63      fftw_real *X;
64      fftw_real *Y;
65      X = A;
66      Y = A + (16 * iostride);
67      {
68 	  fftw_real tmp277;
69 	  fftw_real tmp280;
70 	  fftw_real tmp281;
71 	  fftw_real tmp309;
72 	  fftw_real tmp292;
73 	  fftw_real tmp307;
74 	  fftw_real tmp314;
75 	  fftw_real tmp322;
76 	  fftw_real tmp330;
77 	  fftw_real tmp284;
78 	  fftw_real tmp287;
79 	  fftw_real tmp288;
80 	  fftw_real tmp310;
81 	  fftw_real tmp291;
82 	  fftw_real tmp300;
83 	  fftw_real tmp315;
84 	  fftw_real tmp325;
85 	  fftw_real tmp331;
86 	  fftw_real tmp290;
87 	  fftw_real tmp289;
88 	  fftw_real tmp317;
89 	  fftw_real tmp318;
90 	  ASSERT_ALIGNED_DOUBLE;
91 	  {
92 	       fftw_real tmp275;
93 	       fftw_real tmp276;
94 	       fftw_real tmp278;
95 	       fftw_real tmp279;
96 	       ASSERT_ALIGNED_DOUBLE;
97 	       tmp275 = X[0];
98 	       tmp276 = X[8 * iostride];
99 	       tmp277 = tmp275 + tmp276;
100 	       tmp278 = X[4 * iostride];
101 	       tmp279 = X[12 * iostride];
102 	       tmp280 = tmp278 + tmp279;
103 	       tmp281 = tmp277 + tmp280;
104 	       tmp309 = tmp275 - tmp276;
105 	       tmp292 = tmp278 - tmp279;
106 	  }
107 	  {
108 	       fftw_real tmp303;
109 	       fftw_real tmp320;
110 	       fftw_real tmp306;
111 	       fftw_real tmp321;
112 	       ASSERT_ALIGNED_DOUBLE;
113 	       {
114 		    fftw_real tmp301;
115 		    fftw_real tmp302;
116 		    fftw_real tmp304;
117 		    fftw_real tmp305;
118 		    ASSERT_ALIGNED_DOUBLE;
119 		    tmp301 = X[iostride];
120 		    tmp302 = X[9 * iostride];
121 		    tmp303 = tmp301 - tmp302;
122 		    tmp320 = tmp301 + tmp302;
123 		    tmp304 = X[5 * iostride];
124 		    tmp305 = X[13 * iostride];
125 		    tmp306 = tmp304 - tmp305;
126 		    tmp321 = tmp304 + tmp305;
127 	       }
128 	       tmp307 = (K382683432 * tmp303) + (K923879532 * tmp306);
129 	       tmp314 = (K923879532 * tmp303) - (K382683432 * tmp306);
130 	       tmp322 = tmp320 - tmp321;
131 	       tmp330 = tmp320 + tmp321;
132 	  }
133 	  {
134 	       fftw_real tmp282;
135 	       fftw_real tmp283;
136 	       fftw_real tmp285;
137 	       fftw_real tmp286;
138 	       ASSERT_ALIGNED_DOUBLE;
139 	       tmp282 = X[2 * iostride];
140 	       tmp283 = X[10 * iostride];
141 	       tmp284 = tmp282 + tmp283;
142 	       tmp290 = tmp282 - tmp283;
143 	       tmp285 = X[14 * iostride];
144 	       tmp286 = X[6 * iostride];
145 	       tmp287 = tmp285 + tmp286;
146 	       tmp289 = tmp285 - tmp286;
147 	  }
148 	  tmp288 = tmp284 + tmp287;
149 	  tmp310 = K707106781 * (tmp290 + tmp289);
150 	  tmp291 = K707106781 * (tmp289 - tmp290);
151 	  {
152 	       fftw_real tmp296;
153 	       fftw_real tmp323;
154 	       fftw_real tmp299;
155 	       fftw_real tmp324;
156 	       ASSERT_ALIGNED_DOUBLE;
157 	       {
158 		    fftw_real tmp294;
159 		    fftw_real tmp295;
160 		    fftw_real tmp297;
161 		    fftw_real tmp298;
162 		    ASSERT_ALIGNED_DOUBLE;
163 		    tmp294 = X[15 * iostride];
164 		    tmp295 = X[7 * iostride];
165 		    tmp296 = tmp294 - tmp295;
166 		    tmp323 = tmp294 + tmp295;
167 		    tmp297 = X[3 * iostride];
168 		    tmp298 = X[11 * iostride];
169 		    tmp299 = tmp297 - tmp298;
170 		    tmp324 = tmp297 + tmp298;
171 	       }
172 	       tmp300 = (K382683432 * tmp296) - (K923879532 * tmp299);
173 	       tmp315 = (K923879532 * tmp296) + (K382683432 * tmp299);
174 	       tmp325 = tmp323 - tmp324;
175 	       tmp331 = tmp323 + tmp324;
176 	  }
177 	  {
178 	       fftw_real tmp329;
179 	       fftw_real tmp332;
180 	       fftw_real tmp327;
181 	       fftw_real tmp328;
182 	       ASSERT_ALIGNED_DOUBLE;
183 	       X[4 * iostride] = tmp281 - tmp288;
184 	       tmp329 = tmp281 + tmp288;
185 	       tmp332 = tmp330 + tmp331;
186 	       X[8 * iostride] = tmp329 - tmp332;
187 	       X[0] = tmp329 + tmp332;
188 	       Y[-4 * iostride] = tmp331 - tmp330;
189 	       tmp327 = tmp287 - tmp284;
190 	       tmp328 = K707106781 * (tmp325 - tmp322);
191 	       Y[-2 * iostride] = tmp327 + tmp328;
192 	       Y[-6 * iostride] = tmp328 - tmp327;
193 	  }
194 	  {
195 	       fftw_real tmp319;
196 	       fftw_real tmp326;
197 	       fftw_real tmp313;
198 	       fftw_real tmp316;
199 	       ASSERT_ALIGNED_DOUBLE;
200 	       tmp319 = tmp277 - tmp280;
201 	       tmp326 = K707106781 * (tmp322 + tmp325);
202 	       X[6 * iostride] = tmp319 - tmp326;
203 	       X[2 * iostride] = tmp319 + tmp326;
204 	       tmp313 = tmp309 + tmp310;
205 	       tmp316 = tmp314 + tmp315;
206 	       X[7 * iostride] = tmp313 - tmp316;
207 	       X[iostride] = tmp313 + tmp316;
208 	  }
209 	  tmp317 = tmp292 + tmp291;
210 	  tmp318 = tmp315 - tmp314;
211 	  Y[-3 * iostride] = tmp317 + tmp318;
212 	  Y[-5 * iostride] = tmp318 - tmp317;
213 	  {
214 	       fftw_real tmp293;
215 	       fftw_real tmp308;
216 	       fftw_real tmp311;
217 	       fftw_real tmp312;
218 	       ASSERT_ALIGNED_DOUBLE;
219 	       tmp293 = tmp291 - tmp292;
220 	       tmp308 = tmp300 - tmp307;
221 	       Y[-iostride] = tmp293 + tmp308;
222 	       Y[-7 * iostride] = tmp308 - tmp293;
223 	       tmp311 = tmp309 - tmp310;
224 	       tmp312 = tmp307 + tmp300;
225 	       X[5 * iostride] = tmp311 - tmp312;
226 	       X[3 * iostride] = tmp311 + tmp312;
227 	  }
228      }
229      X = X + dist;
230      Y = Y - dist;
231      for (i = 2; i < m; i = i + 2, X = X + dist, Y = Y - dist, W = W + 15) {
232 	  fftw_real tmp77;
233 	  fftw_real tmp161;
234 	  fftw_real tmp249;
235 	  fftw_real tmp262;
236 	  fftw_real tmp88;
237 	  fftw_real tmp263;
238 	  fftw_real tmp164;
239 	  fftw_real tmp246;
240 	  fftw_real tmp147;
241 	  fftw_real tmp158;
242 	  fftw_real tmp231;
243 	  fftw_real tmp198;
244 	  fftw_real tmp214;
245 	  fftw_real tmp232;
246 	  fftw_real tmp233;
247 	  fftw_real tmp234;
248 	  fftw_real tmp193;
249 	  fftw_real tmp213;
250 	  fftw_real tmp100;
251 	  fftw_real tmp222;
252 	  fftw_real tmp170;
253 	  fftw_real tmp206;
254 	  fftw_real tmp111;
255 	  fftw_real tmp223;
256 	  fftw_real tmp175;
257 	  fftw_real tmp207;
258 	  fftw_real tmp124;
259 	  fftw_real tmp135;
260 	  fftw_real tmp226;
261 	  fftw_real tmp187;
262 	  fftw_real tmp211;
263 	  fftw_real tmp227;
264 	  fftw_real tmp228;
265 	  fftw_real tmp229;
266 	  fftw_real tmp182;
267 	  fftw_real tmp210;
268 	  ASSERT_ALIGNED_DOUBLE;
269 	  {
270 	       fftw_real tmp71;
271 	       fftw_real tmp248;
272 	       fftw_real tmp76;
273 	       fftw_real tmp247;
274 	       ASSERT_ALIGNED_DOUBLE;
275 	       tmp71 = X[0];
276 	       tmp248 = Y[-15 * iostride];
277 	       {
278 		    fftw_real tmp73;
279 		    fftw_real tmp75;
280 		    fftw_real tmp72;
281 		    fftw_real tmp74;
282 		    ASSERT_ALIGNED_DOUBLE;
283 		    tmp73 = X[8 * iostride];
284 		    tmp75 = Y[-7 * iostride];
285 		    tmp72 = c_re(W[7]);
286 		    tmp74 = c_im(W[7]);
287 		    tmp76 = (tmp72 * tmp73) - (tmp74 * tmp75);
288 		    tmp247 = (tmp74 * tmp73) + (tmp72 * tmp75);
289 	       }
290 	       tmp77 = tmp71 + tmp76;
291 	       tmp161 = tmp71 - tmp76;
292 	       tmp249 = tmp247 + tmp248;
293 	       tmp262 = tmp248 - tmp247;
294 	  }
295 	  {
296 	       fftw_real tmp82;
297 	       fftw_real tmp162;
298 	       fftw_real tmp87;
299 	       fftw_real tmp163;
300 	       ASSERT_ALIGNED_DOUBLE;
301 	       {
302 		    fftw_real tmp79;
303 		    fftw_real tmp81;
304 		    fftw_real tmp78;
305 		    fftw_real tmp80;
306 		    ASSERT_ALIGNED_DOUBLE;
307 		    tmp79 = X[4 * iostride];
308 		    tmp81 = Y[-11 * iostride];
309 		    tmp78 = c_re(W[3]);
310 		    tmp80 = c_im(W[3]);
311 		    tmp82 = (tmp78 * tmp79) - (tmp80 * tmp81);
312 		    tmp162 = (tmp80 * tmp79) + (tmp78 * tmp81);
313 	       }
314 	       {
315 		    fftw_real tmp84;
316 		    fftw_real tmp86;
317 		    fftw_real tmp83;
318 		    fftw_real tmp85;
319 		    ASSERT_ALIGNED_DOUBLE;
320 		    tmp84 = X[12 * iostride];
321 		    tmp86 = Y[-3 * iostride];
322 		    tmp83 = c_re(W[11]);
323 		    tmp85 = c_im(W[11]);
324 		    tmp87 = (tmp83 * tmp84) - (tmp85 * tmp86);
325 		    tmp163 = (tmp85 * tmp84) + (tmp83 * tmp86);
326 	       }
327 	       tmp88 = tmp82 + tmp87;
328 	       tmp263 = tmp82 - tmp87;
329 	       tmp164 = tmp162 - tmp163;
330 	       tmp246 = tmp162 + tmp163;
331 	  }
332 	  {
333 	       fftw_real tmp141;
334 	       fftw_real tmp194;
335 	       fftw_real tmp157;
336 	       fftw_real tmp191;
337 	       fftw_real tmp146;
338 	       fftw_real tmp195;
339 	       fftw_real tmp152;
340 	       fftw_real tmp190;
341 	       ASSERT_ALIGNED_DOUBLE;
342 	       {
343 		    fftw_real tmp138;
344 		    fftw_real tmp140;
345 		    fftw_real tmp137;
346 		    fftw_real tmp139;
347 		    ASSERT_ALIGNED_DOUBLE;
348 		    tmp138 = X[15 * iostride];
349 		    tmp140 = Y[0];
350 		    tmp137 = c_re(W[14]);
351 		    tmp139 = c_im(W[14]);
352 		    tmp141 = (tmp137 * tmp138) - (tmp139 * tmp140);
353 		    tmp194 = (tmp139 * tmp138) + (tmp137 * tmp140);
354 	       }
355 	       {
356 		    fftw_real tmp154;
357 		    fftw_real tmp156;
358 		    fftw_real tmp153;
359 		    fftw_real tmp155;
360 		    ASSERT_ALIGNED_DOUBLE;
361 		    tmp154 = X[11 * iostride];
362 		    tmp156 = Y[-4 * iostride];
363 		    tmp153 = c_re(W[10]);
364 		    tmp155 = c_im(W[10]);
365 		    tmp157 = (tmp153 * tmp154) - (tmp155 * tmp156);
366 		    tmp191 = (tmp155 * tmp154) + (tmp153 * tmp156);
367 	       }
368 	       {
369 		    fftw_real tmp143;
370 		    fftw_real tmp145;
371 		    fftw_real tmp142;
372 		    fftw_real tmp144;
373 		    ASSERT_ALIGNED_DOUBLE;
374 		    tmp143 = X[7 * iostride];
375 		    tmp145 = Y[-8 * iostride];
376 		    tmp142 = c_re(W[6]);
377 		    tmp144 = c_im(W[6]);
378 		    tmp146 = (tmp142 * tmp143) - (tmp144 * tmp145);
379 		    tmp195 = (tmp144 * tmp143) + (tmp142 * tmp145);
380 	       }
381 	       {
382 		    fftw_real tmp149;
383 		    fftw_real tmp151;
384 		    fftw_real tmp148;
385 		    fftw_real tmp150;
386 		    ASSERT_ALIGNED_DOUBLE;
387 		    tmp149 = X[3 * iostride];
388 		    tmp151 = Y[-12 * iostride];
389 		    tmp148 = c_re(W[2]);
390 		    tmp150 = c_im(W[2]);
391 		    tmp152 = (tmp148 * tmp149) - (tmp150 * tmp151);
392 		    tmp190 = (tmp150 * tmp149) + (tmp148 * tmp151);
393 	       }
394 	       {
395 		    fftw_real tmp196;
396 		    fftw_real tmp197;
397 		    fftw_real tmp189;
398 		    fftw_real tmp192;
399 		    ASSERT_ALIGNED_DOUBLE;
400 		    tmp147 = tmp141 + tmp146;
401 		    tmp158 = tmp152 + tmp157;
402 		    tmp231 = tmp147 - tmp158;
403 		    tmp196 = tmp194 - tmp195;
404 		    tmp197 = tmp152 - tmp157;
405 		    tmp198 = tmp196 + tmp197;
406 		    tmp214 = tmp196 - tmp197;
407 		    tmp232 = tmp194 + tmp195;
408 		    tmp233 = tmp190 + tmp191;
409 		    tmp234 = tmp232 - tmp233;
410 		    tmp189 = tmp141 - tmp146;
411 		    tmp192 = tmp190 - tmp191;
412 		    tmp193 = tmp189 - tmp192;
413 		    tmp213 = tmp189 + tmp192;
414 	       }
415 	  }
416 	  {
417 	       fftw_real tmp94;
418 	       fftw_real tmp166;
419 	       fftw_real tmp99;
420 	       fftw_real tmp167;
421 	       fftw_real tmp168;
422 	       fftw_real tmp169;
423 	       ASSERT_ALIGNED_DOUBLE;
424 	       {
425 		    fftw_real tmp91;
426 		    fftw_real tmp93;
427 		    fftw_real tmp90;
428 		    fftw_real tmp92;
429 		    ASSERT_ALIGNED_DOUBLE;
430 		    tmp91 = X[2 * iostride];
431 		    tmp93 = Y[-13 * iostride];
432 		    tmp90 = c_re(W[1]);
433 		    tmp92 = c_im(W[1]);
434 		    tmp94 = (tmp90 * tmp91) - (tmp92 * tmp93);
435 		    tmp166 = (tmp92 * tmp91) + (tmp90 * tmp93);
436 	       }
437 	       {
438 		    fftw_real tmp96;
439 		    fftw_real tmp98;
440 		    fftw_real tmp95;
441 		    fftw_real tmp97;
442 		    ASSERT_ALIGNED_DOUBLE;
443 		    tmp96 = X[10 * iostride];
444 		    tmp98 = Y[-5 * iostride];
445 		    tmp95 = c_re(W[9]);
446 		    tmp97 = c_im(W[9]);
447 		    tmp99 = (tmp95 * tmp96) - (tmp97 * tmp98);
448 		    tmp167 = (tmp97 * tmp96) + (tmp95 * tmp98);
449 	       }
450 	       tmp100 = tmp94 + tmp99;
451 	       tmp222 = tmp166 + tmp167;
452 	       tmp168 = tmp166 - tmp167;
453 	       tmp169 = tmp94 - tmp99;
454 	       tmp170 = tmp168 - tmp169;
455 	       tmp206 = tmp169 + tmp168;
456 	  }
457 	  {
458 	       fftw_real tmp105;
459 	       fftw_real tmp172;
460 	       fftw_real tmp110;
461 	       fftw_real tmp173;
462 	       fftw_real tmp171;
463 	       fftw_real tmp174;
464 	       ASSERT_ALIGNED_DOUBLE;
465 	       {
466 		    fftw_real tmp102;
467 		    fftw_real tmp104;
468 		    fftw_real tmp101;
469 		    fftw_real tmp103;
470 		    ASSERT_ALIGNED_DOUBLE;
471 		    tmp102 = X[14 * iostride];
472 		    tmp104 = Y[-iostride];
473 		    tmp101 = c_re(W[13]);
474 		    tmp103 = c_im(W[13]);
475 		    tmp105 = (tmp101 * tmp102) - (tmp103 * tmp104);
476 		    tmp172 = (tmp103 * tmp102) + (tmp101 * tmp104);
477 	       }
478 	       {
479 		    fftw_real tmp107;
480 		    fftw_real tmp109;
481 		    fftw_real tmp106;
482 		    fftw_real tmp108;
483 		    ASSERT_ALIGNED_DOUBLE;
484 		    tmp107 = X[6 * iostride];
485 		    tmp109 = Y[-9 * iostride];
486 		    tmp106 = c_re(W[5]);
487 		    tmp108 = c_im(W[5]);
488 		    tmp110 = (tmp106 * tmp107) - (tmp108 * tmp109);
489 		    tmp173 = (tmp108 * tmp107) + (tmp106 * tmp109);
490 	       }
491 	       tmp111 = tmp105 + tmp110;
492 	       tmp223 = tmp172 + tmp173;
493 	       tmp171 = tmp105 - tmp110;
494 	       tmp174 = tmp172 - tmp173;
495 	       tmp175 = tmp171 + tmp174;
496 	       tmp207 = tmp171 - tmp174;
497 	  }
498 	  {
499 	       fftw_real tmp118;
500 	       fftw_real tmp178;
501 	       fftw_real tmp134;
502 	       fftw_real tmp185;
503 	       fftw_real tmp123;
504 	       fftw_real tmp179;
505 	       fftw_real tmp129;
506 	       fftw_real tmp184;
507 	       ASSERT_ALIGNED_DOUBLE;
508 	       {
509 		    fftw_real tmp115;
510 		    fftw_real tmp117;
511 		    fftw_real tmp114;
512 		    fftw_real tmp116;
513 		    ASSERT_ALIGNED_DOUBLE;
514 		    tmp115 = X[iostride];
515 		    tmp117 = Y[-14 * iostride];
516 		    tmp114 = c_re(W[0]);
517 		    tmp116 = c_im(W[0]);
518 		    tmp118 = (tmp114 * tmp115) - (tmp116 * tmp117);
519 		    tmp178 = (tmp116 * tmp115) + (tmp114 * tmp117);
520 	       }
521 	       {
522 		    fftw_real tmp131;
523 		    fftw_real tmp133;
524 		    fftw_real tmp130;
525 		    fftw_real tmp132;
526 		    ASSERT_ALIGNED_DOUBLE;
527 		    tmp131 = X[13 * iostride];
528 		    tmp133 = Y[-2 * iostride];
529 		    tmp130 = c_re(W[12]);
530 		    tmp132 = c_im(W[12]);
531 		    tmp134 = (tmp130 * tmp131) - (tmp132 * tmp133);
532 		    tmp185 = (tmp132 * tmp131) + (tmp130 * tmp133);
533 	       }
534 	       {
535 		    fftw_real tmp120;
536 		    fftw_real tmp122;
537 		    fftw_real tmp119;
538 		    fftw_real tmp121;
539 		    ASSERT_ALIGNED_DOUBLE;
540 		    tmp120 = X[9 * iostride];
541 		    tmp122 = Y[-6 * iostride];
542 		    tmp119 = c_re(W[8]);
543 		    tmp121 = c_im(W[8]);
544 		    tmp123 = (tmp119 * tmp120) - (tmp121 * tmp122);
545 		    tmp179 = (tmp121 * tmp120) + (tmp119 * tmp122);
546 	       }
547 	       {
548 		    fftw_real tmp126;
549 		    fftw_real tmp128;
550 		    fftw_real tmp125;
551 		    fftw_real tmp127;
552 		    ASSERT_ALIGNED_DOUBLE;
553 		    tmp126 = X[5 * iostride];
554 		    tmp128 = Y[-10 * iostride];
555 		    tmp125 = c_re(W[4]);
556 		    tmp127 = c_im(W[4]);
557 		    tmp129 = (tmp125 * tmp126) - (tmp127 * tmp128);
558 		    tmp184 = (tmp127 * tmp126) + (tmp125 * tmp128);
559 	       }
560 	       {
561 		    fftw_real tmp183;
562 		    fftw_real tmp186;
563 		    fftw_real tmp180;
564 		    fftw_real tmp181;
565 		    ASSERT_ALIGNED_DOUBLE;
566 		    tmp124 = tmp118 + tmp123;
567 		    tmp135 = tmp129 + tmp134;
568 		    tmp226 = tmp124 - tmp135;
569 		    tmp183 = tmp118 - tmp123;
570 		    tmp186 = tmp184 - tmp185;
571 		    tmp187 = tmp183 - tmp186;
572 		    tmp211 = tmp183 + tmp186;
573 		    tmp227 = tmp178 + tmp179;
574 		    tmp228 = tmp184 + tmp185;
575 		    tmp229 = tmp227 - tmp228;
576 		    tmp180 = tmp178 - tmp179;
577 		    tmp181 = tmp129 - tmp134;
578 		    tmp182 = tmp180 + tmp181;
579 		    tmp210 = tmp180 - tmp181;
580 	       }
581 	  }
582 	  {
583 	       fftw_real tmp177;
584 	       fftw_real tmp201;
585 	       fftw_real tmp271;
586 	       fftw_real tmp273;
587 	       fftw_real tmp200;
588 	       fftw_real tmp274;
589 	       fftw_real tmp204;
590 	       fftw_real tmp272;
591 	       ASSERT_ALIGNED_DOUBLE;
592 	       {
593 		    fftw_real tmp165;
594 		    fftw_real tmp176;
595 		    fftw_real tmp269;
596 		    fftw_real tmp270;
597 		    ASSERT_ALIGNED_DOUBLE;
598 		    tmp165 = tmp161 - tmp164;
599 		    tmp176 = K707106781 * (tmp170 - tmp175);
600 		    tmp177 = tmp165 + tmp176;
601 		    tmp201 = tmp165 - tmp176;
602 		    tmp269 = K707106781 * (tmp207 - tmp206);
603 		    tmp270 = tmp263 + tmp262;
604 		    tmp271 = tmp269 + tmp270;
605 		    tmp273 = tmp270 - tmp269;
606 	       }
607 	       {
608 		    fftw_real tmp188;
609 		    fftw_real tmp199;
610 		    fftw_real tmp202;
611 		    fftw_real tmp203;
612 		    ASSERT_ALIGNED_DOUBLE;
613 		    tmp188 = (K923879532 * tmp182) + (K382683432 * tmp187);
614 		    tmp199 = (K382683432 * tmp193) - (K923879532 * tmp198);
615 		    tmp200 = tmp188 + tmp199;
616 		    tmp274 = tmp199 - tmp188;
617 		    tmp202 = (K382683432 * tmp182) - (K923879532 * tmp187);
618 		    tmp203 = (K382683432 * tmp198) + (K923879532 * tmp193);
619 		    tmp204 = tmp202 - tmp203;
620 		    tmp272 = tmp202 + tmp203;
621 	       }
622 	       Y[-11 * iostride] = tmp177 - tmp200;
623 	       X[3 * iostride] = tmp177 + tmp200;
624 	       Y[-15 * iostride] = tmp201 - tmp204;
625 	       X[7 * iostride] = tmp201 + tmp204;
626 	       X[11 * iostride] = -(tmp271 - tmp272);
627 	       Y[-3 * iostride] = tmp272 + tmp271;
628 	       X[15 * iostride] = -(tmp273 - tmp274);
629 	       Y[-7 * iostride] = tmp274 + tmp273;
630 	  }
631 	  {
632 	       fftw_real tmp209;
633 	       fftw_real tmp217;
634 	       fftw_real tmp265;
635 	       fftw_real tmp267;
636 	       fftw_real tmp216;
637 	       fftw_real tmp268;
638 	       fftw_real tmp220;
639 	       fftw_real tmp266;
640 	       ASSERT_ALIGNED_DOUBLE;
641 	       {
642 		    fftw_real tmp205;
643 		    fftw_real tmp208;
644 		    fftw_real tmp261;
645 		    fftw_real tmp264;
646 		    ASSERT_ALIGNED_DOUBLE;
647 		    tmp205 = tmp161 + tmp164;
648 		    tmp208 = K707106781 * (tmp206 + tmp207);
649 		    tmp209 = tmp205 + tmp208;
650 		    tmp217 = tmp205 - tmp208;
651 		    tmp261 = K707106781 * (tmp170 + tmp175);
652 		    tmp264 = tmp262 - tmp263;
653 		    tmp265 = tmp261 + tmp264;
654 		    tmp267 = tmp264 - tmp261;
655 	       }
656 	       {
657 		    fftw_real tmp212;
658 		    fftw_real tmp215;
659 		    fftw_real tmp218;
660 		    fftw_real tmp219;
661 		    ASSERT_ALIGNED_DOUBLE;
662 		    tmp212 = (K382683432 * tmp210) + (K923879532 * tmp211);
663 		    tmp215 = (K923879532 * tmp213) - (K382683432 * tmp214);
664 		    tmp216 = tmp212 + tmp215;
665 		    tmp268 = tmp215 - tmp212;
666 		    tmp218 = (K923879532 * tmp210) - (K382683432 * tmp211);
667 		    tmp219 = (K923879532 * tmp214) + (K382683432 * tmp213);
668 		    tmp220 = tmp218 - tmp219;
669 		    tmp266 = tmp218 + tmp219;
670 	       }
671 	       Y[-9 * iostride] = tmp209 - tmp216;
672 	       X[iostride] = tmp209 + tmp216;
673 	       Y[-13 * iostride] = tmp217 - tmp220;
674 	       X[5 * iostride] = tmp217 + tmp220;
675 	       X[9 * iostride] = -(tmp265 - tmp266);
676 	       Y[-iostride] = tmp266 + tmp265;
677 	       X[13 * iostride] = -(tmp267 - tmp268);
678 	       Y[-5 * iostride] = tmp268 + tmp267;
679 	  }
680 	  {
681 	       fftw_real tmp225;
682 	       fftw_real tmp237;
683 	       fftw_real tmp257;
684 	       fftw_real tmp259;
685 	       fftw_real tmp236;
686 	       fftw_real tmp260;
687 	       fftw_real tmp240;
688 	       fftw_real tmp258;
689 	       ASSERT_ALIGNED_DOUBLE;
690 	       {
691 		    fftw_real tmp221;
692 		    fftw_real tmp224;
693 		    fftw_real tmp255;
694 		    fftw_real tmp256;
695 		    ASSERT_ALIGNED_DOUBLE;
696 		    tmp221 = tmp77 - tmp88;
697 		    tmp224 = tmp222 - tmp223;
698 		    tmp225 = tmp221 + tmp224;
699 		    tmp237 = tmp221 - tmp224;
700 		    tmp255 = tmp111 - tmp100;
701 		    tmp256 = tmp249 - tmp246;
702 		    tmp257 = tmp255 + tmp256;
703 		    tmp259 = tmp256 - tmp255;
704 	       }
705 	       {
706 		    fftw_real tmp230;
707 		    fftw_real tmp235;
708 		    fftw_real tmp238;
709 		    fftw_real tmp239;
710 		    ASSERT_ALIGNED_DOUBLE;
711 		    tmp230 = tmp226 + tmp229;
712 		    tmp235 = tmp231 - tmp234;
713 		    tmp236 = K707106781 * (tmp230 + tmp235);
714 		    tmp260 = K707106781 * (tmp235 - tmp230);
715 		    tmp238 = tmp229 - tmp226;
716 		    tmp239 = tmp231 + tmp234;
717 		    tmp240 = K707106781 * (tmp238 - tmp239);
718 		    tmp258 = K707106781 * (tmp238 + tmp239);
719 	       }
720 	       Y[-10 * iostride] = tmp225 - tmp236;
721 	       X[2 * iostride] = tmp225 + tmp236;
722 	       Y[-14 * iostride] = tmp237 - tmp240;
723 	       X[6 * iostride] = tmp237 + tmp240;
724 	       X[10 * iostride] = -(tmp257 - tmp258);
725 	       Y[-2 * iostride] = tmp258 + tmp257;
726 	       X[14 * iostride] = -(tmp259 - tmp260);
727 	       Y[-6 * iostride] = tmp260 + tmp259;
728 	  }
729 	  {
730 	       fftw_real tmp113;
731 	       fftw_real tmp241;
732 	       fftw_real tmp251;
733 	       fftw_real tmp253;
734 	       fftw_real tmp160;
735 	       fftw_real tmp254;
736 	       fftw_real tmp244;
737 	       fftw_real tmp252;
738 	       ASSERT_ALIGNED_DOUBLE;
739 	       {
740 		    fftw_real tmp89;
741 		    fftw_real tmp112;
742 		    fftw_real tmp245;
743 		    fftw_real tmp250;
744 		    ASSERT_ALIGNED_DOUBLE;
745 		    tmp89 = tmp77 + tmp88;
746 		    tmp112 = tmp100 + tmp111;
747 		    tmp113 = tmp89 + tmp112;
748 		    tmp241 = tmp89 - tmp112;
749 		    tmp245 = tmp222 + tmp223;
750 		    tmp250 = tmp246 + tmp249;
751 		    tmp251 = tmp245 + tmp250;
752 		    tmp253 = tmp250 - tmp245;
753 	       }
754 	       {
755 		    fftw_real tmp136;
756 		    fftw_real tmp159;
757 		    fftw_real tmp242;
758 		    fftw_real tmp243;
759 		    ASSERT_ALIGNED_DOUBLE;
760 		    tmp136 = tmp124 + tmp135;
761 		    tmp159 = tmp147 + tmp158;
762 		    tmp160 = tmp136 + tmp159;
763 		    tmp254 = tmp159 - tmp136;
764 		    tmp242 = tmp227 + tmp228;
765 		    tmp243 = tmp232 + tmp233;
766 		    tmp244 = tmp242 - tmp243;
767 		    tmp252 = tmp242 + tmp243;
768 	       }
769 	       Y[-8 * iostride] = tmp113 - tmp160;
770 	       X[0] = tmp113 + tmp160;
771 	       Y[-12 * iostride] = tmp241 - tmp244;
772 	       X[4 * iostride] = tmp241 + tmp244;
773 	       X[8 * iostride] = -(tmp251 - tmp252);
774 	       Y[0] = tmp252 + tmp251;
775 	       X[12 * iostride] = -(tmp253 - tmp254);
776 	       Y[-4 * iostride] = tmp254 + tmp253;
777 	  }
778      }
779      if (i == m) {
780 	  fftw_real tmp5;
781 	  fftw_real tmp41;
782 	  fftw_real tmp61;
783 	  fftw_real tmp67;
784 	  fftw_real tmp30;
785 	  fftw_real tmp49;
786 	  fftw_real tmp34;
787 	  fftw_real tmp50;
788 	  fftw_real tmp12;
789 	  fftw_real tmp66;
790 	  fftw_real tmp44;
791 	  fftw_real tmp58;
792 	  fftw_real tmp19;
793 	  fftw_real tmp46;
794 	  fftw_real tmp23;
795 	  fftw_real tmp47;
796 	  ASSERT_ALIGNED_DOUBLE;
797 	  {
798 	       fftw_real tmp1;
799 	       fftw_real tmp60;
800 	       fftw_real tmp4;
801 	       fftw_real tmp59;
802 	       fftw_real tmp2;
803 	       fftw_real tmp3;
804 	       ASSERT_ALIGNED_DOUBLE;
805 	       tmp1 = X[0];
806 	       tmp60 = X[8 * iostride];
807 	       tmp2 = X[4 * iostride];
808 	       tmp3 = X[12 * iostride];
809 	       tmp4 = K707106781 * (tmp2 - tmp3);
810 	       tmp59 = K707106781 * (tmp2 + tmp3);
811 	       tmp5 = tmp1 + tmp4;
812 	       tmp41 = tmp1 - tmp4;
813 	       tmp61 = tmp59 + tmp60;
814 	       tmp67 = tmp60 - tmp59;
815 	  }
816 	  {
817 	       fftw_real tmp29;
818 	       fftw_real tmp33;
819 	       fftw_real tmp27;
820 	       fftw_real tmp31;
821 	       ASSERT_ALIGNED_DOUBLE;
822 	       {
823 		    fftw_real tmp28;
824 		    fftw_real tmp32;
825 		    fftw_real tmp25;
826 		    fftw_real tmp26;
827 		    ASSERT_ALIGNED_DOUBLE;
828 		    tmp28 = X[15 * iostride];
829 		    tmp29 = K2_000000000 * tmp28;
830 		    tmp32 = X[7 * iostride];
831 		    tmp33 = K2_000000000 * tmp32;
832 		    tmp25 = X[3 * iostride];
833 		    tmp26 = X[11 * iostride];
834 		    tmp27 = K1_414213562 * (tmp25 - tmp26);
835 		    tmp31 = K1_414213562 * (tmp25 + tmp26);
836 	       }
837 	       tmp30 = tmp27 - tmp29;
838 	       tmp49 = tmp27 + tmp29;
839 	       tmp34 = tmp31 + tmp33;
840 	       tmp50 = tmp33 - tmp31;
841 	  }
842 	  {
843 	       fftw_real tmp8;
844 	       fftw_real tmp42;
845 	       fftw_real tmp11;
846 	       fftw_real tmp43;
847 	       ASSERT_ALIGNED_DOUBLE;
848 	       {
849 		    fftw_real tmp6;
850 		    fftw_real tmp7;
851 		    fftw_real tmp9;
852 		    fftw_real tmp10;
853 		    ASSERT_ALIGNED_DOUBLE;
854 		    tmp6 = X[2 * iostride];
855 		    tmp7 = X[10 * iostride];
856 		    tmp8 = (K923879532 * tmp6) - (K382683432 * tmp7);
857 		    tmp42 = (K382683432 * tmp6) + (K923879532 * tmp7);
858 		    tmp9 = X[6 * iostride];
859 		    tmp10 = X[14 * iostride];
860 		    tmp11 = (K382683432 * tmp9) - (K923879532 * tmp10);
861 		    tmp43 = (K923879532 * tmp9) + (K382683432 * tmp10);
862 	       }
863 	       tmp12 = tmp8 + tmp11;
864 	       tmp66 = tmp11 - tmp8;
865 	       tmp44 = tmp42 - tmp43;
866 	       tmp58 = tmp42 + tmp43;
867 	  }
868 	  {
869 	       fftw_real tmp15;
870 	       fftw_real tmp22;
871 	       fftw_real tmp18;
872 	       fftw_real tmp20;
873 	       ASSERT_ALIGNED_DOUBLE;
874 	       {
875 		    fftw_real tmp14;
876 		    fftw_real tmp21;
877 		    fftw_real tmp16;
878 		    fftw_real tmp17;
879 		    ASSERT_ALIGNED_DOUBLE;
880 		    tmp14 = X[iostride];
881 		    tmp15 = K2_000000000 * tmp14;
882 		    tmp21 = X[9 * iostride];
883 		    tmp22 = K2_000000000 * tmp21;
884 		    tmp16 = X[5 * iostride];
885 		    tmp17 = X[13 * iostride];
886 		    tmp18 = K1_414213562 * (tmp16 - tmp17);
887 		    tmp20 = K1_414213562 * (tmp16 + tmp17);
888 	       }
889 	       tmp19 = tmp15 + tmp18;
890 	       tmp46 = tmp15 - tmp18;
891 	       tmp23 = tmp20 + tmp22;
892 	       tmp47 = tmp22 - tmp20;
893 	  }
894 	  {
895 	       fftw_real tmp13;
896 	       fftw_real tmp62;
897 	       fftw_real tmp36;
898 	       fftw_real tmp57;
899 	       fftw_real tmp24;
900 	       fftw_real tmp35;
901 	       ASSERT_ALIGNED_DOUBLE;
902 	       tmp13 = tmp5 - tmp12;
903 	       tmp62 = tmp58 + tmp61;
904 	       tmp24 = (K097545161 * tmp19) + (K490392640 * tmp23);
905 	       tmp35 = (K097545161 * tmp30) - (K490392640 * tmp34);
906 	       tmp36 = tmp24 + tmp35;
907 	       tmp57 = tmp35 - tmp24;
908 	       X[4 * iostride] = tmp13 - tmp36;
909 	       X[3 * iostride] = tmp13 + tmp36;
910 	       Y[0] = tmp57 - tmp62;
911 	       Y[-7 * iostride] = tmp57 + tmp62;
912 	  }
913 	  {
914 	       fftw_real tmp37;
915 	       fftw_real tmp64;
916 	       fftw_real tmp40;
917 	       fftw_real tmp63;
918 	       fftw_real tmp38;
919 	       fftw_real tmp39;
920 	       ASSERT_ALIGNED_DOUBLE;
921 	       tmp37 = tmp5 + tmp12;
922 	       tmp64 = tmp61 - tmp58;
923 	       tmp38 = (K490392640 * tmp19) - (K097545161 * tmp23);
924 	       tmp39 = (K490392640 * tmp30) + (K097545161 * tmp34);
925 	       tmp40 = tmp38 + tmp39;
926 	       tmp63 = tmp39 - tmp38;
927 	       X[7 * iostride] = tmp37 - tmp40;
928 	       X[0] = tmp37 + tmp40;
929 	       Y[-4 * iostride] = tmp63 - tmp64;
930 	       Y[-3 * iostride] = tmp63 + tmp64;
931 	  }
932 	  {
933 	       fftw_real tmp45;
934 	       fftw_real tmp68;
935 	       fftw_real tmp52;
936 	       fftw_real tmp65;
937 	       fftw_real tmp48;
938 	       fftw_real tmp51;
939 	       ASSERT_ALIGNED_DOUBLE;
940 	       tmp45 = tmp41 + tmp44;
941 	       tmp68 = tmp66 - tmp67;
942 	       tmp48 = (K415734806 * tmp46) + (K277785116 * tmp47);
943 	       tmp51 = (K415734806 * tmp49) + (K277785116 * tmp50);
944 	       tmp52 = tmp48 - tmp51;
945 	       tmp65 = tmp48 + tmp51;
946 	       X[6 * iostride] = tmp45 - tmp52;
947 	       X[iostride] = tmp45 + tmp52;
948 	       Y[-5 * iostride] = -(tmp65 + tmp68);
949 	       Y[-2 * iostride] = tmp68 - tmp65;
950 	  }
951 	  {
952 	       fftw_real tmp53;
953 	       fftw_real tmp70;
954 	       fftw_real tmp56;
955 	       fftw_real tmp69;
956 	       fftw_real tmp54;
957 	       fftw_real tmp55;
958 	       ASSERT_ALIGNED_DOUBLE;
959 	       tmp53 = tmp41 - tmp44;
960 	       tmp70 = tmp66 + tmp67;
961 	       tmp54 = (K415734806 * tmp50) - (K277785116 * tmp49);
962 	       tmp55 = (K415734806 * tmp47) - (K277785116 * tmp46);
963 	       tmp56 = tmp54 - tmp55;
964 	       tmp69 = tmp55 + tmp54;
965 	       X[5 * iostride] = tmp53 - tmp56;
966 	       X[2 * iostride] = tmp53 + tmp56;
967 	       Y[-6 * iostride] = tmp69 - tmp70;
968 	       Y[-iostride] = tmp69 + tmp70;
969 	  }
970      }
971 }
972 
973 static const int twiddle_order[] =
974     { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
975 fftw_codelet_desc fftw_hc2hc_forward_16_desc = {
976      "fftw_hc2hc_forward_16",
977      (void (*)()) fftw_hc2hc_forward_16,
978      16,
979      FFTW_FORWARD,
980      FFTW_HC2HC,
981      355,
982      15,
983      twiddle_order,
984 };
985