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:29 EDT 1999 */
26 /* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -hc2hc-forward 4 */
29 * This function contains 34 FP additions, 14 FP multiplications,
30 * (or, 28 additions, 8 multiplications, 6 fused multiply/add),
31 * 15 stack variables, and 32 memory accesses
33 static const fftw_real K707106781
= FFTW_KONST(+0.707106781186547524400844362104849039284835938);
42 void fftw_hc2hc_forward_4(fftw_real
*A
, const fftw_complex
*W
, int iostride
, int m
, int dist
)
48 Y
= A
+ (4 * iostride
);
56 ASSERT_ALIGNED_DOUBLE();
58 tmp36
= X
[2 * iostride
];
59 tmp37
= tmp35
+ tmp36
;
61 tmp39
= X
[3 * iostride
];
62 tmp40
= tmp38
+ tmp39
;
63 X
[iostride
] = tmp35
- tmp36
;
64 Y
[-iostride
] = -(tmp38
- tmp39
);
65 X
[2 * iostride
] = tmp37
- tmp40
;
70 for (i
= 2; i
< m
; i
= i
+ 2, X
= X
+ dist
, Y
= Y
- dist
, W
= W
+ 3) {
79 ASSERT_ALIGNED_DOUBLE();
81 tmp30
= Y
[-3 * iostride
];
87 ASSERT_ALIGNED_DOUBLE();
88 tmp9
= X
[2 * iostride
];
92 tmp12
= (tmp8
* tmp9
) - (tmp10
* tmp11
);
93 tmp29
= (tmp10
* tmp9
) + (tmp8
* tmp11
);
100 ASSERT_ALIGNED_DOUBLE();
102 tmp17
= Y
[-2 * iostride
];
105 tmp18
= (tmp14
* tmp15
) - (tmp16
* tmp17
);
106 tmp26
= (tmp16
* tmp15
) + (tmp14
* tmp17
);
113 ASSERT_ALIGNED_DOUBLE();
114 tmp20
= X
[3 * iostride
];
118 tmp23
= (tmp19
* tmp20
) - (tmp21
* tmp22
);
119 tmp27
= (tmp21
* tmp20
) + (tmp19
* tmp22
);
126 ASSERT_ALIGNED_DOUBLE();
127 tmp13
= tmp7
+ tmp12
;
128 tmp24
= tmp18
+ tmp23
;
129 Y
[-2 * iostride
] = tmp13
- tmp24
;
130 X
[0] = tmp13
+ tmp24
;
131 tmp33
= tmp18
- tmp23
;
132 tmp34
= tmp30
- tmp29
;
133 X
[3 * iostride
] = -(tmp33
+ tmp34
);
134 Y
[-iostride
] = tmp34
- tmp33
;
141 ASSERT_ALIGNED_DOUBLE();
142 tmp31
= tmp29
+ tmp30
;
143 tmp32
= tmp26
+ tmp27
;
144 X
[2 * iostride
] = -(tmp31
- tmp32
);
145 Y
[0] = tmp32
+ tmp31
;
146 tmp25
= tmp7
- tmp12
;
147 tmp28
= tmp26
- tmp27
;
148 Y
[-3 * iostride
] = tmp25
- tmp28
;
149 X
[iostride
] = tmp25
+ tmp28
;
159 ASSERT_ALIGNED_DOUBLE();
161 tmp6
= X
[2 * iostride
];
163 tmp3
= X
[3 * iostride
];
164 tmp4
= K707106781
* (tmp2
- tmp3
);
165 tmp5
= K707106781
* (tmp2
+ tmp3
);
166 X
[iostride
] = tmp1
- tmp4
;
168 Y
[0] = -(tmp5
+ tmp6
);
169 Y
[-iostride
] = tmp6
- tmp5
;
173 static const int twiddle_order
[] =
175 fftw_codelet_desc fftw_hc2hc_forward_4_desc
=
177 "fftw_hc2hc_forward_4",
178 (void (*)()) fftw_hc2hc_forward_4
,