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:07:15 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 -hc2real 14 */
27 
28 /*
29  * This function contains 62 FP additions, 38 FP multiplications,
30  * (or, 60 additions, 36 multiplications, 2 fused multiply/add),
31  * 24 stack variables, and 28 memory accesses
32  */
33 static const fftw_real K445041867 =
34 FFTW_KONST(+0.445041867912628808577805128993589518932711138);
35 static const fftw_real K1_801937735 =
36 FFTW_KONST(+1.801937735804838252472204639014890102331838324);
37 static const fftw_real K1_246979603 =
38 FFTW_KONST(+1.246979603717467061050009768008479621264549462);
39 static const fftw_real K867767478 =
40 FFTW_KONST(+0.867767478235116240951536665696717509219981456);
41 static const fftw_real K1_949855824 =
42 FFTW_KONST(+1.949855824363647214036263365987862434465571601);
43 static const fftw_real K1_563662964 =
44 FFTW_KONST(+1.563662964936059617416889053348115500464669037);
45 static const fftw_real K2_000000000 =
46 FFTW_KONST(+2.000000000000000000000000000000000000000000000);
47 
48 /*
49  * Generator Id's :
50  * $Id: exprdag.ml,v 1.43 2003/03/16 23:43:46 stevenj Exp $
51  * $Id: fft.ml,v 1.44 2003/03/16 23:43:46 stevenj Exp $
52  * $Id: to_c.ml,v 1.26 2003/03/16 23:43:46 stevenj Exp $
53  */
54 
fftw_hc2real_14(const fftw_real * real_input,const fftw_real * imag_input,fftw_real * output,int real_istride,int imag_istride,int ostride)55 void fftw_hc2real_14(const fftw_real *real_input,
56 		     const fftw_real *imag_input, fftw_real *output,
57 		     int real_istride, int imag_istride, int ostride)
58 {
59      fftw_real tmp3;
60      fftw_real tmp13;
61      fftw_real tmp6;
62      fftw_real tmp14;
63      fftw_real tmp26;
64      fftw_real tmp35;
65      fftw_real tmp23;
66      fftw_real tmp34;
67      fftw_real tmp12;
68      fftw_real tmp16;
69      fftw_real tmp20;
70      fftw_real tmp33;
71      fftw_real tmp9;
72      fftw_real tmp15;
73      fftw_real tmp1;
74      fftw_real tmp2;
75      ASSERT_ALIGNED_DOUBLE;
76      tmp1 = real_input[0];
77      tmp2 = real_input[7 * real_istride];
78      tmp3 = tmp1 - tmp2;
79      tmp13 = tmp1 + tmp2;
80      {
81 	  fftw_real tmp4;
82 	  fftw_real tmp5;
83 	  fftw_real tmp24;
84 	  fftw_real tmp25;
85 	  ASSERT_ALIGNED_DOUBLE;
86 	  tmp4 = real_input[2 * real_istride];
87 	  tmp5 = real_input[5 * real_istride];
88 	  tmp6 = tmp4 - tmp5;
89 	  tmp14 = tmp4 + tmp5;
90 	  tmp24 = imag_input[2 * imag_istride];
91 	  tmp25 = imag_input[5 * imag_istride];
92 	  tmp26 = tmp24 - tmp25;
93 	  tmp35 = tmp24 + tmp25;
94      }
95      {
96 	  fftw_real tmp21;
97 	  fftw_real tmp22;
98 	  fftw_real tmp10;
99 	  fftw_real tmp11;
100 	  ASSERT_ALIGNED_DOUBLE;
101 	  tmp21 = imag_input[6 * imag_istride];
102 	  tmp22 = imag_input[imag_istride];
103 	  tmp23 = tmp21 - tmp22;
104 	  tmp34 = tmp21 + tmp22;
105 	  tmp10 = real_input[6 * real_istride];
106 	  tmp11 = real_input[real_istride];
107 	  tmp12 = tmp10 - tmp11;
108 	  tmp16 = tmp10 + tmp11;
109      }
110      {
111 	  fftw_real tmp18;
112 	  fftw_real tmp19;
113 	  fftw_real tmp7;
114 	  fftw_real tmp8;
115 	  ASSERT_ALIGNED_DOUBLE;
116 	  tmp18 = imag_input[4 * imag_istride];
117 	  tmp19 = imag_input[3 * imag_istride];
118 	  tmp20 = tmp18 - tmp19;
119 	  tmp33 = tmp18 + tmp19;
120 	  tmp7 = real_input[4 * real_istride];
121 	  tmp8 = real_input[3 * real_istride];
122 	  tmp9 = tmp7 - tmp8;
123 	  tmp15 = tmp7 + tmp8;
124      }
125      {
126 	  fftw_real tmp38;
127 	  fftw_real tmp37;
128 	  fftw_real tmp29;
129 	  fftw_real tmp28;
130 	  ASSERT_ALIGNED_DOUBLE;
131 	  output[7 * ostride] =
132 	      tmp3 + (K2_000000000 * (tmp6 + tmp9 + tmp12));
133 	  tmp38 =
134 	      (K1_563662964 * tmp35) + (K1_949855824 * tmp33) +
135 	      (K867767478 * tmp34);
136 	  tmp37 =
137 	      tmp3 + (K1_246979603 * tmp6) - (K1_801937735 * tmp12) -
138 	      (K445041867 * tmp9);
139 	  output[ostride] = tmp37 - tmp38;
140 	  output[13 * ostride] = tmp37 + tmp38;
141 	  {
142 	       fftw_real tmp40;
143 	       fftw_real tmp39;
144 	       fftw_real tmp36;
145 	       fftw_real tmp32;
146 	       ASSERT_ALIGNED_DOUBLE;
147 	       tmp40 =
148 		   (K867767478 * tmp33) + (K1_563662964 * tmp34) -
149 		   (K1_949855824 * tmp35);
150 	       tmp39 =
151 		   tmp3 + (K1_246979603 * tmp12) - (K1_801937735 * tmp9) -
152 		   (K445041867 * tmp6);
153 	       output[5 * ostride] = tmp39 - tmp40;
154 	       output[9 * ostride] = tmp39 + tmp40;
155 	       tmp36 =
156 		   (K1_563662964 * tmp33) - (K1_949855824 * tmp34) -
157 		   (K867767478 * tmp35);
158 	       tmp32 =
159 		   tmp3 + (K1_246979603 * tmp9) - (K445041867 * tmp12) -
160 		   (K1_801937735 * tmp6);
161 	       output[11 * ostride] = tmp32 - tmp36;
162 	       output[3 * ostride] = tmp32 + tmp36;
163 	  }
164 	  output[0] = tmp13 + (K2_000000000 * (tmp14 + tmp15 + tmp16));
165 	  tmp29 =
166 	      (K867767478 * tmp20) + (K1_563662964 * tmp23) -
167 	      (K1_949855824 * tmp26);
168 	  tmp28 =
169 	      tmp13 + (K1_246979603 * tmp16) - (K1_801937735 * tmp15) -
170 	      (K445041867 * tmp14);
171 	  output[12 * ostride] = tmp28 - tmp29;
172 	  output[2 * ostride] = tmp28 + tmp29;
173 	  {
174 	       fftw_real tmp31;
175 	       fftw_real tmp30;
176 	       fftw_real tmp27;
177 	       fftw_real tmp17;
178 	       ASSERT_ALIGNED_DOUBLE;
179 	       tmp31 =
180 		   (K1_563662964 * tmp26) + (K1_949855824 * tmp20) +
181 		   (K867767478 * tmp23);
182 	       tmp30 =
183 		   tmp13 + (K1_246979603 * tmp14) -
184 		   (K1_801937735 * tmp16) - (K445041867 * tmp15);
185 	       output[8 * ostride] = tmp30 - tmp31;
186 	       output[6 * ostride] = tmp30 + tmp31;
187 	       tmp27 =
188 		   (K1_563662964 * tmp20) - (K1_949855824 * tmp23) -
189 		   (K867767478 * tmp26);
190 	       tmp17 =
191 		   tmp13 + (K1_246979603 * tmp15) - (K445041867 * tmp16) -
192 		   (K1_801937735 * tmp14);
193 	       output[4 * ostride] = tmp17 - tmp27;
194 	       output[10 * ostride] = tmp17 + tmp27;
195 	  }
196      }
197 }
198 
199 fftw_codelet_desc fftw_hc2real_14_desc = {
200      "fftw_hc2real_14",
201      (void (*)()) fftw_hc2real_14,
202      14,
203      FFTW_BACKWARD,
204      FFTW_HC2REAL,
205      323,
206      0,
207      (const int *) 0,
208 };
209