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:30 EDT 1999 */
26 /* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -hc2hc-forward 5 */
29 * This function contains 64 FP additions, 40 FP multiplications,
30 * (or, 44 additions, 20 multiplications, 20 fused multiply/add),
31 * 27 stack variables, and 40 memory accesses
33 static const fftw_real K250000000
= FFTW_KONST(+0.250000000000000000000000000000000000000000000);
34 static const fftw_real K559016994
= FFTW_KONST(+0.559016994374947424102293417182819058860154590);
35 static const fftw_real K587785252
= FFTW_KONST(+0.587785252292473129168705954639072768597652438);
36 static const fftw_real K951056516
= FFTW_KONST(+0.951056516295153572116439333379382143405698634);
45 void fftw_hc2hc_forward_5(fftw_real
*A
, const fftw_complex
*W
, int iostride
, int m
, int dist
)
51 Y
= A
+ (5 * iostride
);
61 ASSERT_ALIGNED_DOUBLE();
68 ASSERT_ALIGNED_DOUBLE();
69 tmp61
= X
[4 * iostride
];
71 tmp67
= tmp62
+ tmp61
;
72 tmp64
= X
[2 * iostride
];
73 tmp65
= X
[3 * iostride
];
74 tmp68
= tmp64
+ tmp65
;
75 tmp63
= tmp61
- tmp62
;
76 tmp71
= tmp67
+ tmp68
;
77 tmp66
= tmp64
- tmp65
;
79 Y
[-iostride
] = (K951056516
* tmp63
) - (K587785252
* tmp66
);
80 Y
[-2 * iostride
] = (K587785252
* tmp63
) + (K951056516
* tmp66
);
82 tmp69
= K559016994
* (tmp67
- tmp68
);
83 tmp72
= tmp70
- (K250000000
* tmp71
);
84 X
[iostride
] = tmp69
+ tmp72
;
85 X
[2 * iostride
] = tmp72
- tmp69
;
89 for (i
= 2; i
< m
; i
= i
+ 2, X
= X
+ dist
, Y
= Y
- dist
, W
= W
+ 4) {
102 ASSERT_ALIGNED_DOUBLE();
104 tmp52
= Y
[-4 * iostride
];
114 ASSERT_ALIGNED_DOUBLE();
120 ASSERT_ALIGNED_DOUBLE();
122 tmp17
= Y
[-3 * iostride
];
125 tmp18
= (tmp14
* tmp15
) - (tmp16
* tmp17
);
126 tmp40
= (tmp16
* tmp15
) + (tmp14
* tmp17
);
133 ASSERT_ALIGNED_DOUBLE();
134 tmp31
= X
[3 * iostride
];
135 tmp33
= Y
[-iostride
];
138 tmp34
= (tmp30
* tmp31
) - (tmp32
* tmp33
);
139 tmp44
= (tmp32
* tmp31
) + (tmp30
* tmp33
);
146 ASSERT_ALIGNED_DOUBLE();
147 tmp20
= X
[4 * iostride
];
151 tmp23
= (tmp19
* tmp20
) - (tmp21
* tmp22
);
152 tmp41
= (tmp21
* tmp20
) + (tmp19
* tmp22
);
159 ASSERT_ALIGNED_DOUBLE();
160 tmp26
= X
[2 * iostride
];
161 tmp28
= Y
[-2 * iostride
];
164 tmp29
= (tmp25
* tmp26
) - (tmp27
* tmp28
);
165 tmp43
= (tmp27
* tmp26
) + (tmp25
* tmp28
);
167 tmp42
= tmp40
- tmp41
;
168 tmp45
= tmp43
- tmp44
;
169 tmp49
= tmp40
+ tmp41
;
170 tmp50
= tmp43
+ tmp44
;
171 tmp51
= tmp49
+ tmp50
;
172 tmp54
= tmp29
- tmp34
;
173 tmp53
= tmp18
- tmp23
;
174 tmp24
= tmp18
+ tmp23
;
175 tmp35
= tmp29
+ tmp34
;
176 tmp36
= tmp24
+ tmp35
;
178 X
[0] = tmp13
+ tmp36
;
186 ASSERT_ALIGNED_DOUBLE();
187 tmp46
= (K951056516
* tmp42
) + (K587785252
* tmp45
);
188 tmp48
= (K951056516
* tmp45
) - (K587785252
* tmp42
);
189 tmp37
= K559016994
* (tmp24
- tmp35
);
190 tmp38
= tmp13
- (K250000000
* tmp36
);
191 tmp39
= tmp37
+ tmp38
;
192 tmp47
= tmp38
- tmp37
;
193 Y
[-4 * iostride
] = tmp39
- tmp46
;
194 X
[iostride
] = tmp39
+ tmp46
;
195 X
[2 * iostride
] = tmp47
- tmp48
;
196 Y
[-3 * iostride
] = tmp47
+ tmp48
;
198 Y
[0] = tmp51
+ tmp52
;
206 ASSERT_ALIGNED_DOUBLE();
207 tmp55
= (K951056516
* tmp53
) + (K587785252
* tmp54
);
208 tmp60
= (K951056516
* tmp54
) - (K587785252
* tmp53
);
209 tmp56
= K559016994
* (tmp49
- tmp50
);
210 tmp57
= tmp52
- (K250000000
* tmp51
);
211 tmp58
= tmp56
+ tmp57
;
212 tmp59
= tmp57
- tmp56
;
213 X
[4 * iostride
] = -(tmp55
+ tmp58
);
214 Y
[-iostride
] = tmp58
- tmp55
;
215 X
[3 * iostride
] = -(tmp59
- tmp60
);
216 Y
[-2 * iostride
] = tmp60
+ tmp59
;
228 ASSERT_ALIGNED_DOUBLE();
235 ASSERT_ALIGNED_DOUBLE();
236 tmp1
= X
[2 * iostride
];
237 tmp2
= X
[3 * iostride
];
239 tmp4
= X
[4 * iostride
];
246 X
[2 * iostride
] = tmp8
+ tmp9
;
247 tmp7
= K559016994
* (tmp3
- tmp6
);
248 tmp10
= tmp8
- (K250000000
* tmp9
);
250 X
[iostride
] = tmp10
- tmp7
;
251 Y
[0] = -((K951056516
* tmp11
) + (K587785252
* tmp12
));
252 Y
[-iostride
] = -((K951056516
* tmp12
) - (K587785252
* tmp11
));
256 static const int twiddle_order
[] =
258 fftw_codelet_desc fftw_hc2hc_forward_5_desc
=
260 "fftw_hc2hc_forward_5",
261 (void (*)()) fftw_hc2hc_forward_5
,