Coverage Report

Created: 2026-02-14 07:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/proc/self/cwd/libfaad/cfft.c
Line
Count
Source
1
/*
2
** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3
** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
4
**
5
** This program is free software; you can redistribute it and/or modify
6
** it under the terms of the GNU General Public License as published by
7
** the Free Software Foundation; either version 2 of the License, or
8
** (at your option) any later version.
9
**
10
** This program is distributed in the hope that it will be useful,
11
** but WITHOUT ANY WARRANTY; without even the implied warranty of
12
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
** GNU General Public License for more details.
14
**
15
** You should have received a copy of the GNU General Public License
16
** along with this program; if not, write to the Free Software
17
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
**
19
** Any non-GPL usage of this software or parts of this software is strictly
20
** forbidden.
21
**
22
** The "appropriate copyright message" mentioned in section 2c of the GPLv2
23
** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
24
**
25
** Commercial non-GPL licensing of this software is possible.
26
** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
27
**
28
** $Id: cfft.c,v 1.35 2007/11/01 12:33:29 menno Exp $
29
**/
30
31
/*
32
 * Algorithmically based on Fortran-77 FFTPACK
33
 * by Paul N. Swarztrauber(Version 4, 1985).
34
 *
35
 * Does even sized fft only
36
 */
37
38
/* isign is +1 for backward and -1 for forward transforms */
39
40
#include "common.h"
41
#include "structs.h"
42
43
#include <stdlib.h>
44
45
#include "cfft.h"
46
#include "cfft_tab.h"
47
48
49
/* static function declarations */
50
static void passf2pos(const uint16_t ido, const uint16_t l1, const complex_t *cc,
51
                      complex_t *ch, const complex_t *wa);
52
static void passf2neg(const uint16_t ido, const uint16_t l1, const complex_t *cc,
53
                      complex_t *ch, const complex_t *wa);
54
static void passf3(const uint16_t ido, const uint16_t l1, const complex_t *cc,
55
                   complex_t *ch, const complex_t *wa1, const complex_t *wa2, const int8_t isign);
56
static void passf4pos(const uint16_t ido, const uint16_t l1, const complex_t *cc, complex_t *ch,
57
                      const complex_t *wa1, const complex_t *wa2, const complex_t *wa3);
58
static void passf4neg(const uint16_t ido, const uint16_t l1, const complex_t *cc, complex_t *ch,
59
                      const complex_t *wa1, const complex_t *wa2, const complex_t *wa3);
60
static void passf5(const uint16_t ido, const uint16_t l1, const complex_t *cc, complex_t *ch,
61
                   const complex_t *wa1, const complex_t *wa2, const complex_t *wa3,
62
                   const complex_t *wa4, const int8_t isign);
63
static void cffti1(uint16_t n, complex_t *wa, uint16_t *ifac);
64
65
66
/*----------------------------------------------------------------------
67
   passf2, passf3, passf4, passf5. Complex FFT passes fwd and bwd.
68
  ----------------------------------------------------------------------*/
69
70
static void passf2pos(const uint16_t ido, const uint16_t l1, const complex_t *cc,
71
                      complex_t *ch, const complex_t *wa)
72
442k
{
73
442k
    uint16_t i, k, ah, ac;
74
75
442k
    if (ido == 1)
76
0
    {
77
0
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
78
        // TODO: remove this code once fuzzer proves it is totally unreahable
79
        // For supported frame lengths that have odd number of factor 2 it is
80
        // never the last factor; consequently `ido` should never be 1.
81
0
        __builtin_trap();
82
        /*
83
#endif
84
        for (k = 0; k < l1; k++)
85
        {
86
            ah = 2*k;
87
            ac = 4*k;
88
89
            RE(ch[ah])    = RE(cc[ac]) + RE(cc[ac+1]);
90
            RE(ch[ah+l1]) = RE(cc[ac]) - RE(cc[ac+1]);
91
            IM(ch[ah])    = IM(cc[ac]) + IM(cc[ac+1]);
92
            IM(ch[ah+l1]) = IM(cc[ac]) - IM(cc[ac+1]);
93
        }
94
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
95
        */
96
0
#endif
97
442k
    } else {
98
885k
        for (k = 0; k < l1; k++)
99
442k
        {
100
442k
            ah = k*ido;
101
442k
            ac = 2*k*ido;
102
103
112M
            for (i = 0; i < ido; i++)
104
112M
            {
105
112M
                complex_t t2;
106
107
112M
                RE(ch[ah+i]) = RE(cc[ac+i]) + RE(cc[ac+i+ido]);
108
112M
                RE(t2)       = RE(cc[ac+i]) - RE(cc[ac+i+ido]);
109
110
112M
                IM(ch[ah+i]) = IM(cc[ac+i]) + IM(cc[ac+i+ido]);
111
112M
                IM(t2)       = IM(cc[ac+i]) - IM(cc[ac+i+ido]);
112
113
112M
#if 1
114
112M
                ComplexMult(&IM(ch[ah+i+l1*ido]), &RE(ch[ah+i+l1*ido]),
115
112M
                    IM(t2), RE(t2), RE(wa[i]), IM(wa[i]));
116
#else
117
                ComplexMult(&RE(ch[ah+i+l1*ido]), &IM(ch[ah+i+l1*ido]),
118
                    RE(t2), IM(t2), RE(wa[i]), IM(wa[i]));
119
#endif
120
112M
            }
121
442k
        }
122
442k
    }
123
442k
}
124
125
static void passf2neg(const uint16_t ido, const uint16_t l1, const complex_t *cc,
126
                      complex_t *ch, const complex_t *wa)
127
10.0k
{
128
10.0k
    uint16_t i, k, ah, ac;
129
130
10.0k
    if (ido == 1)
131
0
    {
132
0
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
133
        // TODO: remove this code once fuzzer proves it is totally unreahable
134
        // For supported frame lengths that have odd number of factor 2 it is
135
        // never the last factor; consequently `ido` should never be 1.
136
0
        __builtin_trap();
137
        /*
138
#endif
139
        for (k = 0; k < l1; k++)
140
        {
141
            ah = 2*k;
142
            ac = 4*k;
143
144
            RE(ch[ah])    = RE(cc[ac]) + RE(cc[ac+1]);
145
            RE(ch[ah+l1]) = RE(cc[ac]) - RE(cc[ac+1]);
146
            IM(ch[ah])    = IM(cc[ac]) + IM(cc[ac+1]);
147
            IM(ch[ah+l1]) = IM(cc[ac]) - IM(cc[ac+1]);
148
        }
149
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
150
        */
151
0
#endif
152
10.0k
    } else {
153
20.0k
        for (k = 0; k < l1; k++)
154
10.0k
        {
155
10.0k
            ah = k*ido;
156
10.0k
            ac = 2*k*ido;
157
158
2.48M
            for (i = 0; i < ido; i++)
159
2.47M
            {
160
2.47M
                complex_t t2;
161
162
2.47M
                RE(ch[ah+i]) = RE(cc[ac+i]) + RE(cc[ac+i+ido]);
163
2.47M
                RE(t2)       = RE(cc[ac+i]) - RE(cc[ac+i+ido]);
164
165
2.47M
                IM(ch[ah+i]) = IM(cc[ac+i]) + IM(cc[ac+i+ido]);
166
2.47M
                IM(t2)       = IM(cc[ac+i]) - IM(cc[ac+i+ido]);
167
168
2.47M
#if 1
169
2.47M
                ComplexMult(&RE(ch[ah+i+l1*ido]), &IM(ch[ah+i+l1*ido]),
170
2.47M
                    RE(t2), IM(t2), RE(wa[i]), IM(wa[i]));
171
#else
172
                ComplexMult(&IM(ch[ah+i+l1*ido]), &RE(ch[ah+i+l1*ido]),
173
                    IM(t2), RE(t2), RE(wa[i]), IM(wa[i]));
174
#endif
175
2.47M
            }
176
10.0k
        }
177
10.0k
    }
178
10.0k
}
179
180
181
static void passf3(const uint16_t ido, const uint16_t l1, const complex_t *cc,
182
                   complex_t *ch, const complex_t *wa1, const complex_t *wa2,
183
                   const int8_t isign)
184
166k
{
185
166k
    static real_t taur = FRAC_CONST(-0.5);
186
166k
    static real_t taui = FRAC_CONST(0.866025403784439);
187
166k
    uint16_t i, k, ac, ah;
188
166k
    complex_t c2, c3, d2, d3, t2;
189
190
166k
    if (ido == 1)
191
0
    {
192
0
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
193
        // TODO: remove this code once fuzzer proves it is totally unreahable
194
        // 3 is never the the biggest factor for supported frame lengths;
195
        // consequently `ido` should never be 1.
196
0
        __builtin_trap();
197
        /*
198
#endif
199
        if (isign == 1)
200
        {
201
            for (k = 0; k < l1; k++)
202
            {
203
                ac = 3*k+1;
204
                ah = k;
205
206
                RE(t2) = RE(cc[ac]) + RE(cc[ac+1]);
207
                IM(t2) = IM(cc[ac]) + IM(cc[ac+1]);
208
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),taur);
209
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),taur);
210
211
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2);
212
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2);
213
214
                RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+1])), taui);
215
                IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+1])), taui);
216
217
                RE(ch[ah+l1]) = RE(c2) - IM(c3);
218
                IM(ch[ah+l1]) = IM(c2) + RE(c3);
219
                RE(ch[ah+2*l1]) = RE(c2) + IM(c3);
220
                IM(ch[ah+2*l1]) = IM(c2) - RE(c3);
221
            }
222
        } else {
223
            for (k = 0; k < l1; k++)
224
            {
225
                ac = 3*k+1;
226
                ah = k;
227
228
                RE(t2) = RE(cc[ac]) + RE(cc[ac+1]);
229
                IM(t2) = IM(cc[ac]) + IM(cc[ac+1]);
230
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),taur);
231
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),taur);
232
233
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2);
234
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2);
235
236
                RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+1])), taui);
237
                IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+1])), taui);
238
239
                RE(ch[ah+l1]) = RE(c2) + IM(c3);
240
                IM(ch[ah+l1]) = IM(c2) - RE(c3);
241
                RE(ch[ah+2*l1]) = RE(c2) - IM(c3);
242
                IM(ch[ah+2*l1]) = IM(c2) + RE(c3);
243
            }
244
        }
245
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
246
        */
247
0
#endif
248
166k
    } else {
249
166k
        if (isign == 1)
250
160k
        {
251
393k
            for (k = 0; k < l1; k++)
252
232k
            {
253
13.6M
                for (i = 0; i < ido; i++)
254
13.4M
                {
255
13.4M
                    ac = i + (3*k+1)*ido;
256
13.4M
                    ah = i + k * ido;
257
258
13.4M
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+ido]);
259
13.4M
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),taur);
260
13.4M
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+ido]);
261
13.4M
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),taur);
262
263
13.4M
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2);
264
13.4M
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2);
265
266
13.4M
                    RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+ido])), taui);
267
13.4M
                    IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+ido])), taui);
268
269
13.4M
                    RE(d2) = RE(c2) - IM(c3);
270
13.4M
                    IM(d3) = IM(c2) - RE(c3);
271
13.4M
                    RE(d3) = RE(c2) + IM(c3);
272
13.4M
                    IM(d2) = IM(c2) + RE(c3);
273
274
13.4M
#if 1
275
13.4M
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
276
13.4M
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
277
13.4M
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
278
13.4M
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
279
#else
280
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
281
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
282
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
283
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
284
#endif
285
13.4M
                }
286
232k
            }
287
160k
        } else {
288
17.6k
            for (k = 0; k < l1; k++)
289
11.7k
            {
290
950k
                for (i = 0; i < ido; i++)
291
938k
                {
292
938k
                    ac = i + (3*k+1)*ido;
293
938k
                    ah = i + k * ido;
294
295
938k
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+ido]);
296
938k
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),taur);
297
938k
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+ido]);
298
938k
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),taur);
299
300
938k
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2);
301
938k
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2);
302
303
938k
                    RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+ido])), taui);
304
938k
                    IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+ido])), taui);
305
306
938k
                    RE(d2) = RE(c2) + IM(c3);
307
938k
                    IM(d3) = IM(c2) + RE(c3);
308
938k
                    RE(d3) = RE(c2) - IM(c3);
309
938k
                    IM(d2) = IM(c2) - RE(c3);
310
311
938k
#if 1
312
938k
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
313
938k
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
314
938k
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
315
938k
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
316
#else
317
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
318
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
319
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
320
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
321
#endif
322
938k
                }
323
11.7k
            }
324
5.95k
        }
325
166k
    }
326
166k
}
cfft.c:passf3
Line
Count
Source
184
69.8k
{
185
69.8k
    static real_t taur = FRAC_CONST(-0.5);
186
69.8k
    static real_t taui = FRAC_CONST(0.866025403784439);
187
69.8k
    uint16_t i, k, ac, ah;
188
69.8k
    complex_t c2, c3, d2, d3, t2;
189
190
69.8k
    if (ido == 1)
191
0
    {
192
0
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
193
        // TODO: remove this code once fuzzer proves it is totally unreahable
194
        // 3 is never the the biggest factor for supported frame lengths;
195
        // consequently `ido` should never be 1.
196
0
        __builtin_trap();
197
        /*
198
#endif
199
        if (isign == 1)
200
        {
201
            for (k = 0; k < l1; k++)
202
            {
203
                ac = 3*k+1;
204
                ah = k;
205
206
                RE(t2) = RE(cc[ac]) + RE(cc[ac+1]);
207
                IM(t2) = IM(cc[ac]) + IM(cc[ac+1]);
208
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),taur);
209
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),taur);
210
211
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2);
212
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2);
213
214
                RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+1])), taui);
215
                IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+1])), taui);
216
217
                RE(ch[ah+l1]) = RE(c2) - IM(c3);
218
                IM(ch[ah+l1]) = IM(c2) + RE(c3);
219
                RE(ch[ah+2*l1]) = RE(c2) + IM(c3);
220
                IM(ch[ah+2*l1]) = IM(c2) - RE(c3);
221
            }
222
        } else {
223
            for (k = 0; k < l1; k++)
224
            {
225
                ac = 3*k+1;
226
                ah = k;
227
228
                RE(t2) = RE(cc[ac]) + RE(cc[ac+1]);
229
                IM(t2) = IM(cc[ac]) + IM(cc[ac+1]);
230
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),taur);
231
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),taur);
232
233
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2);
234
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2);
235
236
                RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+1])), taui);
237
                IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+1])), taui);
238
239
                RE(ch[ah+l1]) = RE(c2) + IM(c3);
240
                IM(ch[ah+l1]) = IM(c2) - RE(c3);
241
                RE(ch[ah+2*l1]) = RE(c2) - IM(c3);
242
                IM(ch[ah+2*l1]) = IM(c2) + RE(c3);
243
            }
244
        }
245
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
246
        */
247
0
#endif
248
69.8k
    } else {
249
69.8k
        if (isign == 1)
250
66.6k
        {
251
163k
            for (k = 0; k < l1; k++)
252
96.5k
            {
253
5.67M
                for (i = 0; i < ido; i++)
254
5.58M
                {
255
5.58M
                    ac = i + (3*k+1)*ido;
256
5.58M
                    ah = i + k * ido;
257
258
5.58M
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+ido]);
259
5.58M
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),taur);
260
5.58M
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+ido]);
261
5.58M
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),taur);
262
263
5.58M
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2);
264
5.58M
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2);
265
266
5.58M
                    RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+ido])), taui);
267
5.58M
                    IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+ido])), taui);
268
269
5.58M
                    RE(d2) = RE(c2) - IM(c3);
270
5.58M
                    IM(d3) = IM(c2) - RE(c3);
271
5.58M
                    RE(d3) = RE(c2) + IM(c3);
272
5.58M
                    IM(d2) = IM(c2) + RE(c3);
273
274
5.58M
#if 1
275
5.58M
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
276
5.58M
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
277
5.58M
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
278
5.58M
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
279
#else
280
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
281
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
282
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
283
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
284
#endif
285
5.58M
                }
286
96.5k
            }
287
66.6k
        } else {
288
9.46k
            for (k = 0; k < l1; k++)
289
6.28k
            {
290
509k
                for (i = 0; i < ido; i++)
291
502k
                {
292
502k
                    ac = i + (3*k+1)*ido;
293
502k
                    ah = i + k * ido;
294
295
502k
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+ido]);
296
502k
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),taur);
297
502k
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+ido]);
298
502k
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),taur);
299
300
502k
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2);
301
502k
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2);
302
303
502k
                    RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+ido])), taui);
304
502k
                    IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+ido])), taui);
305
306
502k
                    RE(d2) = RE(c2) + IM(c3);
307
502k
                    IM(d3) = IM(c2) + RE(c3);
308
502k
                    RE(d3) = RE(c2) - IM(c3);
309
502k
                    IM(d2) = IM(c2) - RE(c3);
310
311
502k
#if 1
312
502k
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
313
502k
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
314
502k
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
315
502k
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
316
#else
317
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
318
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
319
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
320
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
321
#endif
322
502k
                }
323
6.28k
            }
324
3.18k
        }
325
69.8k
    }
326
69.8k
}
cfft.c:passf3
Line
Count
Source
184
96.7k
{
185
96.7k
    static real_t taur = FRAC_CONST(-0.5);
186
96.7k
    static real_t taui = FRAC_CONST(0.866025403784439);
187
96.7k
    uint16_t i, k, ac, ah;
188
96.7k
    complex_t c2, c3, d2, d3, t2;
189
190
96.7k
    if (ido == 1)
191
0
    {
192
0
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
193
        // TODO: remove this code once fuzzer proves it is totally unreahable
194
        // 3 is never the the biggest factor for supported frame lengths;
195
        // consequently `ido` should never be 1.
196
0
        __builtin_trap();
197
        /*
198
#endif
199
        if (isign == 1)
200
        {
201
            for (k = 0; k < l1; k++)
202
            {
203
                ac = 3*k+1;
204
                ah = k;
205
206
                RE(t2) = RE(cc[ac]) + RE(cc[ac+1]);
207
                IM(t2) = IM(cc[ac]) + IM(cc[ac+1]);
208
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),taur);
209
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),taur);
210
211
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2);
212
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2);
213
214
                RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+1])), taui);
215
                IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+1])), taui);
216
217
                RE(ch[ah+l1]) = RE(c2) - IM(c3);
218
                IM(ch[ah+l1]) = IM(c2) + RE(c3);
219
                RE(ch[ah+2*l1]) = RE(c2) + IM(c3);
220
                IM(ch[ah+2*l1]) = IM(c2) - RE(c3);
221
            }
222
        } else {
223
            for (k = 0; k < l1; k++)
224
            {
225
                ac = 3*k+1;
226
                ah = k;
227
228
                RE(t2) = RE(cc[ac]) + RE(cc[ac+1]);
229
                IM(t2) = IM(cc[ac]) + IM(cc[ac+1]);
230
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),taur);
231
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),taur);
232
233
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2);
234
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2);
235
236
                RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+1])), taui);
237
                IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+1])), taui);
238
239
                RE(ch[ah+l1]) = RE(c2) + IM(c3);
240
                IM(ch[ah+l1]) = IM(c2) - RE(c3);
241
                RE(ch[ah+2*l1]) = RE(c2) - IM(c3);
242
                IM(ch[ah+2*l1]) = IM(c2) + RE(c3);
243
            }
244
        }
245
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
246
        */
247
0
#endif
248
96.7k
    } else {
249
96.7k
        if (isign == 1)
250
94.0k
        {
251
230k
            for (k = 0; k < l1; k++)
252
136k
            {
253
8.00M
                for (i = 0; i < ido; i++)
254
7.86M
                {
255
7.86M
                    ac = i + (3*k+1)*ido;
256
7.86M
                    ah = i + k * ido;
257
258
7.86M
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+ido]);
259
7.86M
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),taur);
260
7.86M
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+ido]);
261
7.86M
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),taur);
262
263
7.86M
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2);
264
7.86M
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2);
265
266
7.86M
                    RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+ido])), taui);
267
7.86M
                    IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+ido])), taui);
268
269
7.86M
                    RE(d2) = RE(c2) - IM(c3);
270
7.86M
                    IM(d3) = IM(c2) - RE(c3);
271
7.86M
                    RE(d3) = RE(c2) + IM(c3);
272
7.86M
                    IM(d2) = IM(c2) + RE(c3);
273
274
7.86M
#if 1
275
7.86M
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
276
7.86M
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
277
7.86M
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
278
7.86M
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
279
#else
280
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
281
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
282
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
283
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
284
#endif
285
7.86M
                }
286
136k
            }
287
94.0k
        } else {
288
8.22k
            for (k = 0; k < l1; k++)
289
5.44k
            {
290
441k
                for (i = 0; i < ido; i++)
291
435k
                {
292
435k
                    ac = i + (3*k+1)*ido;
293
435k
                    ah = i + k * ido;
294
295
435k
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+ido]);
296
435k
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),taur);
297
435k
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+ido]);
298
435k
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),taur);
299
300
435k
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2);
301
435k
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2);
302
303
435k
                    RE(c3) = MUL_F((RE(cc[ac]) - RE(cc[ac+ido])), taui);
304
435k
                    IM(c3) = MUL_F((IM(cc[ac]) - IM(cc[ac+ido])), taui);
305
306
435k
                    RE(d2) = RE(c2) + IM(c3);
307
435k
                    IM(d3) = IM(c2) + RE(c3);
308
435k
                    RE(d3) = RE(c2) - IM(c3);
309
435k
                    IM(d2) = IM(c2) - RE(c3);
310
311
435k
#if 1
312
435k
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
313
435k
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
314
435k
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
315
435k
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
316
#else
317
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
318
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
319
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
320
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
321
#endif
322
435k
                }
323
5.44k
            }
324
2.77k
        }
325
96.7k
    }
326
96.7k
}
327
328
329
static void passf4pos(const uint16_t ido, const uint16_t l1, const complex_t *cc,
330
                      complex_t *ch, const complex_t *wa1, const complex_t *wa2,
331
                      const complex_t *wa3)
332
2.84M
{
333
2.84M
    uint16_t i, k, ac, ah;
334
335
2.84M
    if (ido == 1)
336
745k
    {
337
54.2M
        for (k = 0; k < l1; k++)
338
53.5M
        {
339
53.5M
            complex_t t1, t2, t3, t4;
340
341
53.5M
            ac = 4*k;
342
53.5M
            ah = k;
343
344
53.5M
            RE(t2) = RE(cc[ac])   + RE(cc[ac+2]);
345
53.5M
            RE(t1) = RE(cc[ac])   - RE(cc[ac+2]);
346
53.5M
            IM(t2) = IM(cc[ac])   + IM(cc[ac+2]);
347
53.5M
            IM(t1) = IM(cc[ac])   - IM(cc[ac+2]);
348
53.5M
            RE(t3) = RE(cc[ac+1]) + RE(cc[ac+3]);
349
53.5M
            IM(t4) = RE(cc[ac+1]) - RE(cc[ac+3]);
350
53.5M
            IM(t3) = IM(cc[ac+3]) + IM(cc[ac+1]);
351
53.5M
            RE(t4) = IM(cc[ac+3]) - IM(cc[ac+1]);
352
353
53.5M
            RE(ch[ah])      = RE(t2) + RE(t3);
354
53.5M
            RE(ch[ah+2*l1]) = RE(t2) - RE(t3);
355
356
53.5M
            IM(ch[ah])      = IM(t2) + IM(t3);
357
53.5M
            IM(ch[ah+2*l1]) = IM(t2) - IM(t3);
358
359
53.5M
            RE(ch[ah+l1])   = RE(t1) + RE(t4);
360
53.5M
            RE(ch[ah+3*l1]) = RE(t1) - RE(t4);
361
362
53.5M
            IM(ch[ah+l1])   = IM(t1) + IM(t4);
363
53.5M
            IM(ch[ah+3*l1]) = IM(t1) - IM(t4);
364
53.5M
        }
365
2.09M
    } else {
366
22.0M
        for (k = 0; k < l1; k++)
367
19.9M
        {
368
19.9M
            ac = 4*k*ido;
369
19.9M
            ah = k*ido;
370
371
193M
            for (i = 0; i < ido; i++)
372
173M
            {
373
173M
                complex_t c2, c3, c4, t1, t2, t3, t4;
374
375
173M
                RE(t2) = RE(cc[ac+i]) + RE(cc[ac+i+2*ido]);
376
173M
                RE(t1) = RE(cc[ac+i]) - RE(cc[ac+i+2*ido]);
377
173M
                IM(t2) = IM(cc[ac+i]) + IM(cc[ac+i+2*ido]);
378
173M
                IM(t1) = IM(cc[ac+i]) - IM(cc[ac+i+2*ido]);
379
173M
                RE(t3) = RE(cc[ac+i+ido]) + RE(cc[ac+i+3*ido]);
380
173M
                IM(t4) = RE(cc[ac+i+ido]) - RE(cc[ac+i+3*ido]);
381
173M
                IM(t3) = IM(cc[ac+i+3*ido]) + IM(cc[ac+i+ido]);
382
173M
                RE(t4) = IM(cc[ac+i+3*ido]) - IM(cc[ac+i+ido]);
383
384
173M
                RE(c2) = RE(t1) + RE(t4);
385
173M
                RE(c4) = RE(t1) - RE(t4);
386
387
173M
                IM(c2) = IM(t1) + IM(t4);
388
173M
                IM(c4) = IM(t1) - IM(t4);
389
390
173M
                RE(ch[ah+i]) = RE(t2) + RE(t3);
391
173M
                RE(c3)       = RE(t2) - RE(t3);
392
393
173M
                IM(ch[ah+i]) = IM(t2) + IM(t3);
394
173M
                IM(c3)       = IM(t2) - IM(t3);
395
396
173M
#if 1
397
173M
                ComplexMult(&IM(ch[ah+i+l1*ido]), &RE(ch[ah+i+l1*ido]),
398
173M
                    IM(c2), RE(c2), RE(wa1[i]), IM(wa1[i]));
399
173M
                ComplexMult(&IM(ch[ah+i+2*l1*ido]), &RE(ch[ah+i+2*l1*ido]),
400
173M
                    IM(c3), RE(c3), RE(wa2[i]), IM(wa2[i]));
401
173M
                ComplexMult(&IM(ch[ah+i+3*l1*ido]), &RE(ch[ah+i+3*l1*ido]),
402
173M
                    IM(c4), RE(c4), RE(wa3[i]), IM(wa3[i]));
403
#else
404
                ComplexMult(&RE(ch[ah+i+l1*ido]), &IM(ch[ah+i+l1*ido]),
405
                    RE(c2), IM(c2), RE(wa1[i]), IM(wa1[i]));
406
                ComplexMult(&RE(ch[ah+i+2*l1*ido]), &IM(ch[ah+i+2*l1*ido]),
407
                    RE(c3), IM(c3), RE(wa2[i]), IM(wa2[i]));
408
                ComplexMult(&RE(ch[ah+i+3*l1*ido]), &IM(ch[ah+i+3*l1*ido]),
409
                    RE(c4), IM(c4), RE(wa3[i]), IM(wa3[i]));
410
#endif
411
173M
            }
412
19.9M
        }
413
2.09M
    }
414
2.84M
}
415
416
static void passf4neg(const uint16_t ido, const uint16_t l1, const complex_t *cc,
417
                      complex_t *ch, const complex_t *wa1, const complex_t *wa2,
418
                      const complex_t *wa3)
419
29.9k
{
420
29.9k
    uint16_t i, k, ac, ah;
421
422
29.9k
    if (ido == 1)
423
4.51k
    {
424
566k
        for (k = 0; k < l1; k++)
425
561k
        {
426
561k
            complex_t t1, t2, t3, t4;
427
428
561k
            ac = 4*k;
429
561k
            ah = k;
430
431
561k
            RE(t2) = RE(cc[ac])   + RE(cc[ac+2]);
432
561k
            RE(t1) = RE(cc[ac])   - RE(cc[ac+2]);
433
561k
            IM(t2) = IM(cc[ac])   + IM(cc[ac+2]);
434
561k
            IM(t1) = IM(cc[ac])   - IM(cc[ac+2]);
435
561k
            RE(t3) = RE(cc[ac+1]) + RE(cc[ac+3]);
436
561k
            IM(t4) = RE(cc[ac+1]) - RE(cc[ac+3]);
437
561k
            IM(t3) = IM(cc[ac+3]) + IM(cc[ac+1]);
438
561k
            RE(t4) = IM(cc[ac+3]) - IM(cc[ac+1]);
439
440
561k
            RE(ch[ah])      = RE(t2) + RE(t3);
441
561k
            RE(ch[ah+2*l1]) = RE(t2) - RE(t3);
442
443
561k
            IM(ch[ah])      = IM(t2) + IM(t3);
444
561k
            IM(ch[ah+2*l1]) = IM(t2) - IM(t3);
445
446
561k
            RE(ch[ah+l1])   = RE(t1) - RE(t4);
447
561k
            RE(ch[ah+3*l1]) = RE(t1) + RE(t4);
448
449
561k
            IM(ch[ah+l1])   = IM(t1) - IM(t4);
450
561k
            IM(ch[ah+3*l1]) = IM(t1) + IM(t4);
451
561k
        }
452
25.4k
    } else {
453
385k
        for (k = 0; k < l1; k++)
454
360k
        {
455
360k
            ac = 4*k*ido;
456
360k
            ah = k*ido;
457
458
3.45M
            for (i = 0; i < ido; i++)
459
3.09M
            {
460
3.09M
                complex_t c2, c3, c4, t1, t2, t3, t4;
461
462
3.09M
                RE(t2) = RE(cc[ac+i]) + RE(cc[ac+i+2*ido]);
463
3.09M
                RE(t1) = RE(cc[ac+i]) - RE(cc[ac+i+2*ido]);
464
3.09M
                IM(t2) = IM(cc[ac+i]) + IM(cc[ac+i+2*ido]);
465
3.09M
                IM(t1) = IM(cc[ac+i]) - IM(cc[ac+i+2*ido]);
466
3.09M
                RE(t3) = RE(cc[ac+i+ido]) + RE(cc[ac+i+3*ido]);
467
3.09M
                IM(t4) = RE(cc[ac+i+ido]) - RE(cc[ac+i+3*ido]);
468
3.09M
                IM(t3) = IM(cc[ac+i+3*ido]) + IM(cc[ac+i+ido]);
469
3.09M
                RE(t4) = IM(cc[ac+i+3*ido]) - IM(cc[ac+i+ido]);
470
471
3.09M
                RE(c2) = RE(t1) - RE(t4);
472
3.09M
                RE(c4) = RE(t1) + RE(t4);
473
474
3.09M
                IM(c2) = IM(t1) - IM(t4);
475
3.09M
                IM(c4) = IM(t1) + IM(t4);
476
477
3.09M
                RE(ch[ah+i]) = RE(t2) + RE(t3);
478
3.09M
                RE(c3)       = RE(t2) - RE(t3);
479
480
3.09M
                IM(ch[ah+i]) = IM(t2) + IM(t3);
481
3.09M
                IM(c3)       = IM(t2) - IM(t3);
482
483
3.09M
#if 1
484
3.09M
                ComplexMult(&RE(ch[ah+i+l1*ido]), &IM(ch[ah+i+l1*ido]),
485
3.09M
                    RE(c2), IM(c2), RE(wa1[i]), IM(wa1[i]));
486
3.09M
                ComplexMult(&RE(ch[ah+i+2*l1*ido]), &IM(ch[ah+i+2*l1*ido]),
487
3.09M
                    RE(c3), IM(c3), RE(wa2[i]), IM(wa2[i]));
488
3.09M
                ComplexMult(&RE(ch[ah+i+3*l1*ido]), &IM(ch[ah+i+3*l1*ido]),
489
3.09M
                    RE(c4), IM(c4), RE(wa3[i]), IM(wa3[i]));
490
#else
491
                ComplexMult(&IM(ch[ah+i+l1*ido]), &RE(ch[ah+i+l1*ido]),
492
                    IM(c2), RE(c2), RE(wa1[i]), IM(wa1[i]));
493
                ComplexMult(&IM(ch[ah+i+2*l1*ido]), &RE(ch[ah+i+2*l1*ido]),
494
                    IM(c3), RE(c3), RE(wa2[i]), IM(wa2[i]));
495
                ComplexMult(&IM(ch[ah+i+3*l1*ido]), &RE(ch[ah+i+3*l1*ido]),
496
                    IM(c4), RE(c4), RE(wa3[i]), IM(wa3[i]));
497
#endif
498
3.09M
            }
499
360k
        }
500
25.4k
    }
501
29.9k
}
502
503
static void passf5(const uint16_t ido, const uint16_t l1, const complex_t *cc,
504
                   complex_t *ch, const complex_t *wa1, const complex_t *wa2, const complex_t *wa3,
505
                   const complex_t *wa4, const int8_t isign)
506
166k
{
507
166k
    static real_t tr11 = FRAC_CONST(0.309016994374947);
508
166k
    static real_t ti11 = FRAC_CONST(0.951056516295154);
509
166k
    static real_t tr12 = FRAC_CONST(-0.809016994374947);
510
166k
    static real_t ti12 = FRAC_CONST(0.587785252292473);
511
166k
    uint16_t k, ac, ah;
512
166k
    complex_t c2, c3, c4, c5, t2, t3, t4, t5;
513
166k
    (void)wa1;
514
166k
    (void)wa2;
515
166k
    (void)wa3;
516
166k
    (void)wa4;
517
518
166k
    if (ido == 1)
519
166k
    {
520
166k
        if (isign == 1)
521
160k
        {
522
8.22M
            for (k = 0; k < l1; k++)
523
8.06M
            {
524
8.06M
                ac = 5*k + 1;
525
8.06M
                ah = k;
526
527
8.06M
                RE(t2) = RE(cc[ac]) + RE(cc[ac+3]);
528
8.06M
                IM(t2) = IM(cc[ac]) + IM(cc[ac+3]);
529
8.06M
                RE(t3) = RE(cc[ac+1]) + RE(cc[ac+2]);
530
8.06M
                IM(t3) = IM(cc[ac+1]) + IM(cc[ac+2]);
531
8.06M
                RE(t4) = RE(cc[ac+1]) - RE(cc[ac+2]);
532
8.06M
                IM(t4) = IM(cc[ac+1]) - IM(cc[ac+2]);
533
8.06M
                RE(t5) = RE(cc[ac]) - RE(cc[ac+3]);
534
8.06M
                IM(t5) = IM(cc[ac]) - IM(cc[ac+3]);
535
536
8.06M
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2) + RE(t3);
537
8.06M
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2) + IM(t3);
538
539
8.06M
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
540
8.06M
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
541
8.06M
                RE(c3) = RE(cc[ac-1]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
542
8.06M
                IM(c3) = IM(cc[ac-1]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
543
544
8.06M
                ComplexMult(&RE(c5), &RE(c4),
545
8.06M
                    ti11, ti12, RE(t5), RE(t4));
546
8.06M
                ComplexMult(&IM(c5), &IM(c4),
547
8.06M
                    ti11, ti12, IM(t5), IM(t4));
548
549
8.06M
                RE(ch[ah+l1]) = RE(c2) - IM(c5);
550
8.06M
                IM(ch[ah+l1]) = IM(c2) + RE(c5);
551
8.06M
                RE(ch[ah+2*l1]) = RE(c3) - IM(c4);
552
8.06M
                IM(ch[ah+2*l1]) = IM(c3) + RE(c4);
553
8.06M
                RE(ch[ah+3*l1]) = RE(c3) + IM(c4);
554
8.06M
                IM(ch[ah+3*l1]) = IM(c3) - RE(c4);
555
8.06M
                RE(ch[ah+4*l1]) = RE(c2) + IM(c5);
556
8.06M
                IM(ch[ah+4*l1]) = IM(c2) - RE(c5);
557
8.06M
            }
558
160k
        } else {
559
569k
            for (k = 0; k < l1; k++)
560
563k
            {
561
563k
                ac = 5*k + 1;
562
563k
                ah = k;
563
564
563k
                RE(t2) = RE(cc[ac]) + RE(cc[ac+3]);
565
563k
                IM(t2) = IM(cc[ac]) + IM(cc[ac+3]);
566
563k
                RE(t3) = RE(cc[ac+1]) + RE(cc[ac+2]);
567
563k
                IM(t3) = IM(cc[ac+1]) + IM(cc[ac+2]);
568
563k
                RE(t4) = RE(cc[ac+1]) - RE(cc[ac+2]);
569
563k
                IM(t4) = IM(cc[ac+1]) - IM(cc[ac+2]);
570
563k
                RE(t5) = RE(cc[ac]) - RE(cc[ac+3]);
571
563k
                IM(t5) = IM(cc[ac]) - IM(cc[ac+3]);
572
573
563k
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2) + RE(t3);
574
563k
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2) + IM(t3);
575
576
563k
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
577
563k
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
578
563k
                RE(c3) = RE(cc[ac-1]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
579
563k
                IM(c3) = IM(cc[ac-1]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
580
581
563k
                ComplexMult(&RE(c4), &RE(c5),
582
563k
                    ti12, ti11, RE(t5), RE(t4));
583
563k
                ComplexMult(&IM(c4), &IM(c5),
584
563k
                    ti12, ti11, IM(t5), IM(t4));
585
586
563k
                RE(ch[ah+l1]) = RE(c2) + IM(c5);
587
563k
                IM(ch[ah+l1]) = IM(c2) - RE(c5);
588
563k
                RE(ch[ah+2*l1]) = RE(c3) + IM(c4);
589
563k
                IM(ch[ah+2*l1]) = IM(c3) - RE(c4);
590
563k
                RE(ch[ah+3*l1]) = RE(c3) - IM(c4);
591
563k
                IM(ch[ah+3*l1]) = IM(c3) + RE(c4);
592
563k
                RE(ch[ah+4*l1]) = RE(c2) - IM(c5);
593
563k
                IM(ch[ah+4*l1]) = IM(c2) + RE(c5);
594
563k
            }
595
5.95k
        }
596
166k
    } else {
597
0
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
598
        // TODO: remove this code once fuzzer proves it is totally unreahable
599
        // 5 if the biggest factor and it never repeated for supported frame
600
        // lengths; consequently `ido` should always be 1.
601
0
        __builtin_trap();
602
        /*
603
#else
604
        uint16_t i;
605
        complex_t d3, d4, d5, d2;
606
#endif
607
        if (isign == 1)
608
        {
609
            for (k = 0; k < l1; k++)
610
            {
611
                for (i = 0; i < ido; i++)
612
                {
613
                    ac = i + (k*5 + 1) * ido;
614
                    ah = i + k * ido;
615
616
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+3*ido]);
617
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+3*ido]);
618
                    RE(t3) = RE(cc[ac+ido]) + RE(cc[ac+2*ido]);
619
                    IM(t3) = IM(cc[ac+ido]) + IM(cc[ac+2*ido]);
620
                    RE(t4) = RE(cc[ac+ido]) - RE(cc[ac+2*ido]);
621
                    IM(t4) = IM(cc[ac+ido]) - IM(cc[ac+2*ido]);
622
                    RE(t5) = RE(cc[ac]) - RE(cc[ac+3*ido]);
623
                    IM(t5) = IM(cc[ac]) - IM(cc[ac+3*ido]);
624
625
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2) + RE(t3);
626
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2) + IM(t3);
627
628
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
629
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
630
                    RE(c3) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
631
                    IM(c3) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
632
633
                    ComplexMult(&RE(c5), &RE(c4),
634
                        ti11, ti12, RE(t5), RE(t4));
635
                    ComplexMult(&IM(c5), &IM(c4),
636
                        ti11, ti12, IM(t5), IM(t4));
637
638
                    IM(d2) = IM(c2) + RE(c5);
639
                    IM(d3) = IM(c3) + RE(c4);
640
                    RE(d4) = RE(c3) + IM(c4);
641
                    RE(d5) = RE(c2) + IM(c5);
642
                    RE(d2) = RE(c2) - IM(c5);
643
                    IM(d5) = IM(c2) - RE(c5);
644
                    RE(d3) = RE(c3) - IM(c4);
645
                    IM(d4) = IM(c3) - RE(c4);
646
647
#if 1
648
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
649
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
650
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
651
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
652
                    ComplexMult(&IM(ch[ah+3*l1*ido]), &RE(ch[ah+3*l1*ido]),
653
                        IM(d4), RE(d4), RE(wa3[i]), IM(wa3[i]));
654
                    ComplexMult(&IM(ch[ah+4*l1*ido]), &RE(ch[ah+4*l1*ido]),
655
                        IM(d5), RE(d5), RE(wa4[i]), IM(wa4[i]));
656
#else
657
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
658
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
659
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
660
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
661
                    ComplexMult(&RE(ch[ah+3*l1*ido]), &IM(ch[ah+3*l1*ido]),
662
                        RE(d4), IM(d4), RE(wa3[i]), IM(wa3[i]));
663
                    ComplexMult(&RE(ch[ah+4*l1*ido]), &IM(ch[ah+4*l1*ido]),
664
                        RE(d5), IM(d5), RE(wa4[i]), IM(wa4[i]));
665
#endif
666
                }
667
            }
668
        } else {
669
            for (k = 0; k < l1; k++)
670
            {
671
                for (i = 0; i < ido; i++)
672
                {
673
                    ac = i + (k*5 + 1) * ido;
674
                    ah = i + k * ido;
675
676
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+3*ido]);
677
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+3*ido]);
678
                    RE(t3) = RE(cc[ac+ido]) + RE(cc[ac+2*ido]);
679
                    IM(t3) = IM(cc[ac+ido]) + IM(cc[ac+2*ido]);
680
                    RE(t4) = RE(cc[ac+ido]) - RE(cc[ac+2*ido]);
681
                    IM(t4) = IM(cc[ac+ido]) - IM(cc[ac+2*ido]);
682
                    RE(t5) = RE(cc[ac]) - RE(cc[ac+3*ido]);
683
                    IM(t5) = IM(cc[ac]) - IM(cc[ac+3*ido]);
684
685
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2) + RE(t3);
686
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2) + IM(t3);
687
688
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
689
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
690
                    RE(c3) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
691
                    IM(c3) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
692
693
                    ComplexMult(&RE(c4), &RE(c5),
694
                        ti12, ti11, RE(t5), RE(t4));
695
                    ComplexMult(&IM(c4), &IM(c5),
696
                        ti12, ti11, IM(t5), IM(t4));
697
698
                    IM(d2) = IM(c2) - RE(c5);
699
                    IM(d3) = IM(c3) - RE(c4);
700
                    RE(d4) = RE(c3) - IM(c4);
701
                    RE(d5) = RE(c2) - IM(c5);
702
                    RE(d2) = RE(c2) + IM(c5);
703
                    IM(d5) = IM(c2) + RE(c5);
704
                    RE(d3) = RE(c3) + IM(c4);
705
                    IM(d4) = IM(c3) + RE(c4);
706
707
#if 1
708
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
709
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
710
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
711
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
712
                    ComplexMult(&RE(ch[ah+3*l1*ido]), &IM(ch[ah+3*l1*ido]),
713
                        RE(d4), IM(d4), RE(wa3[i]), IM(wa3[i]));
714
                    ComplexMult(&RE(ch[ah+4*l1*ido]), &IM(ch[ah+4*l1*ido]),
715
                        RE(d5), IM(d5), RE(wa4[i]), IM(wa4[i]));
716
#else
717
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
718
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
719
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
720
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
721
                    ComplexMult(&IM(ch[ah+3*l1*ido]), &RE(ch[ah+3*l1*ido]),
722
                        IM(d4), RE(d4), RE(wa3[i]), IM(wa3[i]));
723
                    ComplexMult(&IM(ch[ah+4*l1*ido]), &RE(ch[ah+4*l1*ido]),
724
                        IM(d5), RE(d5), RE(wa4[i]), IM(wa4[i]));
725
#endif
726
                }
727
            }
728
        }
729
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
730
        */
731
0
#endif
732
0
    }
733
166k
}
cfft.c:passf5
Line
Count
Source
506
69.8k
{
507
69.8k
    static real_t tr11 = FRAC_CONST(0.309016994374947);
508
69.8k
    static real_t ti11 = FRAC_CONST(0.951056516295154);
509
69.8k
    static real_t tr12 = FRAC_CONST(-0.809016994374947);
510
69.8k
    static real_t ti12 = FRAC_CONST(0.587785252292473);
511
69.8k
    uint16_t k, ac, ah;
512
69.8k
    complex_t c2, c3, c4, c5, t2, t3, t4, t5;
513
69.8k
    (void)wa1;
514
69.8k
    (void)wa2;
515
69.8k
    (void)wa3;
516
69.8k
    (void)wa4;
517
518
69.8k
    if (ido == 1)
519
69.8k
    {
520
69.8k
        if (isign == 1)
521
66.6k
        {
522
3.41M
            for (k = 0; k < l1; k++)
523
3.34M
            {
524
3.34M
                ac = 5*k + 1;
525
3.34M
                ah = k;
526
527
3.34M
                RE(t2) = RE(cc[ac]) + RE(cc[ac+3]);
528
3.34M
                IM(t2) = IM(cc[ac]) + IM(cc[ac+3]);
529
3.34M
                RE(t3) = RE(cc[ac+1]) + RE(cc[ac+2]);
530
3.34M
                IM(t3) = IM(cc[ac+1]) + IM(cc[ac+2]);
531
3.34M
                RE(t4) = RE(cc[ac+1]) - RE(cc[ac+2]);
532
3.34M
                IM(t4) = IM(cc[ac+1]) - IM(cc[ac+2]);
533
3.34M
                RE(t5) = RE(cc[ac]) - RE(cc[ac+3]);
534
3.34M
                IM(t5) = IM(cc[ac]) - IM(cc[ac+3]);
535
536
3.34M
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2) + RE(t3);
537
3.34M
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2) + IM(t3);
538
539
3.34M
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
540
3.34M
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
541
3.34M
                RE(c3) = RE(cc[ac-1]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
542
3.34M
                IM(c3) = IM(cc[ac-1]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
543
544
3.34M
                ComplexMult(&RE(c5), &RE(c4),
545
3.34M
                    ti11, ti12, RE(t5), RE(t4));
546
3.34M
                ComplexMult(&IM(c5), &IM(c4),
547
3.34M
                    ti11, ti12, IM(t5), IM(t4));
548
549
3.34M
                RE(ch[ah+l1]) = RE(c2) - IM(c5);
550
3.34M
                IM(ch[ah+l1]) = IM(c2) + RE(c5);
551
3.34M
                RE(ch[ah+2*l1]) = RE(c3) - IM(c4);
552
3.34M
                IM(ch[ah+2*l1]) = IM(c3) + RE(c4);
553
3.34M
                RE(ch[ah+3*l1]) = RE(c3) + IM(c4);
554
3.34M
                IM(ch[ah+3*l1]) = IM(c3) - RE(c4);
555
3.34M
                RE(ch[ah+4*l1]) = RE(c2) + IM(c5);
556
3.34M
                IM(ch[ah+4*l1]) = IM(c2) - RE(c5);
557
3.34M
            }
558
66.6k
        } else {
559
304k
            for (k = 0; k < l1; k++)
560
301k
            {
561
301k
                ac = 5*k + 1;
562
301k
                ah = k;
563
564
301k
                RE(t2) = RE(cc[ac]) + RE(cc[ac+3]);
565
301k
                IM(t2) = IM(cc[ac]) + IM(cc[ac+3]);
566
301k
                RE(t3) = RE(cc[ac+1]) + RE(cc[ac+2]);
567
301k
                IM(t3) = IM(cc[ac+1]) + IM(cc[ac+2]);
568
301k
                RE(t4) = RE(cc[ac+1]) - RE(cc[ac+2]);
569
301k
                IM(t4) = IM(cc[ac+1]) - IM(cc[ac+2]);
570
301k
                RE(t5) = RE(cc[ac]) - RE(cc[ac+3]);
571
301k
                IM(t5) = IM(cc[ac]) - IM(cc[ac+3]);
572
573
301k
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2) + RE(t3);
574
301k
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2) + IM(t3);
575
576
301k
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
577
301k
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
578
301k
                RE(c3) = RE(cc[ac-1]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
579
301k
                IM(c3) = IM(cc[ac-1]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
580
581
301k
                ComplexMult(&RE(c4), &RE(c5),
582
301k
                    ti12, ti11, RE(t5), RE(t4));
583
301k
                ComplexMult(&IM(c4), &IM(c5),
584
301k
                    ti12, ti11, IM(t5), IM(t4));
585
586
301k
                RE(ch[ah+l1]) = RE(c2) + IM(c5);
587
301k
                IM(ch[ah+l1]) = IM(c2) - RE(c5);
588
301k
                RE(ch[ah+2*l1]) = RE(c3) + IM(c4);
589
301k
                IM(ch[ah+2*l1]) = IM(c3) - RE(c4);
590
301k
                RE(ch[ah+3*l1]) = RE(c3) - IM(c4);
591
301k
                IM(ch[ah+3*l1]) = IM(c3) + RE(c4);
592
301k
                RE(ch[ah+4*l1]) = RE(c2) - IM(c5);
593
301k
                IM(ch[ah+4*l1]) = IM(c2) + RE(c5);
594
301k
            }
595
3.18k
        }
596
69.8k
    } else {
597
0
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
598
        // TODO: remove this code once fuzzer proves it is totally unreahable
599
        // 5 if the biggest factor and it never repeated for supported frame
600
        // lengths; consequently `ido` should always be 1.
601
0
        __builtin_trap();
602
        /*
603
#else
604
        uint16_t i;
605
        complex_t d3, d4, d5, d2;
606
#endif
607
        if (isign == 1)
608
        {
609
            for (k = 0; k < l1; k++)
610
            {
611
                for (i = 0; i < ido; i++)
612
                {
613
                    ac = i + (k*5 + 1) * ido;
614
                    ah = i + k * ido;
615
616
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+3*ido]);
617
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+3*ido]);
618
                    RE(t3) = RE(cc[ac+ido]) + RE(cc[ac+2*ido]);
619
                    IM(t3) = IM(cc[ac+ido]) + IM(cc[ac+2*ido]);
620
                    RE(t4) = RE(cc[ac+ido]) - RE(cc[ac+2*ido]);
621
                    IM(t4) = IM(cc[ac+ido]) - IM(cc[ac+2*ido]);
622
                    RE(t5) = RE(cc[ac]) - RE(cc[ac+3*ido]);
623
                    IM(t5) = IM(cc[ac]) - IM(cc[ac+3*ido]);
624
625
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2) + RE(t3);
626
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2) + IM(t3);
627
628
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
629
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
630
                    RE(c3) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
631
                    IM(c3) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
632
633
                    ComplexMult(&RE(c5), &RE(c4),
634
                        ti11, ti12, RE(t5), RE(t4));
635
                    ComplexMult(&IM(c5), &IM(c4),
636
                        ti11, ti12, IM(t5), IM(t4));
637
638
                    IM(d2) = IM(c2) + RE(c5);
639
                    IM(d3) = IM(c3) + RE(c4);
640
                    RE(d4) = RE(c3) + IM(c4);
641
                    RE(d5) = RE(c2) + IM(c5);
642
                    RE(d2) = RE(c2) - IM(c5);
643
                    IM(d5) = IM(c2) - RE(c5);
644
                    RE(d3) = RE(c3) - IM(c4);
645
                    IM(d4) = IM(c3) - RE(c4);
646
647
#if 1
648
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
649
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
650
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
651
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
652
                    ComplexMult(&IM(ch[ah+3*l1*ido]), &RE(ch[ah+3*l1*ido]),
653
                        IM(d4), RE(d4), RE(wa3[i]), IM(wa3[i]));
654
                    ComplexMult(&IM(ch[ah+4*l1*ido]), &RE(ch[ah+4*l1*ido]),
655
                        IM(d5), RE(d5), RE(wa4[i]), IM(wa4[i]));
656
#else
657
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
658
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
659
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
660
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
661
                    ComplexMult(&RE(ch[ah+3*l1*ido]), &IM(ch[ah+3*l1*ido]),
662
                        RE(d4), IM(d4), RE(wa3[i]), IM(wa3[i]));
663
                    ComplexMult(&RE(ch[ah+4*l1*ido]), &IM(ch[ah+4*l1*ido]),
664
                        RE(d5), IM(d5), RE(wa4[i]), IM(wa4[i]));
665
#endif
666
                }
667
            }
668
        } else {
669
            for (k = 0; k < l1; k++)
670
            {
671
                for (i = 0; i < ido; i++)
672
                {
673
                    ac = i + (k*5 + 1) * ido;
674
                    ah = i + k * ido;
675
676
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+3*ido]);
677
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+3*ido]);
678
                    RE(t3) = RE(cc[ac+ido]) + RE(cc[ac+2*ido]);
679
                    IM(t3) = IM(cc[ac+ido]) + IM(cc[ac+2*ido]);
680
                    RE(t4) = RE(cc[ac+ido]) - RE(cc[ac+2*ido]);
681
                    IM(t4) = IM(cc[ac+ido]) - IM(cc[ac+2*ido]);
682
                    RE(t5) = RE(cc[ac]) - RE(cc[ac+3*ido]);
683
                    IM(t5) = IM(cc[ac]) - IM(cc[ac+3*ido]);
684
685
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2) + RE(t3);
686
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2) + IM(t3);
687
688
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
689
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
690
                    RE(c3) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
691
                    IM(c3) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
692
693
                    ComplexMult(&RE(c4), &RE(c5),
694
                        ti12, ti11, RE(t5), RE(t4));
695
                    ComplexMult(&IM(c4), &IM(c5),
696
                        ti12, ti11, IM(t5), IM(t4));
697
698
                    IM(d2) = IM(c2) - RE(c5);
699
                    IM(d3) = IM(c3) - RE(c4);
700
                    RE(d4) = RE(c3) - IM(c4);
701
                    RE(d5) = RE(c2) - IM(c5);
702
                    RE(d2) = RE(c2) + IM(c5);
703
                    IM(d5) = IM(c2) + RE(c5);
704
                    RE(d3) = RE(c3) + IM(c4);
705
                    IM(d4) = IM(c3) + RE(c4);
706
707
#if 1
708
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
709
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
710
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
711
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
712
                    ComplexMult(&RE(ch[ah+3*l1*ido]), &IM(ch[ah+3*l1*ido]),
713
                        RE(d4), IM(d4), RE(wa3[i]), IM(wa3[i]));
714
                    ComplexMult(&RE(ch[ah+4*l1*ido]), &IM(ch[ah+4*l1*ido]),
715
                        RE(d5), IM(d5), RE(wa4[i]), IM(wa4[i]));
716
#else
717
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
718
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
719
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
720
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
721
                    ComplexMult(&IM(ch[ah+3*l1*ido]), &RE(ch[ah+3*l1*ido]),
722
                        IM(d4), RE(d4), RE(wa3[i]), IM(wa3[i]));
723
                    ComplexMult(&IM(ch[ah+4*l1*ido]), &RE(ch[ah+4*l1*ido]),
724
                        IM(d5), RE(d5), RE(wa4[i]), IM(wa4[i]));
725
#endif
726
                }
727
            }
728
        }
729
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
730
        */
731
0
#endif
732
0
    }
733
69.8k
}
cfft.c:passf5
Line
Count
Source
506
96.7k
{
507
96.7k
    static real_t tr11 = FRAC_CONST(0.309016994374947);
508
96.7k
    static real_t ti11 = FRAC_CONST(0.951056516295154);
509
96.7k
    static real_t tr12 = FRAC_CONST(-0.809016994374947);
510
96.7k
    static real_t ti12 = FRAC_CONST(0.587785252292473);
511
96.7k
    uint16_t k, ac, ah;
512
96.7k
    complex_t c2, c3, c4, c5, t2, t3, t4, t5;
513
96.7k
    (void)wa1;
514
96.7k
    (void)wa2;
515
96.7k
    (void)wa3;
516
96.7k
    (void)wa4;
517
518
96.7k
    if (ido == 1)
519
96.7k
    {
520
96.7k
        if (isign == 1)
521
94.0k
        {
522
4.81M
            for (k = 0; k < l1; k++)
523
4.71M
            {
524
4.71M
                ac = 5*k + 1;
525
4.71M
                ah = k;
526
527
4.71M
                RE(t2) = RE(cc[ac]) + RE(cc[ac+3]);
528
4.71M
                IM(t2) = IM(cc[ac]) + IM(cc[ac+3]);
529
4.71M
                RE(t3) = RE(cc[ac+1]) + RE(cc[ac+2]);
530
4.71M
                IM(t3) = IM(cc[ac+1]) + IM(cc[ac+2]);
531
4.71M
                RE(t4) = RE(cc[ac+1]) - RE(cc[ac+2]);
532
4.71M
                IM(t4) = IM(cc[ac+1]) - IM(cc[ac+2]);
533
4.71M
                RE(t5) = RE(cc[ac]) - RE(cc[ac+3]);
534
4.71M
                IM(t5) = IM(cc[ac]) - IM(cc[ac+3]);
535
536
4.71M
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2) + RE(t3);
537
4.71M
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2) + IM(t3);
538
539
4.71M
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
540
4.71M
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
541
4.71M
                RE(c3) = RE(cc[ac-1]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
542
4.71M
                IM(c3) = IM(cc[ac-1]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
543
544
4.71M
                ComplexMult(&RE(c5), &RE(c4),
545
4.71M
                    ti11, ti12, RE(t5), RE(t4));
546
4.71M
                ComplexMult(&IM(c5), &IM(c4),
547
4.71M
                    ti11, ti12, IM(t5), IM(t4));
548
549
4.71M
                RE(ch[ah+l1]) = RE(c2) - IM(c5);
550
4.71M
                IM(ch[ah+l1]) = IM(c2) + RE(c5);
551
4.71M
                RE(ch[ah+2*l1]) = RE(c3) - IM(c4);
552
4.71M
                IM(ch[ah+2*l1]) = IM(c3) + RE(c4);
553
4.71M
                RE(ch[ah+3*l1]) = RE(c3) + IM(c4);
554
4.71M
                IM(ch[ah+3*l1]) = IM(c3) - RE(c4);
555
4.71M
                RE(ch[ah+4*l1]) = RE(c2) + IM(c5);
556
4.71M
                IM(ch[ah+4*l1]) = IM(c2) - RE(c5);
557
4.71M
            }
558
94.0k
        } else {
559
264k
            for (k = 0; k < l1; k++)
560
261k
            {
561
261k
                ac = 5*k + 1;
562
261k
                ah = k;
563
564
261k
                RE(t2) = RE(cc[ac]) + RE(cc[ac+3]);
565
261k
                IM(t2) = IM(cc[ac]) + IM(cc[ac+3]);
566
261k
                RE(t3) = RE(cc[ac+1]) + RE(cc[ac+2]);
567
261k
                IM(t3) = IM(cc[ac+1]) + IM(cc[ac+2]);
568
261k
                RE(t4) = RE(cc[ac+1]) - RE(cc[ac+2]);
569
261k
                IM(t4) = IM(cc[ac+1]) - IM(cc[ac+2]);
570
261k
                RE(t5) = RE(cc[ac]) - RE(cc[ac+3]);
571
261k
                IM(t5) = IM(cc[ac]) - IM(cc[ac+3]);
572
573
261k
                RE(ch[ah]) = RE(cc[ac-1]) + RE(t2) + RE(t3);
574
261k
                IM(ch[ah]) = IM(cc[ac-1]) + IM(t2) + IM(t3);
575
576
261k
                RE(c2) = RE(cc[ac-1]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
577
261k
                IM(c2) = IM(cc[ac-1]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
578
261k
                RE(c3) = RE(cc[ac-1]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
579
261k
                IM(c3) = IM(cc[ac-1]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
580
581
261k
                ComplexMult(&RE(c4), &RE(c5),
582
261k
                    ti12, ti11, RE(t5), RE(t4));
583
261k
                ComplexMult(&IM(c4), &IM(c5),
584
261k
                    ti12, ti11, IM(t5), IM(t4));
585
586
261k
                RE(ch[ah+l1]) = RE(c2) + IM(c5);
587
261k
                IM(ch[ah+l1]) = IM(c2) - RE(c5);
588
261k
                RE(ch[ah+2*l1]) = RE(c3) + IM(c4);
589
261k
                IM(ch[ah+2*l1]) = IM(c3) - RE(c4);
590
261k
                RE(ch[ah+3*l1]) = RE(c3) - IM(c4);
591
261k
                IM(ch[ah+3*l1]) = IM(c3) + RE(c4);
592
261k
                RE(ch[ah+4*l1]) = RE(c2) - IM(c5);
593
261k
                IM(ch[ah+4*l1]) = IM(c2) + RE(c5);
594
261k
            }
595
2.77k
        }
596
96.7k
    } else {
597
0
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
598
        // TODO: remove this code once fuzzer proves it is totally unreahable
599
        // 5 if the biggest factor and it never repeated for supported frame
600
        // lengths; consequently `ido` should always be 1.
601
0
        __builtin_trap();
602
        /*
603
#else
604
        uint16_t i;
605
        complex_t d3, d4, d5, d2;
606
#endif
607
        if (isign == 1)
608
        {
609
            for (k = 0; k < l1; k++)
610
            {
611
                for (i = 0; i < ido; i++)
612
                {
613
                    ac = i + (k*5 + 1) * ido;
614
                    ah = i + k * ido;
615
616
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+3*ido]);
617
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+3*ido]);
618
                    RE(t3) = RE(cc[ac+ido]) + RE(cc[ac+2*ido]);
619
                    IM(t3) = IM(cc[ac+ido]) + IM(cc[ac+2*ido]);
620
                    RE(t4) = RE(cc[ac+ido]) - RE(cc[ac+2*ido]);
621
                    IM(t4) = IM(cc[ac+ido]) - IM(cc[ac+2*ido]);
622
                    RE(t5) = RE(cc[ac]) - RE(cc[ac+3*ido]);
623
                    IM(t5) = IM(cc[ac]) - IM(cc[ac+3*ido]);
624
625
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2) + RE(t3);
626
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2) + IM(t3);
627
628
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
629
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
630
                    RE(c3) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
631
                    IM(c3) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
632
633
                    ComplexMult(&RE(c5), &RE(c4),
634
                        ti11, ti12, RE(t5), RE(t4));
635
                    ComplexMult(&IM(c5), &IM(c4),
636
                        ti11, ti12, IM(t5), IM(t4));
637
638
                    IM(d2) = IM(c2) + RE(c5);
639
                    IM(d3) = IM(c3) + RE(c4);
640
                    RE(d4) = RE(c3) + IM(c4);
641
                    RE(d5) = RE(c2) + IM(c5);
642
                    RE(d2) = RE(c2) - IM(c5);
643
                    IM(d5) = IM(c2) - RE(c5);
644
                    RE(d3) = RE(c3) - IM(c4);
645
                    IM(d4) = IM(c3) - RE(c4);
646
647
#if 1
648
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
649
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
650
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
651
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
652
                    ComplexMult(&IM(ch[ah+3*l1*ido]), &RE(ch[ah+3*l1*ido]),
653
                        IM(d4), RE(d4), RE(wa3[i]), IM(wa3[i]));
654
                    ComplexMult(&IM(ch[ah+4*l1*ido]), &RE(ch[ah+4*l1*ido]),
655
                        IM(d5), RE(d5), RE(wa4[i]), IM(wa4[i]));
656
#else
657
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
658
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
659
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
660
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
661
                    ComplexMult(&RE(ch[ah+3*l1*ido]), &IM(ch[ah+3*l1*ido]),
662
                        RE(d4), IM(d4), RE(wa3[i]), IM(wa3[i]));
663
                    ComplexMult(&RE(ch[ah+4*l1*ido]), &IM(ch[ah+4*l1*ido]),
664
                        RE(d5), IM(d5), RE(wa4[i]), IM(wa4[i]));
665
#endif
666
                }
667
            }
668
        } else {
669
            for (k = 0; k < l1; k++)
670
            {
671
                for (i = 0; i < ido; i++)
672
                {
673
                    ac = i + (k*5 + 1) * ido;
674
                    ah = i + k * ido;
675
676
                    RE(t2) = RE(cc[ac]) + RE(cc[ac+3*ido]);
677
                    IM(t2) = IM(cc[ac]) + IM(cc[ac+3*ido]);
678
                    RE(t3) = RE(cc[ac+ido]) + RE(cc[ac+2*ido]);
679
                    IM(t3) = IM(cc[ac+ido]) + IM(cc[ac+2*ido]);
680
                    RE(t4) = RE(cc[ac+ido]) - RE(cc[ac+2*ido]);
681
                    IM(t4) = IM(cc[ac+ido]) - IM(cc[ac+2*ido]);
682
                    RE(t5) = RE(cc[ac]) - RE(cc[ac+3*ido]);
683
                    IM(t5) = IM(cc[ac]) - IM(cc[ac+3*ido]);
684
685
                    RE(ch[ah]) = RE(cc[ac-ido]) + RE(t2) + RE(t3);
686
                    IM(ch[ah]) = IM(cc[ac-ido]) + IM(t2) + IM(t3);
687
688
                    RE(c2) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr11) + MUL_F(RE(t3),tr12);
689
                    IM(c2) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr11) + MUL_F(IM(t3),tr12);
690
                    RE(c3) = RE(cc[ac-ido]) + MUL_F(RE(t2),tr12) + MUL_F(RE(t3),tr11);
691
                    IM(c3) = IM(cc[ac-ido]) + MUL_F(IM(t2),tr12) + MUL_F(IM(t3),tr11);
692
693
                    ComplexMult(&RE(c4), &RE(c5),
694
                        ti12, ti11, RE(t5), RE(t4));
695
                    ComplexMult(&IM(c4), &IM(c5),
696
                        ti12, ti11, IM(t5), IM(t4));
697
698
                    IM(d2) = IM(c2) - RE(c5);
699
                    IM(d3) = IM(c3) - RE(c4);
700
                    RE(d4) = RE(c3) - IM(c4);
701
                    RE(d5) = RE(c2) - IM(c5);
702
                    RE(d2) = RE(c2) + IM(c5);
703
                    IM(d5) = IM(c2) + RE(c5);
704
                    RE(d3) = RE(c3) + IM(c4);
705
                    IM(d4) = IM(c3) + RE(c4);
706
707
#if 1
708
                    ComplexMult(&RE(ch[ah+l1*ido]), &IM(ch[ah+l1*ido]),
709
                        RE(d2), IM(d2), RE(wa1[i]), IM(wa1[i]));
710
                    ComplexMult(&RE(ch[ah+2*l1*ido]), &IM(ch[ah+2*l1*ido]),
711
                        RE(d3), IM(d3), RE(wa2[i]), IM(wa2[i]));
712
                    ComplexMult(&RE(ch[ah+3*l1*ido]), &IM(ch[ah+3*l1*ido]),
713
                        RE(d4), IM(d4), RE(wa3[i]), IM(wa3[i]));
714
                    ComplexMult(&RE(ch[ah+4*l1*ido]), &IM(ch[ah+4*l1*ido]),
715
                        RE(d5), IM(d5), RE(wa4[i]), IM(wa4[i]));
716
#else
717
                    ComplexMult(&IM(ch[ah+l1*ido]), &RE(ch[ah+l1*ido]),
718
                        IM(d2), RE(d2), RE(wa1[i]), IM(wa1[i]));
719
                    ComplexMult(&IM(ch[ah+2*l1*ido]), &RE(ch[ah+2*l1*ido]),
720
                        IM(d3), RE(d3), RE(wa2[i]), IM(wa2[i]));
721
                    ComplexMult(&IM(ch[ah+3*l1*ido]), &RE(ch[ah+3*l1*ido]),
722
                        IM(d4), RE(d4), RE(wa3[i]), IM(wa3[i]));
723
                    ComplexMult(&IM(ch[ah+4*l1*ido]), &RE(ch[ah+4*l1*ido]),
724
                        IM(d5), RE(d5), RE(wa4[i]), IM(wa4[i]));
725
#endif
726
                }
727
            }
728
        }
729
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
730
        */
731
0
#endif
732
0
    }
733
96.7k
}
734
735
736
/*----------------------------------------------------------------------
737
   cfftf1, cfftf, cfftb, cffti1, cffti. Complex FFTs.
738
  ----------------------------------------------------------------------*/
739
740
static INLINE void cfftf1pos(uint16_t n, complex_t *c, complex_t *ch,
741
                             const uint16_t *ifac, const complex_t *wa,
742
                             const int8_t isign)
743
906k
{
744
906k
    uint16_t i;
745
906k
    uint16_t k1, l1, l2;
746
906k
    uint16_t na, nf, ip, iw, ix2, ix3, ix4, ido;
747
748
906k
    nf = ifac[1];
749
906k
    na = 0;
750
906k
    l1 = 1;
751
906k
    iw = 0;
752
753
4.51M
    for (k1 = 2; k1 <= nf+1; k1++)
754
3.60M
    {
755
3.60M
        ip = ifac[k1];
756
3.60M
        l2 = ip*l1;
757
3.60M
        ido = n / l2;
758
759
3.60M
        switch (ip)
760
3.60M
        {
761
2.84M
        case 4:
762
2.84M
            ix2 = iw + ido;
763
2.84M
            ix3 = ix2 + ido;
764
765
2.84M
            if (na == 0)
766
1.56M
                passf4pos((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], &wa[ix3]);
767
1.27M
            else
768
1.27M
                passf4pos((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], &wa[ix3]);
769
770
2.84M
            na = 1 - na;
771
2.84M
            break;
772
442k
        case 2:
773
442k
            if (na == 0)
774
442k
                passf2pos((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw]);
775
0
            else
776
0
                passf2pos((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw]);
777
778
442k
            na = 1 - na;
779
442k
            break;
780
160k
        case 3:
781
160k
            ix2 = iw + ido;
782
783
160k
            if (na == 0)
784
88.3k
                passf3((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], isign);
785
72.2k
            else
786
72.2k
                passf3((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], isign);
787
788
160k
            na = 1 - na;
789
160k
            break;
790
160k
        case 5:
791
160k
            ix2 = iw + ido;
792
160k
            ix3 = ix2 + ido;
793
160k
            ix4 = ix3 + ido;
794
795
160k
            if (na == 0)
796
158k
                passf5((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
797
1.96k
            else
798
1.96k
                passf5((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
799
800
160k
            na = 1 - na;
801
160k
            break;
802
3.60M
        }
803
804
3.60M
        l1 = l2;
805
3.60M
        iw += (ip-1) * ido;
806
3.60M
    }
807
808
906k
    if (na == 0)
809
3.57k
        return;
810
811
254M
    for (i = 0; i < n; i++)
812
253M
    {
813
253M
        RE(c[i]) = RE(ch[i]);
814
253M
        IM(c[i]) = IM(ch[i]);
815
253M
    }
816
902k
}
817
818
static INLINE void cfftf1neg(uint16_t n, complex_t *c, complex_t *ch,
819
                             const uint16_t *ifac, const complex_t *wa,
820
                             const int8_t isign)
821
10.4k
{
822
10.4k
    uint16_t i;
823
10.4k
    uint16_t k1, l1, l2;
824
10.4k
    uint16_t na, nf, ip, iw, ix2, ix3, ix4, ido;
825
826
10.4k
    nf = ifac[1];
827
10.4k
    na = 0;
828
10.4k
    l1 = 1;
829
10.4k
    iw = 0;
830
831
62.3k
    for (k1 = 2; k1 <= nf+1; k1++)
832
51.9k
    {
833
51.9k
        ip = ifac[k1];
834
51.9k
        l2 = ip*l1;
835
51.9k
        ido = n / l2;
836
837
51.9k
        switch (ip)
838
51.9k
        {
839
29.9k
        case 4:
840
29.9k
            ix2 = iw + ido;
841
29.9k
            ix3 = ix2 + ido;
842
843
29.9k
            if (na == 0)
844
14.9k
                passf4neg((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], &wa[ix3]);
845
14.9k
            else
846
14.9k
                passf4neg((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], &wa[ix3]);
847
848
29.9k
            na = 1 - na;
849
29.9k
            break;
850
10.0k
        case 2:
851
10.0k
            if (na == 0)
852
10.0k
                passf2neg((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw]);
853
0
            else
854
0
                passf2neg((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw]);
855
856
10.0k
            na = 1 - na;
857
10.0k
            break;
858
5.95k
        case 3:
859
5.95k
            ix2 = iw + ido;
860
861
5.95k
            if (na == 0)
862
177
                passf3((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], isign);
863
5.77k
            else
864
5.77k
                passf3((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], isign);
865
866
5.95k
            na = 1 - na;
867
5.95k
            break;
868
5.95k
        case 5:
869
5.95k
            ix2 = iw + ido;
870
5.95k
            ix3 = ix2 + ido;
871
5.95k
            ix4 = ix3 + ido;
872
873
5.95k
            if (na == 0)
874
5.77k
                passf5((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)c, ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
875
177
            else
876
177
                passf5((const uint16_t)ido, (const uint16_t)l1, (const complex_t*)ch, c, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
877
878
5.95k
            na = 1 - na;
879
5.95k
            break;
880
51.9k
        }
881
882
51.9k
        l1 = l2;
883
51.9k
        iw += (ip-1) * ido;
884
51.9k
    }
885
886
10.4k
    if (na == 0)
887
431
        return;
888
889
4.96M
    for (i = 0; i < n; i++)
890
4.95M
    {
891
4.95M
        RE(c[i]) = RE(ch[i]);
892
4.95M
        IM(c[i]) = IM(ch[i]);
893
4.95M
    }
894
10.0k
}
895
896
void cfftf(cfft_info *cfft, complex_t *c)
897
10.4k
{
898
10.4k
    cfftf1neg(cfft->n, c, cfft->work, (const uint16_t*)cfft->ifac, (const complex_t*)cfft->tab, -1);
899
10.4k
}
900
901
void cfftb(cfft_info *cfft, complex_t *c)
902
906k
{
903
906k
    cfftf1pos(cfft->n, c, cfft->work, (const uint16_t*)cfft->ifac, (const complex_t*)cfft->tab, +1);
904
906k
}
905
906
static void cffti1(uint16_t n, complex_t *wa, uint16_t *ifac)
907
51.5k
{
908
51.5k
    static uint16_t ntryh[4] = {3, 4, 2, 5};
909
#ifndef FIXED_POINT
910
    real_t arg, argh, argld, fi;
911
    uint16_t ido, ipm;
912
    uint16_t i1, k1, l1, l2;
913
    uint16_t ld, ii, ip;
914
#endif
915
51.5k
    uint16_t ntry = 0, i, j;
916
51.5k
    uint16_t ib;
917
51.5k
    uint16_t nf, nl, nq, nr;
918
919
51.5k
    nl = n;
920
51.5k
    nf = 0;
921
51.5k
    j = 0;
922
923
141k
startloop:
924
141k
    j++;
925
926
141k
    if (j <= 4)
927
141k
        ntry = ntryh[j-1];
928
0
    else
929
0
        ntry += 2;
930
931
141k
    do
932
295k
    {
933
295k
        nq = nl / ntry;
934
295k
        nr = nl - ntry*nq;
935
936
295k
        if (nr != 0)
937
89.5k
            goto startloop;
938
939
206k
        nf++;
940
206k
        ifac[nf+1] = ntry;
941
206k
        nl = nq;
942
943
206k
        if (ntry == 2 && nf != 1)
944
19.7k
        {
945
94.4k
            for (i = 2; i <= nf; i++)
946
74.6k
            {
947
74.6k
                ib = nf - i + 2;
948
74.6k
                ifac[ib+1] = ifac[ib];
949
74.6k
            }
950
19.7k
            ifac[2] = 2;
951
19.7k
        }
952
206k
    } while (nl != 1);
953
954
51.5k
    ifac[0] = n;
955
51.5k
    ifac[1] = nf;
956
957
#ifndef FIXED_POINT
958
    argh = (real_t)2.0*(real_t)M_PI / (real_t)n;
959
    i = 0;
960
    l1 = 1;
961
962
162k
    for (k1 = 1; k1 <= nf; k1++)
963
130k
    {
964
130k
        ip = ifac[k1+1];
965
130k
        ld = 0;
966
130k
        l2 = l1*ip;
967
130k
        ido = n / l2;
968
130k
        ipm = ip - 1;
969
970
494k
        for (j = 0; j < ipm; j++)
971
364k
        {
972
364k
            i1 = i;
973
364k
            RE(wa[i]) = 1.0;
974
364k
            IM(wa[i]) = 0.0;
975
            ld += l1;
976
            fi = 0;
977
            argld = ld*argh;
978
979
9.36M
            for (ii = 0; ii < ido; ii++)
980
9.00M
            {
981
9.00M
                i++;
982
9.00M
                fi++;
983
9.00M
                arg = fi * argld;
984
9.00M
                RE(wa[i]) = (real_t)cos(arg);
985
9.00M
#if 1
986
9.00M
                IM(wa[i]) = (real_t)sin(arg);
987
#else
988
                IM(wa[i]) = (real_t)-sin(arg);
989
#endif
990
9.00M
            }
991
992
364k
            if (ip > 5)
993
0
            {
994
0
                RE(wa[i1]) = RE(wa[i]);
995
0
                IM(wa[i1]) = IM(wa[i]);
996
0
            }
997
364k
        }
998
130k
        l1 = l2;
999
130k
    }
1000
#else  // FIXED_POINT
1001
    (void)wa;  /* whoa! does it work for FIXED_POINT? */
1002
#endif
1003
51.5k
}
cfft.c:cffti1
Line
Count
Source
907
19.0k
{
908
19.0k
    static uint16_t ntryh[4] = {3, 4, 2, 5};
909
#ifndef FIXED_POINT
910
    real_t arg, argh, argld, fi;
911
    uint16_t ido, ipm;
912
    uint16_t i1, k1, l1, l2;
913
    uint16_t ld, ii, ip;
914
#endif
915
19.0k
    uint16_t ntry = 0, i, j;
916
19.0k
    uint16_t ib;
917
19.0k
    uint16_t nf, nl, nq, nr;
918
919
19.0k
    nl = n;
920
19.0k
    nf = 0;
921
19.0k
    j = 0;
922
923
51.8k
startloop:
924
51.8k
    j++;
925
926
51.8k
    if (j <= 4)
927
51.8k
        ntry = ntryh[j-1];
928
0
    else
929
0
        ntry += 2;
930
931
51.8k
    do
932
108k
    {
933
108k
        nq = nl / ntry;
934
108k
        nr = nl - ntry*nq;
935
936
108k
        if (nr != 0)
937
32.8k
            goto startloop;
938
939
76.1k
        nf++;
940
76.1k
        ifac[nf+1] = ntry;
941
76.1k
        nl = nq;
942
943
76.1k
        if (ntry == 2 && nf != 1)
944
6.76k
        {
945
32.2k
            for (i = 2; i <= nf; i++)
946
25.4k
            {
947
25.4k
                ib = nf - i + 2;
948
25.4k
                ifac[ib+1] = ifac[ib];
949
25.4k
            }
950
6.76k
            ifac[2] = 2;
951
6.76k
        }
952
76.1k
    } while (nl != 1);
953
954
19.0k
    ifac[0] = n;
955
19.0k
    ifac[1] = nf;
956
957
#ifndef FIXED_POINT
958
    argh = (real_t)2.0*(real_t)M_PI / (real_t)n;
959
    i = 0;
960
    l1 = 1;
961
962
    for (k1 = 1; k1 <= nf; k1++)
963
    {
964
        ip = ifac[k1+1];
965
        ld = 0;
966
        l2 = l1*ip;
967
        ido = n / l2;
968
        ipm = ip - 1;
969
970
        for (j = 0; j < ipm; j++)
971
        {
972
            i1 = i;
973
            RE(wa[i]) = 1.0;
974
            IM(wa[i]) = 0.0;
975
            ld += l1;
976
            fi = 0;
977
            argld = ld*argh;
978
979
            for (ii = 0; ii < ido; ii++)
980
            {
981
                i++;
982
                fi++;
983
                arg = fi * argld;
984
                RE(wa[i]) = (real_t)cos(arg);
985
#if 1
986
                IM(wa[i]) = (real_t)sin(arg);
987
#else
988
                IM(wa[i]) = (real_t)-sin(arg);
989
#endif
990
            }
991
992
            if (ip > 5)
993
            {
994
                RE(wa[i1]) = RE(wa[i]);
995
                IM(wa[i1]) = IM(wa[i]);
996
            }
997
        }
998
        l1 = l2;
999
    }
1000
#else  // FIXED_POINT
1001
19.0k
    (void)wa;  /* whoa! does it work for FIXED_POINT? */
1002
19.0k
#endif
1003
19.0k
}
cfft.c:cffti1
Line
Count
Source
907
32.5k
{
908
32.5k
    static uint16_t ntryh[4] = {3, 4, 2, 5};
909
32.5k
#ifndef FIXED_POINT
910
32.5k
    real_t arg, argh, argld, fi;
911
32.5k
    uint16_t ido, ipm;
912
32.5k
    uint16_t i1, k1, l1, l2;
913
32.5k
    uint16_t ld, ii, ip;
914
32.5k
#endif
915
32.5k
    uint16_t ntry = 0, i, j;
916
32.5k
    uint16_t ib;
917
32.5k
    uint16_t nf, nl, nq, nr;
918
919
32.5k
    nl = n;
920
32.5k
    nf = 0;
921
32.5k
    j = 0;
922
923
89.2k
startloop:
924
89.2k
    j++;
925
926
89.2k
    if (j <= 4)
927
89.2k
        ntry = ntryh[j-1];
928
0
    else
929
0
        ntry += 2;
930
931
89.2k
    do
932
186k
    {
933
186k
        nq = nl / ntry;
934
186k
        nr = nl - ntry*nq;
935
936
186k
        if (nr != 0)
937
56.7k
            goto startloop;
938
939
130k
        nf++;
940
130k
        ifac[nf+1] = ntry;
941
130k
        nl = nq;
942
943
130k
        if (ntry == 2 && nf != 1)
944
13.0k
        {
945
62.1k
            for (i = 2; i <= nf; i++)
946
49.1k
            {
947
49.1k
                ib = nf - i + 2;
948
49.1k
                ifac[ib+1] = ifac[ib];
949
49.1k
            }
950
13.0k
            ifac[2] = 2;
951
13.0k
        }
952
130k
    } while (nl != 1);
953
954
32.5k
    ifac[0] = n;
955
32.5k
    ifac[1] = nf;
956
957
32.5k
#ifndef FIXED_POINT
958
32.5k
    argh = (real_t)2.0*(real_t)M_PI / (real_t)n;
959
32.5k
    i = 0;
960
32.5k
    l1 = 1;
961
962
162k
    for (k1 = 1; k1 <= nf; k1++)
963
130k
    {
964
130k
        ip = ifac[k1+1];
965
130k
        ld = 0;
966
130k
        l2 = l1*ip;
967
130k
        ido = n / l2;
968
130k
        ipm = ip - 1;
969
970
494k
        for (j = 0; j < ipm; j++)
971
364k
        {
972
364k
            i1 = i;
973
364k
            RE(wa[i]) = 1.0;
974
364k
            IM(wa[i]) = 0.0;
975
364k
            ld += l1;
976
364k
            fi = 0;
977
364k
            argld = ld*argh;
978
979
9.36M
            for (ii = 0; ii < ido; ii++)
980
9.00M
            {
981
9.00M
                i++;
982
9.00M
                fi++;
983
9.00M
                arg = fi * argld;
984
9.00M
                RE(wa[i]) = (real_t)cos(arg);
985
9.00M
#if 1
986
9.00M
                IM(wa[i]) = (real_t)sin(arg);
987
#else
988
                IM(wa[i]) = (real_t)-sin(arg);
989
#endif
990
9.00M
            }
991
992
364k
            if (ip > 5)
993
0
            {
994
0
                RE(wa[i1]) = RE(wa[i]);
995
0
                IM(wa[i1]) = IM(wa[i]);
996
0
            }
997
364k
        }
998
130k
        l1 = l2;
999
130k
    }
1000
#else  // FIXED_POINT
1001
    (void)wa;  /* whoa! does it work for FIXED_POINT? */
1002
#endif
1003
32.5k
}
1004
1005
cfft_info *cffti(uint16_t n)
1006
2.51k
{
1007
2.51k
    cfft_info *cfft = (cfft_info*)faad_malloc(sizeof(cfft_info));
1008
1009
2.51k
    cfft->n = n;
1010
2.51k
    cfft->work = (complex_t*)faad_malloc(n*sizeof(complex_t));
1011
1012
#ifndef FIXED_POINT
1013
    cfft->tab = (complex_t*)faad_malloc(n*sizeof(complex_t));
1014
1015
    cffti1(n, cfft->tab, cfft->ifac);
1016
#else
1017
2.51k
    cffti1(n, NULL, cfft->ifac);
1018
1019
2.51k
    switch (n)
1020
2.51k
    {
1021
835
    case 64: cfft->tab = (complex_t*)cfft_tab_64; break;
1022
835
    case 512: cfft->tab = (complex_t*)cfft_tab_512; break;
1023
#ifdef LD_DEC
1024
    case 256: cfft->tab = (complex_t*)cfft_tab_256; break;
1025
#endif
1026
1027
0
#ifdef ALLOW_SMALL_FRAMELENGTH
1028
423
    case 60: cfft->tab = (complex_t*)cfft_tab_60; break;
1029
423
    case 480: cfft->tab = (complex_t*)cfft_tab_480; break;
1030
#ifdef LD_DEC
1031
    case 240: cfft->tab = (complex_t*)cfft_tab_240; break;
1032
#endif
1033
0
#endif
1034
0
    case 128: cfft->tab = (complex_t*)cfft_tab_128; break;
1035
2.51k
    }
1036
2.51k
#endif
1037
1038
2.51k
    return cfft;
1039
2.51k
}
1040
1041
void cfftu(cfft_info *cfft)
1042
19.0k
{
1043
19.0k
    if (cfft->work) faad_free(cfft->work);
1044
#ifndef FIXED_POINT
1045
    if (cfft->tab) faad_free(cfft->tab);
1046
#endif
1047
1048
19.0k
    if (cfft) faad_free(cfft);
1049
19.0k
}
1050