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:59 EDT 1999 */
26 /* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -hc2hc-backward 5 */
29 * This function contains 64 FP additions, 42 FP multiplications,
30 * (or, 42 additions, 20 multiplications, 22 fused multiply/add),
31 * 25 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 K951056516
= FFTW_KONST(+0.951056516295153572116439333379382143405698634);
36 static const fftw_real K587785252
= FFTW_KONST(+0.587785252292473129168705954639072768597652438);
37 static const fftw_real K2_000000000
= FFTW_KONST(+2.000000000000000000000000000000000000000000000);
38 static const fftw_real K500000000
= FFTW_KONST(+0.500000000000000000000000000000000000000000000);
39 static const fftw_real K1_118033988
= FFTW_KONST(+1.118033988749894848204586834365638117720309180);
40 static const fftw_real K1_175570504
= FFTW_KONST(+1.175570504584946258337411909278145537195304875);
41 static const fftw_real K1_902113032
= FFTW_KONST(+1.902113032590307144232878666758764286811397268);
50 void fftw_hc2hc_backward_5(fftw_real
*A
, const fftw_complex
*W
, int iostride
, int m
, int dist
)
56 Y
= A
+ (5 * iostride
);
66 ASSERT_ALIGNED_DOUBLE();
72 ASSERT_ALIGNED_DOUBLE();
74 tmp69
= Y
[-2 * iostride
];
75 tmp70
= (K1_902113032
* tmp68
) + (K1_175570504
* tmp69
);
76 tmp72
= (K1_902113032
* tmp69
) - (K1_175570504
* tmp68
);
79 tmp63
= X
[2 * iostride
];
80 tmp64
= tmp62
+ tmp63
;
81 tmp65
= K1_118033988
* (tmp62
- tmp63
);
82 tmp66
= tmp61
- (K500000000
* tmp64
);
84 X
[0] = tmp61
+ (K2_000000000
* tmp64
);
85 tmp71
= tmp66
- tmp65
;
86 X
[3 * iostride
] = tmp71
- tmp72
;
87 X
[2 * iostride
] = tmp71
+ tmp72
;
88 tmp67
= tmp65
+ tmp66
;
89 X
[4 * iostride
] = tmp67
+ tmp70
;
90 X
[iostride
] = tmp67
- tmp70
;
94 for (i
= 2; i
< m
; i
= i
+ 2, X
= X
+ dist
, Y
= Y
- dist
, W
= W
+ 4) {
107 ASSERT_ALIGNED_DOUBLE();
113 ASSERT_ALIGNED_DOUBLE();
120 ASSERT_ALIGNED_DOUBLE();
121 tmp17
= X
[2 * iostride
];
122 tmp18
= Y
[-3 * iostride
];
123 tmp19
= tmp17
+ tmp18
;
124 tmp31
= tmp17
- tmp18
;
126 tmp15
= Y
[-4 * iostride
];
127 tmp16
= tmp14
+ tmp15
;
128 tmp30
= tmp14
- tmp15
;
130 tmp32
= (K587785252
* tmp30
) - (K951056516
* tmp31
);
131 tmp50
= (K951056516
* tmp30
) + (K587785252
* tmp31
);
132 tmp39
= K559016994
* (tmp16
- tmp19
);
133 tmp20
= tmp16
+ tmp19
;
134 tmp38
= tmp13
- (K250000000
* tmp20
);
141 ASSERT_ALIGNED_DOUBLE();
148 ASSERT_ALIGNED_DOUBLE();
149 tmp25
= Y
[-2 * iostride
];
150 tmp26
= X
[3 * iostride
];
151 tmp27
= tmp25
- tmp26
;
152 tmp42
= tmp25
+ tmp26
;
153 tmp22
= Y
[-iostride
];
154 tmp23
= X
[4 * iostride
];
155 tmp24
= tmp22
- tmp23
;
156 tmp41
= tmp22
+ tmp23
;
158 tmp34
= K559016994
* (tmp24
- tmp27
);
159 tmp28
= tmp24
+ tmp27
;
160 tmp33
= tmp21
- (K250000000
* tmp28
);
161 tmp43
= (K587785252
* tmp41
) - (K951056516
* tmp42
);
162 tmp55
= (K951056516
* tmp41
) + (K587785252
* tmp42
);
164 X
[0] = tmp13
+ tmp20
;
172 ASSERT_ALIGNED_DOUBLE();
173 tmp51
= tmp34
+ tmp33
;
174 tmp52
= tmp50
+ tmp51
;
175 tmp58
= tmp51
- tmp50
;
176 tmp54
= tmp39
+ tmp38
;
177 tmp56
= tmp54
- tmp55
;
178 tmp60
= tmp54
+ tmp55
;
184 ASSERT_ALIGNED_DOUBLE();
187 Y
[-3 * iostride
] = (tmp49
* tmp52
) - (tmp53
* tmp56
);
188 X
[iostride
] = (tmp53
* tmp52
) + (tmp49
* tmp56
);
191 Y
[0] = (tmp57
* tmp58
) - (tmp59
* tmp60
);
192 X
[4 * iostride
] = (tmp59
* tmp58
) + (tmp57
* tmp60
);
195 Y
[-4 * iostride
] = tmp21
+ tmp28
;
203 ASSERT_ALIGNED_DOUBLE();
204 tmp35
= tmp33
- tmp34
;
205 tmp36
= tmp32
+ tmp35
;
206 tmp46
= tmp35
- tmp32
;
207 tmp40
= tmp38
- tmp39
;
208 tmp44
= tmp40
- tmp43
;
209 tmp48
= tmp40
+ tmp43
;
215 ASSERT_ALIGNED_DOUBLE();
218 Y
[-2 * iostride
] = (tmp29
* tmp36
) - (tmp37
* tmp44
);
219 X
[2 * iostride
] = (tmp37
* tmp36
) + (tmp29
* tmp44
);
222 Y
[-iostride
] = (tmp45
* tmp46
) - (tmp47
* tmp48
);
223 X
[3 * iostride
] = (tmp47
* tmp46
) + (tmp45
* tmp48
);
236 ASSERT_ALIGNED_DOUBLE();
242 ASSERT_ALIGNED_DOUBLE();
245 tmp10
= (K1_902113032
* tmp8
) + (K1_175570504
* tmp9
);
246 tmp12
= (K1_175570504
* tmp8
) - (K1_902113032
* tmp9
);
247 tmp1
= X
[2 * iostride
];
251 tmp5
= (K500000000
* tmp4
) - tmp1
;
252 tmp6
= K1_118033988
* (tmp3
- tmp2
);
254 X
[0] = tmp1
+ (K2_000000000
* tmp4
);
256 X
[2 * iostride
] = tmp11
+ tmp12
;
257 X
[3 * iostride
] = tmp12
- tmp11
;
259 X
[iostride
] = tmp7
- tmp10
;
260 X
[4 * iostride
] = -(tmp7
+ tmp10
);
264 static const int twiddle_order
[] =
266 fftw_codelet_desc fftw_hc2hc_backward_5_desc
=
268 "fftw_hc2hc_backward_5",
269 (void (*)()) fftw_hc2hc_backward_5
,