Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 pj 1
/*
2
 * Copyright (c) 1997-1999 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 Tue May 18 13:55:58 EDT 1999 */
22
 
23
#include <ports/fftw-int.h>
24
#include <ports/fftw.h>
25
 
26
/* Generated by: ./genfft -magic-alignment-check -magic-twiddle-load-all -magic-variables 4 -magic-loopi -hc2hc-backward 3 */
27
 
28
/*
29
 * This function contains 24 FP additions, 16 FP multiplications,
30
 * (or, 16 additions, 8 multiplications, 8 fused multiply/add),
31
 * 15 stack variables, and 24 memory accesses
32
 */
33
static const fftw_real K500000000 = FFTW_KONST(+0.500000000000000000000000000000000000000000000);
34
static const fftw_real K866025403 = FFTW_KONST(+0.866025403784438646763723170752936183471402627);
35
static const fftw_real K2_000000000 = FFTW_KONST(+2.000000000000000000000000000000000000000000000);
36
static const fftw_real K1_732050807 = FFTW_KONST(+1.732050807568877293527446341505872366942805254);
37
 
38
/*
39
 * Generator Id's :
40
 * $Id: fhb_3.c,v 1.1.1.1 2002-03-29 14:12:57 pj Exp $
41
 * $Id: fhb_3.c,v 1.1.1.1 2002-03-29 14:12:57 pj Exp $
42
 * $Id: fhb_3.c,v 1.1.1.1 2002-03-29 14:12:57 pj Exp $
43
 */
44
 
45
void fftw_hc2hc_backward_3(fftw_real *A, const fftw_complex *W, int iostride, int m, int dist)
46
{
47
     int i;
48
     fftw_real *X;
49
     fftw_real *Y;
50
     X = A;
51
     Y = A + (3 * iostride);
52
     {
53
          fftw_real tmp30;
54
          fftw_real tmp26;
55
          fftw_real tmp27;
56
          fftw_real tmp28;
57
          fftw_real tmp29;
58
          ASSERT_ALIGNED_DOUBLE();
59
          tmp29 = Y[-iostride];
60
          tmp30 = K1_732050807 * tmp29;
61
          tmp26 = X[0];
62
          tmp27 = X[iostride];
63
          tmp28 = tmp26 - tmp27;
64
          X[0] = tmp26 + (K2_000000000 * tmp27);
65
          X[iostride] = tmp28 - tmp30;
66
          X[2 * iostride] = tmp28 + tmp30;
67
     }
68
     X = X + dist;
69
     Y = Y - dist;
70
     for (i = 2; i < m; i = i + 2, X = X + dist, Y = Y - dist, W = W + 2) {
71
          fftw_real tmp6;
72
          fftw_real tmp9;
73
          fftw_real tmp15;
74
          fftw_real tmp19;
75
          fftw_real tmp10;
76
          fftw_real tmp13;
77
          fftw_real tmp16;
78
          fftw_real tmp20;
79
          ASSERT_ALIGNED_DOUBLE();
80
          {
81
               fftw_real tmp7;
82
               fftw_real tmp8;
83
               fftw_real tmp11;
84
               fftw_real tmp12;
85
               ASSERT_ALIGNED_DOUBLE();
86
               tmp6 = X[0];
87
               tmp7 = X[iostride];
88
               tmp8 = Y[-2 * iostride];
89
               tmp9 = tmp7 + tmp8;
90
               tmp15 = K866025403 * (tmp7 - tmp8);
91
               tmp19 = tmp6 - (K500000000 * tmp9);
92
               tmp10 = Y[0];
93
               tmp11 = Y[-iostride];
94
               tmp12 = X[2 * iostride];
95
               tmp13 = tmp11 - tmp12;
96
               tmp16 = tmp10 - (K500000000 * tmp13);
97
               tmp20 = K866025403 * (tmp11 + tmp12);
98
          }
99
          X[0] = tmp6 + tmp9;
100
          {
101
               fftw_real tmp23;
102
               fftw_real tmp25;
103
               fftw_real tmp22;
104
               fftw_real tmp24;
105
               ASSERT_ALIGNED_DOUBLE();
106
               tmp23 = tmp16 - tmp15;
107
               tmp25 = tmp19 + tmp20;
108
               tmp22 = c_re(W[1]);
109
               tmp24 = c_im(W[1]);
110
               Y[0] = (tmp22 * tmp23) - (tmp24 * tmp25);
111
               X[2 * iostride] = (tmp24 * tmp23) + (tmp22 * tmp25);
112
          }
113
          Y[-2 * iostride] = tmp10 + tmp13;
114
          {
115
               fftw_real tmp17;
116
               fftw_real tmp21;
117
               fftw_real tmp14;
118
               fftw_real tmp18;
119
               ASSERT_ALIGNED_DOUBLE();
120
               tmp17 = tmp15 + tmp16;
121
               tmp21 = tmp19 - tmp20;
122
               tmp14 = c_re(W[0]);
123
               tmp18 = c_im(W[0]);
124
               Y[-iostride] = (tmp14 * tmp17) - (tmp18 * tmp21);
125
               X[iostride] = (tmp18 * tmp17) + (tmp14 * tmp21);
126
          }
127
     }
128
     if (i == m) {
129
          fftw_real tmp5;
130
          fftw_real tmp1;
131
          fftw_real tmp2;
132
          fftw_real tmp3;
133
          fftw_real tmp4;
134
          ASSERT_ALIGNED_DOUBLE();
135
          tmp4 = Y[0];
136
          tmp5 = K1_732050807 * tmp4;
137
          tmp1 = X[iostride];
138
          tmp2 = X[0];
139
          tmp3 = tmp2 - tmp1;
140
          X[0] = tmp1 + (K2_000000000 * tmp2);
141
          X[2 * iostride] = -(tmp3 + tmp5);
142
          X[iostride] = tmp3 - tmp5;
143
     }
144
}
145
 
146
static const int twiddle_order[] =
147
{1, 2};
148
fftw_codelet_desc fftw_hc2hc_backward_3_desc =
149
{
150
     "fftw_hc2hc_backward_3",
151
     (void (*)()) fftw_hc2hc_backward_3,
152
     3,
153
     FFTW_BACKWARD,
154
     FFTW_HC2HC,
155
     80,
156
     2,
157
     twiddle_order,
158
};