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:18 EDT 1999 */
26 /* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -twiddle 3 */
29 * This function contains 16 FP additions, 12 FP multiplications,
30 * (or, 10 additions, 6 multiplications, 6 fused multiply/add),
31 * 14 stack variables, and 12 memory accesses
33 static const fftw_real K866025403
= FFTW_KONST(+0.866025403784438646763723170752936183471402627);
34 static const fftw_real K500000000
= FFTW_KONST(+0.500000000000000000000000000000000000000000000);
43 void fftw_twiddle_3(fftw_complex
*A
, const fftw_complex
*W
, int iostride
, int m
, int dist
)
48 for (i
= m
; i
> 0; i
= i
- 1, inout
= inout
+ dist
, W
= W
+ 2) {
57 ASSERT_ALIGNED_DOUBLE();
58 tmp1
= c_re(inout
[0]);
59 tmp18
= c_im(inout
[0]);
65 ASSERT_ALIGNED_DOUBLE();
66 tmp3
= c_re(inout
[iostride
]);
67 tmp5
= c_im(inout
[iostride
]);
70 tmp6
= (tmp2
* tmp3
) - (tmp4
* tmp5
);
71 tmp14
= (tmp4
* tmp3
) + (tmp2
* tmp5
);
78 ASSERT_ALIGNED_DOUBLE();
79 tmp8
= c_re(inout
[2 * iostride
]);
80 tmp10
= c_im(inout
[2 * iostride
]);
83 tmp11
= (tmp7
* tmp8
) - (tmp9
* tmp10
);
84 tmp15
= (tmp9
* tmp8
) + (tmp7
* tmp10
);
87 tmp17
= tmp14
+ tmp15
;
93 ASSERT_ALIGNED_DOUBLE();
94 c_re(inout
[0]) = tmp1
+ tmp12
;
95 tmp13
= tmp1
- (K500000000
* tmp12
);
96 tmp16
= K866025403
* (tmp14
- tmp15
);
97 c_re(inout
[2 * iostride
]) = tmp13
- tmp16
;
98 c_re(inout
[iostride
]) = tmp13
+ tmp16
;
99 c_im(inout
[0]) = tmp17
+ tmp18
;
100 tmp19
= K866025403
* (tmp11
- tmp6
);
101 tmp20
= tmp18
- (K500000000
* tmp17
);
102 c_im(inout
[iostride
]) = tmp19
+ tmp20
;
103 c_im(inout
[2 * iostride
]) = tmp20
- tmp19
;
108 static const int twiddle_order
[] =
110 fftw_codelet_desc fftw_twiddle_3_desc
=
113 (void (*)()) fftw_twiddle_3
,