Coverage Report

Created: 2026-07-30 06:27

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/svt-av1/Source/Lib/Codec/transforms.c
Line
Count
Source
1
/*
2
* Copyright(c) 2019 Intel Corporation
3
* Copyright (c) 2016, Alliance for Open Media. All rights reserved
4
*
5
* This source code is subject to the terms of the BSD 2 Clause License and
6
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
7
* was not distributed with this source code in the LICENSE file, you can
8
* obtain it at https://www.aomedia.org/license/software-license. If the Alliance for Open
9
* Media Patent License 1.0 was not distributed with this source code in the
10
* PATENTS file, you can obtain it at https://www.aomedia.org/license/patent-license.
11
*/
12
13
#include <stdlib.h>
14
#include <string.h>
15
#include "transforms.h"
16
#include "common_utils.h"
17
#include "aom_dsp_rtcd.h"
18
19
const int8_t fwd_cos_bit_col[MAX_TXWH_IDX /*txw_idx*/][MAX_TXWH_IDX /*txh_idx*/] = {
20
    {13, 13, 13, 0, 0}, {13, 13, 13, 12, 0}, {13, 13, 13, 12, 13}, {0, 13, 13, 12, 13}, {0, 0, 13, 12, 13}};
21
const int8_t fwd_cos_bit_row[MAX_TXWH_IDX /*txw_idx*/][MAX_TXWH_IDX /*txh_idx*/] = {
22
    {13, 13, 12, 0, 0}, {13, 13, 13, 12, 0}, {13, 13, 12, 13, 12}, {0, 12, 13, 12, 11}, {0, 0, 12, 11, 10}};
23
24
const uint8_t tx_blocks_per_depth[BLOCK_SIZES_ALL][MAX_VARTX_DEPTH + 1] = {
25
    {1, 1, 1}, // BLOCK_4X4
26
    {1, 1, 1}, // BLOCK_4X8
27
    {1, 1, 1}, // BLOCK_8X4
28
    {1, 4, 4}, // BLOCK_8X8
29
    {1, 2, 8}, // BLOCK_8X16
30
    {1, 2, 8}, // BLOCK_16X8
31
    {1, 4, 16}, // BLOCK_16X16
32
    {1, 2, 8}, // BLOCK_16X32
33
    {1, 2, 8}, // BLOCK_32X16
34
    {1, 4, 16}, // BLOCK_32X32
35
    {1, 2, 8}, // BLOCK_32X64
36
    {1, 2, 8}, // BLOCK_64X32
37
    {1, 4, 16}, // BLOCK_64X64
38
    {2, 2, 2}, // BLOCK_64X128
39
    {2, 2, 2}, // BLOCK_128X64
40
    {4, 4, 4}, // BLOCK_128X128
41
    {1, 2, 4}, // BLOCK_4X16
42
    {1, 2, 4}, // BLOCK_16X4
43
    {1, 2, 4}, // BLOCK_8X32
44
    {1, 2, 4}, // BLOCK_32X8
45
    {1, 2, 4}, // BLOCK_16X64
46
    {1, 2, 4} // BLOCK_64X16
47
};
48
49
// origin is block - separate tables for INTRA (idx 0) and INTER (idx 1) needed b/c of tx depth 2
50
Position tx_org[BLOCK_SIZES_ALL][2 /*is_inter*/][MAX_VARTX_DEPTH + 1][MAX_TXB_COUNT]; // built at init
51
52
// Build the per-(bsize, is_inter, tx_depth) transform-block origins from tx_depth_to_tx_size[]. INTRA lists
53
// the txbs in raster order; INTER lists them in quad/Z order (raster within each depth-1 parent), which only
54
// differs from raster at tx_depth 2 of 2D-split blocks. Replaces a ~17 KB const table.
55
1
void svt_aom_build_tx_org(void) {
56
1
    memset(tx_org, 0, sizeof(tx_org));
57
23
    for (BlockSize bs = 0; bs < BLOCK_SIZES_ALL; bs++) {
58
22
        const int bw = block_size_wide[bs], bh = block_size_high[bs];
59
88
        for (int depth = 0; depth <= MAX_VARTX_DEPTH; depth++) {
60
66
            const TxSize txs = tx_depth_to_tx_size[depth][bs];
61
66
            const int    tw = tx_size_wide[txs], th = tx_size_high[txs];
62
66
            int          k = 0;
63
178
            for (int y = 0; y < bh; y += th) {
64
322
                for (int x = 0; x < bw; x += tw) {
65
210
                    tx_org[bs][0][depth][k++] = (Position){x, y};
66
210
                }
67
112
            }
68
66
            k = 0;
69
66
            if (depth == 0) {
70
46
                for (int y = 0; y < bh; y += th) {
71
51
                    for (int x = 0; x < bw; x += tw) {
72
27
                        tx_org[bs][1][depth][k++] = (Position){x, y};
73
27
                    }
74
24
                }
75
44
            } else {
76
44
                const TxSize ptxs = tx_depth_to_tx_size[depth - 1][bs];
77
44
                const int    ptw = tx_size_wide[ptxs], pth = tx_size_high[ptxs];
78
102
                for (int py = 0; py < bh; py += pth) {
79
136
                    for (int px = 0; px < bw; px += ptw) {
80
196
                        for (int y = 0; y < pth; y += th) {
81
304
                            for (int x = 0; x < ptw; x += tw) {
82
186
                                tx_org[bs][1][depth][k++] = (Position){px + x, py + y};
83
186
                            }
84
118
                        }
85
78
                    }
86
58
                }
87
44
            }
88
66
        }
89
22
    }
90
1
}
91
92
static const int8_t fdct4_range_mult2[4]    = {0, 2, 3, 3};
93
static const int8_t fdct8_range_mult2[6]    = {0, 2, 4, 5, 5, 5};
94
static const int8_t fdct16_range_mult2[8]   = {0, 2, 4, 6, 7, 7, 7, 7};
95
static const int8_t fdct32_range_mult2[10]  = {0, 2, 4, 6, 8, 9, 9, 9, 9, 9};
96
static const int8_t fdct64_range_mult2[12]  = {0, 2, 4, 6, 8, 10, 11, 11, 11, 11, 11, 11};
97
static const int8_t fadst4_range_mult2[7]   = {0, 2, 4, 3, 3, 3, 3};
98
static const int8_t fadst8_range_mult2[8]   = {0, 0, 1, 3, 3, 5, 5, 5};
99
static const int8_t fadst16_range_mult2[10] = {0, 0, 1, 3, 3, 5, 5, 7, 7, 7};
100
static const int8_t fadst32_range_mult2[12] = {0, 0, 1, 3, 3, 5, 5, 7, 7, 9, 9, 9};
101
static const int8_t fidtx4_range_mult2[1]   = {1};
102
static const int8_t fidtx8_range_mult2[1]   = {2};
103
static const int8_t fidtx16_range_mult2[1]  = {3};
104
static const int8_t fidtx32_range_mult2[1]  = {4};
105
static const int8_t fidtx64_range_mult2[1]  = {5};
106
107
static const int8_t* fwd_txfm_range_mult2_list[TXFM_TYPES] = {fdct4_range_mult2,
108
                                                              fdct8_range_mult2,
109
                                                              fdct16_range_mult2,
110
                                                              fdct32_range_mult2,
111
                                                              fdct64_range_mult2,
112
                                                              fadst4_range_mult2,
113
                                                              fadst8_range_mult2,
114
                                                              fadst16_range_mult2,
115
                                                              fadst32_range_mult2,
116
                                                              fidtx4_range_mult2,
117
                                                              fidtx8_range_mult2,
118
                                                              fidtx16_range_mult2,
119
                                                              fidtx32_range_mult2,
120
                                                              fidtx64_range_mult2};
121
122
static const int8_t fwd_shift_4x4[3]   = {2, 0, 0};
123
static const int8_t fwd_shift_8x8[3]   = {2, -1, 0};
124
static const int8_t fwd_shift_16x16[3] = {2, -2, 0};
125
static const int8_t fwd_shift_32x32[3] = {2, -4, 0};
126
static const int8_t fwd_shift_64x64[3] = {0, -2, -2};
127
static const int8_t fwd_shift_4x8[3]   = {2, -1, 0};
128
static const int8_t fwd_shift_8x4[3]   = {2, -1, 0};
129
static const int8_t fwd_shift_8x16[3]  = {2, -2, 0};
130
static const int8_t fwd_shift_16x8[3]  = {2, -2, 0};
131
static const int8_t fwd_shift_16x32[3] = {2, -4, 0};
132
static const int8_t fwd_shift_32x16[3] = {2, -4, 0};
133
static const int8_t fwd_shift_32x64[3] = {0, -2, -2};
134
static const int8_t fwd_shift_64x32[3] = {2, -4, -2};
135
static const int8_t fwd_shift_4x16[3]  = {2, -1, 0};
136
static const int8_t fwd_shift_16x4[3]  = {2, -1, 0};
137
static const int8_t fwd_shift_8x32[3]  = {2, -2, 0};
138
static const int8_t fwd_shift_32x8[3]  = {2, -2, 0};
139
static const int8_t fwd_shift_16x64[3] = {0, -2, 0};
140
static const int8_t fwd_shift_64x16[3] = {2, -4, 0};
141
142
const int8_t* fwd_txfm_shift_ls[TX_SIZES_ALL] = {
143
    fwd_shift_4x4,  fwd_shift_8x8,  fwd_shift_16x16, fwd_shift_32x32, fwd_shift_64x64, fwd_shift_4x8,   fwd_shift_8x4,
144
    fwd_shift_8x16, fwd_shift_16x8, fwd_shift_16x32, fwd_shift_32x16, fwd_shift_32x64, fwd_shift_64x32, fwd_shift_4x16,
145
    fwd_shift_16x4, fwd_shift_8x32, fwd_shift_32x8,  fwd_shift_16x64, fwd_shift_64x16,
146
};
147
148
void svt_av1_gen_fwd_stage_range(int8_t* stage_range_col, int8_t* stage_range_row, const Txfm2dFlipCfg* cfg,
149
166k
                                 int32_t bd) {
150
    // Take the shift from the larger dimension in the rectangular case.
151
166k
    const int8_t* shift = cfg->shift;
152
    // i < MAX_TXFM_STAGE_NUM will mute above array bounds warning
153
1.21M
    for (int32_t i = 0; i < cfg->stage_num_col && i < MAX_TXFM_STAGE_NUM; ++i) {
154
1.05M
        stage_range_col[i] = (int8_t)(cfg->stage_range_col[i] + shift[0] + bd + 1);
155
1.05M
    }
156
    // i < MAX_TXFM_STAGE_NUM will mute above array bounds warning
157
1.22M
    for (int32_t i = 0; i < cfg->stage_num_row && i < MAX_TXFM_STAGE_NUM; ++i) {
158
1.05M
        stage_range_row[i] = (int8_t)(cfg->stage_range_row[i] + shift[0] + shift[1] + bd + 1);
159
1.05M
    }
160
166k
}
161
162
46.0k
void svt_av1_fdct4_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
163
46.0k
    (void)stage_range;
164
46.0k
    const int32_t* cospi;
165
166
46.0k
    int32_t *bf0, *bf1;
167
46.0k
    int32_t  step[4];
168
169
    // stage 0;
170
171
    // stage 1;
172
46.0k
    bf1    = output;
173
46.0k
    bf1[0] = input[0] + input[3];
174
46.0k
    bf1[1] = input[1] + input[2];
175
46.0k
    bf1[2] = -input[2] + input[1];
176
46.0k
    bf1[3] = -input[3] + input[0];
177
178
    // stage 2
179
46.0k
    cospi  = cospi_arr(cos_bit);
180
46.0k
    bf0    = output;
181
46.0k
    bf1    = step;
182
46.0k
    bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
183
46.0k
    bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
184
46.0k
    bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
185
46.0k
    bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
186
187
    // stage 3
188
46.0k
    bf0    = step;
189
46.0k
    bf1    = output;
190
46.0k
    bf1[0] = bf0[0];
191
46.0k
    bf1[1] = bf0[2];
192
46.0k
    bf1[2] = bf0[1];
193
46.0k
    bf1[3] = bf0[3];
194
46.0k
}
195
196
2.28M
void svt_av1_fdct8_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
197
2.28M
    (void)stage_range;
198
2.28M
    const int32_t* cospi;
199
200
2.28M
    int32_t *bf0, *bf1;
201
2.28M
    int32_t  step[8];
202
203
    // stage 0;
204
205
    // stage 1;
206
2.28M
    bf1    = output;
207
2.28M
    bf1[0] = input[0] + input[7];
208
2.28M
    bf1[1] = input[1] + input[6];
209
2.28M
    bf1[2] = input[2] + input[5];
210
2.28M
    bf1[3] = input[3] + input[4];
211
2.28M
    bf1[4] = -input[4] + input[3];
212
2.28M
    bf1[5] = -input[5] + input[2];
213
2.28M
    bf1[6] = -input[6] + input[1];
214
2.28M
    bf1[7] = -input[7] + input[0];
215
216
    // stage 2
217
2.28M
    cospi  = cospi_arr(cos_bit);
218
2.28M
    bf0    = output;
219
2.28M
    bf1    = step;
220
2.28M
    bf1[0] = bf0[0] + bf0[3];
221
2.28M
    bf1[1] = bf0[1] + bf0[2];
222
2.28M
    bf1[2] = -bf0[2] + bf0[1];
223
2.28M
    bf1[3] = -bf0[3] + bf0[0];
224
2.28M
    bf1[4] = bf0[4];
225
2.28M
    bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
226
2.28M
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
227
2.28M
    bf1[7] = bf0[7];
228
229
    // stage 3
230
2.28M
    cospi  = cospi_arr(cos_bit);
231
2.28M
    bf0    = step;
232
2.28M
    bf1    = output;
233
2.28M
    bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
234
2.28M
    bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
235
2.28M
    bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
236
2.28M
    bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
237
2.28M
    bf1[4] = bf0[4] + bf0[5];
238
2.28M
    bf1[5] = -bf0[5] + bf0[4];
239
2.28M
    bf1[6] = -bf0[6] + bf0[7];
240
2.28M
    bf1[7] = bf0[7] + bf0[6];
241
242
    // stage 4
243
2.28M
    cospi  = cospi_arr(cos_bit);
244
2.28M
    bf0    = output;
245
2.28M
    bf1    = step;
246
2.28M
    bf1[0] = bf0[0];
247
2.28M
    bf1[1] = bf0[1];
248
2.28M
    bf1[2] = bf0[2];
249
2.28M
    bf1[3] = bf0[3];
250
2.28M
    bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
251
2.28M
    bf1[5] = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
252
2.28M
    bf1[6] = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
253
2.28M
    bf1[7] = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
254
255
    // stage 5
256
2.28M
    bf0    = step;
257
2.28M
    bf1    = output;
258
2.28M
    bf1[0] = bf0[0];
259
2.28M
    bf1[1] = bf0[4];
260
2.28M
    bf1[2] = bf0[2];
261
2.28M
    bf1[3] = bf0[6];
262
2.28M
    bf1[4] = bf0[1];
263
2.28M
    bf1[5] = bf0[5];
264
2.28M
    bf1[6] = bf0[3];
265
2.28M
    bf1[7] = bf0[7];
266
2.28M
}
267
268
133k
void svt_av1_fdct16_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
269
133k
    (void)stage_range;
270
133k
    const int32_t* cospi;
271
272
133k
    int32_t *bf0, *bf1;
273
133k
    int32_t  step[16];
274
275
    // stage 0;
276
277
    // stage 1;
278
133k
    bf1     = output;
279
133k
    bf1[0]  = input[0] + input[15];
280
133k
    bf1[1]  = input[1] + input[14];
281
133k
    bf1[2]  = input[2] + input[13];
282
133k
    bf1[3]  = input[3] + input[12];
283
133k
    bf1[4]  = input[4] + input[11];
284
133k
    bf1[5]  = input[5] + input[10];
285
133k
    bf1[6]  = input[6] + input[9];
286
133k
    bf1[7]  = input[7] + input[8];
287
133k
    bf1[8]  = -input[8] + input[7];
288
133k
    bf1[9]  = -input[9] + input[6];
289
133k
    bf1[10] = -input[10] + input[5];
290
133k
    bf1[11] = -input[11] + input[4];
291
133k
    bf1[12] = -input[12] + input[3];
292
133k
    bf1[13] = -input[13] + input[2];
293
133k
    bf1[14] = -input[14] + input[1];
294
133k
    bf1[15] = -input[15] + input[0];
295
296
    // stage 2
297
133k
    cospi   = cospi_arr(cos_bit);
298
133k
    bf0     = output;
299
133k
    bf1     = step;
300
133k
    bf1[0]  = bf0[0] + bf0[7];
301
133k
    bf1[1]  = bf0[1] + bf0[6];
302
133k
    bf1[2]  = bf0[2] + bf0[5];
303
133k
    bf1[3]  = bf0[3] + bf0[4];
304
133k
    bf1[4]  = -bf0[4] + bf0[3];
305
133k
    bf1[5]  = -bf0[5] + bf0[2];
306
133k
    bf1[6]  = -bf0[6] + bf0[1];
307
133k
    bf1[7]  = -bf0[7] + bf0[0];
308
133k
    bf1[8]  = bf0[8];
309
133k
    bf1[9]  = bf0[9];
310
133k
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
311
133k
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
312
133k
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
313
133k
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
314
133k
    bf1[14] = bf0[14];
315
133k
    bf1[15] = bf0[15];
316
317
    // stage 3
318
133k
    cospi   = cospi_arr(cos_bit);
319
133k
    bf0     = step;
320
133k
    bf1     = output;
321
133k
    bf1[0]  = bf0[0] + bf0[3];
322
133k
    bf1[1]  = bf0[1] + bf0[2];
323
133k
    bf1[2]  = -bf0[2] + bf0[1];
324
133k
    bf1[3]  = -bf0[3] + bf0[0];
325
133k
    bf1[4]  = bf0[4];
326
133k
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
327
133k
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
328
133k
    bf1[7]  = bf0[7];
329
133k
    bf1[8]  = bf0[8] + bf0[11];
330
133k
    bf1[9]  = bf0[9] + bf0[10];
331
133k
    bf1[10] = -bf0[10] + bf0[9];
332
133k
    bf1[11] = -bf0[11] + bf0[8];
333
133k
    bf1[12] = -bf0[12] + bf0[15];
334
133k
    bf1[13] = -bf0[13] + bf0[14];
335
133k
    bf1[14] = bf0[14] + bf0[13];
336
133k
    bf1[15] = bf0[15] + bf0[12];
337
338
    // stage 4
339
133k
    cospi   = cospi_arr(cos_bit);
340
133k
    bf0     = output;
341
133k
    bf1     = step;
342
133k
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
343
133k
    bf1[1]  = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
344
133k
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
345
133k
    bf1[3]  = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
346
133k
    bf1[4]  = bf0[4] + bf0[5];
347
133k
    bf1[5]  = -bf0[5] + bf0[4];
348
133k
    bf1[6]  = -bf0[6] + bf0[7];
349
133k
    bf1[7]  = bf0[7] + bf0[6];
350
133k
    bf1[8]  = bf0[8];
351
133k
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
352
133k
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
353
133k
    bf1[11] = bf0[11];
354
133k
    bf1[12] = bf0[12];
355
133k
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
356
133k
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
357
133k
    bf1[15] = bf0[15];
358
359
    // stage 5
360
133k
    cospi   = cospi_arr(cos_bit);
361
133k
    bf0     = step;
362
133k
    bf1     = output;
363
133k
    bf1[0]  = bf0[0];
364
133k
    bf1[1]  = bf0[1];
365
133k
    bf1[2]  = bf0[2];
366
133k
    bf1[3]  = bf0[3];
367
133k
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
368
133k
    bf1[5]  = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
369
133k
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
370
133k
    bf1[7]  = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
371
133k
    bf1[8]  = bf0[8] + bf0[9];
372
133k
    bf1[9]  = -bf0[9] + bf0[8];
373
133k
    bf1[10] = -bf0[10] + bf0[11];
374
133k
    bf1[11] = bf0[11] + bf0[10];
375
133k
    bf1[12] = bf0[12] + bf0[13];
376
133k
    bf1[13] = -bf0[13] + bf0[12];
377
133k
    bf1[14] = -bf0[14] + bf0[15];
378
133k
    bf1[15] = bf0[15] + bf0[14];
379
380
    // stage 6
381
133k
    cospi   = cospi_arr(cos_bit);
382
133k
    bf0     = output;
383
133k
    bf1     = step;
384
133k
    bf1[0]  = bf0[0];
385
133k
    bf1[1]  = bf0[1];
386
133k
    bf1[2]  = bf0[2];
387
133k
    bf1[3]  = bf0[3];
388
133k
    bf1[4]  = bf0[4];
389
133k
    bf1[5]  = bf0[5];
390
133k
    bf1[6]  = bf0[6];
391
133k
    bf1[7]  = bf0[7];
392
133k
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
393
133k
    bf1[9]  = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
394
133k
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
395
133k
    bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
396
133k
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
397
133k
    bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
398
133k
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
399
133k
    bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
400
401
    // stage 7
402
133k
    bf0     = step;
403
133k
    bf1     = output;
404
133k
    bf1[0]  = bf0[0];
405
133k
    bf1[1]  = bf0[8];
406
133k
    bf1[2]  = bf0[4];
407
133k
    bf1[3]  = bf0[12];
408
133k
    bf1[4]  = bf0[2];
409
133k
    bf1[5]  = bf0[10];
410
133k
    bf1[6]  = bf0[6];
411
133k
    bf1[7]  = bf0[14];
412
133k
    bf1[8]  = bf0[1];
413
133k
    bf1[9]  = bf0[9];
414
133k
    bf1[10] = bf0[5];
415
133k
    bf1[11] = bf0[13];
416
133k
    bf1[12] = bf0[3];
417
133k
    bf1[13] = bf0[11];
418
133k
    bf1[14] = bf0[7];
419
133k
    bf1[15] = bf0[15];
420
133k
}
421
422
612k
void svt_av1_fdct32_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
423
612k
    (void)stage_range;
424
612k
    const int32_t* cospi;
425
426
612k
    int32_t *bf0, *bf1;
427
612k
    int32_t  step[32];
428
429
    // stage 0;
430
431
    // stage 1;
432
612k
    bf1     = output;
433
612k
    bf1[0]  = input[0] + input[31];
434
612k
    bf1[1]  = input[1] + input[30];
435
612k
    bf1[2]  = input[2] + input[29];
436
612k
    bf1[3]  = input[3] + input[28];
437
612k
    bf1[4]  = input[4] + input[27];
438
612k
    bf1[5]  = input[5] + input[26];
439
612k
    bf1[6]  = input[6] + input[25];
440
612k
    bf1[7]  = input[7] + input[24];
441
612k
    bf1[8]  = input[8] + input[23];
442
612k
    bf1[9]  = input[9] + input[22];
443
612k
    bf1[10] = input[10] + input[21];
444
612k
    bf1[11] = input[11] + input[20];
445
612k
    bf1[12] = input[12] + input[19];
446
612k
    bf1[13] = input[13] + input[18];
447
612k
    bf1[14] = input[14] + input[17];
448
612k
    bf1[15] = input[15] + input[16];
449
612k
    bf1[16] = -input[16] + input[15];
450
612k
    bf1[17] = -input[17] + input[14];
451
612k
    bf1[18] = -input[18] + input[13];
452
612k
    bf1[19] = -input[19] + input[12];
453
612k
    bf1[20] = -input[20] + input[11];
454
612k
    bf1[21] = -input[21] + input[10];
455
612k
    bf1[22] = -input[22] + input[9];
456
612k
    bf1[23] = -input[23] + input[8];
457
612k
    bf1[24] = -input[24] + input[7];
458
612k
    bf1[25] = -input[25] + input[6];
459
612k
    bf1[26] = -input[26] + input[5];
460
612k
    bf1[27] = -input[27] + input[4];
461
612k
    bf1[28] = -input[28] + input[3];
462
612k
    bf1[29] = -input[29] + input[2];
463
612k
    bf1[30] = -input[30] + input[1];
464
612k
    bf1[31] = -input[31] + input[0];
465
466
    // stage 2
467
612k
    cospi   = cospi_arr(cos_bit);
468
612k
    bf0     = output;
469
612k
    bf1     = step;
470
612k
    bf1[0]  = bf0[0] + bf0[15];
471
612k
    bf1[1]  = bf0[1] + bf0[14];
472
612k
    bf1[2]  = bf0[2] + bf0[13];
473
612k
    bf1[3]  = bf0[3] + bf0[12];
474
612k
    bf1[4]  = bf0[4] + bf0[11];
475
612k
    bf1[5]  = bf0[5] + bf0[10];
476
612k
    bf1[6]  = bf0[6] + bf0[9];
477
612k
    bf1[7]  = bf0[7] + bf0[8];
478
612k
    bf1[8]  = -bf0[8] + bf0[7];
479
612k
    bf1[9]  = -bf0[9] + bf0[6];
480
612k
    bf1[10] = -bf0[10] + bf0[5];
481
612k
    bf1[11] = -bf0[11] + bf0[4];
482
612k
    bf1[12] = -bf0[12] + bf0[3];
483
612k
    bf1[13] = -bf0[13] + bf0[2];
484
612k
    bf1[14] = -bf0[14] + bf0[1];
485
612k
    bf1[15] = -bf0[15] + bf0[0];
486
612k
    bf1[16] = bf0[16];
487
612k
    bf1[17] = bf0[17];
488
612k
    bf1[18] = bf0[18];
489
612k
    bf1[19] = bf0[19];
490
612k
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
491
612k
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
492
612k
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
493
612k
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
494
612k
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
495
612k
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
496
612k
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
497
612k
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
498
612k
    bf1[28] = bf0[28];
499
612k
    bf1[29] = bf0[29];
500
612k
    bf1[30] = bf0[30];
501
612k
    bf1[31] = bf0[31];
502
503
    // stage 3
504
612k
    cospi   = cospi_arr(cos_bit);
505
612k
    bf0     = step;
506
612k
    bf1     = output;
507
612k
    bf1[0]  = bf0[0] + bf0[7];
508
612k
    bf1[1]  = bf0[1] + bf0[6];
509
612k
    bf1[2]  = bf0[2] + bf0[5];
510
612k
    bf1[3]  = bf0[3] + bf0[4];
511
612k
    bf1[4]  = -bf0[4] + bf0[3];
512
612k
    bf1[5]  = -bf0[5] + bf0[2];
513
612k
    bf1[6]  = -bf0[6] + bf0[1];
514
612k
    bf1[7]  = -bf0[7] + bf0[0];
515
612k
    bf1[8]  = bf0[8];
516
612k
    bf1[9]  = bf0[9];
517
612k
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
518
612k
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
519
612k
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
520
612k
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
521
612k
    bf1[14] = bf0[14];
522
612k
    bf1[15] = bf0[15];
523
612k
    bf1[16] = bf0[16] + bf0[23];
524
612k
    bf1[17] = bf0[17] + bf0[22];
525
612k
    bf1[18] = bf0[18] + bf0[21];
526
612k
    bf1[19] = bf0[19] + bf0[20];
527
612k
    bf1[20] = -bf0[20] + bf0[19];
528
612k
    bf1[21] = -bf0[21] + bf0[18];
529
612k
    bf1[22] = -bf0[22] + bf0[17];
530
612k
    bf1[23] = -bf0[23] + bf0[16];
531
612k
    bf1[24] = -bf0[24] + bf0[31];
532
612k
    bf1[25] = -bf0[25] + bf0[30];
533
612k
    bf1[26] = -bf0[26] + bf0[29];
534
612k
    bf1[27] = -bf0[27] + bf0[28];
535
612k
    bf1[28] = bf0[28] + bf0[27];
536
612k
    bf1[29] = bf0[29] + bf0[26];
537
612k
    bf1[30] = bf0[30] + bf0[25];
538
612k
    bf1[31] = bf0[31] + bf0[24];
539
540
    // stage 4
541
612k
    cospi   = cospi_arr(cos_bit);
542
612k
    bf0     = output;
543
612k
    bf1     = step;
544
612k
    bf1[0]  = bf0[0] + bf0[3];
545
612k
    bf1[1]  = bf0[1] + bf0[2];
546
612k
    bf1[2]  = -bf0[2] + bf0[1];
547
612k
    bf1[3]  = -bf0[3] + bf0[0];
548
612k
    bf1[4]  = bf0[4];
549
612k
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
550
612k
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
551
612k
    bf1[7]  = bf0[7];
552
612k
    bf1[8]  = bf0[8] + bf0[11];
553
612k
    bf1[9]  = bf0[9] + bf0[10];
554
612k
    bf1[10] = -bf0[10] + bf0[9];
555
612k
    bf1[11] = -bf0[11] + bf0[8];
556
612k
    bf1[12] = -bf0[12] + bf0[15];
557
612k
    bf1[13] = -bf0[13] + bf0[14];
558
612k
    bf1[14] = bf0[14] + bf0[13];
559
612k
    bf1[15] = bf0[15] + bf0[12];
560
612k
    bf1[16] = bf0[16];
561
612k
    bf1[17] = bf0[17];
562
612k
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
563
612k
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
564
612k
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
565
612k
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
566
612k
    bf1[22] = bf0[22];
567
612k
    bf1[23] = bf0[23];
568
612k
    bf1[24] = bf0[24];
569
612k
    bf1[25] = bf0[25];
570
612k
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
571
612k
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
572
612k
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
573
612k
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
574
612k
    bf1[30] = bf0[30];
575
612k
    bf1[31] = bf0[31];
576
577
    // stage 5
578
612k
    cospi   = cospi_arr(cos_bit);
579
612k
    bf0     = step;
580
612k
    bf1     = output;
581
612k
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
582
612k
    bf1[1]  = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
583
612k
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
584
612k
    bf1[3]  = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
585
612k
    bf1[4]  = bf0[4] + bf0[5];
586
612k
    bf1[5]  = -bf0[5] + bf0[4];
587
612k
    bf1[6]  = -bf0[6] + bf0[7];
588
612k
    bf1[7]  = bf0[7] + bf0[6];
589
612k
    bf1[8]  = bf0[8];
590
612k
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
591
612k
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
592
612k
    bf1[11] = bf0[11];
593
612k
    bf1[12] = bf0[12];
594
612k
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
595
612k
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
596
612k
    bf1[15] = bf0[15];
597
612k
    bf1[16] = bf0[16] + bf0[19];
598
612k
    bf1[17] = bf0[17] + bf0[18];
599
612k
    bf1[18] = -bf0[18] + bf0[17];
600
612k
    bf1[19] = -bf0[19] + bf0[16];
601
612k
    bf1[20] = -bf0[20] + bf0[23];
602
612k
    bf1[21] = -bf0[21] + bf0[22];
603
612k
    bf1[22] = bf0[22] + bf0[21];
604
612k
    bf1[23] = bf0[23] + bf0[20];
605
612k
    bf1[24] = bf0[24] + bf0[27];
606
612k
    bf1[25] = bf0[25] + bf0[26];
607
612k
    bf1[26] = -bf0[26] + bf0[25];
608
612k
    bf1[27] = -bf0[27] + bf0[24];
609
612k
    bf1[28] = -bf0[28] + bf0[31];
610
612k
    bf1[29] = -bf0[29] + bf0[30];
611
612k
    bf1[30] = bf0[30] + bf0[29];
612
612k
    bf1[31] = bf0[31] + bf0[28];
613
614
    // stage 6
615
612k
    cospi   = cospi_arr(cos_bit);
616
612k
    bf0     = output;
617
612k
    bf1     = step;
618
612k
    bf1[0]  = bf0[0];
619
612k
    bf1[1]  = bf0[1];
620
612k
    bf1[2]  = bf0[2];
621
612k
    bf1[3]  = bf0[3];
622
612k
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
623
612k
    bf1[5]  = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
624
612k
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
625
612k
    bf1[7]  = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
626
612k
    bf1[8]  = bf0[8] + bf0[9];
627
612k
    bf1[9]  = -bf0[9] + bf0[8];
628
612k
    bf1[10] = -bf0[10] + bf0[11];
629
612k
    bf1[11] = bf0[11] + bf0[10];
630
612k
    bf1[12] = bf0[12] + bf0[13];
631
612k
    bf1[13] = -bf0[13] + bf0[12];
632
612k
    bf1[14] = -bf0[14] + bf0[15];
633
612k
    bf1[15] = bf0[15] + bf0[14];
634
612k
    bf1[16] = bf0[16];
635
612k
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
636
612k
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
637
612k
    bf1[19] = bf0[19];
638
612k
    bf1[20] = bf0[20];
639
612k
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
640
612k
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
641
612k
    bf1[23] = bf0[23];
642
612k
    bf1[24] = bf0[24];
643
612k
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
644
612k
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
645
612k
    bf1[27] = bf0[27];
646
612k
    bf1[28] = bf0[28];
647
612k
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
648
612k
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
649
612k
    bf1[31] = bf0[31];
650
651
    // stage 7
652
612k
    cospi   = cospi_arr(cos_bit);
653
612k
    bf0     = step;
654
612k
    bf1     = output;
655
612k
    bf1[0]  = bf0[0];
656
612k
    bf1[1]  = bf0[1];
657
612k
    bf1[2]  = bf0[2];
658
612k
    bf1[3]  = bf0[3];
659
612k
    bf1[4]  = bf0[4];
660
612k
    bf1[5]  = bf0[5];
661
612k
    bf1[6]  = bf0[6];
662
612k
    bf1[7]  = bf0[7];
663
612k
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
664
612k
    bf1[9]  = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
665
612k
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
666
612k
    bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
667
612k
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
668
612k
    bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
669
612k
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
670
612k
    bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
671
612k
    bf1[16] = bf0[16] + bf0[17];
672
612k
    bf1[17] = -bf0[17] + bf0[16];
673
612k
    bf1[18] = -bf0[18] + bf0[19];
674
612k
    bf1[19] = bf0[19] + bf0[18];
675
612k
    bf1[20] = bf0[20] + bf0[21];
676
612k
    bf1[21] = -bf0[21] + bf0[20];
677
612k
    bf1[22] = -bf0[22] + bf0[23];
678
612k
    bf1[23] = bf0[23] + bf0[22];
679
612k
    bf1[24] = bf0[24] + bf0[25];
680
612k
    bf1[25] = -bf0[25] + bf0[24];
681
612k
    bf1[26] = -bf0[26] + bf0[27];
682
612k
    bf1[27] = bf0[27] + bf0[26];
683
612k
    bf1[28] = bf0[28] + bf0[29];
684
612k
    bf1[29] = -bf0[29] + bf0[28];
685
612k
    bf1[30] = -bf0[30] + bf0[31];
686
612k
    bf1[31] = bf0[31] + bf0[30];
687
688
    // stage 8
689
612k
    cospi   = cospi_arr(cos_bit);
690
612k
    bf0     = output;
691
612k
    bf1     = step;
692
612k
    bf1[0]  = bf0[0];
693
612k
    bf1[1]  = bf0[1];
694
612k
    bf1[2]  = bf0[2];
695
612k
    bf1[3]  = bf0[3];
696
612k
    bf1[4]  = bf0[4];
697
612k
    bf1[5]  = bf0[5];
698
612k
    bf1[6]  = bf0[6];
699
612k
    bf1[7]  = bf0[7];
700
612k
    bf1[8]  = bf0[8];
701
612k
    bf1[9]  = bf0[9];
702
612k
    bf1[10] = bf0[10];
703
612k
    bf1[11] = bf0[11];
704
612k
    bf1[12] = bf0[12];
705
612k
    bf1[13] = bf0[13];
706
612k
    bf1[14] = bf0[14];
707
612k
    bf1[15] = bf0[15];
708
612k
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
709
612k
    bf1[17] = half_btf(cospi[30], bf0[17], cospi[34], bf0[30], cos_bit);
710
612k
    bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
711
612k
    bf1[19] = half_btf(cospi[14], bf0[19], cospi[50], bf0[28], cos_bit);
712
612k
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
713
612k
    bf1[21] = half_btf(cospi[22], bf0[21], cospi[42], bf0[26], cos_bit);
714
612k
    bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
715
612k
    bf1[23] = half_btf(cospi[6], bf0[23], cospi[58], bf0[24], cos_bit);
716
612k
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
717
612k
    bf1[25] = half_btf(cospi[38], bf0[25], -cospi[26], bf0[22], cos_bit);
718
612k
    bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
719
612k
    bf1[27] = half_btf(cospi[54], bf0[27], -cospi[10], bf0[20], cos_bit);
720
612k
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
721
612k
    bf1[29] = half_btf(cospi[46], bf0[29], -cospi[18], bf0[18], cos_bit);
722
612k
    bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
723
612k
    bf1[31] = half_btf(cospi[62], bf0[31], -cospi[2], bf0[16], cos_bit);
724
725
    // stage 9
726
612k
    bf0     = step;
727
612k
    bf1     = output;
728
612k
    bf1[0]  = bf0[0];
729
612k
    bf1[1]  = bf0[16];
730
612k
    bf1[2]  = bf0[8];
731
612k
    bf1[3]  = bf0[24];
732
612k
    bf1[4]  = bf0[4];
733
612k
    bf1[5]  = bf0[20];
734
612k
    bf1[6]  = bf0[12];
735
612k
    bf1[7]  = bf0[28];
736
612k
    bf1[8]  = bf0[2];
737
612k
    bf1[9]  = bf0[18];
738
612k
    bf1[10] = bf0[10];
739
612k
    bf1[11] = bf0[26];
740
612k
    bf1[12] = bf0[6];
741
612k
    bf1[13] = bf0[22];
742
612k
    bf1[14] = bf0[14];
743
612k
    bf1[15] = bf0[30];
744
612k
    bf1[16] = bf0[1];
745
612k
    bf1[17] = bf0[17];
746
612k
    bf1[18] = bf0[9];
747
612k
    bf1[19] = bf0[25];
748
612k
    bf1[20] = bf0[5];
749
612k
    bf1[21] = bf0[21];
750
612k
    bf1[22] = bf0[13];
751
612k
    bf1[23] = bf0[29];
752
612k
    bf1[24] = bf0[3];
753
612k
    bf1[25] = bf0[19];
754
612k
    bf1[26] = bf0[11];
755
612k
    bf1[27] = bf0[27];
756
612k
    bf1[28] = bf0[7];
757
612k
    bf1[29] = bf0[23];
758
612k
    bf1[30] = bf0[15];
759
612k
    bf1[31] = bf0[31];
760
612k
}
761
762
488k
void svt_av1_fdct64_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
763
488k
    (void)stage_range;
764
488k
    const int32_t* cospi;
765
766
488k
    int32_t *bf0, *bf1;
767
488k
    int32_t  step[64];
768
769
    // stage 0;
770
771
    // stage 1;
772
488k
    bf1     = output;
773
488k
    bf1[0]  = input[0] + input[63];
774
488k
    bf1[1]  = input[1] + input[62];
775
488k
    bf1[2]  = input[2] + input[61];
776
488k
    bf1[3]  = input[3] + input[60];
777
488k
    bf1[4]  = input[4] + input[59];
778
488k
    bf1[5]  = input[5] + input[58];
779
488k
    bf1[6]  = input[6] + input[57];
780
488k
    bf1[7]  = input[7] + input[56];
781
488k
    bf1[8]  = input[8] + input[55];
782
488k
    bf1[9]  = input[9] + input[54];
783
488k
    bf1[10] = input[10] + input[53];
784
488k
    bf1[11] = input[11] + input[52];
785
488k
    bf1[12] = input[12] + input[51];
786
488k
    bf1[13] = input[13] + input[50];
787
488k
    bf1[14] = input[14] + input[49];
788
488k
    bf1[15] = input[15] + input[48];
789
488k
    bf1[16] = input[16] + input[47];
790
488k
    bf1[17] = input[17] + input[46];
791
488k
    bf1[18] = input[18] + input[45];
792
488k
    bf1[19] = input[19] + input[44];
793
488k
    bf1[20] = input[20] + input[43];
794
488k
    bf1[21] = input[21] + input[42];
795
488k
    bf1[22] = input[22] + input[41];
796
488k
    bf1[23] = input[23] + input[40];
797
488k
    bf1[24] = input[24] + input[39];
798
488k
    bf1[25] = input[25] + input[38];
799
488k
    bf1[26] = input[26] + input[37];
800
488k
    bf1[27] = input[27] + input[36];
801
488k
    bf1[28] = input[28] + input[35];
802
488k
    bf1[29] = input[29] + input[34];
803
488k
    bf1[30] = input[30] + input[33];
804
488k
    bf1[31] = input[31] + input[32];
805
488k
    bf1[32] = -input[32] + input[31];
806
488k
    bf1[33] = -input[33] + input[30];
807
488k
    bf1[34] = -input[34] + input[29];
808
488k
    bf1[35] = -input[35] + input[28];
809
488k
    bf1[36] = -input[36] + input[27];
810
488k
    bf1[37] = -input[37] + input[26];
811
488k
    bf1[38] = -input[38] + input[25];
812
488k
    bf1[39] = -input[39] + input[24];
813
488k
    bf1[40] = -input[40] + input[23];
814
488k
    bf1[41] = -input[41] + input[22];
815
488k
    bf1[42] = -input[42] + input[21];
816
488k
    bf1[43] = -input[43] + input[20];
817
488k
    bf1[44] = -input[44] + input[19];
818
488k
    bf1[45] = -input[45] + input[18];
819
488k
    bf1[46] = -input[46] + input[17];
820
488k
    bf1[47] = -input[47] + input[16];
821
488k
    bf1[48] = -input[48] + input[15];
822
488k
    bf1[49] = -input[49] + input[14];
823
488k
    bf1[50] = -input[50] + input[13];
824
488k
    bf1[51] = -input[51] + input[12];
825
488k
    bf1[52] = -input[52] + input[11];
826
488k
    bf1[53] = -input[53] + input[10];
827
488k
    bf1[54] = -input[54] + input[9];
828
488k
    bf1[55] = -input[55] + input[8];
829
488k
    bf1[56] = -input[56] + input[7];
830
488k
    bf1[57] = -input[57] + input[6];
831
488k
    bf1[58] = -input[58] + input[5];
832
488k
    bf1[59] = -input[59] + input[4];
833
488k
    bf1[60] = -input[60] + input[3];
834
488k
    bf1[61] = -input[61] + input[2];
835
488k
    bf1[62] = -input[62] + input[1];
836
488k
    bf1[63] = -input[63] + input[0];
837
838
    // stage 2
839
488k
    cospi   = cospi_arr(cos_bit);
840
488k
    bf0     = output;
841
488k
    bf1     = step;
842
488k
    bf1[0]  = bf0[0] + bf0[31];
843
488k
    bf1[1]  = bf0[1] + bf0[30];
844
488k
    bf1[2]  = bf0[2] + bf0[29];
845
488k
    bf1[3]  = bf0[3] + bf0[28];
846
488k
    bf1[4]  = bf0[4] + bf0[27];
847
488k
    bf1[5]  = bf0[5] + bf0[26];
848
488k
    bf1[6]  = bf0[6] + bf0[25];
849
488k
    bf1[7]  = bf0[7] + bf0[24];
850
488k
    bf1[8]  = bf0[8] + bf0[23];
851
488k
    bf1[9]  = bf0[9] + bf0[22];
852
488k
    bf1[10] = bf0[10] + bf0[21];
853
488k
    bf1[11] = bf0[11] + bf0[20];
854
488k
    bf1[12] = bf0[12] + bf0[19];
855
488k
    bf1[13] = bf0[13] + bf0[18];
856
488k
    bf1[14] = bf0[14] + bf0[17];
857
488k
    bf1[15] = bf0[15] + bf0[16];
858
488k
    bf1[16] = -bf0[16] + bf0[15];
859
488k
    bf1[17] = -bf0[17] + bf0[14];
860
488k
    bf1[18] = -bf0[18] + bf0[13];
861
488k
    bf1[19] = -bf0[19] + bf0[12];
862
488k
    bf1[20] = -bf0[20] + bf0[11];
863
488k
    bf1[21] = -bf0[21] + bf0[10];
864
488k
    bf1[22] = -bf0[22] + bf0[9];
865
488k
    bf1[23] = -bf0[23] + bf0[8];
866
488k
    bf1[24] = -bf0[24] + bf0[7];
867
488k
    bf1[25] = -bf0[25] + bf0[6];
868
488k
    bf1[26] = -bf0[26] + bf0[5];
869
488k
    bf1[27] = -bf0[27] + bf0[4];
870
488k
    bf1[28] = -bf0[28] + bf0[3];
871
488k
    bf1[29] = -bf0[29] + bf0[2];
872
488k
    bf1[30] = -bf0[30] + bf0[1];
873
488k
    bf1[31] = -bf0[31] + bf0[0];
874
488k
    bf1[32] = bf0[32];
875
488k
    bf1[33] = bf0[33];
876
488k
    bf1[34] = bf0[34];
877
488k
    bf1[35] = bf0[35];
878
488k
    bf1[36] = bf0[36];
879
488k
    bf1[37] = bf0[37];
880
488k
    bf1[38] = bf0[38];
881
488k
    bf1[39] = bf0[39];
882
488k
    bf1[40] = half_btf(-cospi[32], bf0[40], cospi[32], bf0[55], cos_bit);
883
488k
    bf1[41] = half_btf(-cospi[32], bf0[41], cospi[32], bf0[54], cos_bit);
884
488k
    bf1[42] = half_btf(-cospi[32], bf0[42], cospi[32], bf0[53], cos_bit);
885
488k
    bf1[43] = half_btf(-cospi[32], bf0[43], cospi[32], bf0[52], cos_bit);
886
488k
    bf1[44] = half_btf(-cospi[32], bf0[44], cospi[32], bf0[51], cos_bit);
887
488k
    bf1[45] = half_btf(-cospi[32], bf0[45], cospi[32], bf0[50], cos_bit);
888
488k
    bf1[46] = half_btf(-cospi[32], bf0[46], cospi[32], bf0[49], cos_bit);
889
488k
    bf1[47] = half_btf(-cospi[32], bf0[47], cospi[32], bf0[48], cos_bit);
890
488k
    bf1[48] = half_btf(cospi[32], bf0[48], cospi[32], bf0[47], cos_bit);
891
488k
    bf1[49] = half_btf(cospi[32], bf0[49], cospi[32], bf0[46], cos_bit);
892
488k
    bf1[50] = half_btf(cospi[32], bf0[50], cospi[32], bf0[45], cos_bit);
893
488k
    bf1[51] = half_btf(cospi[32], bf0[51], cospi[32], bf0[44], cos_bit);
894
488k
    bf1[52] = half_btf(cospi[32], bf0[52], cospi[32], bf0[43], cos_bit);
895
488k
    bf1[53] = half_btf(cospi[32], bf0[53], cospi[32], bf0[42], cos_bit);
896
488k
    bf1[54] = half_btf(cospi[32], bf0[54], cospi[32], bf0[41], cos_bit);
897
488k
    bf1[55] = half_btf(cospi[32], bf0[55], cospi[32], bf0[40], cos_bit);
898
488k
    bf1[56] = bf0[56];
899
488k
    bf1[57] = bf0[57];
900
488k
    bf1[58] = bf0[58];
901
488k
    bf1[59] = bf0[59];
902
488k
    bf1[60] = bf0[60];
903
488k
    bf1[61] = bf0[61];
904
488k
    bf1[62] = bf0[62];
905
488k
    bf1[63] = bf0[63];
906
907
    // stage 3
908
488k
    cospi   = cospi_arr(cos_bit);
909
488k
    bf0     = step;
910
488k
    bf1     = output;
911
488k
    bf1[0]  = bf0[0] + bf0[15];
912
488k
    bf1[1]  = bf0[1] + bf0[14];
913
488k
    bf1[2]  = bf0[2] + bf0[13];
914
488k
    bf1[3]  = bf0[3] + bf0[12];
915
488k
    bf1[4]  = bf0[4] + bf0[11];
916
488k
    bf1[5]  = bf0[5] + bf0[10];
917
488k
    bf1[6]  = bf0[6] + bf0[9];
918
488k
    bf1[7]  = bf0[7] + bf0[8];
919
488k
    bf1[8]  = -bf0[8] + bf0[7];
920
488k
    bf1[9]  = -bf0[9] + bf0[6];
921
488k
    bf1[10] = -bf0[10] + bf0[5];
922
488k
    bf1[11] = -bf0[11] + bf0[4];
923
488k
    bf1[12] = -bf0[12] + bf0[3];
924
488k
    bf1[13] = -bf0[13] + bf0[2];
925
488k
    bf1[14] = -bf0[14] + bf0[1];
926
488k
    bf1[15] = -bf0[15] + bf0[0];
927
488k
    bf1[16] = bf0[16];
928
488k
    bf1[17] = bf0[17];
929
488k
    bf1[18] = bf0[18];
930
488k
    bf1[19] = bf0[19];
931
488k
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
932
488k
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
933
488k
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
934
488k
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
935
488k
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
936
488k
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
937
488k
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
938
488k
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
939
488k
    bf1[28] = bf0[28];
940
488k
    bf1[29] = bf0[29];
941
488k
    bf1[30] = bf0[30];
942
488k
    bf1[31] = bf0[31];
943
488k
    bf1[32] = bf0[32] + bf0[47];
944
488k
    bf1[33] = bf0[33] + bf0[46];
945
488k
    bf1[34] = bf0[34] + bf0[45];
946
488k
    bf1[35] = bf0[35] + bf0[44];
947
488k
    bf1[36] = bf0[36] + bf0[43];
948
488k
    bf1[37] = bf0[37] + bf0[42];
949
488k
    bf1[38] = bf0[38] + bf0[41];
950
488k
    bf1[39] = bf0[39] + bf0[40];
951
488k
    bf1[40] = -bf0[40] + bf0[39];
952
488k
    bf1[41] = -bf0[41] + bf0[38];
953
488k
    bf1[42] = -bf0[42] + bf0[37];
954
488k
    bf1[43] = -bf0[43] + bf0[36];
955
488k
    bf1[44] = -bf0[44] + bf0[35];
956
488k
    bf1[45] = -bf0[45] + bf0[34];
957
488k
    bf1[46] = -bf0[46] + bf0[33];
958
488k
    bf1[47] = -bf0[47] + bf0[32];
959
488k
    bf1[48] = -bf0[48] + bf0[63];
960
488k
    bf1[49] = -bf0[49] + bf0[62];
961
488k
    bf1[50] = -bf0[50] + bf0[61];
962
488k
    bf1[51] = -bf0[51] + bf0[60];
963
488k
    bf1[52] = -bf0[52] + bf0[59];
964
488k
    bf1[53] = -bf0[53] + bf0[58];
965
488k
    bf1[54] = -bf0[54] + bf0[57];
966
488k
    bf1[55] = -bf0[55] + bf0[56];
967
488k
    bf1[56] = bf0[56] + bf0[55];
968
488k
    bf1[57] = bf0[57] + bf0[54];
969
488k
    bf1[58] = bf0[58] + bf0[53];
970
488k
    bf1[59] = bf0[59] + bf0[52];
971
488k
    bf1[60] = bf0[60] + bf0[51];
972
488k
    bf1[61] = bf0[61] + bf0[50];
973
488k
    bf1[62] = bf0[62] + bf0[49];
974
488k
    bf1[63] = bf0[63] + bf0[48];
975
976
    // stage 4
977
488k
    cospi   = cospi_arr(cos_bit);
978
488k
    bf0     = output;
979
488k
    bf1     = step;
980
488k
    bf1[0]  = bf0[0] + bf0[7];
981
488k
    bf1[1]  = bf0[1] + bf0[6];
982
488k
    bf1[2]  = bf0[2] + bf0[5];
983
488k
    bf1[3]  = bf0[3] + bf0[4];
984
488k
    bf1[4]  = -bf0[4] + bf0[3];
985
488k
    bf1[5]  = -bf0[5] + bf0[2];
986
488k
    bf1[6]  = -bf0[6] + bf0[1];
987
488k
    bf1[7]  = -bf0[7] + bf0[0];
988
488k
    bf1[8]  = bf0[8];
989
488k
    bf1[9]  = bf0[9];
990
488k
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
991
488k
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
992
488k
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
993
488k
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
994
488k
    bf1[14] = bf0[14];
995
488k
    bf1[15] = bf0[15];
996
488k
    bf1[16] = bf0[16] + bf0[23];
997
488k
    bf1[17] = bf0[17] + bf0[22];
998
488k
    bf1[18] = bf0[18] + bf0[21];
999
488k
    bf1[19] = bf0[19] + bf0[20];
1000
488k
    bf1[20] = -bf0[20] + bf0[19];
1001
488k
    bf1[21] = -bf0[21] + bf0[18];
1002
488k
    bf1[22] = -bf0[22] + bf0[17];
1003
488k
    bf1[23] = -bf0[23] + bf0[16];
1004
488k
    bf1[24] = -bf0[24] + bf0[31];
1005
488k
    bf1[25] = -bf0[25] + bf0[30];
1006
488k
    bf1[26] = -bf0[26] + bf0[29];
1007
488k
    bf1[27] = -bf0[27] + bf0[28];
1008
488k
    bf1[28] = bf0[28] + bf0[27];
1009
488k
    bf1[29] = bf0[29] + bf0[26];
1010
488k
    bf1[30] = bf0[30] + bf0[25];
1011
488k
    bf1[31] = bf0[31] + bf0[24];
1012
488k
    bf1[32] = bf0[32];
1013
488k
    bf1[33] = bf0[33];
1014
488k
    bf1[34] = bf0[34];
1015
488k
    bf1[35] = bf0[35];
1016
488k
    bf1[36] = half_btf(-cospi[16], bf0[36], cospi[48], bf0[59], cos_bit);
1017
488k
    bf1[37] = half_btf(-cospi[16], bf0[37], cospi[48], bf0[58], cos_bit);
1018
488k
    bf1[38] = half_btf(-cospi[16], bf0[38], cospi[48], bf0[57], cos_bit);
1019
488k
    bf1[39] = half_btf(-cospi[16], bf0[39], cospi[48], bf0[56], cos_bit);
1020
488k
    bf1[40] = half_btf(-cospi[48], bf0[40], -cospi[16], bf0[55], cos_bit);
1021
488k
    bf1[41] = half_btf(-cospi[48], bf0[41], -cospi[16], bf0[54], cos_bit);
1022
488k
    bf1[42] = half_btf(-cospi[48], bf0[42], -cospi[16], bf0[53], cos_bit);
1023
488k
    bf1[43] = half_btf(-cospi[48], bf0[43], -cospi[16], bf0[52], cos_bit);
1024
488k
    bf1[44] = bf0[44];
1025
488k
    bf1[45] = bf0[45];
1026
488k
    bf1[46] = bf0[46];
1027
488k
    bf1[47] = bf0[47];
1028
488k
    bf1[48] = bf0[48];
1029
488k
    bf1[49] = bf0[49];
1030
488k
    bf1[50] = bf0[50];
1031
488k
    bf1[51] = bf0[51];
1032
488k
    bf1[52] = half_btf(cospi[48], bf0[52], -cospi[16], bf0[43], cos_bit);
1033
488k
    bf1[53] = half_btf(cospi[48], bf0[53], -cospi[16], bf0[42], cos_bit);
1034
488k
    bf1[54] = half_btf(cospi[48], bf0[54], -cospi[16], bf0[41], cos_bit);
1035
488k
    bf1[55] = half_btf(cospi[48], bf0[55], -cospi[16], bf0[40], cos_bit);
1036
488k
    bf1[56] = half_btf(cospi[16], bf0[56], cospi[48], bf0[39], cos_bit);
1037
488k
    bf1[57] = half_btf(cospi[16], bf0[57], cospi[48], bf0[38], cos_bit);
1038
488k
    bf1[58] = half_btf(cospi[16], bf0[58], cospi[48], bf0[37], cos_bit);
1039
488k
    bf1[59] = half_btf(cospi[16], bf0[59], cospi[48], bf0[36], cos_bit);
1040
488k
    bf1[60] = bf0[60];
1041
488k
    bf1[61] = bf0[61];
1042
488k
    bf1[62] = bf0[62];
1043
488k
    bf1[63] = bf0[63];
1044
1045
    // stage 5
1046
488k
    cospi   = cospi_arr(cos_bit);
1047
488k
    bf0     = step;
1048
488k
    bf1     = output;
1049
488k
    bf1[0]  = bf0[0] + bf0[3];
1050
488k
    bf1[1]  = bf0[1] + bf0[2];
1051
488k
    bf1[2]  = -bf0[2] + bf0[1];
1052
488k
    bf1[3]  = -bf0[3] + bf0[0];
1053
488k
    bf1[4]  = bf0[4];
1054
488k
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
1055
488k
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
1056
488k
    bf1[7]  = bf0[7];
1057
488k
    bf1[8]  = bf0[8] + bf0[11];
1058
488k
    bf1[9]  = bf0[9] + bf0[10];
1059
488k
    bf1[10] = -bf0[10] + bf0[9];
1060
488k
    bf1[11] = -bf0[11] + bf0[8];
1061
488k
    bf1[12] = -bf0[12] + bf0[15];
1062
488k
    bf1[13] = -bf0[13] + bf0[14];
1063
488k
    bf1[14] = bf0[14] + bf0[13];
1064
488k
    bf1[15] = bf0[15] + bf0[12];
1065
488k
    bf1[16] = bf0[16];
1066
488k
    bf1[17] = bf0[17];
1067
488k
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
1068
488k
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
1069
488k
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
1070
488k
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
1071
488k
    bf1[22] = bf0[22];
1072
488k
    bf1[23] = bf0[23];
1073
488k
    bf1[24] = bf0[24];
1074
488k
    bf1[25] = bf0[25];
1075
488k
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
1076
488k
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
1077
488k
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
1078
488k
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
1079
488k
    bf1[30] = bf0[30];
1080
488k
    bf1[31] = bf0[31];
1081
488k
    bf1[32] = bf0[32] + bf0[39];
1082
488k
    bf1[33] = bf0[33] + bf0[38];
1083
488k
    bf1[34] = bf0[34] + bf0[37];
1084
488k
    bf1[35] = bf0[35] + bf0[36];
1085
488k
    bf1[36] = -bf0[36] + bf0[35];
1086
488k
    bf1[37] = -bf0[37] + bf0[34];
1087
488k
    bf1[38] = -bf0[38] + bf0[33];
1088
488k
    bf1[39] = -bf0[39] + bf0[32];
1089
488k
    bf1[40] = -bf0[40] + bf0[47];
1090
488k
    bf1[41] = -bf0[41] + bf0[46];
1091
488k
    bf1[42] = -bf0[42] + bf0[45];
1092
488k
    bf1[43] = -bf0[43] + bf0[44];
1093
488k
    bf1[44] = bf0[44] + bf0[43];
1094
488k
    bf1[45] = bf0[45] + bf0[42];
1095
488k
    bf1[46] = bf0[46] + bf0[41];
1096
488k
    bf1[47] = bf0[47] + bf0[40];
1097
488k
    bf1[48] = bf0[48] + bf0[55];
1098
488k
    bf1[49] = bf0[49] + bf0[54];
1099
488k
    bf1[50] = bf0[50] + bf0[53];
1100
488k
    bf1[51] = bf0[51] + bf0[52];
1101
488k
    bf1[52] = -bf0[52] + bf0[51];
1102
488k
    bf1[53] = -bf0[53] + bf0[50];
1103
488k
    bf1[54] = -bf0[54] + bf0[49];
1104
488k
    bf1[55] = -bf0[55] + bf0[48];
1105
488k
    bf1[56] = -bf0[56] + bf0[63];
1106
488k
    bf1[57] = -bf0[57] + bf0[62];
1107
488k
    bf1[58] = -bf0[58] + bf0[61];
1108
488k
    bf1[59] = -bf0[59] + bf0[60];
1109
488k
    bf1[60] = bf0[60] + bf0[59];
1110
488k
    bf1[61] = bf0[61] + bf0[58];
1111
488k
    bf1[62] = bf0[62] + bf0[57];
1112
488k
    bf1[63] = bf0[63] + bf0[56];
1113
1114
    // stage 6
1115
488k
    cospi   = cospi_arr(cos_bit);
1116
488k
    bf0     = output;
1117
488k
    bf1     = step;
1118
488k
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
1119
488k
    bf1[1]  = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
1120
488k
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
1121
488k
    bf1[3]  = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
1122
488k
    bf1[4]  = bf0[4] + bf0[5];
1123
488k
    bf1[5]  = -bf0[5] + bf0[4];
1124
488k
    bf1[6]  = -bf0[6] + bf0[7];
1125
488k
    bf1[7]  = bf0[7] + bf0[6];
1126
488k
    bf1[8]  = bf0[8];
1127
488k
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
1128
488k
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
1129
488k
    bf1[11] = bf0[11];
1130
488k
    bf1[12] = bf0[12];
1131
488k
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
1132
488k
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
1133
488k
    bf1[15] = bf0[15];
1134
488k
    bf1[16] = bf0[16] + bf0[19];
1135
488k
    bf1[17] = bf0[17] + bf0[18];
1136
488k
    bf1[18] = -bf0[18] + bf0[17];
1137
488k
    bf1[19] = -bf0[19] + bf0[16];
1138
488k
    bf1[20] = -bf0[20] + bf0[23];
1139
488k
    bf1[21] = -bf0[21] + bf0[22];
1140
488k
    bf1[22] = bf0[22] + bf0[21];
1141
488k
    bf1[23] = bf0[23] + bf0[20];
1142
488k
    bf1[24] = bf0[24] + bf0[27];
1143
488k
    bf1[25] = bf0[25] + bf0[26];
1144
488k
    bf1[26] = -bf0[26] + bf0[25];
1145
488k
    bf1[27] = -bf0[27] + bf0[24];
1146
488k
    bf1[28] = -bf0[28] + bf0[31];
1147
488k
    bf1[29] = -bf0[29] + bf0[30];
1148
488k
    bf1[30] = bf0[30] + bf0[29];
1149
488k
    bf1[31] = bf0[31] + bf0[28];
1150
488k
    bf1[32] = bf0[32];
1151
488k
    bf1[33] = bf0[33];
1152
488k
    bf1[34] = half_btf(-cospi[8], bf0[34], cospi[56], bf0[61], cos_bit);
1153
488k
    bf1[35] = half_btf(-cospi[8], bf0[35], cospi[56], bf0[60], cos_bit);
1154
488k
    bf1[36] = half_btf(-cospi[56], bf0[36], -cospi[8], bf0[59], cos_bit);
1155
488k
    bf1[37] = half_btf(-cospi[56], bf0[37], -cospi[8], bf0[58], cos_bit);
1156
488k
    bf1[38] = bf0[38];
1157
488k
    bf1[39] = bf0[39];
1158
488k
    bf1[40] = bf0[40];
1159
488k
    bf1[41] = bf0[41];
1160
488k
    bf1[42] = half_btf(-cospi[40], bf0[42], cospi[24], bf0[53], cos_bit);
1161
488k
    bf1[43] = half_btf(-cospi[40], bf0[43], cospi[24], bf0[52], cos_bit);
1162
488k
    bf1[44] = half_btf(-cospi[24], bf0[44], -cospi[40], bf0[51], cos_bit);
1163
488k
    bf1[45] = half_btf(-cospi[24], bf0[45], -cospi[40], bf0[50], cos_bit);
1164
488k
    bf1[46] = bf0[46];
1165
488k
    bf1[47] = bf0[47];
1166
488k
    bf1[48] = bf0[48];
1167
488k
    bf1[49] = bf0[49];
1168
488k
    bf1[50] = half_btf(cospi[24], bf0[50], -cospi[40], bf0[45], cos_bit);
1169
488k
    bf1[51] = half_btf(cospi[24], bf0[51], -cospi[40], bf0[44], cos_bit);
1170
488k
    bf1[52] = half_btf(cospi[40], bf0[52], cospi[24], bf0[43], cos_bit);
1171
488k
    bf1[53] = half_btf(cospi[40], bf0[53], cospi[24], bf0[42], cos_bit);
1172
488k
    bf1[54] = bf0[54];
1173
488k
    bf1[55] = bf0[55];
1174
488k
    bf1[56] = bf0[56];
1175
488k
    bf1[57] = bf0[57];
1176
488k
    bf1[58] = half_btf(cospi[56], bf0[58], -cospi[8], bf0[37], cos_bit);
1177
488k
    bf1[59] = half_btf(cospi[56], bf0[59], -cospi[8], bf0[36], cos_bit);
1178
488k
    bf1[60] = half_btf(cospi[8], bf0[60], cospi[56], bf0[35], cos_bit);
1179
488k
    bf1[61] = half_btf(cospi[8], bf0[61], cospi[56], bf0[34], cos_bit);
1180
488k
    bf1[62] = bf0[62];
1181
488k
    bf1[63] = bf0[63];
1182
1183
    // stage 7
1184
488k
    cospi   = cospi_arr(cos_bit);
1185
488k
    bf0     = step;
1186
488k
    bf1     = output;
1187
488k
    bf1[0]  = bf0[0];
1188
488k
    bf1[1]  = bf0[1];
1189
488k
    bf1[2]  = bf0[2];
1190
488k
    bf1[3]  = bf0[3];
1191
488k
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
1192
488k
    bf1[5]  = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
1193
488k
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
1194
488k
    bf1[7]  = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
1195
488k
    bf1[8]  = bf0[8] + bf0[9];
1196
488k
    bf1[9]  = -bf0[9] + bf0[8];
1197
488k
    bf1[10] = -bf0[10] + bf0[11];
1198
488k
    bf1[11] = bf0[11] + bf0[10];
1199
488k
    bf1[12] = bf0[12] + bf0[13];
1200
488k
    bf1[13] = -bf0[13] + bf0[12];
1201
488k
    bf1[14] = -bf0[14] + bf0[15];
1202
488k
    bf1[15] = bf0[15] + bf0[14];
1203
488k
    bf1[16] = bf0[16];
1204
488k
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
1205
488k
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
1206
488k
    bf1[19] = bf0[19];
1207
488k
    bf1[20] = bf0[20];
1208
488k
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
1209
488k
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
1210
488k
    bf1[23] = bf0[23];
1211
488k
    bf1[24] = bf0[24];
1212
488k
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
1213
488k
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
1214
488k
    bf1[27] = bf0[27];
1215
488k
    bf1[28] = bf0[28];
1216
488k
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
1217
488k
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
1218
488k
    bf1[31] = bf0[31];
1219
488k
    bf1[32] = bf0[32] + bf0[35];
1220
488k
    bf1[33] = bf0[33] + bf0[34];
1221
488k
    bf1[34] = -bf0[34] + bf0[33];
1222
488k
    bf1[35] = -bf0[35] + bf0[32];
1223
488k
    bf1[36] = -bf0[36] + bf0[39];
1224
488k
    bf1[37] = -bf0[37] + bf0[38];
1225
488k
    bf1[38] = bf0[38] + bf0[37];
1226
488k
    bf1[39] = bf0[39] + bf0[36];
1227
488k
    bf1[40] = bf0[40] + bf0[43];
1228
488k
    bf1[41] = bf0[41] + bf0[42];
1229
488k
    bf1[42] = -bf0[42] + bf0[41];
1230
488k
    bf1[43] = -bf0[43] + bf0[40];
1231
488k
    bf1[44] = -bf0[44] + bf0[47];
1232
488k
    bf1[45] = -bf0[45] + bf0[46];
1233
488k
    bf1[46] = bf0[46] + bf0[45];
1234
488k
    bf1[47] = bf0[47] + bf0[44];
1235
488k
    bf1[48] = bf0[48] + bf0[51];
1236
488k
    bf1[49] = bf0[49] + bf0[50];
1237
488k
    bf1[50] = -bf0[50] + bf0[49];
1238
488k
    bf1[51] = -bf0[51] + bf0[48];
1239
488k
    bf1[52] = -bf0[52] + bf0[55];
1240
488k
    bf1[53] = -bf0[53] + bf0[54];
1241
488k
    bf1[54] = bf0[54] + bf0[53];
1242
488k
    bf1[55] = bf0[55] + bf0[52];
1243
488k
    bf1[56] = bf0[56] + bf0[59];
1244
488k
    bf1[57] = bf0[57] + bf0[58];
1245
488k
    bf1[58] = -bf0[58] + bf0[57];
1246
488k
    bf1[59] = -bf0[59] + bf0[56];
1247
488k
    bf1[60] = -bf0[60] + bf0[63];
1248
488k
    bf1[61] = -bf0[61] + bf0[62];
1249
488k
    bf1[62] = bf0[62] + bf0[61];
1250
488k
    bf1[63] = bf0[63] + bf0[60];
1251
1252
    // stage 8
1253
488k
    cospi   = cospi_arr(cos_bit);
1254
488k
    bf0     = output;
1255
488k
    bf1     = step;
1256
488k
    bf1[0]  = bf0[0];
1257
488k
    bf1[1]  = bf0[1];
1258
488k
    bf1[2]  = bf0[2];
1259
488k
    bf1[3]  = bf0[3];
1260
488k
    bf1[4]  = bf0[4];
1261
488k
    bf1[5]  = bf0[5];
1262
488k
    bf1[6]  = bf0[6];
1263
488k
    bf1[7]  = bf0[7];
1264
488k
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
1265
488k
    bf1[9]  = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
1266
488k
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
1267
488k
    bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
1268
488k
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
1269
488k
    bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
1270
488k
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
1271
488k
    bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
1272
488k
    bf1[16] = bf0[16] + bf0[17];
1273
488k
    bf1[17] = -bf0[17] + bf0[16];
1274
488k
    bf1[18] = -bf0[18] + bf0[19];
1275
488k
    bf1[19] = bf0[19] + bf0[18];
1276
488k
    bf1[20] = bf0[20] + bf0[21];
1277
488k
    bf1[21] = -bf0[21] + bf0[20];
1278
488k
    bf1[22] = -bf0[22] + bf0[23];
1279
488k
    bf1[23] = bf0[23] + bf0[22];
1280
488k
    bf1[24] = bf0[24] + bf0[25];
1281
488k
    bf1[25] = -bf0[25] + bf0[24];
1282
488k
    bf1[26] = -bf0[26] + bf0[27];
1283
488k
    bf1[27] = bf0[27] + bf0[26];
1284
488k
    bf1[28] = bf0[28] + bf0[29];
1285
488k
    bf1[29] = -bf0[29] + bf0[28];
1286
488k
    bf1[30] = -bf0[30] + bf0[31];
1287
488k
    bf1[31] = bf0[31] + bf0[30];
1288
488k
    bf1[32] = bf0[32];
1289
488k
    bf1[33] = half_btf(-cospi[4], bf0[33], cospi[60], bf0[62], cos_bit);
1290
488k
    bf1[34] = half_btf(-cospi[60], bf0[34], -cospi[4], bf0[61], cos_bit);
1291
488k
    bf1[35] = bf0[35];
1292
488k
    bf1[36] = bf0[36];
1293
488k
    bf1[37] = half_btf(-cospi[36], bf0[37], cospi[28], bf0[58], cos_bit);
1294
488k
    bf1[38] = half_btf(-cospi[28], bf0[38], -cospi[36], bf0[57], cos_bit);
1295
488k
    bf1[39] = bf0[39];
1296
488k
    bf1[40] = bf0[40];
1297
488k
    bf1[41] = half_btf(-cospi[20], bf0[41], cospi[44], bf0[54], cos_bit);
1298
488k
    bf1[42] = half_btf(-cospi[44], bf0[42], -cospi[20], bf0[53], cos_bit);
1299
488k
    bf1[43] = bf0[43];
1300
488k
    bf1[44] = bf0[44];
1301
488k
    bf1[45] = half_btf(-cospi[52], bf0[45], cospi[12], bf0[50], cos_bit);
1302
488k
    bf1[46] = half_btf(-cospi[12], bf0[46], -cospi[52], bf0[49], cos_bit);
1303
488k
    bf1[47] = bf0[47];
1304
488k
    bf1[48] = bf0[48];
1305
488k
    bf1[49] = half_btf(cospi[12], bf0[49], -cospi[52], bf0[46], cos_bit);
1306
488k
    bf1[50] = half_btf(cospi[52], bf0[50], cospi[12], bf0[45], cos_bit);
1307
488k
    bf1[51] = bf0[51];
1308
488k
    bf1[52] = bf0[52];
1309
488k
    bf1[53] = half_btf(cospi[44], bf0[53], -cospi[20], bf0[42], cos_bit);
1310
488k
    bf1[54] = half_btf(cospi[20], bf0[54], cospi[44], bf0[41], cos_bit);
1311
488k
    bf1[55] = bf0[55];
1312
488k
    bf1[56] = bf0[56];
1313
488k
    bf1[57] = half_btf(cospi[28], bf0[57], -cospi[36], bf0[38], cos_bit);
1314
488k
    bf1[58] = half_btf(cospi[36], bf0[58], cospi[28], bf0[37], cos_bit);
1315
488k
    bf1[59] = bf0[59];
1316
488k
    bf1[60] = bf0[60];
1317
488k
    bf1[61] = half_btf(cospi[60], bf0[61], -cospi[4], bf0[34], cos_bit);
1318
488k
    bf1[62] = half_btf(cospi[4], bf0[62], cospi[60], bf0[33], cos_bit);
1319
488k
    bf1[63] = bf0[63];
1320
1321
    // stage 9
1322
488k
    cospi   = cospi_arr(cos_bit);
1323
488k
    bf0     = step;
1324
488k
    bf1     = output;
1325
488k
    bf1[0]  = bf0[0];
1326
488k
    bf1[1]  = bf0[1];
1327
488k
    bf1[2]  = bf0[2];
1328
488k
    bf1[3]  = bf0[3];
1329
488k
    bf1[4]  = bf0[4];
1330
488k
    bf1[5]  = bf0[5];
1331
488k
    bf1[6]  = bf0[6];
1332
488k
    bf1[7]  = bf0[7];
1333
488k
    bf1[8]  = bf0[8];
1334
488k
    bf1[9]  = bf0[9];
1335
488k
    bf1[10] = bf0[10];
1336
488k
    bf1[11] = bf0[11];
1337
488k
    bf1[12] = bf0[12];
1338
488k
    bf1[13] = bf0[13];
1339
488k
    bf1[14] = bf0[14];
1340
488k
    bf1[15] = bf0[15];
1341
488k
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
1342
488k
    bf1[17] = half_btf(cospi[30], bf0[17], cospi[34], bf0[30], cos_bit);
1343
488k
    bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
1344
488k
    bf1[19] = half_btf(cospi[14], bf0[19], cospi[50], bf0[28], cos_bit);
1345
488k
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
1346
488k
    bf1[21] = half_btf(cospi[22], bf0[21], cospi[42], bf0[26], cos_bit);
1347
488k
    bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
1348
488k
    bf1[23] = half_btf(cospi[6], bf0[23], cospi[58], bf0[24], cos_bit);
1349
488k
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
1350
488k
    bf1[25] = half_btf(cospi[38], bf0[25], -cospi[26], bf0[22], cos_bit);
1351
488k
    bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
1352
488k
    bf1[27] = half_btf(cospi[54], bf0[27], -cospi[10], bf0[20], cos_bit);
1353
488k
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
1354
488k
    bf1[29] = half_btf(cospi[46], bf0[29], -cospi[18], bf0[18], cos_bit);
1355
488k
    bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
1356
488k
    bf1[31] = half_btf(cospi[62], bf0[31], -cospi[2], bf0[16], cos_bit);
1357
488k
    bf1[32] = bf0[32] + bf0[33];
1358
488k
    bf1[33] = -bf0[33] + bf0[32];
1359
488k
    bf1[34] = -bf0[34] + bf0[35];
1360
488k
    bf1[35] = bf0[35] + bf0[34];
1361
488k
    bf1[36] = bf0[36] + bf0[37];
1362
488k
    bf1[37] = -bf0[37] + bf0[36];
1363
488k
    bf1[38] = -bf0[38] + bf0[39];
1364
488k
    bf1[39] = bf0[39] + bf0[38];
1365
488k
    bf1[40] = bf0[40] + bf0[41];
1366
488k
    bf1[41] = -bf0[41] + bf0[40];
1367
488k
    bf1[42] = -bf0[42] + bf0[43];
1368
488k
    bf1[43] = bf0[43] + bf0[42];
1369
488k
    bf1[44] = bf0[44] + bf0[45];
1370
488k
    bf1[45] = -bf0[45] + bf0[44];
1371
488k
    bf1[46] = -bf0[46] + bf0[47];
1372
488k
    bf1[47] = bf0[47] + bf0[46];
1373
488k
    bf1[48] = bf0[48] + bf0[49];
1374
488k
    bf1[49] = -bf0[49] + bf0[48];
1375
488k
    bf1[50] = -bf0[50] + bf0[51];
1376
488k
    bf1[51] = bf0[51] + bf0[50];
1377
488k
    bf1[52] = bf0[52] + bf0[53];
1378
488k
    bf1[53] = -bf0[53] + bf0[52];
1379
488k
    bf1[54] = -bf0[54] + bf0[55];
1380
488k
    bf1[55] = bf0[55] + bf0[54];
1381
488k
    bf1[56] = bf0[56] + bf0[57];
1382
488k
    bf1[57] = -bf0[57] + bf0[56];
1383
488k
    bf1[58] = -bf0[58] + bf0[59];
1384
488k
    bf1[59] = bf0[59] + bf0[58];
1385
488k
    bf1[60] = bf0[60] + bf0[61];
1386
488k
    bf1[61] = -bf0[61] + bf0[60];
1387
488k
    bf1[62] = -bf0[62] + bf0[63];
1388
488k
    bf1[63] = bf0[63] + bf0[62];
1389
1390
    // stage 10
1391
488k
    cospi   = cospi_arr(cos_bit);
1392
488k
    bf0     = output;
1393
488k
    bf1     = step;
1394
488k
    bf1[0]  = bf0[0];
1395
488k
    bf1[1]  = bf0[1];
1396
488k
    bf1[2]  = bf0[2];
1397
488k
    bf1[3]  = bf0[3];
1398
488k
    bf1[4]  = bf0[4];
1399
488k
    bf1[5]  = bf0[5];
1400
488k
    bf1[6]  = bf0[6];
1401
488k
    bf1[7]  = bf0[7];
1402
488k
    bf1[8]  = bf0[8];
1403
488k
    bf1[9]  = bf0[9];
1404
488k
    bf1[10] = bf0[10];
1405
488k
    bf1[11] = bf0[11];
1406
488k
    bf1[12] = bf0[12];
1407
488k
    bf1[13] = bf0[13];
1408
488k
    bf1[14] = bf0[14];
1409
488k
    bf1[15] = bf0[15];
1410
488k
    bf1[16] = bf0[16];
1411
488k
    bf1[17] = bf0[17];
1412
488k
    bf1[18] = bf0[18];
1413
488k
    bf1[19] = bf0[19];
1414
488k
    bf1[20] = bf0[20];
1415
488k
    bf1[21] = bf0[21];
1416
488k
    bf1[22] = bf0[22];
1417
488k
    bf1[23] = bf0[23];
1418
488k
    bf1[24] = bf0[24];
1419
488k
    bf1[25] = bf0[25];
1420
488k
    bf1[26] = bf0[26];
1421
488k
    bf1[27] = bf0[27];
1422
488k
    bf1[28] = bf0[28];
1423
488k
    bf1[29] = bf0[29];
1424
488k
    bf1[30] = bf0[30];
1425
488k
    bf1[31] = bf0[31];
1426
488k
    bf1[32] = half_btf(cospi[63], bf0[32], cospi[1], bf0[63], cos_bit);
1427
488k
    bf1[33] = half_btf(cospi[31], bf0[33], cospi[33], bf0[62], cos_bit);
1428
488k
    bf1[34] = half_btf(cospi[47], bf0[34], cospi[17], bf0[61], cos_bit);
1429
488k
    bf1[35] = half_btf(cospi[15], bf0[35], cospi[49], bf0[60], cos_bit);
1430
488k
    bf1[36] = half_btf(cospi[55], bf0[36], cospi[9], bf0[59], cos_bit);
1431
488k
    bf1[37] = half_btf(cospi[23], bf0[37], cospi[41], bf0[58], cos_bit);
1432
488k
    bf1[38] = half_btf(cospi[39], bf0[38], cospi[25], bf0[57], cos_bit);
1433
488k
    bf1[39] = half_btf(cospi[7], bf0[39], cospi[57], bf0[56], cos_bit);
1434
488k
    bf1[40] = half_btf(cospi[59], bf0[40], cospi[5], bf0[55], cos_bit);
1435
488k
    bf1[41] = half_btf(cospi[27], bf0[41], cospi[37], bf0[54], cos_bit);
1436
488k
    bf1[42] = half_btf(cospi[43], bf0[42], cospi[21], bf0[53], cos_bit);
1437
488k
    bf1[43] = half_btf(cospi[11], bf0[43], cospi[53], bf0[52], cos_bit);
1438
488k
    bf1[44] = half_btf(cospi[51], bf0[44], cospi[13], bf0[51], cos_bit);
1439
488k
    bf1[45] = half_btf(cospi[19], bf0[45], cospi[45], bf0[50], cos_bit);
1440
488k
    bf1[46] = half_btf(cospi[35], bf0[46], cospi[29], bf0[49], cos_bit);
1441
488k
    bf1[47] = half_btf(cospi[3], bf0[47], cospi[61], bf0[48], cos_bit);
1442
488k
    bf1[48] = half_btf(cospi[3], bf0[48], -cospi[61], bf0[47], cos_bit);
1443
488k
    bf1[49] = half_btf(cospi[35], bf0[49], -cospi[29], bf0[46], cos_bit);
1444
488k
    bf1[50] = half_btf(cospi[19], bf0[50], -cospi[45], bf0[45], cos_bit);
1445
488k
    bf1[51] = half_btf(cospi[51], bf0[51], -cospi[13], bf0[44], cos_bit);
1446
488k
    bf1[52] = half_btf(cospi[11], bf0[52], -cospi[53], bf0[43], cos_bit);
1447
488k
    bf1[53] = half_btf(cospi[43], bf0[53], -cospi[21], bf0[42], cos_bit);
1448
488k
    bf1[54] = half_btf(cospi[27], bf0[54], -cospi[37], bf0[41], cos_bit);
1449
488k
    bf1[55] = half_btf(cospi[59], bf0[55], -cospi[5], bf0[40], cos_bit);
1450
488k
    bf1[56] = half_btf(cospi[7], bf0[56], -cospi[57], bf0[39], cos_bit);
1451
488k
    bf1[57] = half_btf(cospi[39], bf0[57], -cospi[25], bf0[38], cos_bit);
1452
488k
    bf1[58] = half_btf(cospi[23], bf0[58], -cospi[41], bf0[37], cos_bit);
1453
488k
    bf1[59] = half_btf(cospi[55], bf0[59], -cospi[9], bf0[36], cos_bit);
1454
488k
    bf1[60] = half_btf(cospi[15], bf0[60], -cospi[49], bf0[35], cos_bit);
1455
488k
    bf1[61] = half_btf(cospi[47], bf0[61], -cospi[17], bf0[34], cos_bit);
1456
488k
    bf1[62] = half_btf(cospi[31], bf0[62], -cospi[33], bf0[33], cos_bit);
1457
488k
    bf1[63] = half_btf(cospi[63], bf0[63], -cospi[1], bf0[32], cos_bit);
1458
1459
    // stage 11
1460
488k
    bf0     = step;
1461
488k
    bf1     = output;
1462
488k
    bf1[0]  = bf0[0];
1463
488k
    bf1[1]  = bf0[32];
1464
488k
    bf1[2]  = bf0[16];
1465
488k
    bf1[3]  = bf0[48];
1466
488k
    bf1[4]  = bf0[8];
1467
488k
    bf1[5]  = bf0[40];
1468
488k
    bf1[6]  = bf0[24];
1469
488k
    bf1[7]  = bf0[56];
1470
488k
    bf1[8]  = bf0[4];
1471
488k
    bf1[9]  = bf0[36];
1472
488k
    bf1[10] = bf0[20];
1473
488k
    bf1[11] = bf0[52];
1474
488k
    bf1[12] = bf0[12];
1475
488k
    bf1[13] = bf0[44];
1476
488k
    bf1[14] = bf0[28];
1477
488k
    bf1[15] = bf0[60];
1478
488k
    bf1[16] = bf0[2];
1479
488k
    bf1[17] = bf0[34];
1480
488k
    bf1[18] = bf0[18];
1481
488k
    bf1[19] = bf0[50];
1482
488k
    bf1[20] = bf0[10];
1483
488k
    bf1[21] = bf0[42];
1484
488k
    bf1[22] = bf0[26];
1485
488k
    bf1[23] = bf0[58];
1486
488k
    bf1[24] = bf0[6];
1487
488k
    bf1[25] = bf0[38];
1488
488k
    bf1[26] = bf0[22];
1489
488k
    bf1[27] = bf0[54];
1490
488k
    bf1[28] = bf0[14];
1491
488k
    bf1[29] = bf0[46];
1492
488k
    bf1[30] = bf0[30];
1493
488k
    bf1[31] = bf0[62];
1494
488k
    bf1[32] = bf0[1];
1495
488k
    bf1[33] = bf0[33];
1496
488k
    bf1[34] = bf0[17];
1497
488k
    bf1[35] = bf0[49];
1498
488k
    bf1[36] = bf0[9];
1499
488k
    bf1[37] = bf0[41];
1500
488k
    bf1[38] = bf0[25];
1501
488k
    bf1[39] = bf0[57];
1502
488k
    bf1[40] = bf0[5];
1503
488k
    bf1[41] = bf0[37];
1504
488k
    bf1[42] = bf0[21];
1505
488k
    bf1[43] = bf0[53];
1506
488k
    bf1[44] = bf0[13];
1507
488k
    bf1[45] = bf0[45];
1508
488k
    bf1[46] = bf0[29];
1509
488k
    bf1[47] = bf0[61];
1510
488k
    bf1[48] = bf0[3];
1511
488k
    bf1[49] = bf0[35];
1512
488k
    bf1[50] = bf0[19];
1513
488k
    bf1[51] = bf0[51];
1514
488k
    bf1[52] = bf0[11];
1515
488k
    bf1[53] = bf0[43];
1516
488k
    bf1[54] = bf0[27];
1517
488k
    bf1[55] = bf0[59];
1518
488k
    bf1[56] = bf0[7];
1519
488k
    bf1[57] = bf0[39];
1520
488k
    bf1[58] = bf0[23];
1521
488k
    bf1[59] = bf0[55];
1522
488k
    bf1[60] = bf0[15];
1523
488k
    bf1[61] = bf0[47];
1524
488k
    bf1[62] = bf0[31];
1525
488k
    bf1[63] = bf0[63];
1526
488k
}
1527
1528
0
void svt_av1_fadst4_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
1529
0
    (void)stage_range;
1530
0
    int32_t        bit   = cos_bit;
1531
0
    const int32_t* sinpi = sinpi_arr(bit);
1532
0
    int32_t        x0, x1, x2, x3;
1533
0
    int32_t        s0, s1, s2, s3, s4, s5, s6, s7;
1534
1535
    // stage 0
1536
0
    x0 = input[0];
1537
0
    x1 = input[1];
1538
0
    x2 = input[2];
1539
0
    x3 = input[3];
1540
1541
0
    if (!(x0 | x1 | x2 | x3)) {
1542
0
        output[0] = output[1] = output[2] = output[3] = 0;
1543
0
        return;
1544
0
    }
1545
1546
    //// stage 1
1547
    //s0 = range_check_value(sinpi[1] * x0, bit + stage_range[1]);
1548
    //s1 = range_check_value(sinpi[4] * x0, bit + stage_range[1]);
1549
    //s2 = range_check_value(sinpi[2] * x1, bit + stage_range[1]);
1550
    //s3 = range_check_value(sinpi[1] * x1, bit + stage_range[1]);
1551
    //s4 = range_check_value(sinpi[3] * x2, bit + stage_range[1]);
1552
    //s5 = range_check_value(sinpi[4] * x3, bit + stage_range[1]);
1553
    //s6 = range_check_value(sinpi[2] * x3, bit + stage_range[1]);
1554
    //s7 = range_check_value(x0 + x1, stage_range[1]);
1555
1556
    //// stage 2
1557
    //s7 = range_check_value(s7 - x3, stage_range[2]);
1558
1559
    //// stage 3
1560
    //x0 = range_check_value(s0 + s2, bit + stage_range[3]);
1561
    //x1 = range_check_value(sinpi[3] * s7, bit + stage_range[3]);
1562
    //x2 = range_check_value(s1 - s3, bit + stage_range[3]);
1563
    //x3 = range_check_value(s4, bit + stage_range[3]);
1564
1565
    //// stage 4
1566
    //x0 = range_check_value(x0 + s5, bit + stage_range[4]);
1567
    //x2 = range_check_value(x2 + s6, bit + stage_range[4]);
1568
1569
    //// stage 5
1570
    //s0 = range_check_value(x0 + x3, bit + stage_range[5]);
1571
    //s1 = range_check_value(x1, bit + stage_range[5]);
1572
    //s2 = range_check_value(x2 - x3, bit + stage_range[5]);
1573
    //s3 = range_check_value(x2 - x0, bit + stage_range[5]);
1574
1575
    //// stage 6
1576
    //s3 = range_check_value(s3 + x3, bit + stage_range[6]);
1577
1578
    // stage 1
1579
0
    s0 = sinpi[1] * x0;
1580
0
    s1 = sinpi[4] * x0;
1581
0
    s2 = sinpi[2] * x1;
1582
0
    s3 = sinpi[1] * x1;
1583
0
    s4 = sinpi[3] * x2;
1584
0
    s5 = sinpi[4] * x3;
1585
0
    s6 = sinpi[2] * x3;
1586
0
    s7 = x0 + x1;
1587
1588
    // stage 2
1589
0
    s7 = s7 - x3;
1590
1591
    // stage 3
1592
0
    x0 = s0 + s2;
1593
0
    x1 = sinpi[3] * s7;
1594
0
    x2 = s1 - s3;
1595
0
    x3 = s4;
1596
1597
    // stage 4
1598
0
    x0 = x0 + s5;
1599
0
    x2 = x2 + s6;
1600
1601
    // stage 5
1602
0
    s0 = x0 + x3;
1603
0
    s1 = x1;
1604
0
    s2 = x2 - x3;
1605
0
    s3 = x2 - x0;
1606
1607
    // stage 6
1608
0
    s3 = s3 + x3;
1609
1610
    // 1-D transform scaling factor is sqrt(2).
1611
0
    output[0] = round_shift(s0, bit);
1612
0
    output[1] = round_shift(s1, bit);
1613
0
    output[2] = round_shift(s2, bit);
1614
0
    output[3] = round_shift(s3, bit);
1615
0
}
1616
1617
0
void svt_av1_fadst8_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
1618
0
    (void)stage_range;
1619
0
    const int32_t* cospi;
1620
1621
0
    int32_t *bf0, *bf1;
1622
0
    int32_t  step[8];
1623
1624
    // stage 0;
1625
1626
    // stage 1;
1627
0
    assert(output != input);
1628
0
    bf1    = output;
1629
0
    bf1[0] = input[0];
1630
0
    bf1[1] = -input[7];
1631
0
    bf1[2] = -input[3];
1632
0
    bf1[3] = input[4];
1633
0
    bf1[4] = -input[1];
1634
0
    bf1[5] = input[6];
1635
0
    bf1[6] = input[2];
1636
0
    bf1[7] = -input[5];
1637
1638
    // stage 2
1639
0
    cospi  = cospi_arr(cos_bit);
1640
0
    bf0    = output;
1641
0
    bf1    = step;
1642
0
    bf1[0] = bf0[0];
1643
0
    bf1[1] = bf0[1];
1644
0
    bf1[2] = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
1645
0
    bf1[3] = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
1646
0
    bf1[4] = bf0[4];
1647
0
    bf1[5] = bf0[5];
1648
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
1649
0
    bf1[7] = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
1650
1651
    // stage 3
1652
0
    bf0    = step;
1653
0
    bf1    = output;
1654
0
    bf1[0] = bf0[0] + bf0[2];
1655
0
    bf1[1] = bf0[1] + bf0[3];
1656
0
    bf1[2] = bf0[0] - bf0[2];
1657
0
    bf1[3] = bf0[1] - bf0[3];
1658
0
    bf1[4] = bf0[4] + bf0[6];
1659
0
    bf1[5] = bf0[5] + bf0[7];
1660
0
    bf1[6] = bf0[4] - bf0[6];
1661
0
    bf1[7] = bf0[5] - bf0[7];
1662
1663
    // stage 4
1664
0
    cospi  = cospi_arr(cos_bit);
1665
0
    bf0    = output;
1666
0
    bf1    = step;
1667
0
    bf1[0] = bf0[0];
1668
0
    bf1[1] = bf0[1];
1669
0
    bf1[2] = bf0[2];
1670
0
    bf1[3] = bf0[3];
1671
0
    bf1[4] = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
1672
0
    bf1[5] = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
1673
0
    bf1[6] = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
1674
0
    bf1[7] = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
1675
1676
    // stage 5
1677
0
    bf0    = step;
1678
0
    bf1    = output;
1679
0
    bf1[0] = bf0[0] + bf0[4];
1680
0
    bf1[1] = bf0[1] + bf0[5];
1681
0
    bf1[2] = bf0[2] + bf0[6];
1682
0
    bf1[3] = bf0[3] + bf0[7];
1683
0
    bf1[4] = bf0[0] - bf0[4];
1684
0
    bf1[5] = bf0[1] - bf0[5];
1685
0
    bf1[6] = bf0[2] - bf0[6];
1686
0
    bf1[7] = bf0[3] - bf0[7];
1687
1688
    // stage 6
1689
0
    cospi  = cospi_arr(cos_bit);
1690
0
    bf0    = output;
1691
0
    bf1    = step;
1692
0
    bf1[0] = half_btf(cospi[4], bf0[0], cospi[60], bf0[1], cos_bit);
1693
0
    bf1[1] = half_btf(cospi[60], bf0[0], -cospi[4], bf0[1], cos_bit);
1694
0
    bf1[2] = half_btf(cospi[20], bf0[2], cospi[44], bf0[3], cos_bit);
1695
0
    bf1[3] = half_btf(cospi[44], bf0[2], -cospi[20], bf0[3], cos_bit);
1696
0
    bf1[4] = half_btf(cospi[36], bf0[4], cospi[28], bf0[5], cos_bit);
1697
0
    bf1[5] = half_btf(cospi[28], bf0[4], -cospi[36], bf0[5], cos_bit);
1698
0
    bf1[6] = half_btf(cospi[52], bf0[6], cospi[12], bf0[7], cos_bit);
1699
0
    bf1[7] = half_btf(cospi[12], bf0[6], -cospi[52], bf0[7], cos_bit);
1700
1701
    // stage 7
1702
0
    bf0    = step;
1703
0
    bf1    = output;
1704
0
    bf1[0] = bf0[1];
1705
0
    bf1[1] = bf0[6];
1706
0
    bf1[2] = bf0[3];
1707
0
    bf1[3] = bf0[4];
1708
0
    bf1[4] = bf0[5];
1709
0
    bf1[5] = bf0[2];
1710
0
    bf1[6] = bf0[7];
1711
0
    bf1[7] = bf0[0];
1712
0
}
1713
1714
0
void svt_av1_fadst16_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
1715
0
    (void)stage_range;
1716
0
    const int32_t* cospi;
1717
1718
0
    int32_t *bf0, *bf1;
1719
0
    int32_t  step[16];
1720
1721
    // stage 0;
1722
1723
    // stage 1;
1724
0
    assert(output != input);
1725
0
    bf1     = output;
1726
0
    bf1[0]  = input[0];
1727
0
    bf1[1]  = -input[15];
1728
0
    bf1[2]  = -input[7];
1729
0
    bf1[3]  = input[8];
1730
0
    bf1[4]  = -input[3];
1731
0
    bf1[5]  = input[12];
1732
0
    bf1[6]  = input[4];
1733
0
    bf1[7]  = -input[11];
1734
0
    bf1[8]  = -input[1];
1735
0
    bf1[9]  = input[14];
1736
0
    bf1[10] = input[6];
1737
0
    bf1[11] = -input[9];
1738
0
    bf1[12] = input[2];
1739
0
    bf1[13] = -input[13];
1740
0
    bf1[14] = -input[5];
1741
0
    bf1[15] = input[10];
1742
1743
    // stage 2
1744
0
    cospi   = cospi_arr(cos_bit);
1745
0
    bf0     = output;
1746
0
    bf1     = step;
1747
0
    bf1[0]  = bf0[0];
1748
0
    bf1[1]  = bf0[1];
1749
0
    bf1[2]  = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
1750
0
    bf1[3]  = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
1751
0
    bf1[4]  = bf0[4];
1752
0
    bf1[5]  = bf0[5];
1753
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
1754
0
    bf1[7]  = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
1755
0
    bf1[8]  = bf0[8];
1756
0
    bf1[9]  = bf0[9];
1757
0
    bf1[10] = half_btf(cospi[32], bf0[10], cospi[32], bf0[11], cos_bit);
1758
0
    bf1[11] = half_btf(cospi[32], bf0[10], -cospi[32], bf0[11], cos_bit);
1759
0
    bf1[12] = bf0[12];
1760
0
    bf1[13] = bf0[13];
1761
0
    bf1[14] = half_btf(cospi[32], bf0[14], cospi[32], bf0[15], cos_bit);
1762
0
    bf1[15] = half_btf(cospi[32], bf0[14], -cospi[32], bf0[15], cos_bit);
1763
1764
    // stage 3
1765
0
    bf0     = step;
1766
0
    bf1     = output;
1767
0
    bf1[0]  = bf0[0] + bf0[2];
1768
0
    bf1[1]  = bf0[1] + bf0[3];
1769
0
    bf1[2]  = bf0[0] - bf0[2];
1770
0
    bf1[3]  = bf0[1] - bf0[3];
1771
0
    bf1[4]  = bf0[4] + bf0[6];
1772
0
    bf1[5]  = bf0[5] + bf0[7];
1773
0
    bf1[6]  = bf0[4] - bf0[6];
1774
0
    bf1[7]  = bf0[5] - bf0[7];
1775
0
    bf1[8]  = bf0[8] + bf0[10];
1776
0
    bf1[9]  = bf0[9] + bf0[11];
1777
0
    bf1[10] = bf0[8] - bf0[10];
1778
0
    bf1[11] = bf0[9] - bf0[11];
1779
0
    bf1[12] = bf0[12] + bf0[14];
1780
0
    bf1[13] = bf0[13] + bf0[15];
1781
0
    bf1[14] = bf0[12] - bf0[14];
1782
0
    bf1[15] = bf0[13] - bf0[15];
1783
1784
    // stage 4
1785
0
    cospi   = cospi_arr(cos_bit);
1786
0
    bf0     = output;
1787
0
    bf1     = step;
1788
0
    bf1[0]  = bf0[0];
1789
0
    bf1[1]  = bf0[1];
1790
0
    bf1[2]  = bf0[2];
1791
0
    bf1[3]  = bf0[3];
1792
0
    bf1[4]  = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
1793
0
    bf1[5]  = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
1794
0
    bf1[6]  = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
1795
0
    bf1[7]  = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
1796
0
    bf1[8]  = bf0[8];
1797
0
    bf1[9]  = bf0[9];
1798
0
    bf1[10] = bf0[10];
1799
0
    bf1[11] = bf0[11];
1800
0
    bf1[12] = half_btf(cospi[16], bf0[12], cospi[48], bf0[13], cos_bit);
1801
0
    bf1[13] = half_btf(cospi[48], bf0[12], -cospi[16], bf0[13], cos_bit);
1802
0
    bf1[14] = half_btf(-cospi[48], bf0[14], cospi[16], bf0[15], cos_bit);
1803
0
    bf1[15] = half_btf(cospi[16], bf0[14], cospi[48], bf0[15], cos_bit);
1804
1805
    // stage 5
1806
0
    bf0     = step;
1807
0
    bf1     = output;
1808
0
    bf1[0]  = bf0[0] + bf0[4];
1809
0
    bf1[1]  = bf0[1] + bf0[5];
1810
0
    bf1[2]  = bf0[2] + bf0[6];
1811
0
    bf1[3]  = bf0[3] + bf0[7];
1812
0
    bf1[4]  = bf0[0] - bf0[4];
1813
0
    bf1[5]  = bf0[1] - bf0[5];
1814
0
    bf1[6]  = bf0[2] - bf0[6];
1815
0
    bf1[7]  = bf0[3] - bf0[7];
1816
0
    bf1[8]  = bf0[8] + bf0[12];
1817
0
    bf1[9]  = bf0[9] + bf0[13];
1818
0
    bf1[10] = bf0[10] + bf0[14];
1819
0
    bf1[11] = bf0[11] + bf0[15];
1820
0
    bf1[12] = bf0[8] - bf0[12];
1821
0
    bf1[13] = bf0[9] - bf0[13];
1822
0
    bf1[14] = bf0[10] - bf0[14];
1823
0
    bf1[15] = bf0[11] - bf0[15];
1824
1825
    // stage 6
1826
0
    cospi   = cospi_arr(cos_bit);
1827
0
    bf0     = output;
1828
0
    bf1     = step;
1829
0
    bf1[0]  = bf0[0];
1830
0
    bf1[1]  = bf0[1];
1831
0
    bf1[2]  = bf0[2];
1832
0
    bf1[3]  = bf0[3];
1833
0
    bf1[4]  = bf0[4];
1834
0
    bf1[5]  = bf0[5];
1835
0
    bf1[6]  = bf0[6];
1836
0
    bf1[7]  = bf0[7];
1837
0
    bf1[8]  = half_btf(cospi[8], bf0[8], cospi[56], bf0[9], cos_bit);
1838
0
    bf1[9]  = half_btf(cospi[56], bf0[8], -cospi[8], bf0[9], cos_bit);
1839
0
    bf1[10] = half_btf(cospi[40], bf0[10], cospi[24], bf0[11], cos_bit);
1840
0
    bf1[11] = half_btf(cospi[24], bf0[10], -cospi[40], bf0[11], cos_bit);
1841
0
    bf1[12] = half_btf(-cospi[56], bf0[12], cospi[8], bf0[13], cos_bit);
1842
0
    bf1[13] = half_btf(cospi[8], bf0[12], cospi[56], bf0[13], cos_bit);
1843
0
    bf1[14] = half_btf(-cospi[24], bf0[14], cospi[40], bf0[15], cos_bit);
1844
0
    bf1[15] = half_btf(cospi[40], bf0[14], cospi[24], bf0[15], cos_bit);
1845
1846
    // stage 7
1847
0
    bf0     = step;
1848
0
    bf1     = output;
1849
0
    bf1[0]  = bf0[0] + bf0[8];
1850
0
    bf1[1]  = bf0[1] + bf0[9];
1851
0
    bf1[2]  = bf0[2] + bf0[10];
1852
0
    bf1[3]  = bf0[3] + bf0[11];
1853
0
    bf1[4]  = bf0[4] + bf0[12];
1854
0
    bf1[5]  = bf0[5] + bf0[13];
1855
0
    bf1[6]  = bf0[6] + bf0[14];
1856
0
    bf1[7]  = bf0[7] + bf0[15];
1857
0
    bf1[8]  = bf0[0] - bf0[8];
1858
0
    bf1[9]  = bf0[1] - bf0[9];
1859
0
    bf1[10] = bf0[2] - bf0[10];
1860
0
    bf1[11] = bf0[3] - bf0[11];
1861
0
    bf1[12] = bf0[4] - bf0[12];
1862
0
    bf1[13] = bf0[5] - bf0[13];
1863
0
    bf1[14] = bf0[6] - bf0[14];
1864
0
    bf1[15] = bf0[7] - bf0[15];
1865
1866
    // stage 8
1867
0
    cospi   = cospi_arr(cos_bit);
1868
0
    bf0     = output;
1869
0
    bf1     = step;
1870
0
    bf1[0]  = half_btf(cospi[2], bf0[0], cospi[62], bf0[1], cos_bit);
1871
0
    bf1[1]  = half_btf(cospi[62], bf0[0], -cospi[2], bf0[1], cos_bit);
1872
0
    bf1[2]  = half_btf(cospi[10], bf0[2], cospi[54], bf0[3], cos_bit);
1873
0
    bf1[3]  = half_btf(cospi[54], bf0[2], -cospi[10], bf0[3], cos_bit);
1874
0
    bf1[4]  = half_btf(cospi[18], bf0[4], cospi[46], bf0[5], cos_bit);
1875
0
    bf1[5]  = half_btf(cospi[46], bf0[4], -cospi[18], bf0[5], cos_bit);
1876
0
    bf1[6]  = half_btf(cospi[26], bf0[6], cospi[38], bf0[7], cos_bit);
1877
0
    bf1[7]  = half_btf(cospi[38], bf0[6], -cospi[26], bf0[7], cos_bit);
1878
0
    bf1[8]  = half_btf(cospi[34], bf0[8], cospi[30], bf0[9], cos_bit);
1879
0
    bf1[9]  = half_btf(cospi[30], bf0[8], -cospi[34], bf0[9], cos_bit);
1880
0
    bf1[10] = half_btf(cospi[42], bf0[10], cospi[22], bf0[11], cos_bit);
1881
0
    bf1[11] = half_btf(cospi[22], bf0[10], -cospi[42], bf0[11], cos_bit);
1882
0
    bf1[12] = half_btf(cospi[50], bf0[12], cospi[14], bf0[13], cos_bit);
1883
0
    bf1[13] = half_btf(cospi[14], bf0[12], -cospi[50], bf0[13], cos_bit);
1884
0
    bf1[14] = half_btf(cospi[58], bf0[14], cospi[6], bf0[15], cos_bit);
1885
0
    bf1[15] = half_btf(cospi[6], bf0[14], -cospi[58], bf0[15], cos_bit);
1886
1887
    // stage 9
1888
0
    bf0     = step;
1889
0
    bf1     = output;
1890
0
    bf1[0]  = bf0[1];
1891
0
    bf1[1]  = bf0[14];
1892
0
    bf1[2]  = bf0[3];
1893
0
    bf1[3]  = bf0[12];
1894
0
    bf1[4]  = bf0[5];
1895
0
    bf1[5]  = bf0[10];
1896
0
    bf1[6]  = bf0[7];
1897
0
    bf1[7]  = bf0[8];
1898
0
    bf1[8]  = bf0[9];
1899
0
    bf1[9]  = bf0[6];
1900
0
    bf1[10] = bf0[11];
1901
0
    bf1[11] = bf0[4];
1902
0
    bf1[12] = bf0[13];
1903
0
    bf1[13] = bf0[2];
1904
0
    bf1[14] = bf0[15];
1905
0
    bf1[15] = bf0[0];
1906
0
}
1907
1908
0
static void av1_fadst32_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
1909
0
    (void)stage_range;
1910
0
    const int32_t* cospi;
1911
1912
0
    int32_t *bf0, *bf1;
1913
0
    int32_t  step[32];
1914
1915
    // stage 0;
1916
1917
    // stage 1;
1918
0
    bf1     = output;
1919
0
    bf1[0]  = input[31];
1920
0
    bf1[1]  = input[0];
1921
0
    bf1[2]  = input[29];
1922
0
    bf1[3]  = input[2];
1923
0
    bf1[4]  = input[27];
1924
0
    bf1[5]  = input[4];
1925
0
    bf1[6]  = input[25];
1926
0
    bf1[7]  = input[6];
1927
0
    bf1[8]  = input[23];
1928
0
    bf1[9]  = input[8];
1929
0
    bf1[10] = input[21];
1930
0
    bf1[11] = input[10];
1931
0
    bf1[12] = input[19];
1932
0
    bf1[13] = input[12];
1933
0
    bf1[14] = input[17];
1934
0
    bf1[15] = input[14];
1935
0
    bf1[16] = input[15];
1936
0
    bf1[17] = input[16];
1937
0
    bf1[18] = input[13];
1938
0
    bf1[19] = input[18];
1939
0
    bf1[20] = input[11];
1940
0
    bf1[21] = input[20];
1941
0
    bf1[22] = input[9];
1942
0
    bf1[23] = input[22];
1943
0
    bf1[24] = input[7];
1944
0
    bf1[25] = input[24];
1945
0
    bf1[26] = input[5];
1946
0
    bf1[27] = input[26];
1947
0
    bf1[28] = input[3];
1948
0
    bf1[29] = input[28];
1949
0
    bf1[30] = input[1];
1950
0
    bf1[31] = input[30];
1951
1952
    // stage 2
1953
0
    cospi   = cospi_arr(cos_bit);
1954
0
    bf0     = output;
1955
0
    bf1     = step;
1956
0
    bf1[0]  = half_btf(cospi[1], bf0[0], cospi[63], bf0[1], cos_bit);
1957
0
    bf1[1]  = half_btf(-cospi[1], bf0[1], cospi[63], bf0[0], cos_bit);
1958
0
    bf1[2]  = half_btf(cospi[5], bf0[2], cospi[59], bf0[3], cos_bit);
1959
0
    bf1[3]  = half_btf(-cospi[5], bf0[3], cospi[59], bf0[2], cos_bit);
1960
0
    bf1[4]  = half_btf(cospi[9], bf0[4], cospi[55], bf0[5], cos_bit);
1961
0
    bf1[5]  = half_btf(-cospi[9], bf0[5], cospi[55], bf0[4], cos_bit);
1962
0
    bf1[6]  = half_btf(cospi[13], bf0[6], cospi[51], bf0[7], cos_bit);
1963
0
    bf1[7]  = half_btf(-cospi[13], bf0[7], cospi[51], bf0[6], cos_bit);
1964
0
    bf1[8]  = half_btf(cospi[17], bf0[8], cospi[47], bf0[9], cos_bit);
1965
0
    bf1[9]  = half_btf(-cospi[17], bf0[9], cospi[47], bf0[8], cos_bit);
1966
0
    bf1[10] = half_btf(cospi[21], bf0[10], cospi[43], bf0[11], cos_bit);
1967
0
    bf1[11] = half_btf(-cospi[21], bf0[11], cospi[43], bf0[10], cos_bit);
1968
0
    bf1[12] = half_btf(cospi[25], bf0[12], cospi[39], bf0[13], cos_bit);
1969
0
    bf1[13] = half_btf(-cospi[25], bf0[13], cospi[39], bf0[12], cos_bit);
1970
0
    bf1[14] = half_btf(cospi[29], bf0[14], cospi[35], bf0[15], cos_bit);
1971
0
    bf1[15] = half_btf(-cospi[29], bf0[15], cospi[35], bf0[14], cos_bit);
1972
0
    bf1[16] = half_btf(cospi[33], bf0[16], cospi[31], bf0[17], cos_bit);
1973
0
    bf1[17] = half_btf(-cospi[33], bf0[17], cospi[31], bf0[16], cos_bit);
1974
0
    bf1[18] = half_btf(cospi[37], bf0[18], cospi[27], bf0[19], cos_bit);
1975
0
    bf1[19] = half_btf(-cospi[37], bf0[19], cospi[27], bf0[18], cos_bit);
1976
0
    bf1[20] = half_btf(cospi[41], bf0[20], cospi[23], bf0[21], cos_bit);
1977
0
    bf1[21] = half_btf(-cospi[41], bf0[21], cospi[23], bf0[20], cos_bit);
1978
0
    bf1[22] = half_btf(cospi[45], bf0[22], cospi[19], bf0[23], cos_bit);
1979
0
    bf1[23] = half_btf(-cospi[45], bf0[23], cospi[19], bf0[22], cos_bit);
1980
0
    bf1[24] = half_btf(cospi[49], bf0[24], cospi[15], bf0[25], cos_bit);
1981
0
    bf1[25] = half_btf(-cospi[49], bf0[25], cospi[15], bf0[24], cos_bit);
1982
0
    bf1[26] = half_btf(cospi[53], bf0[26], cospi[11], bf0[27], cos_bit);
1983
0
    bf1[27] = half_btf(-cospi[53], bf0[27], cospi[11], bf0[26], cos_bit);
1984
0
    bf1[28] = half_btf(cospi[57], bf0[28], cospi[7], bf0[29], cos_bit);
1985
0
    bf1[29] = half_btf(-cospi[57], bf0[29], cospi[7], bf0[28], cos_bit);
1986
0
    bf1[30] = half_btf(cospi[61], bf0[30], cospi[3], bf0[31], cos_bit);
1987
0
    bf1[31] = half_btf(-cospi[61], bf0[31], cospi[3], bf0[30], cos_bit);
1988
1989
    // stage 3
1990
0
    bf0     = step;
1991
0
    bf1     = output;
1992
0
    bf1[0]  = bf0[0] + bf0[16];
1993
0
    bf1[1]  = bf0[1] + bf0[17];
1994
0
    bf1[2]  = bf0[2] + bf0[18];
1995
0
    bf1[3]  = bf0[3] + bf0[19];
1996
0
    bf1[4]  = bf0[4] + bf0[20];
1997
0
    bf1[5]  = bf0[5] + bf0[21];
1998
0
    bf1[6]  = bf0[6] + bf0[22];
1999
0
    bf1[7]  = bf0[7] + bf0[23];
2000
0
    bf1[8]  = bf0[8] + bf0[24];
2001
0
    bf1[9]  = bf0[9] + bf0[25];
2002
0
    bf1[10] = bf0[10] + bf0[26];
2003
0
    bf1[11] = bf0[11] + bf0[27];
2004
0
    bf1[12] = bf0[12] + bf0[28];
2005
0
    bf1[13] = bf0[13] + bf0[29];
2006
0
    bf1[14] = bf0[14] + bf0[30];
2007
0
    bf1[15] = bf0[15] + bf0[31];
2008
0
    bf1[16] = -bf0[16] + bf0[0];
2009
0
    bf1[17] = -bf0[17] + bf0[1];
2010
0
    bf1[18] = -bf0[18] + bf0[2];
2011
0
    bf1[19] = -bf0[19] + bf0[3];
2012
0
    bf1[20] = -bf0[20] + bf0[4];
2013
0
    bf1[21] = -bf0[21] + bf0[5];
2014
0
    bf1[22] = -bf0[22] + bf0[6];
2015
0
    bf1[23] = -bf0[23] + bf0[7];
2016
0
    bf1[24] = -bf0[24] + bf0[8];
2017
0
    bf1[25] = -bf0[25] + bf0[9];
2018
0
    bf1[26] = -bf0[26] + bf0[10];
2019
0
    bf1[27] = -bf0[27] + bf0[11];
2020
0
    bf1[28] = -bf0[28] + bf0[12];
2021
0
    bf1[29] = -bf0[29] + bf0[13];
2022
0
    bf1[30] = -bf0[30] + bf0[14];
2023
0
    bf1[31] = -bf0[31] + bf0[15];
2024
2025
    // stage 4
2026
0
    cospi   = cospi_arr(cos_bit);
2027
0
    bf0     = output;
2028
0
    bf1     = step;
2029
0
    bf1[0]  = bf0[0];
2030
0
    bf1[1]  = bf0[1];
2031
0
    bf1[2]  = bf0[2];
2032
0
    bf1[3]  = bf0[3];
2033
0
    bf1[4]  = bf0[4];
2034
0
    bf1[5]  = bf0[5];
2035
0
    bf1[6]  = bf0[6];
2036
0
    bf1[7]  = bf0[7];
2037
0
    bf1[8]  = bf0[8];
2038
0
    bf1[9]  = bf0[9];
2039
0
    bf1[10] = bf0[10];
2040
0
    bf1[11] = bf0[11];
2041
0
    bf1[12] = bf0[12];
2042
0
    bf1[13] = bf0[13];
2043
0
    bf1[14] = bf0[14];
2044
0
    bf1[15] = bf0[15];
2045
0
    bf1[16] = half_btf(cospi[4], bf0[16], cospi[60], bf0[17], cos_bit);
2046
0
    bf1[17] = half_btf(-cospi[4], bf0[17], cospi[60], bf0[16], cos_bit);
2047
0
    bf1[18] = half_btf(cospi[20], bf0[18], cospi[44], bf0[19], cos_bit);
2048
0
    bf1[19] = half_btf(-cospi[20], bf0[19], cospi[44], bf0[18], cos_bit);
2049
0
    bf1[20] = half_btf(cospi[36], bf0[20], cospi[28], bf0[21], cos_bit);
2050
0
    bf1[21] = half_btf(-cospi[36], bf0[21], cospi[28], bf0[20], cos_bit);
2051
0
    bf1[22] = half_btf(cospi[52], bf0[22], cospi[12], bf0[23], cos_bit);
2052
0
    bf1[23] = half_btf(-cospi[52], bf0[23], cospi[12], bf0[22], cos_bit);
2053
0
    bf1[24] = half_btf(-cospi[60], bf0[24], cospi[4], bf0[25], cos_bit);
2054
0
    bf1[25] = half_btf(cospi[60], bf0[25], cospi[4], bf0[24], cos_bit);
2055
0
    bf1[26] = half_btf(-cospi[44], bf0[26], cospi[20], bf0[27], cos_bit);
2056
0
    bf1[27] = half_btf(cospi[44], bf0[27], cospi[20], bf0[26], cos_bit);
2057
0
    bf1[28] = half_btf(-cospi[28], bf0[28], cospi[36], bf0[29], cos_bit);
2058
0
    bf1[29] = half_btf(cospi[28], bf0[29], cospi[36], bf0[28], cos_bit);
2059
0
    bf1[30] = half_btf(-cospi[12], bf0[30], cospi[52], bf0[31], cos_bit);
2060
0
    bf1[31] = half_btf(cospi[12], bf0[31], cospi[52], bf0[30], cos_bit);
2061
2062
    // stage 5
2063
0
    bf0     = step;
2064
0
    bf1     = output;
2065
0
    bf1[0]  = bf0[0] + bf0[8];
2066
0
    bf1[1]  = bf0[1] + bf0[9];
2067
0
    bf1[2]  = bf0[2] + bf0[10];
2068
0
    bf1[3]  = bf0[3] + bf0[11];
2069
0
    bf1[4]  = bf0[4] + bf0[12];
2070
0
    bf1[5]  = bf0[5] + bf0[13];
2071
0
    bf1[6]  = bf0[6] + bf0[14];
2072
0
    bf1[7]  = bf0[7] + bf0[15];
2073
0
    bf1[8]  = -bf0[8] + bf0[0];
2074
0
    bf1[9]  = -bf0[9] + bf0[1];
2075
0
    bf1[10] = -bf0[10] + bf0[2];
2076
0
    bf1[11] = -bf0[11] + bf0[3];
2077
0
    bf1[12] = -bf0[12] + bf0[4];
2078
0
    bf1[13] = -bf0[13] + bf0[5];
2079
0
    bf1[14] = -bf0[14] + bf0[6];
2080
0
    bf1[15] = -bf0[15] + bf0[7];
2081
0
    bf1[16] = bf0[16] + bf0[24];
2082
0
    bf1[17] = bf0[17] + bf0[25];
2083
0
    bf1[18] = bf0[18] + bf0[26];
2084
0
    bf1[19] = bf0[19] + bf0[27];
2085
0
    bf1[20] = bf0[20] + bf0[28];
2086
0
    bf1[21] = bf0[21] + bf0[29];
2087
0
    bf1[22] = bf0[22] + bf0[30];
2088
0
    bf1[23] = bf0[23] + bf0[31];
2089
0
    bf1[24] = -bf0[24] + bf0[16];
2090
0
    bf1[25] = -bf0[25] + bf0[17];
2091
0
    bf1[26] = -bf0[26] + bf0[18];
2092
0
    bf1[27] = -bf0[27] + bf0[19];
2093
0
    bf1[28] = -bf0[28] + bf0[20];
2094
0
    bf1[29] = -bf0[29] + bf0[21];
2095
0
    bf1[30] = -bf0[30] + bf0[22];
2096
0
    bf1[31] = -bf0[31] + bf0[23];
2097
2098
    // stage 6
2099
0
    cospi   = cospi_arr(cos_bit);
2100
0
    bf0     = output;
2101
0
    bf1     = step;
2102
0
    bf1[0]  = bf0[0];
2103
0
    bf1[1]  = bf0[1];
2104
0
    bf1[2]  = bf0[2];
2105
0
    bf1[3]  = bf0[3];
2106
0
    bf1[4]  = bf0[4];
2107
0
    bf1[5]  = bf0[5];
2108
0
    bf1[6]  = bf0[6];
2109
0
    bf1[7]  = bf0[7];
2110
0
    bf1[8]  = half_btf(cospi[8], bf0[8], cospi[56], bf0[9], cos_bit);
2111
0
    bf1[9]  = half_btf(-cospi[8], bf0[9], cospi[56], bf0[8], cos_bit);
2112
0
    bf1[10] = half_btf(cospi[40], bf0[10], cospi[24], bf0[11], cos_bit);
2113
0
    bf1[11] = half_btf(-cospi[40], bf0[11], cospi[24], bf0[10], cos_bit);
2114
0
    bf1[12] = half_btf(-cospi[56], bf0[12], cospi[8], bf0[13], cos_bit);
2115
0
    bf1[13] = half_btf(cospi[56], bf0[13], cospi[8], bf0[12], cos_bit);
2116
0
    bf1[14] = half_btf(-cospi[24], bf0[14], cospi[40], bf0[15], cos_bit);
2117
0
    bf1[15] = half_btf(cospi[24], bf0[15], cospi[40], bf0[14], cos_bit);
2118
0
    bf1[16] = bf0[16];
2119
0
    bf1[17] = bf0[17];
2120
0
    bf1[18] = bf0[18];
2121
0
    bf1[19] = bf0[19];
2122
0
    bf1[20] = bf0[20];
2123
0
    bf1[21] = bf0[21];
2124
0
    bf1[22] = bf0[22];
2125
0
    bf1[23] = bf0[23];
2126
0
    bf1[24] = half_btf(cospi[8], bf0[24], cospi[56], bf0[25], cos_bit);
2127
0
    bf1[25] = half_btf(-cospi[8], bf0[25], cospi[56], bf0[24], cos_bit);
2128
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[27], cos_bit);
2129
0
    bf1[27] = half_btf(-cospi[40], bf0[27], cospi[24], bf0[26], cos_bit);
2130
0
    bf1[28] = half_btf(-cospi[56], bf0[28], cospi[8], bf0[29], cos_bit);
2131
0
    bf1[29] = half_btf(cospi[56], bf0[29], cospi[8], bf0[28], cos_bit);
2132
0
    bf1[30] = half_btf(-cospi[24], bf0[30], cospi[40], bf0[31], cos_bit);
2133
0
    bf1[31] = half_btf(cospi[24], bf0[31], cospi[40], bf0[30], cos_bit);
2134
2135
    // stage 7
2136
0
    bf0     = step;
2137
0
    bf1     = output;
2138
0
    bf1[0]  = bf0[0] + bf0[4];
2139
0
    bf1[1]  = bf0[1] + bf0[5];
2140
0
    bf1[2]  = bf0[2] + bf0[6];
2141
0
    bf1[3]  = bf0[3] + bf0[7];
2142
0
    bf1[4]  = -bf0[4] + bf0[0];
2143
0
    bf1[5]  = -bf0[5] + bf0[1];
2144
0
    bf1[6]  = -bf0[6] + bf0[2];
2145
0
    bf1[7]  = -bf0[7] + bf0[3];
2146
0
    bf1[8]  = bf0[8] + bf0[12];
2147
0
    bf1[9]  = bf0[9] + bf0[13];
2148
0
    bf1[10] = bf0[10] + bf0[14];
2149
0
    bf1[11] = bf0[11] + bf0[15];
2150
0
    bf1[12] = -bf0[12] + bf0[8];
2151
0
    bf1[13] = -bf0[13] + bf0[9];
2152
0
    bf1[14] = -bf0[14] + bf0[10];
2153
0
    bf1[15] = -bf0[15] + bf0[11];
2154
0
    bf1[16] = bf0[16] + bf0[20];
2155
0
    bf1[17] = bf0[17] + bf0[21];
2156
0
    bf1[18] = bf0[18] + bf0[22];
2157
0
    bf1[19] = bf0[19] + bf0[23];
2158
0
    bf1[20] = -bf0[20] + bf0[16];
2159
0
    bf1[21] = -bf0[21] + bf0[17];
2160
0
    bf1[22] = -bf0[22] + bf0[18];
2161
0
    bf1[23] = -bf0[23] + bf0[19];
2162
0
    bf1[24] = bf0[24] + bf0[28];
2163
0
    bf1[25] = bf0[25] + bf0[29];
2164
0
    bf1[26] = bf0[26] + bf0[30];
2165
0
    bf1[27] = bf0[27] + bf0[31];
2166
0
    bf1[28] = -bf0[28] + bf0[24];
2167
0
    bf1[29] = -bf0[29] + bf0[25];
2168
0
    bf1[30] = -bf0[30] + bf0[26];
2169
0
    bf1[31] = -bf0[31] + bf0[27];
2170
2171
    // stage 8
2172
0
    cospi   = cospi_arr(cos_bit);
2173
0
    bf0     = output;
2174
0
    bf1     = step;
2175
0
    bf1[0]  = bf0[0];
2176
0
    bf1[1]  = bf0[1];
2177
0
    bf1[2]  = bf0[2];
2178
0
    bf1[3]  = bf0[3];
2179
0
    bf1[4]  = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
2180
0
    bf1[5]  = half_btf(-cospi[16], bf0[5], cospi[48], bf0[4], cos_bit);
2181
0
    bf1[6]  = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
2182
0
    bf1[7]  = half_btf(cospi[48], bf0[7], cospi[16], bf0[6], cos_bit);
2183
0
    bf1[8]  = bf0[8];
2184
0
    bf1[9]  = bf0[9];
2185
0
    bf1[10] = bf0[10];
2186
0
    bf1[11] = bf0[11];
2187
0
    bf1[12] = half_btf(cospi[16], bf0[12], cospi[48], bf0[13], cos_bit);
2188
0
    bf1[13] = half_btf(-cospi[16], bf0[13], cospi[48], bf0[12], cos_bit);
2189
0
    bf1[14] = half_btf(-cospi[48], bf0[14], cospi[16], bf0[15], cos_bit);
2190
0
    bf1[15] = half_btf(cospi[48], bf0[15], cospi[16], bf0[14], cos_bit);
2191
0
    bf1[16] = bf0[16];
2192
0
    bf1[17] = bf0[17];
2193
0
    bf1[18] = bf0[18];
2194
0
    bf1[19] = bf0[19];
2195
0
    bf1[20] = half_btf(cospi[16], bf0[20], cospi[48], bf0[21], cos_bit);
2196
0
    bf1[21] = half_btf(-cospi[16], bf0[21], cospi[48], bf0[20], cos_bit);
2197
0
    bf1[22] = half_btf(-cospi[48], bf0[22], cospi[16], bf0[23], cos_bit);
2198
0
    bf1[23] = half_btf(cospi[48], bf0[23], cospi[16], bf0[22], cos_bit);
2199
0
    bf1[24] = bf0[24];
2200
0
    bf1[25] = bf0[25];
2201
0
    bf1[26] = bf0[26];
2202
0
    bf1[27] = bf0[27];
2203
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[29], cos_bit);
2204
0
    bf1[29] = half_btf(-cospi[16], bf0[29], cospi[48], bf0[28], cos_bit);
2205
0
    bf1[30] = half_btf(-cospi[48], bf0[30], cospi[16], bf0[31], cos_bit);
2206
0
    bf1[31] = half_btf(cospi[48], bf0[31], cospi[16], bf0[30], cos_bit);
2207
2208
    // stage 9
2209
0
    bf0     = step;
2210
0
    bf1     = output;
2211
0
    bf1[0]  = bf0[0] + bf0[2];
2212
0
    bf1[1]  = bf0[1] + bf0[3];
2213
0
    bf1[2]  = -bf0[2] + bf0[0];
2214
0
    bf1[3]  = -bf0[3] + bf0[1];
2215
0
    bf1[4]  = bf0[4] + bf0[6];
2216
0
    bf1[5]  = bf0[5] + bf0[7];
2217
0
    bf1[6]  = -bf0[6] + bf0[4];
2218
0
    bf1[7]  = -bf0[7] + bf0[5];
2219
0
    bf1[8]  = bf0[8] + bf0[10];
2220
0
    bf1[9]  = bf0[9] + bf0[11];
2221
0
    bf1[10] = -bf0[10] + bf0[8];
2222
0
    bf1[11] = -bf0[11] + bf0[9];
2223
0
    bf1[12] = bf0[12] + bf0[14];
2224
0
    bf1[13] = bf0[13] + bf0[15];
2225
0
    bf1[14] = -bf0[14] + bf0[12];
2226
0
    bf1[15] = -bf0[15] + bf0[13];
2227
0
    bf1[16] = bf0[16] + bf0[18];
2228
0
    bf1[17] = bf0[17] + bf0[19];
2229
0
    bf1[18] = -bf0[18] + bf0[16];
2230
0
    bf1[19] = -bf0[19] + bf0[17];
2231
0
    bf1[20] = bf0[20] + bf0[22];
2232
0
    bf1[21] = bf0[21] + bf0[23];
2233
0
    bf1[22] = -bf0[22] + bf0[20];
2234
0
    bf1[23] = -bf0[23] + bf0[21];
2235
0
    bf1[24] = bf0[24] + bf0[26];
2236
0
    bf1[25] = bf0[25] + bf0[27];
2237
0
    bf1[26] = -bf0[26] + bf0[24];
2238
0
    bf1[27] = -bf0[27] + bf0[25];
2239
0
    bf1[28] = bf0[28] + bf0[30];
2240
0
    bf1[29] = bf0[29] + bf0[31];
2241
0
    bf1[30] = -bf0[30] + bf0[28];
2242
0
    bf1[31] = -bf0[31] + bf0[29];
2243
2244
    // stage 10
2245
0
    cospi   = cospi_arr(cos_bit);
2246
0
    bf0     = output;
2247
0
    bf1     = step;
2248
0
    bf1[0]  = bf0[0];
2249
0
    bf1[1]  = bf0[1];
2250
0
    bf1[2]  = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
2251
0
    bf1[3]  = half_btf(-cospi[32], bf0[3], cospi[32], bf0[2], cos_bit);
2252
0
    bf1[4]  = bf0[4];
2253
0
    bf1[5]  = bf0[5];
2254
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
2255
0
    bf1[7]  = half_btf(-cospi[32], bf0[7], cospi[32], bf0[6], cos_bit);
2256
0
    bf1[8]  = bf0[8];
2257
0
    bf1[9]  = bf0[9];
2258
0
    bf1[10] = half_btf(cospi[32], bf0[10], cospi[32], bf0[11], cos_bit);
2259
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[10], cos_bit);
2260
0
    bf1[12] = bf0[12];
2261
0
    bf1[13] = bf0[13];
2262
0
    bf1[14] = half_btf(cospi[32], bf0[14], cospi[32], bf0[15], cos_bit);
2263
0
    bf1[15] = half_btf(-cospi[32], bf0[15], cospi[32], bf0[14], cos_bit);
2264
0
    bf1[16] = bf0[16];
2265
0
    bf1[17] = bf0[17];
2266
0
    bf1[18] = half_btf(cospi[32], bf0[18], cospi[32], bf0[19], cos_bit);
2267
0
    bf1[19] = half_btf(-cospi[32], bf0[19], cospi[32], bf0[18], cos_bit);
2268
0
    bf1[20] = bf0[20];
2269
0
    bf1[21] = bf0[21];
2270
0
    bf1[22] = half_btf(cospi[32], bf0[22], cospi[32], bf0[23], cos_bit);
2271
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[22], cos_bit);
2272
0
    bf1[24] = bf0[24];
2273
0
    bf1[25] = bf0[25];
2274
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[27], cos_bit);
2275
0
    bf1[27] = half_btf(-cospi[32], bf0[27], cospi[32], bf0[26], cos_bit);
2276
0
    bf1[28] = bf0[28];
2277
0
    bf1[29] = bf0[29];
2278
0
    bf1[30] = half_btf(cospi[32], bf0[30], cospi[32], bf0[31], cos_bit);
2279
0
    bf1[31] = half_btf(-cospi[32], bf0[31], cospi[32], bf0[30], cos_bit);
2280
2281
    // stage 11
2282
0
    bf0     = step;
2283
0
    bf1     = output;
2284
0
    bf1[0]  = bf0[0];
2285
0
    bf1[1]  = -bf0[16];
2286
0
    bf1[2]  = bf0[24];
2287
0
    bf1[3]  = -bf0[8];
2288
0
    bf1[4]  = bf0[12];
2289
0
    bf1[5]  = -bf0[28];
2290
0
    bf1[6]  = bf0[20];
2291
0
    bf1[7]  = -bf0[4];
2292
0
    bf1[8]  = bf0[6];
2293
0
    bf1[9]  = -bf0[22];
2294
0
    bf1[10] = bf0[30];
2295
0
    bf1[11] = -bf0[14];
2296
0
    bf1[12] = bf0[10];
2297
0
    bf1[13] = -bf0[26];
2298
0
    bf1[14] = bf0[18];
2299
0
    bf1[15] = -bf0[2];
2300
0
    bf1[16] = bf0[3];
2301
0
    bf1[17] = -bf0[19];
2302
0
    bf1[18] = bf0[27];
2303
0
    bf1[19] = -bf0[11];
2304
0
    bf1[20] = bf0[15];
2305
0
    bf1[21] = -bf0[31];
2306
0
    bf1[22] = bf0[23];
2307
0
    bf1[23] = -bf0[7];
2308
0
    bf1[24] = bf0[5];
2309
0
    bf1[25] = -bf0[21];
2310
0
    bf1[26] = bf0[29];
2311
0
    bf1[27] = -bf0[13];
2312
0
    bf1[28] = bf0[9];
2313
0
    bf1[29] = -bf0[25];
2314
0
    bf1[30] = bf0[17];
2315
0
    bf1[31] = -bf0[1];
2316
0
}
2317
2318
0
void svt_av1_fidentity4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
2319
0
    (void)stage_range;
2320
0
    (void)cos_bit;
2321
0
    for (int32_t i = 0; i < 4; ++i) {
2322
0
        output[i] = round_shift((int64_t)input[i] * new_sqrt2, new_sqrt2_bits);
2323
0
    }
2324
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
2325
0
}
2326
2327
0
void svt_av1_fidentity8_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
2328
0
    (void)stage_range;
2329
0
    (void)cos_bit;
2330
0
    for (int32_t i = 0; i < 8; ++i) {
2331
0
        output[i] = input[i] * 2;
2332
0
    }
2333
0
}
2334
2335
0
void svt_av1_fidentity16_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
2336
0
    (void)stage_range;
2337
0
    (void)cos_bit;
2338
0
    for (int32_t i = 0; i < 16; ++i) {
2339
0
        output[i] = round_shift((int64_t)input[i] * 2 * new_sqrt2, new_sqrt2_bits);
2340
0
    }
2341
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
2342
0
}
2343
2344
0
void svt_av1_fidentity32_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
2345
0
    (void)stage_range;
2346
0
    (void)cos_bit;
2347
0
    for (int32_t i = 0; i < 32; ++i) {
2348
0
        output[i] = input[i] * 4;
2349
0
    }
2350
0
}
2351
2352
0
static void av1_fidentity64_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
2353
0
    (void)stage_range;
2354
0
    (void)cos_bit;
2355
0
    for (int32_t i = 0; i < 64; ++i) {
2356
0
        output[i] = round_shift((int64_t)input[i] * 4 * new_sqrt2, new_sqrt2_bits);
2357
0
    }
2358
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
2359
0
}
2360
2361
332k
TxfmFunc svt_aom_fwd_txfm_type_to_func(TxfmType txfmtype) {
2362
332k
    switch (txfmtype) {
2363
11.5k
    case TXFM_TYPE_DCT4:
2364
11.5k
        return svt_av1_fdct4_new;
2365
287k
    case TXFM_TYPE_DCT8:
2366
287k
        return svt_av1_fdct8_new;
2367
8.35k
    case TXFM_TYPE_DCT16:
2368
8.35k
        return svt_av1_fdct16_new;
2369
16.8k
    case TXFM_TYPE_DCT32:
2370
16.8k
        return svt_av1_fdct32_new;
2371
8.81k
    case TXFM_TYPE_DCT64:
2372
8.81k
        return svt_av1_fdct64_new;
2373
0
    case TXFM_TYPE_ADST4:
2374
0
        return svt_av1_fadst4_new;
2375
0
    case TXFM_TYPE_ADST8:
2376
0
        return svt_av1_fadst8_new;
2377
0
    case TXFM_TYPE_ADST16:
2378
0
        return svt_av1_fadst16_new;
2379
0
    case TXFM_TYPE_ADST32:
2380
0
        return av1_fadst32_new;
2381
0
    case TXFM_TYPE_IDENTITY4:
2382
0
        return svt_av1_fidentity4_c;
2383
0
    case TXFM_TYPE_IDENTITY8:
2384
0
        return svt_av1_fidentity8_c;
2385
0
    case TXFM_TYPE_IDENTITY16:
2386
0
        return svt_av1_fidentity16_c;
2387
0
    case TXFM_TYPE_IDENTITY32:
2388
0
        return svt_av1_fidentity32_c;
2389
0
    case TXFM_TYPE_IDENTITY64:
2390
0
        return av1_fidentity64_c;
2391
0
    default:
2392
0
        assert(0);
2393
0
        return NULL;
2394
332k
    }
2395
332k
}
2396
2397
//fwd_txfm2d_c
2398
static INLINE void av1_tranform_two_d_core_c(int16_t* input, uint32_t input_stride, int32_t* output,
2399
166k
                                             const Txfm2dFlipCfg* cfg, int32_t* buf, uint8_t bit_depth) {
2400
166k
    int32_t c, r;
2401
    // Note when assigning txfm_size_col, we use the txfm_size from the
2402
    // row configuration and vice versa. This is intentionally done to
2403
    // accurately perform rectangular transforms. When the transform is
2404
    // rectangular, the number of columns will be the same as the
2405
    // txfm_size stored in the row cfg struct. It will make no difference
2406
    // for square transforms.
2407
166k
    const int32_t txfm_size_col = tx_size_wide[cfg->tx_size];
2408
166k
    const int32_t txfm_size_row = tx_size_high[cfg->tx_size];
2409
    // Take the shift from the larger dimension in the rectangular case.
2410
166k
    const int8_t* shift     = cfg->shift;
2411
166k
    const int32_t rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
2412
166k
    int8_t        stage_range_col[MAX_TXFM_STAGE_NUM];
2413
166k
    int8_t        stage_range_row[MAX_TXFM_STAGE_NUM];
2414
166k
    assert(cfg->stage_num_col <= MAX_TXFM_STAGE_NUM);
2415
166k
    assert(cfg->stage_num_row <= MAX_TXFM_STAGE_NUM);
2416
166k
    svt_av1_gen_fwd_stage_range(stage_range_col, stage_range_row, cfg, bit_depth);
2417
2418
166k
    const int8_t   cos_bit_col   = cfg->cos_bit_col;
2419
166k
    const int8_t   cos_bit_row   = cfg->cos_bit_row;
2420
166k
    const TxfmFunc txfm_func_col = svt_aom_fwd_txfm_type_to_func(cfg->txfm_type_col);
2421
166k
    const TxfmFunc txfm_func_row = svt_aom_fwd_txfm_type_to_func(cfg->txfm_type_row);
2422
166k
    ASSERT(txfm_func_col != NULL);
2423
166k
    ASSERT(txfm_func_row != NULL);
2424
    // use output buffer as temp buffer
2425
166k
    int32_t* temp_in  = output;
2426
166k
    int32_t* temp_out = output + txfm_size_row;
2427
2428
    // Columns
2429
1.99M
    for (c = 0; c < txfm_size_col; ++c) {
2430
1.82M
        if (cfg->ud_flip == 0) {
2431
37.4M
            for (r = 0; r < txfm_size_row; ++r) {
2432
35.6M
                temp_in[r] = input[r * input_stride + c];
2433
35.6M
            }
2434
18.4E
        } else {
2435
18.4E
            for (r = 0; r < txfm_size_row; ++r) {
2436
                // flip upside down
2437
0
                temp_in[r] = input[(txfm_size_row - r - 1) * input_stride + c];
2438
0
            }
2439
18.4E
        }
2440
1.82M
        svt_av1_round_shift_array_c(temp_in, txfm_size_row, -shift[0]); // NM svt_av1_round_shift_array_c
2441
1.82M
        txfm_func_col(temp_in, temp_out, cos_bit_col, stage_range_col);
2442
1.82M
        svt_av1_round_shift_array_c(temp_out, txfm_size_row, -shift[1]); // NM svt_av1_round_shift_array_c
2443
1.82M
        if (cfg->lr_flip == 0) {
2444
37.5M
            for (r = 0; r < txfm_size_row; ++r) {
2445
35.6M
                buf[r * txfm_size_col + c] = temp_out[r];
2446
35.6M
            }
2447
18.4E
        } else {
2448
18.4E
            for (r = 0; r < txfm_size_row; ++r) {
2449
                // flip from left to right
2450
0
                buf[r * txfm_size_col + (txfm_size_col - c - 1)] = temp_out[r];
2451
0
            }
2452
18.4E
        }
2453
1.82M
    }
2454
2455
    // Rows
2456
1.91M
    for (r = 0; r < txfm_size_row; ++r) {
2457
1.74M
        txfm_func_row(buf + r * txfm_size_col, output + r * txfm_size_col, cos_bit_row, stage_range_row);
2458
1.74M
        svt_av1_round_shift_array_c(output + r * txfm_size_col, txfm_size_col, -shift[2]);
2459
2460
1.74M
        if (abs(rect_type) == 1) {
2461
            // Multiply everything by Sqrt2 if the transform is rectangular and the
2462
            // size difference is a factor of 2.
2463
4.86M
            for (c = 0; c < txfm_size_col; ++c) {
2464
4.79M
                output[r * txfm_size_col + c] = round_shift((int64_t)output[r * txfm_size_col + c] * new_sqrt2,
2465
4.79M
                                                            new_sqrt2_bits);
2466
4.79M
            }
2467
74.9k
        }
2468
1.74M
    }
2469
166k
}
2470
2471
166k
static INLINE void set_fwd_txfm_non_scale_range(Txfm2dFlipCfg* cfg) {
2472
166k
    av1_zero(cfg->stage_range_col);
2473
166k
    av1_zero(cfg->stage_range_row);
2474
2475
166k
    if (cfg->txfm_type_col == TXFM_TYPE_INVALID) {
2476
0
        return;
2477
0
    }
2478
2479
166k
    const int8_t* range_mult2_col = fwd_txfm_range_mult2_list[cfg->txfm_type_col];
2480
166k
    const int32_t stage_num_col   = MIN(cfg->stage_num_col, MAX_TXFM_STAGE_NUM);
2481
1.21M
    for (int32_t i = 0; i < stage_num_col; ++i) {
2482
1.05M
        cfg->stage_range_col[i] = (range_mult2_col[i] + 1) >> 1;
2483
1.05M
    }
2484
2485
166k
    if (cfg->txfm_type_row != TXFM_TYPE_INVALID) {
2486
166k
        const int8_t* range_mult2_row = fwd_txfm_range_mult2_list[cfg->txfm_type_row];
2487
166k
        const int32_t stage_num_row   = MIN(cfg->stage_num_row, MAX_TXFM_STAGE_NUM);
2488
1.22M
        for (int32_t i = 0; i < stage_num_row; ++i) {
2489
1.05M
            cfg->stage_range_row[i] = (range_mult2_col[cfg->stage_num_col - 1] + range_mult2_row[i] + 1) >> 1;
2490
1.05M
        }
2491
166k
    }
2492
166k
}
2493
2494
166k
void svt_aom_transform_config(TxType tx_type, TxSize tx_size, Txfm2dFlipCfg* cfg) {
2495
166k
    assert(cfg != NULL);
2496
166k
    cfg->tx_size = tx_size;
2497
166k
    set_flip_cfg(tx_type, cfg);
2498
166k
    const TxType1D tx_type_1d_col = vtx_tab[tx_type];
2499
166k
    const TxType1D tx_type_1d_row = htx_tab[tx_type];
2500
166k
    const int32_t  txw_idx        = tx_size_wide_log2[tx_size] - tx_size_wide_log2[0];
2501
166k
    const int32_t  txh_idx        = tx_size_high_log2[tx_size] - tx_size_high_log2[0];
2502
166k
    cfg->shift                    = fwd_txfm_shift_ls[tx_size];
2503
166k
    cfg->cos_bit_col              = fwd_cos_bit_col[txw_idx][txh_idx];
2504
166k
    cfg->cos_bit_row              = fwd_cos_bit_row[txw_idx][txh_idx];
2505
166k
    cfg->txfm_type_col            = av1_txfm_type_ls[txh_idx][tx_type_1d_col];
2506
166k
    cfg->txfm_type_row            = av1_txfm_type_ls[txw_idx][tx_type_1d_row];
2507
166k
    cfg->stage_num_col            = av1_txfm_stage_num_list[cfg->txfm_type_col];
2508
166k
    cfg->stage_num_row            = av1_txfm_stage_num_list[cfg->txfm_type_row];
2509
166k
    set_fwd_txfm_non_scale_range(cfg);
2510
166k
}
2511
2512
8.80k
static uint64_t energy_computation(int32_t* coeff, uint32_t coeff_stride, uint32_t area_width, uint32_t area_height) {
2513
8.80k
    uint64_t prediction_distortion = 0;
2514
2515
290k
    for (uint32_t row_index = 0; row_index < area_height; ++row_index) {
2516
12.5M
        for (uint32_t column_index = 0; column_index < area_width; ++column_index) {
2517
12.3M
            prediction_distortion += (int64_t)SQR((int64_t)(coeff[column_index]));
2518
12.3M
        }
2519
281k
        coeff += coeff_stride;
2520
281k
    }
2521
2522
8.80k
    return prediction_distortion;
2523
8.80k
}
2524
2525
3.23k
uint64_t svt_handle_transform64x64_c(int32_t* output) {
2526
3.23k
    uint64_t three_quad_energy;
2527
2528
    // top - right 32x32 area.
2529
3.23k
    three_quad_energy = energy_computation(output + 32, 64, 32, 32);
2530
    //bottom 64x32 area.
2531
3.23k
    three_quad_energy += energy_computation(output + 32 * 64, 64, 64, 32);
2532
2533
    // Re-pack non-zero coeffs in the first 32x32 indices.
2534
103k
    for (int32_t row = 1; row < 32; ++row) {
2535
100k
        svt_memcpy_c(output + row * 32, output + row * 64, 32 * sizeof(*output));
2536
100k
    }
2537
2538
3.23k
    return three_quad_energy;
2539
3.23k
}
2540
2541
void svt_av1_transform_two_d_64x64_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2542
3.23k
                                     uint8_t bit_depth) {
2543
3.23k
    int32_t       intermediate_transform_buffer[64 * 64];
2544
3.23k
    Txfm2dFlipCfg cfg;
2545
    //av1_get_fwd_txfm_cfg
2546
3.23k
    svt_aom_transform_config(transform_type, TX_64X64, &cfg);
2547
    //fwd_txfm2d_c
2548
3.23k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2549
3.23k
}
2550
2551
void svt_av1_transform_two_d_32x32_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2552
7.23k
                                     uint8_t bit_depth) {
2553
7.23k
    int32_t       intermediate_transform_buffer[32 * 32];
2554
7.23k
    Txfm2dFlipCfg cfg;
2555
2556
7.23k
    svt_aom_transform_config(transform_type, TX_32X32, &cfg);
2557
2558
7.23k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2559
7.23k
}
2560
2561
void svt_av1_transform_two_d_16x16_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2562
4.17k
                                     uint8_t bit_depth) {
2563
4.17k
    int32_t       intermediate_transform_buffer[16 * 16];
2564
4.17k
    Txfm2dFlipCfg cfg;
2565
2566
4.17k
    svt_aom_transform_config(transform_type, TX_16X16, &cfg);
2567
2568
4.17k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2569
4.17k
}
2570
2571
void svt_av1_transform_two_d_8x8_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2572
143k
                                   uint8_t bit_depth) {
2573
143k
    int32_t       intermediate_transform_buffer[8 * 8];
2574
143k
    Txfm2dFlipCfg cfg;
2575
2576
143k
    svt_aom_transform_config(transform_type, TX_8X8, &cfg);
2577
2578
143k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2579
143k
}
2580
2581
void svt_av1_transform_two_d_4x4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2582
5.76k
                                   uint8_t bit_depth) {
2583
5.76k
    int32_t       intermediate_transform_buffer[4 * 4];
2584
5.76k
    Txfm2dFlipCfg cfg;
2585
2586
5.76k
    svt_aom_transform_config(transform_type, TX_4X4, &cfg);
2587
2588
5.76k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2589
5.76k
}
2590
2591
/*********************************************************************
2592
* Calculate CBF
2593
*********************************************************************/
2594
void svt_av1_fwd_txfm2d_64x32_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2595
2.33k
                                uint8_t bit_depth) {
2596
2.33k
    int32_t       intermediate_transform_buffer[64 * 32];
2597
2.33k
    Txfm2dFlipCfg cfg;
2598
    /*av1_get_fwd_txfm_cfg*/
2599
2.33k
    svt_aom_transform_config(transform_type, TX_64X32, &cfg);
2600
2.33k
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2601
2.33k
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2602
2.33k
}
2603
2604
2.34k
uint64_t svt_handle_transform64x32_c(int32_t* output) {
2605
    // top - right 32x32 area.
2606
2.34k
    const uint64_t three_quad_energy = energy_computation(output + 32, 64, 32, 32);
2607
2608
    // Re-pack non-zero coeffs in the first 32x32 indices.
2609
74.8k
    for (int32_t row = 1; row < 32; ++row) {
2610
72.5k
        svt_memcpy_c(output + row * 32, output + row * 64, 32 * sizeof(*output));
2611
72.5k
    }
2612
2613
2.34k
    return three_quad_energy;
2614
2.34k
}
2615
2616
void svt_av1_fwd_txfm2d_32x64_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2617
0
                                uint8_t bit_depth) {
2618
0
    int32_t intermediate_transform_buffer[32 * 64];
2619
2620
0
    Txfm2dFlipCfg cfg;
2621
    /*av1_get_fwd_txfm_cfg*/
2622
0
    svt_aom_transform_config(transform_type, TX_32X64, &cfg);
2623
    /*fwd_txfm2d_c*/
2624
0
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2625
0
}
2626
2627
0
uint64_t svt_handle_transform32x64_c(int32_t* output) {
2628
    //bottom 32x32 area.
2629
0
    const uint64_t three_quad_energy = energy_computation(output + 32 * 32, 32, 32, 32);
2630
0
    return three_quad_energy;
2631
0
}
2632
2633
void svt_av1_fwd_txfm2d_64x16_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2634
0
                                uint8_t bit_depth) {
2635
0
    int32_t       intermediate_transform_buffer[64 * 16];
2636
0
    Txfm2dFlipCfg cfg;
2637
    /*av1_get_fwd_txfm_cfg*/
2638
0
    svt_aom_transform_config(transform_type, TX_64X16, &cfg);
2639
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2640
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2641
0
}
2642
2643
0
uint64_t svt_handle_transform64x16_c(int32_t* output) {
2644
    // top - right 32x16 area.
2645
0
    const uint64_t three_quad_energy = energy_computation(output + 32, 64, 32, 16);
2646
2647
    // Re-pack non-zero coeffs in the first 32x16 indices.
2648
0
    for (int32_t row = 1; row < 16; ++row) {
2649
0
        svt_memcpy_c(output + row * 32, output + row * 64, 32 * sizeof(*output));
2650
0
    }
2651
2652
0
    return three_quad_energy;
2653
0
}
2654
2655
void svt_av1_fwd_txfm2d_16x64_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2656
0
                                uint8_t bit_depth) {
2657
0
    int32_t intermediate_transform_buffer[16 * 64];
2658
2659
0
    Txfm2dFlipCfg cfg;
2660
    /*av1_get_fwd_txfm_cfg*/
2661
0
    svt_aom_transform_config(transform_type, TX_16X64, &cfg);
2662
    /*fwd_txfm2d_c*/
2663
0
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2664
0
}
2665
2666
0
uint64_t svt_handle_transform16x64_c(int32_t* output) {
2667
    //bottom 16x32 area.
2668
0
    const uint64_t three_quad_energy = energy_computation(output + 16 * 32, 16, 16, 32);
2669
0
    return three_quad_energy;
2670
0
}
2671
2672
0
uint64_t svt_handle_transform16x64_N2_N4_c(int32_t* output) {
2673
0
    (void)output;
2674
0
    return 0;
2675
0
}
2676
2677
0
uint64_t svt_handle_transform32x64_N2_N4_c(int32_t* output) {
2678
0
    (void)output;
2679
0
    return 0;
2680
0
}
2681
2682
0
uint64_t svt_handle_transform64x16_N2_N4_c(int32_t* output) {
2683
    // Re-pack non-zero coeffs in the first 32x16 indices.
2684
0
    for (int32_t row = 1; row < 16; ++row) {
2685
0
        svt_memcpy_c(output + row * 32, output + row * 64, 32 * sizeof(*output));
2686
0
    }
2687
2688
0
    return 0;
2689
0
}
2690
2691
0
uint64_t svt_handle_transform64x32_N2_N4_c(int32_t* output) {
2692
    // Re-pack non-zero coeffs in the first 32x32 indices.
2693
0
    for (int32_t row = 1; row < 32; ++row) {
2694
0
        svt_memcpy_c(output + row * 32, output + row * 64, 32 * sizeof(*output));
2695
0
    }
2696
2697
0
    return 0;
2698
0
}
2699
2700
0
uint64_t svt_handle_transform64x64_N2_N4_c(int32_t* output) {
2701
    // Re-pack non-zero coeffs in the first 32x32 indices.
2702
0
    for (int32_t row = 1; row < 32; ++row) {
2703
0
        svt_memcpy_c(output + row * 32, output + row * 64, 32 * sizeof(*output));
2704
0
    }
2705
2706
0
    return 0;
2707
0
}
2708
2709
void svt_av1_fwd_txfm2d_32x16_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2710
0
                                uint8_t bit_depth) {
2711
0
    int32_t       intermediate_transform_buffer[32 * 16];
2712
0
    Txfm2dFlipCfg cfg;
2713
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_32X16, &cfg);
2714
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2715
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2716
0
}
2717
2718
void svt_av1_fwd_txfm2d_16x32_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2719
0
                                uint8_t bit_depth) {
2720
0
    int32_t       intermediate_transform_buffer[16 * 32];
2721
0
    Txfm2dFlipCfg cfg;
2722
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_16X32, &cfg);
2723
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2724
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2725
0
}
2726
2727
void svt_av1_fwd_txfm2d_16x8_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2728
0
                               uint8_t bit_depth) {
2729
0
    int32_t       intermediate_transform_buffer[16 * 8];
2730
0
    Txfm2dFlipCfg cfg;
2731
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_16X8, &cfg);
2732
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2733
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2734
0
}
2735
2736
void svt_av1_fwd_txfm2d_8x16_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2737
0
                               uint8_t bit_depth) {
2738
0
    int32_t       intermediate_transform_buffer[8 * 16];
2739
0
    Txfm2dFlipCfg cfg;
2740
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_8X16, &cfg);
2741
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2742
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2743
0
}
2744
2745
void svt_av1_fwd_txfm2d_32x8_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2746
0
                               uint8_t bit_depth) {
2747
0
    int32_t       intermediate_transform_buffer[32 * 8];
2748
0
    Txfm2dFlipCfg cfg;
2749
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_32X8, &cfg);
2750
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2751
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2752
0
}
2753
2754
void svt_av1_fwd_txfm2d_8x32_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2755
0
                               uint8_t bit_depth) {
2756
0
    int32_t       intermediate_transform_buffer[8 * 32];
2757
0
    Txfm2dFlipCfg cfg;
2758
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_8X32, &cfg);
2759
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2760
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2761
0
}
2762
2763
void svt_av1_fwd_txfm2d_16x4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2764
0
                               uint8_t bit_depth) {
2765
0
    int32_t       intermediate_transform_buffer[16 * 4];
2766
0
    Txfm2dFlipCfg cfg;
2767
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_16X4, &cfg);
2768
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2769
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2770
0
}
2771
2772
void svt_av1_fwd_txfm2d_4x16_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2773
0
                               uint8_t bit_depth) {
2774
0
    int32_t       intermediate_transform_buffer[4 * 16];
2775
0
    Txfm2dFlipCfg cfg;
2776
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_4X16, &cfg);
2777
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2778
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2779
0
}
2780
2781
void svt_av1_fwd_txfm2d_8x4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2782
0
                              uint8_t bit_depth) {
2783
0
    int32_t       intermediate_transform_buffer[8 * 4];
2784
0
    Txfm2dFlipCfg cfg;
2785
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_8X4, &cfg);
2786
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2787
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2788
0
}
2789
2790
void svt_av1_fwd_txfm2d_4x8_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2791
0
                              uint8_t bit_depth) {
2792
0
    int32_t       intermediate_transform_buffer[4 * 8];
2793
0
    Txfm2dFlipCfg cfg;
2794
0
    /*av1_get_fwd_txfm_cfg*/ svt_aom_transform_config(transform_type, TX_4X8, &cfg);
2795
0
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2796
0
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2797
0
}
2798
2799
#if CONFIG_ENABLE_TX_PF_N2
2800
static EbErrorType av1_estimate_transform_N2(int16_t* residual_buffer, uint32_t residual_stride, int32_t* coeff_buffer,
2801
                                             uint32_t coeff_stride, TxSize transform_size, uint64_t* three_quad_energy,
2802
                                             uint32_t bit_depth, TxType transform_type, PlaneType component_type)
2803
2804
0
{
2805
0
    EbErrorType return_error = EB_ErrorNone;
2806
2807
0
    (void)coeff_stride;
2808
0
    (void)component_type;
2809
2810
0
    switch (transform_size) {
2811
0
    case TX_64X32:
2812
0
        if (transform_type == DCT_DCT) {
2813
0
            svt_av1_fwd_txfm2d_64x32_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2814
0
        } else {
2815
0
            svt_av1_fwd_txfm2d_64x32_N2_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2816
0
        }
2817
2818
0
        *three_quad_energy = svt_handle_transform64x32_N2_N4(coeff_buffer);
2819
2820
0
        break;
2821
2822
0
    case TX_32X64:
2823
0
        if (transform_type == DCT_DCT) {
2824
0
            svt_av1_fwd_txfm2d_32x64_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2825
0
        } else {
2826
0
            svt_av1_fwd_txfm2d_32x64_N2_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2827
0
        }
2828
2829
0
        *three_quad_energy = svt_handle_transform32x64_N2_N4(coeff_buffer);
2830
2831
0
        break;
2832
2833
0
    case TX_64X16:
2834
0
        if (transform_type == DCT_DCT) {
2835
0
            svt_av1_fwd_txfm2d_64x16_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2836
0
        } else {
2837
0
            svt_av1_fwd_txfm2d_64x16_N2_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2838
0
        }
2839
2840
0
        *three_quad_energy = svt_handle_transform64x16_N2_N4(coeff_buffer);
2841
2842
0
        break;
2843
2844
0
    case TX_16X64:
2845
0
        if (transform_type == DCT_DCT) {
2846
0
            svt_av1_fwd_txfm2d_16x64_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2847
0
        } else {
2848
0
            svt_av1_fwd_txfm2d_16x64_N2_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2849
0
        }
2850
2851
0
        *three_quad_energy = svt_handle_transform16x64_N2_N4(coeff_buffer);
2852
2853
0
        break;
2854
2855
0
    case TX_32X16:
2856
        // TTK
2857
0
        if ((transform_type == DCT_DCT) || (transform_type == IDTX)) {
2858
0
            svt_av1_fwd_txfm2d_32x16_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2859
0
        } else {
2860
0
            svt_av1_fwd_txfm2d_32x16_N2_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2861
0
        }
2862
0
        break;
2863
2864
0
    case TX_16X32:
2865
0
        if ((transform_type == DCT_DCT) || (transform_type == IDTX)) {
2866
0
            svt_av1_fwd_txfm2d_16x32_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2867
0
        } else {
2868
0
            svt_av1_fwd_txfm2d_16x32_N2_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2869
0
        }
2870
0
        break;
2871
2872
0
    case TX_16X8:
2873
0
        svt_av1_fwd_txfm2d_16x8_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2874
0
        break;
2875
2876
0
    case TX_8X16:
2877
0
        svt_av1_fwd_txfm2d_8x16_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2878
0
        break;
2879
2880
0
    case TX_32X8:
2881
0
        if ((transform_type == DCT_DCT) || (transform_type == IDTX)) {
2882
0
            svt_av1_fwd_txfm2d_32x8_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2883
0
        } else {
2884
0
            svt_av1_fwd_txfm2d_32x8_N2_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2885
0
        }
2886
0
        break;
2887
2888
0
    case TX_8X32:
2889
0
        if ((transform_type == DCT_DCT) || (transform_type == IDTX)) {
2890
0
            svt_av1_fwd_txfm2d_8x32_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2891
0
        } else {
2892
0
            svt_av1_fwd_txfm2d_8x32_N2_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2893
0
        }
2894
0
        break;
2895
0
    case TX_16X4:
2896
0
        svt_av1_fwd_txfm2d_16x4_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2897
0
        break;
2898
0
    case TX_4X16:
2899
0
        svt_av1_fwd_txfm2d_4x16_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2900
0
        break;
2901
0
    case TX_8X4:
2902
2903
0
        svt_av1_fwd_txfm2d_8x4_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2904
2905
0
        break;
2906
0
    case TX_4X8:
2907
2908
0
        svt_av1_fwd_txfm2d_4x8_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2909
2910
0
        break;
2911
2912
0
    case TX_64X64:
2913
2914
0
        svt_av1_fwd_txfm2d_64x64_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2915
2916
0
        *three_quad_energy = svt_handle_transform64x64_N2_N4(coeff_buffer);
2917
2918
0
        break;
2919
2920
0
    case TX_32X32:
2921
0
        if (transform_type == V_DCT || transform_type == H_DCT || transform_type == V_ADST ||
2922
0
            transform_type == H_ADST || transform_type == V_FLIPADST || transform_type == H_FLIPADST) {
2923
            // Tahani: I believe those cases are never hit
2924
0
            svt_aom_transform_two_d_32x32_N2_c(
2925
0
                residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2926
0
        }
2927
2928
0
        else {
2929
0
            svt_av1_fwd_txfm2d_32x32_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2930
0
        }
2931
2932
0
        break;
2933
2934
0
    case TX_16X16:
2935
2936
0
        svt_av1_fwd_txfm2d_16x16_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2937
2938
0
        break;
2939
0
    case TX_8X8:
2940
2941
0
        svt_av1_fwd_txfm2d_8x8_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2942
2943
0
        break;
2944
0
    case TX_4X4:
2945
2946
0
        svt_av1_fwd_txfm2d_4x4_N2(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2947
2948
0
        break;
2949
0
    default:
2950
0
        assert(0);
2951
0
        break;
2952
0
    }
2953
2954
0
    return return_error;
2955
0
}
2956
#endif // CONFIG_ENABLE_TX_PF_N2
2957
2958
static EbErrorType av1_estimate_transform_N4(int16_t* residual_buffer, uint32_t residual_stride, int32_t* coeff_buffer,
2959
                                             uint32_t coeff_stride, TxSize transform_size, uint64_t* three_quad_energy,
2960
                                             uint32_t bit_depth, TxType transform_type, PlaneType component_type)
2961
2962
0
{
2963
0
    EbErrorType return_error = EB_ErrorNone;
2964
2965
0
    (void)coeff_stride;
2966
0
    (void)component_type;
2967
2968
0
    switch (transform_size) {
2969
0
    case TX_64X32:
2970
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
2971
0
        if (transform_type != DCT_DCT) {
2972
0
            svt_av1_fwd_txfm2d_64x32_N4_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2973
0
        } else
2974
0
#endif
2975
0
        {
2976
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
2977
0
            svt_av1_fwd_txfm2d_64x32_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2978
0
        }
2979
2980
0
        *three_quad_energy = svt_handle_transform64x32_N2_N4(coeff_buffer);
2981
2982
0
        break;
2983
2984
0
    case TX_32X64:
2985
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
2986
0
        if (transform_type != DCT_DCT) {
2987
0
            svt_av1_fwd_txfm2d_32x64_N4_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2988
0
        } else
2989
0
#endif
2990
0
        {
2991
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
2992
0
            svt_av1_fwd_txfm2d_32x64_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
2993
0
        }
2994
2995
0
        *three_quad_energy = svt_handle_transform32x64_N2_N4(coeff_buffer);
2996
2997
0
        break;
2998
2999
0
    case TX_64X16:
3000
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3001
0
        if (transform_type != DCT_DCT) {
3002
0
            svt_av1_fwd_txfm2d_64x16_N4_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3003
0
        } else
3004
0
#endif
3005
0
        {
3006
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3007
0
            svt_av1_fwd_txfm2d_64x16_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3008
0
        }
3009
3010
0
        *three_quad_energy = svt_handle_transform64x16_N2_N4(coeff_buffer);
3011
3012
0
        break;
3013
3014
0
    case TX_16X64:
3015
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3016
0
        if (transform_type != DCT_DCT) {
3017
0
            svt_av1_fwd_txfm2d_16x64_N4_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3018
0
        } else
3019
0
#endif
3020
0
        {
3021
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3022
0
            svt_av1_fwd_txfm2d_16x64_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3023
0
        }
3024
3025
0
        *three_quad_energy = svt_handle_transform16x64_N2_N4(coeff_buffer);
3026
3027
0
        break;
3028
3029
0
    case TX_32X16:
3030
        // TTK
3031
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3032
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3033
0
            svt_av1_fwd_txfm2d_32x16_N4_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3034
0
        } else
3035
0
#endif
3036
0
        {
3037
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3038
0
            svt_av1_fwd_txfm2d_32x16_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3039
0
        }
3040
0
        break;
3041
3042
0
    case TX_16X32:
3043
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3044
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3045
0
            svt_av1_fwd_txfm2d_16x32_N4_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3046
0
        } else
3047
0
#endif
3048
0
        {
3049
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3050
0
            svt_av1_fwd_txfm2d_16x32_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3051
0
        }
3052
0
        break;
3053
3054
0
    case TX_16X8:
3055
0
        svt_av1_fwd_txfm2d_16x8_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3056
0
        break;
3057
3058
0
    case TX_8X16:
3059
0
        svt_av1_fwd_txfm2d_8x16_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3060
0
        break;
3061
3062
0
    case TX_32X8:
3063
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3064
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3065
0
            svt_av1_fwd_txfm2d_32x8_N4_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3066
0
        } else
3067
0
#endif
3068
0
        {
3069
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3070
0
            svt_av1_fwd_txfm2d_32x8_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3071
0
        }
3072
0
        break;
3073
3074
0
    case TX_8X32:
3075
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3076
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3077
0
            svt_av1_fwd_txfm2d_8x32_N4_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3078
0
        } else
3079
0
#endif
3080
0
        {
3081
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3082
0
            svt_av1_fwd_txfm2d_8x32_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3083
0
        }
3084
0
        break;
3085
0
    case TX_16X4:
3086
0
        svt_av1_fwd_txfm2d_16x4_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3087
0
        break;
3088
0
    case TX_4X16:
3089
0
        svt_av1_fwd_txfm2d_4x16_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3090
0
        break;
3091
0
    case TX_8X4:
3092
3093
0
        svt_av1_fwd_txfm2d_8x4_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3094
3095
0
        break;
3096
0
    case TX_4X8:
3097
3098
0
        svt_av1_fwd_txfm2d_4x8_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3099
3100
0
        break;
3101
3102
0
    case TX_64X64:
3103
3104
0
        svt_av1_fwd_txfm2d_64x64_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3105
3106
0
        *three_quad_energy = svt_handle_transform64x64_N2_N4(coeff_buffer);
3107
3108
0
        break;
3109
3110
0
    case TX_32X32:
3111
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3112
0
        if (transform_type == V_DCT || transform_type == H_DCT || transform_type == V_ADST ||
3113
0
            transform_type == H_ADST || transform_type == V_FLIPADST || transform_type == H_FLIPADST) {
3114
            // Non-DCT at 32x32 is forbidden by the ext-tx set (never hit); C fallback only.
3115
0
            svt_aom_transform_two_d_32x32_N4_c(
3116
0
                residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3117
0
        } else
3118
0
#endif
3119
0
        {
3120
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3121
0
            svt_av1_fwd_txfm2d_32x32_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3122
0
        }
3123
3124
0
        break;
3125
3126
0
    case TX_16X16:
3127
3128
0
        svt_av1_fwd_txfm2d_16x16_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3129
3130
0
        break;
3131
0
    case TX_8X8:
3132
3133
0
        svt_av1_fwd_txfm2d_8x8_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3134
3135
0
        break;
3136
0
    case TX_4X4:
3137
3138
0
        svt_av1_fwd_txfm2d_4x4_N4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3139
3140
0
        break;
3141
0
    default:
3142
0
        assert(0);
3143
0
        break;
3144
0
    }
3145
3146
0
    return return_error;
3147
0
}
3148
3149
static EbErrorType av1_estimate_transform_ONLY_DC(int16_t* residual_buffer, uint32_t residual_stride,
3150
                                                  int32_t* coeff_buffer, uint32_t coeff_stride, TxSize transform_size,
3151
                                                  uint64_t* three_quad_energy, uint32_t bit_depth,
3152
                                                  TxType transform_type, PlaneType component_type)
3153
3154
0
{
3155
0
    EbErrorType return_error = av1_estimate_transform_N4(residual_buffer,
3156
0
                                                         residual_stride,
3157
0
                                                         coeff_buffer,
3158
0
                                                         coeff_stride,
3159
0
                                                         transform_size,
3160
0
                                                         three_quad_energy,
3161
0
                                                         bit_depth,
3162
0
                                                         transform_type,
3163
0
                                                         component_type);
3164
3165
0
    for (int i = 1; i < (tx_size_wide[transform_size] * tx_size_high[transform_size]); i++) {
3166
0
        if (i % tx_size_wide[transform_size] < (tx_size_wide[transform_size] >> 2) ||
3167
0
            i / tx_size_wide[transform_size] < (tx_size_high[transform_size] >> 2)) {
3168
0
            coeff_buffer[i] = 0;
3169
0
        }
3170
0
    }
3171
0
    return return_error;
3172
0
}
3173
3174
static EbErrorType av1_estimate_transform_default(int16_t* residual_buffer, uint32_t residual_stride,
3175
                                                  int32_t* coeff_buffer, uint32_t coeff_stride, TxSize transform_size,
3176
                                                  uint64_t* three_quad_energy, uint32_t bit_depth,
3177
                                                  TxType transform_type, PlaneType component_type)
3178
3179
166k
{
3180
166k
    EbErrorType return_error = EB_ErrorNone;
3181
3182
166k
    (void)coeff_stride;
3183
166k
    (void)component_type;
3184
3185
166k
    switch (transform_size) {
3186
2.34k
    case TX_64X32:
3187
2.34k
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3188
2.34k
        if (transform_type != DCT_DCT) {
3189
0
            svt_av1_fwd_txfm2d_64x32_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3190
0
        } else
3191
2.34k
#endif
3192
2.34k
        {
3193
2.34k
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3194
2.34k
            svt_av1_fwd_txfm2d_64x32(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3195
2.34k
        }
3196
3197
2.34k
        *three_quad_energy = svt_handle_transform64x32(coeff_buffer);
3198
3199
2.34k
        break;
3200
3201
0
    case TX_32X64:
3202
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3203
0
        if (transform_type != DCT_DCT) {
3204
0
            svt_av1_fwd_txfm2d_32x64_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3205
0
        } else
3206
0
#endif
3207
0
        {
3208
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3209
0
            svt_av1_fwd_txfm2d_32x64(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3210
0
        }
3211
3212
0
        *three_quad_energy = svt_handle_transform32x64(coeff_buffer);
3213
3214
0
        break;
3215
3216
0
    case TX_64X16:
3217
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3218
0
        if (transform_type != DCT_DCT) {
3219
0
            svt_av1_fwd_txfm2d_64x16_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3220
0
        } else
3221
0
#endif
3222
0
        {
3223
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3224
0
            svt_av1_fwd_txfm2d_64x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3225
0
        }
3226
3227
0
        *three_quad_energy = svt_handle_transform64x16(coeff_buffer);
3228
3229
0
        break;
3230
3231
0
    case TX_16X64:
3232
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3233
0
        if (transform_type != DCT_DCT) {
3234
0
            svt_av1_fwd_txfm2d_16x64_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3235
0
        } else
3236
0
#endif
3237
0
        {
3238
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3239
0
            svt_av1_fwd_txfm2d_16x64(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3240
0
        }
3241
3242
0
        *three_quad_energy = svt_handle_transform16x64(coeff_buffer);
3243
3244
0
        break;
3245
3246
0
    case TX_32X16:
3247
        // TTK
3248
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3249
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3250
0
            svt_av1_fwd_txfm2d_32x16_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3251
0
        } else
3252
0
#endif
3253
0
        {
3254
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3255
0
            svt_av1_fwd_txfm2d_32x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3256
0
        }
3257
0
        break;
3258
3259
0
    case TX_16X32:
3260
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3261
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3262
0
            svt_av1_fwd_txfm2d_16x32_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3263
0
        } else
3264
0
#endif
3265
0
        {
3266
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3267
0
            svt_av1_fwd_txfm2d_16x32(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3268
0
        }
3269
0
        break;
3270
3271
0
    case TX_16X8:
3272
0
        svt_av1_fwd_txfm2d_16x8(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3273
0
        break;
3274
3275
0
    case TX_8X16:
3276
0
        svt_av1_fwd_txfm2d_8x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3277
0
        break;
3278
3279
0
    case TX_32X8:
3280
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3281
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3282
0
            svt_av1_fwd_txfm2d_32x8_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3283
0
        } else
3284
0
#endif
3285
0
        {
3286
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3287
0
            svt_av1_fwd_txfm2d_32x8(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3288
0
        }
3289
0
        break;
3290
3291
0
    case TX_8X32:
3292
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3293
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3294
0
            svt_av1_fwd_txfm2d_8x32_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3295
0
        } else
3296
0
#endif
3297
0
        {
3298
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3299
0
            svt_av1_fwd_txfm2d_8x32(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3300
0
        }
3301
0
        break;
3302
0
    case TX_16X4:
3303
0
        svt_av1_fwd_txfm2d_16x4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3304
0
        break;
3305
0
    case TX_4X16:
3306
0
        svt_av1_fwd_txfm2d_4x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3307
0
        break;
3308
0
    case TX_8X4:
3309
3310
0
        svt_av1_fwd_txfm2d_8x4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3311
3312
0
        break;
3313
0
    case TX_4X8:
3314
3315
0
        svt_av1_fwd_txfm2d_4x8(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3316
3317
0
        break;
3318
3319
3.23k
    case TX_64X64:
3320
3321
3.23k
        svt_av1_fwd_txfm2d_64x64(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3322
3323
3.23k
        *three_quad_energy = svt_handle_transform64x64(coeff_buffer);
3324
3325
3.23k
        break;
3326
3327
7.23k
    case TX_32X32:
3328
7.23k
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3329
7.23k
        if (transform_type == V_DCT || transform_type == H_DCT || transform_type == V_ADST ||
3330
7.23k
            transform_type == H_ADST || transform_type == V_FLIPADST || transform_type == H_FLIPADST) {
3331
            // Non-DCT at 32x32 is forbidden by the ext-tx set (never hit); C fallback only.
3332
0
            svt_av1_transform_two_d_32x32_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3333
0
        } else
3334
7.23k
#endif
3335
7.23k
        {
3336
7.23k
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3337
7.23k
            svt_av1_fwd_txfm2d_32x32(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3338
7.23k
        }
3339
3340
7.23k
        break;
3341
3342
4.17k
    case TX_16X16:
3343
3344
4.17k
        svt_av1_fwd_txfm2d_16x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3345
3346
4.17k
        break;
3347
143k
    case TX_8X8:
3348
3349
143k
        svt_av1_fwd_txfm2d_8x8(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3350
3351
143k
        break;
3352
5.76k
    case TX_4X4:
3353
3354
5.76k
        svt_av1_fwd_txfm2d_4x4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3355
3356
5.76k
        break;
3357
0
    default:
3358
0
        assert(0);
3359
0
        break;
3360
166k
    }
3361
3362
166k
    return return_error;
3363
166k
}
3364
3365
/* 4-point reversible, orthonormal Walsh-Hadamard in 3.5 adds, 0.5 shifts per
3366
   pixel.
3367
   Shared for both high and low bit depth.
3368
 */
3369
812k
void svt_av1_fwht4x4_c(int16_t* input, int32_t* output, uint32_t stride) {
3370
812k
    int            i;
3371
812k
    int64_t        a1, b1, c1, d1, e1;
3372
812k
    const int16_t* ip_pass0 = input;
3373
812k
    const int32_t* ip       = NULL;
3374
812k
    int32_t*       op       = output;
3375
3376
4.06M
    for (i = 0; i < 4; i++) {
3377
3.24M
        a1 = ip_pass0[0 * stride];
3378
3.24M
        b1 = ip_pass0[1 * stride];
3379
3.24M
        c1 = ip_pass0[2 * stride];
3380
3.24M
        d1 = ip_pass0[3 * stride];
3381
3382
3.24M
        a1 += b1;
3383
3.24M
        d1 = d1 - c1;
3384
3.24M
        e1 = (a1 - d1) >> 1;
3385
3.24M
        b1 = e1 - b1;
3386
3.24M
        c1 = e1 - c1;
3387
3.24M
        a1 -= c1;
3388
3.24M
        d1 += b1;
3389
3.24M
        op[0] = (int32_t)a1;
3390
3.24M
        op[1] = (int32_t)c1;
3391
3.24M
        op[2] = (int32_t)d1;
3392
3.24M
        op[3] = (int32_t)b1;
3393
3394
3.24M
        ip_pass0++;
3395
3.24M
        op += 4;
3396
3.24M
    }
3397
812k
    ip = output;
3398
812k
    op = output;
3399
3400
4.06M
    for (i = 0; i < 4; i++) {
3401
3.24M
        a1 = ip[4 * 0];
3402
3.24M
        b1 = ip[4 * 1];
3403
3.24M
        c1 = ip[4 * 2];
3404
3.24M
        d1 = ip[4 * 3];
3405
3406
3.24M
        a1 += b1;
3407
3.24M
        d1 -= c1;
3408
3.24M
        e1 = (a1 - d1) >> 1;
3409
3.24M
        b1 = e1 - b1;
3410
3.24M
        c1 = e1 - c1;
3411
3.24M
        a1 -= c1;
3412
3.24M
        d1 += b1;
3413
3.24M
        op[4 * 0] = (int32_t)(a1 * UNIT_QUANT_FACTOR);
3414
3.24M
        op[4 * 1] = (int32_t)(c1 * UNIT_QUANT_FACTOR);
3415
3.24M
        op[4 * 2] = (int32_t)(d1 * UNIT_QUANT_FACTOR);
3416
3.24M
        op[4 * 3] = (int32_t)(b1 * UNIT_QUANT_FACTOR);
3417
3418
3.24M
        ip++;
3419
3.24M
        op++;
3420
3.24M
    }
3421
812k
}
3422
3423
/*********************************************************************
3424
* Transform
3425
*   Note there is an implicit assumption that TU Size <= PU Size,
3426
*   which is different than the HEVC requirements.
3427
*********************************************************************/
3428
EbErrorType svt_aom_estimate_transform(PictureControlSet* pcs, ModeDecisionContext* ctx, int16_t* residual_buffer,
3429
                                       uint32_t residual_stride, int32_t* coeff_buffer, uint32_t coeff_stride,
3430
                                       TxSize transform_size, uint64_t* three_quad_energy, uint32_t bit_depth,
3431
                                       TxType transform_type, PlaneType component_type, TxCoeffShape trans_coeff_shape)
3432
3433
978k
{
3434
978k
    (void)trans_coeff_shape;
3435
978k
    (void)coeff_stride;
3436
978k
    (void)component_type;
3437
3438
    // Lossless uses a 4x4 WHT; guard on TX_4X4 so larger sizes fall through and
3439
    // fill the full coeff_buffer, avoiding an uninitialized read. Fixes gitlab#2373.
3440
978k
    if (svt_av1_is_lossless_segment(pcs, ctx->blk_ptr->segment_id) && transform_size == TX_4X4) {
3441
812k
        assert(transform_type == DCT_DCT);
3442
812k
        int32_t dst[16];
3443
3444
812k
        svt_av1_fwht4x4(residual_buffer, dst, residual_stride);
3445
4.05M
        for (int i = 0; i < 4; i++) {
3446
16.2M
            for (int j = 0; j < 4; j++) {
3447
12.9M
                coeff_buffer[(j << 2) + i] = dst[(i << 2) + j];
3448
12.9M
            }
3449
3.24M
        }
3450
812k
        return EB_ErrorNone;
3451
812k
    }
3452
3453
165k
    switch (trans_coeff_shape) {
3454
166k
    case DEFAULT_SHAPE:
3455
166k
        return av1_estimate_transform_default(residual_buffer,
3456
166k
                                              residual_stride,
3457
166k
                                              coeff_buffer,
3458
166k
                                              coeff_stride,
3459
166k
                                              transform_size,
3460
166k
                                              three_quad_energy,
3461
166k
                                              bit_depth,
3462
166k
                                              transform_type,
3463
166k
                                              component_type);
3464
0
#if CONFIG_ENABLE_TX_PF_N2
3465
0
    case N2_SHAPE:
3466
0
        return av1_estimate_transform_N2(residual_buffer,
3467
0
                                         residual_stride,
3468
0
                                         coeff_buffer,
3469
0
                                         coeff_stride,
3470
0
                                         transform_size,
3471
0
                                         three_quad_energy,
3472
0
                                         bit_depth,
3473
0
                                         transform_type,
3474
0
                                         component_type);
3475
0
#endif
3476
0
    case N4_SHAPE:
3477
0
        return av1_estimate_transform_N4(residual_buffer,
3478
0
                                         residual_stride,
3479
0
                                         coeff_buffer,
3480
0
                                         coeff_stride,
3481
0
                                         transform_size,
3482
0
                                         three_quad_energy,
3483
0
                                         bit_depth,
3484
0
                                         transform_type,
3485
0
                                         component_type);
3486
0
    case ONLY_DC_SHAPE:
3487
0
        return av1_estimate_transform_ONLY_DC(residual_buffer,
3488
0
                                              residual_stride,
3489
0
                                              coeff_buffer,
3490
0
                                              coeff_stride,
3491
0
                                              transform_size,
3492
0
                                              three_quad_energy,
3493
0
                                              bit_depth,
3494
0
                                              transform_type,
3495
0
                                              component_type);
3496
0
    default:
3497
0
        break;
3498
165k
    }
3499
3500
165k
    assert(0);
3501
0
    return EB_ErrorBadParameter;
3502
165k
}
3503
3504
// PF_N4
3505
0
static void highbd_fwd_txfm_64x64_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3506
0
    assert(txfm_param->tx_type == DCT_DCT);
3507
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3508
0
    const int bd        = txfm_param->bd;
3509
0
    svt_av1_fwd_txfm2d_64x64_N4(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3510
0
}
3511
3512
0
static void highbd_fwd_txfm_32x64_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3513
0
    assert(txfm_param->tx_type == DCT_DCT);
3514
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3515
0
    const int bd        = txfm_param->bd;
3516
0
    svt_av1_fwd_txfm2d_32x64_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3517
0
}
3518
3519
0
static void highbd_fwd_txfm_64x32_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3520
0
    assert(txfm_param->tx_type == DCT_DCT);
3521
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3522
0
    const int bd        = txfm_param->bd;
3523
0
    svt_av1_fwd_txfm2d_64x32_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3524
0
}
3525
3526
0
static void highbd_fwd_txfm_16x64_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3527
0
    assert(txfm_param->tx_type == DCT_DCT);
3528
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3529
0
    const int bd        = txfm_param->bd;
3530
0
    svt_av1_fwd_txfm2d_16x64_N4(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3531
0
}
3532
3533
0
static void highbd_fwd_txfm_64x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3534
0
    assert(txfm_param->tx_type == DCT_DCT);
3535
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3536
0
    const int bd        = txfm_param->bd;
3537
0
    svt_av1_fwd_txfm2d_64x16_N4(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3538
0
}
3539
3540
0
static void highbd_fwd_txfm_32x32_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3541
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3542
0
    const TxType tx_type   = txfm_param->tx_type;
3543
0
    const int    bd        = txfm_param->bd;
3544
0
    svt_av1_fwd_txfm2d_32x32_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3545
0
}
3546
3547
0
static void highbd_fwd_txfm_16x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3548
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3549
0
    const TxType tx_type   = txfm_param->tx_type;
3550
0
    const int    bd        = txfm_param->bd;
3551
0
    svt_av1_fwd_txfm2d_16x16_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3552
0
}
3553
3554
0
static void highbd_fwd_txfm_8x8_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3555
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3556
0
    const TxType tx_type   = txfm_param->tx_type;
3557
0
    const int    bd        = txfm_param->bd;
3558
0
    svt_av1_fwd_txfm2d_8x8_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3559
0
}
3560
3561
0
static void highbd_fwd_txfm_4x8_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3562
0
    int32_t* dst_coeff = (int32_t*)coeff;
3563
0
    svt_av1_fwd_txfm2d_4x8_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3564
0
}
3565
3566
0
static void highbd_fwd_txfm_8x4_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3567
0
    int32_t* dst_coeff = (int32_t*)coeff;
3568
0
    svt_av1_fwd_txfm2d_8x4_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3569
0
}
3570
3571
0
static void highbd_fwd_txfm_8x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3572
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3573
0
    const TxType tx_type   = txfm_param->tx_type;
3574
0
    const int    bd        = txfm_param->bd;
3575
0
    svt_av1_fwd_txfm2d_8x16_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3576
0
}
3577
3578
0
static void highbd_fwd_txfm_16x8_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3579
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3580
0
    const TxType tx_type   = txfm_param->tx_type;
3581
0
    const int    bd        = txfm_param->bd;
3582
0
    svt_av1_fwd_txfm2d_16x8_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3583
0
}
3584
3585
0
static void highbd_fwd_txfm_16x32_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3586
0
    int32_t* dst_coeff = (int32_t*)coeff;
3587
0
    svt_av1_fwd_txfm2d_16x32_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3588
0
}
3589
3590
0
static void highbd_fwd_txfm_32x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3591
0
    int32_t* dst_coeff = (int32_t*)coeff;
3592
0
    svt_av1_fwd_txfm2d_32x16_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3593
0
}
3594
3595
0
static void highbd_fwd_txfm_4x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3596
0
    int32_t* dst_coeff = (int32_t*)coeff;
3597
0
    svt_av1_fwd_txfm2d_4x16(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3598
0
}
3599
3600
0
static void highbd_fwd_txfm_16x4_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3601
0
    int32_t* dst_coeff = (int32_t*)coeff;
3602
0
    svt_av1_fwd_txfm2d_16x4_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3603
0
}
3604
3605
0
static void highbd_fwd_txfm_8x32_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3606
0
    int32_t* dst_coeff = (int32_t*)coeff;
3607
0
    svt_av1_fwd_txfm2d_8x32_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3608
0
}
3609
3610
0
static void highbd_fwd_txfm_32x8_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3611
0
    int32_t* dst_coeff = (int32_t*)coeff;
3612
0
    svt_av1_fwd_txfm2d_32x8_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3613
0
}
3614
3615
//PF_N2
3616
0
static void highbd_fwd_txfm_64x64_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3617
0
    assert(txfm_param->tx_type == DCT_DCT);
3618
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3619
0
    const int bd        = txfm_param->bd;
3620
0
    svt_av1_fwd_txfm2d_64x64_N2(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3621
0
}
3622
3623
0
static void highbd_fwd_txfm_32x64_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3624
0
    assert(txfm_param->tx_type == DCT_DCT);
3625
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3626
0
    const int bd        = txfm_param->bd;
3627
0
    svt_av1_fwd_txfm2d_32x64_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3628
0
}
3629
3630
0
static void highbd_fwd_txfm_64x32_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3631
0
    assert(txfm_param->tx_type == DCT_DCT);
3632
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3633
0
    const int bd        = txfm_param->bd;
3634
0
    svt_av1_fwd_txfm2d_64x32_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3635
0
}
3636
3637
0
static void highbd_fwd_txfm_16x64_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3638
0
    assert(txfm_param->tx_type == DCT_DCT);
3639
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3640
0
    const int bd        = txfm_param->bd;
3641
0
    svt_av1_fwd_txfm2d_16x64_N2(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3642
0
}
3643
3644
0
static void highbd_fwd_txfm_64x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3645
0
    assert(txfm_param->tx_type == DCT_DCT);
3646
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3647
0
    const int bd        = txfm_param->bd;
3648
0
    svt_av1_fwd_txfm2d_64x16_N2(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3649
0
}
3650
3651
0
static void highbd_fwd_txfm_32x32_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3652
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3653
0
    const TxType tx_type   = txfm_param->tx_type;
3654
0
    const int    bd        = txfm_param->bd;
3655
0
    svt_av1_fwd_txfm2d_32x32_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3656
0
}
3657
3658
0
static void highbd_fwd_txfm_16x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3659
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3660
0
    const TxType tx_type   = txfm_param->tx_type;
3661
0
    const int    bd        = txfm_param->bd;
3662
0
    svt_av1_fwd_txfm2d_16x16_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3663
0
}
3664
3665
0
static void highbd_fwd_txfm_8x8_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3666
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3667
0
    const TxType tx_type   = txfm_param->tx_type;
3668
0
    const int    bd        = txfm_param->bd;
3669
0
    svt_av1_fwd_txfm2d_8x8_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3670
0
}
3671
3672
0
static void highbd_fwd_txfm_4x8_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3673
0
    int32_t* dst_coeff = (int32_t*)coeff;
3674
0
    svt_av1_fwd_txfm2d_4x8_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3675
0
}
3676
3677
0
static void highbd_fwd_txfm_8x4_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3678
0
    int32_t* dst_coeff = (int32_t*)coeff;
3679
0
    svt_av1_fwd_txfm2d_8x4_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3680
0
}
3681
3682
0
static void highbd_fwd_txfm_8x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3683
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3684
0
    const TxType tx_type   = txfm_param->tx_type;
3685
0
    const int    bd        = txfm_param->bd;
3686
0
    svt_av1_fwd_txfm2d_8x16_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3687
0
}
3688
3689
0
static void highbd_fwd_txfm_16x8_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3690
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3691
0
    const TxType tx_type   = txfm_param->tx_type;
3692
0
    const int    bd        = txfm_param->bd;
3693
0
    svt_av1_fwd_txfm2d_16x8_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3694
0
}
3695
3696
0
static void highbd_fwd_txfm_16x32_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3697
0
    int32_t* dst_coeff = (int32_t*)coeff;
3698
0
    svt_av1_fwd_txfm2d_16x32_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3699
0
}
3700
3701
0
static void highbd_fwd_txfm_32x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3702
0
    int32_t* dst_coeff = (int32_t*)coeff;
3703
0
    svt_av1_fwd_txfm2d_32x16_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3704
0
}
3705
3706
0
static void highbd_fwd_txfm_4x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3707
0
    int32_t* dst_coeff = (int32_t*)coeff;
3708
0
    svt_av1_fwd_txfm2d_4x16(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3709
0
}
3710
3711
0
static void highbd_fwd_txfm_16x4_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3712
0
    int32_t* dst_coeff = (int32_t*)coeff;
3713
0
    svt_av1_fwd_txfm2d_16x4_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3714
0
}
3715
3716
0
static void highbd_fwd_txfm_8x32_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3717
0
    int32_t* dst_coeff = (int32_t*)coeff;
3718
0
    svt_av1_fwd_txfm2d_8x32_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3719
0
}
3720
3721
0
static void highbd_fwd_txfm_32x8_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3722
0
    int32_t* dst_coeff = (int32_t*)coeff;
3723
0
    svt_av1_fwd_txfm2d_32x8_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3724
0
}
3725
3726
0
static void highbd_fwd_txfm_64x64(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3727
0
    assert(txfm_param->tx_type == DCT_DCT);
3728
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3729
0
    const int bd        = txfm_param->bd;
3730
0
    svt_av1_fwd_txfm2d_64x64(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3731
0
}
3732
3733
0
static void highbd_fwd_txfm_32x64(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3734
0
    assert(txfm_param->tx_type == DCT_DCT);
3735
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3736
0
    const int bd        = txfm_param->bd;
3737
0
    svt_av1_fwd_txfm2d_32x64(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3738
0
}
3739
3740
0
static void highbd_fwd_txfm_64x32(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3741
0
    assert(txfm_param->tx_type == DCT_DCT);
3742
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3743
0
    const int bd        = txfm_param->bd;
3744
0
    svt_av1_fwd_txfm2d_64x32(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3745
0
}
3746
3747
0
static void highbd_fwd_txfm_16x64(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3748
0
    assert(txfm_param->tx_type == DCT_DCT);
3749
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3750
0
    const int bd        = txfm_param->bd;
3751
0
    svt_av1_fwd_txfm2d_16x64(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3752
0
}
3753
3754
0
static void highbd_fwd_txfm_64x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3755
0
    assert(txfm_param->tx_type == DCT_DCT);
3756
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3757
0
    const int bd        = txfm_param->bd;
3758
0
    svt_av1_fwd_txfm2d_64x16(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3759
0
}
3760
3761
0
static void highbd_fwd_txfm_32x32(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3762
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3763
0
    const TxType tx_type   = txfm_param->tx_type;
3764
0
    const int    bd        = txfm_param->bd;
3765
0
    svt_av1_fwd_txfm2d_32x32(src_diff, dst_coeff, diff_stride, tx_type, bd);
3766
0
}
3767
3768
0
static void highbd_fwd_txfm_16x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3769
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3770
0
    const TxType tx_type   = txfm_param->tx_type;
3771
0
    const int    bd        = txfm_param->bd;
3772
0
    svt_av1_fwd_txfm2d_16x16(src_diff, dst_coeff, diff_stride, tx_type, bd);
3773
0
}
3774
3775
0
static void highbd_fwd_txfm_8x8(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3776
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3777
0
    const TxType tx_type   = txfm_param->tx_type;
3778
0
    const int    bd        = txfm_param->bd;
3779
0
    svt_av1_fwd_txfm2d_8x8(src_diff, dst_coeff, diff_stride, tx_type, bd);
3780
0
}
3781
3782
0
static void highbd_fwd_txfm_4x8(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3783
0
    int32_t* dst_coeff = (int32_t*)coeff;
3784
0
    svt_av1_fwd_txfm2d_4x8(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3785
0
}
3786
3787
0
static void highbd_fwd_txfm_8x4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3788
0
    int32_t* dst_coeff = (int32_t*)coeff;
3789
0
    svt_av1_fwd_txfm2d_8x4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3790
0
}
3791
3792
0
static void highbd_fwd_txfm_8x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3793
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3794
0
    const TxType tx_type   = txfm_param->tx_type;
3795
0
    const int    bd        = txfm_param->bd;
3796
0
    svt_av1_fwd_txfm2d_8x16(src_diff, dst_coeff, diff_stride, tx_type, bd);
3797
0
}
3798
3799
0
static void highbd_fwd_txfm_16x8(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3800
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3801
0
    const TxType tx_type   = txfm_param->tx_type;
3802
0
    const int    bd        = txfm_param->bd;
3803
0
    svt_av1_fwd_txfm2d_16x8(src_diff, dst_coeff, diff_stride, tx_type, bd);
3804
0
}
3805
3806
0
static void highbd_fwd_txfm_16x32(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3807
0
    int32_t* dst_coeff = (int32_t*)coeff;
3808
0
    svt_av1_fwd_txfm2d_16x32(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3809
0
}
3810
3811
0
static void highbd_fwd_txfm_32x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3812
0
    int32_t* dst_coeff = (int32_t*)coeff;
3813
0
    svt_av1_fwd_txfm2d_32x16(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3814
0
}
3815
3816
0
static void highbd_fwd_txfm_4x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3817
0
    int32_t* dst_coeff = (int32_t*)coeff;
3818
0
    svt_av1_fwd_txfm2d_4x16(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3819
0
}
3820
3821
0
static void highbd_fwd_txfm_16x4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3822
0
    int32_t* dst_coeff = (int32_t*)coeff;
3823
0
    svt_av1_fwd_txfm2d_16x4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3824
0
}
3825
3826
0
static void highbd_fwd_txfm_8x32(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3827
0
    int32_t* dst_coeff = (int32_t*)coeff;
3828
0
    svt_av1_fwd_txfm2d_8x32(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3829
0
}
3830
3831
0
static void highbd_fwd_txfm_32x8(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3832
0
    int32_t* dst_coeff = (int32_t*)coeff;
3833
0
    svt_av1_fwd_txfm2d_32x8(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3834
0
}
3835
3836
0
void svt_av1_highbd_fwd_txfm_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3837
0
    assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
3838
0
    const TxSize tx_size = txfm_param->tx_size;
3839
0
    switch (tx_size) {
3840
0
    case TX_64X64:
3841
0
        highbd_fwd_txfm_64x64_n4(src_diff, coeff, diff_stride, txfm_param);
3842
0
        break;
3843
0
    case TX_32X64:
3844
0
        highbd_fwd_txfm_32x64_n4(src_diff, coeff, diff_stride, txfm_param);
3845
0
        break;
3846
0
    case TX_64X32:
3847
0
        highbd_fwd_txfm_64x32_n4(src_diff, coeff, diff_stride, txfm_param);
3848
0
        break;
3849
0
    case TX_16X64:
3850
0
        highbd_fwd_txfm_16x64_n4(src_diff, coeff, diff_stride, txfm_param);
3851
0
        break;
3852
0
    case TX_64X16:
3853
0
        highbd_fwd_txfm_64x16_n4(src_diff, coeff, diff_stride, txfm_param);
3854
0
        break;
3855
0
    case TX_32X32:
3856
0
        highbd_fwd_txfm_32x32_n4(src_diff, coeff, diff_stride, txfm_param);
3857
0
        break;
3858
0
    case TX_16X16:
3859
0
        highbd_fwd_txfm_16x16_n4(src_diff, coeff, diff_stride, txfm_param);
3860
0
        break;
3861
0
    case TX_8X8:
3862
0
        highbd_fwd_txfm_8x8_n4(src_diff, coeff, diff_stride, txfm_param);
3863
0
        break;
3864
0
    case TX_4X8:
3865
0
        highbd_fwd_txfm_4x8_n4(src_diff, coeff, diff_stride, txfm_param);
3866
0
        break;
3867
0
    case TX_8X4:
3868
0
        highbd_fwd_txfm_8x4_n4(src_diff, coeff, diff_stride, txfm_param);
3869
0
        break;
3870
0
    case TX_8X16:
3871
0
        highbd_fwd_txfm_8x16_n4(src_diff, coeff, diff_stride, txfm_param);
3872
0
        break;
3873
0
    case TX_16X8:
3874
0
        highbd_fwd_txfm_16x8_n4(src_diff, coeff, diff_stride, txfm_param);
3875
0
        break;
3876
0
    case TX_16X32:
3877
0
        highbd_fwd_txfm_16x32_n4(src_diff, coeff, diff_stride, txfm_param);
3878
0
        break;
3879
0
    case TX_32X16:
3880
0
        highbd_fwd_txfm_32x16_n4(src_diff, coeff, diff_stride, txfm_param);
3881
0
        break;
3882
0
    case TX_4X4:
3883
        //hack highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, txfm_param);
3884
0
        break;
3885
0
    case TX_4X16:
3886
0
        highbd_fwd_txfm_4x16_n4(src_diff, coeff, diff_stride, txfm_param);
3887
0
        break;
3888
0
    case TX_16X4:
3889
0
        highbd_fwd_txfm_16x4_n4(src_diff, coeff, diff_stride, txfm_param);
3890
0
        break;
3891
0
    case TX_8X32:
3892
0
        highbd_fwd_txfm_8x32_n4(src_diff, coeff, diff_stride, txfm_param);
3893
0
        break;
3894
0
    case TX_32X8:
3895
0
        highbd_fwd_txfm_32x8_n4(src_diff, coeff, diff_stride, txfm_param);
3896
0
        break;
3897
0
    default:
3898
0
        assert(0);
3899
0
        break;
3900
0
    }
3901
0
}
3902
3903
0
void svt_av1_highbd_fwd_txfm_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3904
0
    assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
3905
0
    const TxSize tx_size = txfm_param->tx_size;
3906
0
    switch (tx_size) {
3907
0
    case TX_64X64:
3908
0
        highbd_fwd_txfm_64x64_n2(src_diff, coeff, diff_stride, txfm_param);
3909
0
        break;
3910
0
    case TX_32X64:
3911
0
        highbd_fwd_txfm_32x64_n2(src_diff, coeff, diff_stride, txfm_param);
3912
0
        break;
3913
0
    case TX_64X32:
3914
0
        highbd_fwd_txfm_64x32_n2(src_diff, coeff, diff_stride, txfm_param);
3915
0
        break;
3916
0
    case TX_16X64:
3917
0
        highbd_fwd_txfm_16x64_n2(src_diff, coeff, diff_stride, txfm_param);
3918
0
        break;
3919
0
    case TX_64X16:
3920
0
        highbd_fwd_txfm_64x16_n2(src_diff, coeff, diff_stride, txfm_param);
3921
0
        break;
3922
0
    case TX_32X32:
3923
0
        highbd_fwd_txfm_32x32_n2(src_diff, coeff, diff_stride, txfm_param);
3924
0
        break;
3925
0
    case TX_16X16:
3926
0
        highbd_fwd_txfm_16x16_n2(src_diff, coeff, diff_stride, txfm_param);
3927
0
        break;
3928
0
    case TX_8X8:
3929
0
        highbd_fwd_txfm_8x8_n2(src_diff, coeff, diff_stride, txfm_param);
3930
0
        break;
3931
0
    case TX_4X8:
3932
0
        highbd_fwd_txfm_4x8_n2(src_diff, coeff, diff_stride, txfm_param);
3933
0
        break;
3934
0
    case TX_8X4:
3935
0
        highbd_fwd_txfm_8x4_n2(src_diff, coeff, diff_stride, txfm_param);
3936
0
        break;
3937
0
    case TX_8X16:
3938
0
        highbd_fwd_txfm_8x16_n2(src_diff, coeff, diff_stride, txfm_param);
3939
0
        break;
3940
0
    case TX_16X8:
3941
0
        highbd_fwd_txfm_16x8_n2(src_diff, coeff, diff_stride, txfm_param);
3942
0
        break;
3943
0
    case TX_16X32:
3944
0
        highbd_fwd_txfm_16x32_n2(src_diff, coeff, diff_stride, txfm_param);
3945
0
        break;
3946
0
    case TX_32X16:
3947
0
        highbd_fwd_txfm_32x16_n2(src_diff, coeff, diff_stride, txfm_param);
3948
0
        break;
3949
0
    case TX_4X4:
3950
        //hack highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, txfm_param);
3951
0
        break;
3952
0
    case TX_4X16:
3953
0
        highbd_fwd_txfm_4x16_n2(src_diff, coeff, diff_stride, txfm_param);
3954
0
        break;
3955
0
    case TX_16X4:
3956
0
        highbd_fwd_txfm_16x4_n2(src_diff, coeff, diff_stride, txfm_param);
3957
0
        break;
3958
0
    case TX_8X32:
3959
0
        highbd_fwd_txfm_8x32_n2(src_diff, coeff, diff_stride, txfm_param);
3960
0
        break;
3961
0
    case TX_32X8:
3962
0
        highbd_fwd_txfm_32x8_n2(src_diff, coeff, diff_stride, txfm_param);
3963
0
        break;
3964
0
    default:
3965
0
        assert(0);
3966
0
        break;
3967
0
    }
3968
0
}
3969
3970
0
void svt_av1_highbd_fwd_txfm(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3971
0
    assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
3972
0
    const TxSize tx_size = txfm_param->tx_size;
3973
0
    switch (tx_size) {
3974
0
    case TX_64X64:
3975
0
        highbd_fwd_txfm_64x64(src_diff, coeff, diff_stride, txfm_param);
3976
0
        break;
3977
0
    case TX_32X64:
3978
0
        highbd_fwd_txfm_32x64(src_diff, coeff, diff_stride, txfm_param);
3979
0
        break;
3980
0
    case TX_64X32:
3981
0
        highbd_fwd_txfm_64x32(src_diff, coeff, diff_stride, txfm_param);
3982
0
        break;
3983
0
    case TX_16X64:
3984
0
        highbd_fwd_txfm_16x64(src_diff, coeff, diff_stride, txfm_param);
3985
0
        break;
3986
0
    case TX_64X16:
3987
0
        highbd_fwd_txfm_64x16(src_diff, coeff, diff_stride, txfm_param);
3988
0
        break;
3989
0
    case TX_32X32:
3990
0
        highbd_fwd_txfm_32x32(src_diff, coeff, diff_stride, txfm_param);
3991
0
        break;
3992
0
    case TX_16X16:
3993
0
        highbd_fwd_txfm_16x16(src_diff, coeff, diff_stride, txfm_param);
3994
0
        break;
3995
0
    case TX_8X8:
3996
0
        highbd_fwd_txfm_8x8(src_diff, coeff, diff_stride, txfm_param);
3997
0
        break;
3998
0
    case TX_4X8:
3999
0
        highbd_fwd_txfm_4x8(src_diff, coeff, diff_stride, txfm_param);
4000
0
        break;
4001
0
    case TX_8X4:
4002
0
        highbd_fwd_txfm_8x4(src_diff, coeff, diff_stride, txfm_param);
4003
0
        break;
4004
0
    case TX_8X16:
4005
0
        highbd_fwd_txfm_8x16(src_diff, coeff, diff_stride, txfm_param);
4006
0
        break;
4007
0
    case TX_16X8:
4008
0
        highbd_fwd_txfm_16x8(src_diff, coeff, diff_stride, txfm_param);
4009
0
        break;
4010
0
    case TX_16X32:
4011
0
        highbd_fwd_txfm_16x32(src_diff, coeff, diff_stride, txfm_param);
4012
0
        break;
4013
0
    case TX_32X16:
4014
0
        highbd_fwd_txfm_32x16(src_diff, coeff, diff_stride, txfm_param);
4015
0
        break;
4016
0
    case TX_4X4:
4017
        //hack highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, txfm_param);
4018
0
        break;
4019
0
    case TX_4X16:
4020
0
        highbd_fwd_txfm_4x16(src_diff, coeff, diff_stride, txfm_param);
4021
0
        break;
4022
0
    case TX_16X4:
4023
0
        highbd_fwd_txfm_16x4(src_diff, coeff, diff_stride, txfm_param);
4024
0
        break;
4025
0
    case TX_8X32:
4026
0
        highbd_fwd_txfm_8x32(src_diff, coeff, diff_stride, txfm_param);
4027
0
        break;
4028
0
    case TX_32X8:
4029
0
        highbd_fwd_txfm_32x8(src_diff, coeff, diff_stride, txfm_param);
4030
0
        break;
4031
0
    default:
4032
0
        assert(0);
4033
0
        break;
4034
0
    }
4035
0
}
4036
4037
void svt_av1_wht_fwd_txfm(int16_t* src_diff, int bw, int32_t* coeff, TxSize tx_size, TxCoeffShape pf_shape,
4038
0
                          int bit_depth, int is_hbd) {
4039
0
    TxfmParam txfm_param;
4040
0
    txfm_param.tx_type     = DCT_DCT;
4041
0
    txfm_param.tx_size     = tx_size;
4042
0
    txfm_param.lossless    = 0;
4043
0
    txfm_param.tx_set_type = EXT_TX_SET_ALL16;
4044
4045
0
    txfm_param.bd     = bit_depth;
4046
0
    txfm_param.is_hbd = is_hbd;
4047
0
    switch (pf_shape) {
4048
0
    case N4_SHAPE:
4049
0
        svt_av1_highbd_fwd_txfm_n4(src_diff, coeff, bw, &txfm_param);
4050
0
        break;
4051
0
    case N2_SHAPE:
4052
0
        svt_av1_highbd_fwd_txfm_n2(src_diff, coeff, bw, &txfm_param);
4053
0
        break;
4054
0
    default:
4055
0
        svt_av1_highbd_fwd_txfm(src_diff, coeff, bw, &txfm_param);
4056
0
    }
4057
0
}
4058
4059
0
void svt_av1_fidentity16_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4060
0
    (void)stage_range;
4061
0
    (void)cos_bit;
4062
0
    for (int32_t i = 0; i < 8; ++i) {
4063
0
        output[i] = round_shift((int64_t)input[i] * 2 * new_sqrt2, new_sqrt2_bits);
4064
0
    }
4065
4066
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
4067
0
}
4068
4069
0
void svt_av1_fadst16_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4070
0
    (void)stage_range;
4071
0
    const int32_t* cospi;
4072
4073
0
    int32_t *bf0, *bf1;
4074
0
    int32_t  step[16];
4075
4076
    // stage 0;
4077
4078
    // stage 1;
4079
0
    assert(output != input);
4080
0
    bf1     = output;
4081
0
    bf1[0]  = input[0];
4082
0
    bf1[1]  = -input[15];
4083
0
    bf1[2]  = -input[7];
4084
0
    bf1[3]  = input[8];
4085
0
    bf1[4]  = -input[3];
4086
0
    bf1[5]  = input[12];
4087
0
    bf1[6]  = input[4];
4088
0
    bf1[7]  = -input[11];
4089
0
    bf1[8]  = -input[1];
4090
0
    bf1[9]  = input[14];
4091
0
    bf1[10] = input[6];
4092
0
    bf1[11] = -input[9];
4093
0
    bf1[12] = input[2];
4094
0
    bf1[13] = -input[13];
4095
0
    bf1[14] = -input[5];
4096
0
    bf1[15] = input[10];
4097
4098
    // stage 2
4099
0
    cospi   = cospi_arr(cos_bit);
4100
0
    bf0     = output;
4101
0
    bf1     = step;
4102
0
    bf1[0]  = bf0[0];
4103
0
    bf1[1]  = bf0[1];
4104
0
    bf1[2]  = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
4105
0
    bf1[3]  = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
4106
0
    bf1[4]  = bf0[4];
4107
0
    bf1[5]  = bf0[5];
4108
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
4109
0
    bf1[7]  = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
4110
0
    bf1[8]  = bf0[8];
4111
0
    bf1[9]  = bf0[9];
4112
0
    bf1[10] = half_btf(cospi[32], bf0[10], cospi[32], bf0[11], cos_bit);
4113
0
    bf1[11] = half_btf(cospi[32], bf0[10], -cospi[32], bf0[11], cos_bit);
4114
0
    bf1[12] = bf0[12];
4115
0
    bf1[13] = bf0[13];
4116
0
    bf1[14] = half_btf(cospi[32], bf0[14], cospi[32], bf0[15], cos_bit);
4117
0
    bf1[15] = half_btf(cospi[32], bf0[14], -cospi[32], bf0[15], cos_bit);
4118
4119
    // stage 3
4120
0
    bf0     = step;
4121
0
    bf1     = output;
4122
0
    bf1[0]  = bf0[0] + bf0[2];
4123
0
    bf1[1]  = bf0[1] + bf0[3];
4124
0
    bf1[2]  = bf0[0] - bf0[2];
4125
0
    bf1[3]  = bf0[1] - bf0[3];
4126
0
    bf1[4]  = bf0[4] + bf0[6];
4127
0
    bf1[5]  = bf0[5] + bf0[7];
4128
0
    bf1[6]  = bf0[4] - bf0[6];
4129
0
    bf1[7]  = bf0[5] - bf0[7];
4130
0
    bf1[8]  = bf0[8] + bf0[10];
4131
0
    bf1[9]  = bf0[9] + bf0[11];
4132
0
    bf1[10] = bf0[8] - bf0[10];
4133
0
    bf1[11] = bf0[9] - bf0[11];
4134
0
    bf1[12] = bf0[12] + bf0[14];
4135
0
    bf1[13] = bf0[13] + bf0[15];
4136
0
    bf1[14] = bf0[12] - bf0[14];
4137
0
    bf1[15] = bf0[13] - bf0[15];
4138
4139
    // stage 4
4140
0
    cospi   = cospi_arr(cos_bit);
4141
0
    bf0     = output;
4142
0
    bf1     = step;
4143
0
    bf1[0]  = bf0[0];
4144
0
    bf1[1]  = bf0[1];
4145
0
    bf1[2]  = bf0[2];
4146
0
    bf1[3]  = bf0[3];
4147
0
    bf1[4]  = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
4148
0
    bf1[5]  = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
4149
0
    bf1[6]  = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
4150
0
    bf1[7]  = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
4151
0
    bf1[8]  = bf0[8];
4152
0
    bf1[9]  = bf0[9];
4153
0
    bf1[10] = bf0[10];
4154
0
    bf1[11] = bf0[11];
4155
0
    bf1[12] = half_btf(cospi[16], bf0[12], cospi[48], bf0[13], cos_bit);
4156
0
    bf1[13] = half_btf(cospi[48], bf0[12], -cospi[16], bf0[13], cos_bit);
4157
0
    bf1[14] = half_btf(-cospi[48], bf0[14], cospi[16], bf0[15], cos_bit);
4158
0
    bf1[15] = half_btf(cospi[16], bf0[14], cospi[48], bf0[15], cos_bit);
4159
4160
    // stage 5
4161
0
    bf0     = step;
4162
0
    bf1     = output;
4163
0
    bf1[0]  = bf0[0] + bf0[4];
4164
0
    bf1[1]  = bf0[1] + bf0[5];
4165
0
    bf1[2]  = bf0[2] + bf0[6];
4166
0
    bf1[3]  = bf0[3] + bf0[7];
4167
0
    bf1[4]  = bf0[0] - bf0[4];
4168
0
    bf1[5]  = bf0[1] - bf0[5];
4169
0
    bf1[6]  = bf0[2] - bf0[6];
4170
0
    bf1[7]  = bf0[3] - bf0[7];
4171
0
    bf1[8]  = bf0[8] + bf0[12];
4172
0
    bf1[9]  = bf0[9] + bf0[13];
4173
0
    bf1[10] = bf0[10] + bf0[14];
4174
0
    bf1[11] = bf0[11] + bf0[15];
4175
0
    bf1[12] = bf0[8] - bf0[12];
4176
0
    bf1[13] = bf0[9] - bf0[13];
4177
0
    bf1[14] = bf0[10] - bf0[14];
4178
0
    bf1[15] = bf0[11] - bf0[15];
4179
4180
    // stage 6
4181
0
    cospi   = cospi_arr(cos_bit);
4182
0
    bf0     = output;
4183
0
    bf1     = step;
4184
0
    bf1[0]  = bf0[0];
4185
0
    bf1[1]  = bf0[1];
4186
0
    bf1[2]  = bf0[2];
4187
0
    bf1[3]  = bf0[3];
4188
0
    bf1[4]  = bf0[4];
4189
0
    bf1[5]  = bf0[5];
4190
0
    bf1[6]  = bf0[6];
4191
0
    bf1[7]  = bf0[7];
4192
0
    bf1[8]  = half_btf(cospi[8], bf0[8], cospi[56], bf0[9], cos_bit);
4193
0
    bf1[9]  = half_btf(cospi[56], bf0[8], -cospi[8], bf0[9], cos_bit);
4194
0
    bf1[10] = half_btf(cospi[40], bf0[10], cospi[24], bf0[11], cos_bit);
4195
0
    bf1[11] = half_btf(cospi[24], bf0[10], -cospi[40], bf0[11], cos_bit);
4196
0
    bf1[12] = half_btf(-cospi[56], bf0[12], cospi[8], bf0[13], cos_bit);
4197
0
    bf1[13] = half_btf(cospi[8], bf0[12], cospi[56], bf0[13], cos_bit);
4198
0
    bf1[14] = half_btf(-cospi[24], bf0[14], cospi[40], bf0[15], cos_bit);
4199
0
    bf1[15] = half_btf(cospi[40], bf0[14], cospi[24], bf0[15], cos_bit);
4200
4201
    // stage 7
4202
0
    bf0     = step;
4203
0
    bf1     = output;
4204
0
    bf1[0]  = bf0[0] + bf0[8];
4205
0
    bf1[1]  = bf0[1] + bf0[9];
4206
0
    bf1[2]  = bf0[2] + bf0[10];
4207
0
    bf1[3]  = bf0[3] + bf0[11];
4208
0
    bf1[4]  = bf0[4] + bf0[12];
4209
0
    bf1[5]  = bf0[5] + bf0[13];
4210
0
    bf1[6]  = bf0[6] + bf0[14];
4211
0
    bf1[7]  = bf0[7] + bf0[15];
4212
0
    bf1[8]  = bf0[0] - bf0[8];
4213
0
    bf1[9]  = bf0[1] - bf0[9];
4214
0
    bf1[10] = bf0[2] - bf0[10];
4215
0
    bf1[11] = bf0[3] - bf0[11];
4216
0
    bf1[12] = bf0[4] - bf0[12];
4217
0
    bf1[13] = bf0[5] - bf0[13];
4218
0
    bf1[14] = bf0[6] - bf0[14];
4219
0
    bf1[15] = bf0[7] - bf0[15];
4220
4221
    // stage 8
4222
0
    cospi   = cospi_arr(cos_bit);
4223
0
    bf0     = output;
4224
0
    bf1     = step;
4225
0
    bf1[1]  = half_btf(cospi[62], bf0[0], -cospi[2], bf0[1], cos_bit);
4226
0
    bf1[3]  = half_btf(cospi[54], bf0[2], -cospi[10], bf0[3], cos_bit);
4227
0
    bf1[5]  = half_btf(cospi[46], bf0[4], -cospi[18], bf0[5], cos_bit);
4228
0
    bf1[7]  = half_btf(cospi[38], bf0[6], -cospi[26], bf0[7], cos_bit);
4229
0
    bf1[8]  = half_btf(cospi[34], bf0[8], cospi[30], bf0[9], cos_bit);
4230
0
    bf1[10] = half_btf(cospi[42], bf0[10], cospi[22], bf0[11], cos_bit);
4231
0
    bf1[12] = half_btf(cospi[50], bf0[12], cospi[14], bf0[13], cos_bit);
4232
0
    bf1[14] = half_btf(cospi[58], bf0[14], cospi[6], bf0[15], cos_bit);
4233
4234
    // stage 9
4235
0
    bf0    = step;
4236
0
    bf1    = output;
4237
0
    bf1[0] = bf0[1];
4238
0
    bf1[1] = bf0[14];
4239
0
    bf1[2] = bf0[3];
4240
0
    bf1[3] = bf0[12];
4241
0
    bf1[4] = bf0[5];
4242
0
    bf1[5] = bf0[10];
4243
0
    bf1[6] = bf0[7];
4244
0
    bf1[7] = bf0[8];
4245
0
}
4246
4247
0
void svt_av1_fdct16_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4248
0
    (void)stage_range;
4249
0
    const int32_t* cospi;
4250
4251
0
    int32_t *bf0, *bf1;
4252
0
    int32_t  step[16];
4253
4254
    // stage 0;
4255
4256
    // stage 1;
4257
0
    bf1     = output;
4258
0
    bf1[0]  = input[0] + input[15];
4259
0
    bf1[1]  = input[1] + input[14];
4260
0
    bf1[2]  = input[2] + input[13];
4261
0
    bf1[3]  = input[3] + input[12];
4262
0
    bf1[4]  = input[4] + input[11];
4263
0
    bf1[5]  = input[5] + input[10];
4264
0
    bf1[6]  = input[6] + input[9];
4265
0
    bf1[7]  = input[7] + input[8];
4266
0
    bf1[8]  = -input[8] + input[7];
4267
0
    bf1[9]  = -input[9] + input[6];
4268
0
    bf1[10] = -input[10] + input[5];
4269
0
    bf1[11] = -input[11] + input[4];
4270
0
    bf1[12] = -input[12] + input[3];
4271
0
    bf1[13] = -input[13] + input[2];
4272
0
    bf1[14] = -input[14] + input[1];
4273
0
    bf1[15] = -input[15] + input[0];
4274
4275
    // stage 2
4276
0
    cospi   = cospi_arr(cos_bit);
4277
0
    bf0     = output;
4278
0
    bf1     = step;
4279
0
    bf1[0]  = bf0[0] + bf0[7];
4280
0
    bf1[1]  = bf0[1] + bf0[6];
4281
0
    bf1[2]  = bf0[2] + bf0[5];
4282
0
    bf1[3]  = bf0[3] + bf0[4];
4283
0
    bf1[4]  = -bf0[4] + bf0[3];
4284
0
    bf1[5]  = -bf0[5] + bf0[2];
4285
0
    bf1[6]  = -bf0[6] + bf0[1];
4286
0
    bf1[7]  = -bf0[7] + bf0[0];
4287
0
    bf1[8]  = bf0[8];
4288
0
    bf1[9]  = bf0[9];
4289
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
4290
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
4291
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
4292
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
4293
0
    bf1[14] = bf0[14];
4294
0
    bf1[15] = bf0[15];
4295
4296
    // stage 3
4297
0
    cospi   = cospi_arr(cos_bit);
4298
0
    bf0     = step;
4299
0
    bf1     = output;
4300
0
    bf1[0]  = bf0[0] + bf0[3];
4301
0
    bf1[1]  = bf0[1] + bf0[2];
4302
0
    bf1[2]  = -bf0[2] + bf0[1];
4303
0
    bf1[3]  = -bf0[3] + bf0[0];
4304
0
    bf1[4]  = bf0[4];
4305
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
4306
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
4307
0
    bf1[7]  = bf0[7];
4308
0
    bf1[8]  = bf0[8] + bf0[11];
4309
0
    bf1[9]  = bf0[9] + bf0[10];
4310
0
    bf1[10] = -bf0[10] + bf0[9];
4311
0
    bf1[11] = -bf0[11] + bf0[8];
4312
0
    bf1[12] = -bf0[12] + bf0[15];
4313
0
    bf1[13] = -bf0[13] + bf0[14];
4314
0
    bf1[14] = bf0[14] + bf0[13];
4315
0
    bf1[15] = bf0[15] + bf0[12];
4316
4317
    // stage 4
4318
0
    cospi   = cospi_arr(cos_bit);
4319
0
    bf0     = output;
4320
0
    bf1     = step;
4321
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
4322
0
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
4323
0
    bf1[4]  = bf0[4] + bf0[5];
4324
0
    bf1[5]  = -bf0[5] + bf0[4];
4325
0
    bf1[6]  = -bf0[6] + bf0[7];
4326
0
    bf1[7]  = bf0[7] + bf0[6];
4327
0
    bf1[8]  = bf0[8];
4328
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
4329
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
4330
0
    bf1[11] = bf0[11];
4331
0
    bf1[12] = bf0[12];
4332
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
4333
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
4334
0
    bf1[15] = bf0[15];
4335
4336
    // stage 5
4337
0
    cospi   = cospi_arr(cos_bit);
4338
0
    bf0     = step;
4339
0
    bf1     = output;
4340
0
    bf1[0]  = bf0[0];
4341
0
    bf1[2]  = bf0[2];
4342
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
4343
0
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
4344
0
    bf1[8]  = bf0[8] + bf0[9];
4345
0
    bf1[9]  = -bf0[9] + bf0[8];
4346
0
    bf1[10] = -bf0[10] + bf0[11];
4347
0
    bf1[11] = bf0[11] + bf0[10];
4348
0
    bf1[12] = bf0[12] + bf0[13];
4349
0
    bf1[13] = -bf0[13] + bf0[12];
4350
0
    bf1[14] = -bf0[14] + bf0[15];
4351
0
    bf1[15] = bf0[15] + bf0[14];
4352
4353
    // stage 6
4354
0
    cospi   = cospi_arr(cos_bit);
4355
0
    bf0     = output;
4356
0
    bf1     = step;
4357
0
    bf1[0]  = bf0[0];
4358
0
    bf1[2]  = bf0[2];
4359
0
    bf1[4]  = bf0[4];
4360
0
    bf1[6]  = bf0[6];
4361
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
4362
0
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
4363
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
4364
0
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
4365
4366
    // stage 7
4367
0
    bf0    = step;
4368
0
    bf1    = output;
4369
0
    bf1[0] = bf0[0];
4370
0
    bf1[1] = bf0[8];
4371
0
    bf1[2] = bf0[4];
4372
0
    bf1[3] = bf0[12];
4373
0
    bf1[4] = bf0[2];
4374
0
    bf1[5] = bf0[10];
4375
0
    bf1[6] = bf0[6];
4376
0
    bf1[7] = bf0[14];
4377
0
}
4378
4379
0
void svt_av1_fidentity8_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4380
0
    (void)stage_range;
4381
0
    (void)cos_bit;
4382
0
    for (int32_t i = 0; i < 4; ++i) {
4383
0
        output[i] = input[i] * 2;
4384
0
    }
4385
0
}
4386
4387
0
void svt_av1_fadst8_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4388
0
    (void)stage_range;
4389
0
    const int32_t* cospi;
4390
4391
0
    int32_t *bf0, *bf1;
4392
0
    int32_t  step[8];
4393
4394
    // stage 0;
4395
4396
    // stage 1;
4397
0
    assert(output != input);
4398
0
    bf1    = output;
4399
0
    bf1[0] = input[0];
4400
0
    bf1[1] = -input[7];
4401
0
    bf1[2] = -input[3];
4402
0
    bf1[3] = input[4];
4403
0
    bf1[4] = -input[1];
4404
0
    bf1[5] = input[6];
4405
0
    bf1[6] = input[2];
4406
0
    bf1[7] = -input[5];
4407
4408
    // stage 2
4409
0
    cospi  = cospi_arr(cos_bit);
4410
0
    bf0    = output;
4411
0
    bf1    = step;
4412
0
    bf1[0] = bf0[0];
4413
0
    bf1[1] = bf0[1];
4414
0
    bf1[2] = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
4415
0
    bf1[3] = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
4416
0
    bf1[4] = bf0[4];
4417
0
    bf1[5] = bf0[5];
4418
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
4419
0
    bf1[7] = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
4420
4421
    // stage 3
4422
0
    bf0    = step;
4423
0
    bf1    = output;
4424
0
    bf1[0] = bf0[0] + bf0[2];
4425
0
    bf1[1] = bf0[1] + bf0[3];
4426
0
    bf1[2] = bf0[0] - bf0[2];
4427
0
    bf1[3] = bf0[1] - bf0[3];
4428
0
    bf1[4] = bf0[4] + bf0[6];
4429
0
    bf1[5] = bf0[5] + bf0[7];
4430
0
    bf1[6] = bf0[4] - bf0[6];
4431
0
    bf1[7] = bf0[5] - bf0[7];
4432
4433
    // stage 4
4434
0
    cospi  = cospi_arr(cos_bit);
4435
0
    bf0    = output;
4436
0
    bf1    = step;
4437
0
    bf1[0] = bf0[0];
4438
0
    bf1[1] = bf0[1];
4439
0
    bf1[2] = bf0[2];
4440
0
    bf1[3] = bf0[3];
4441
0
    bf1[4] = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
4442
0
    bf1[5] = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
4443
0
    bf1[6] = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
4444
0
    bf1[7] = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
4445
4446
    // stage 5
4447
0
    bf0    = step;
4448
0
    bf1    = output;
4449
0
    bf1[0] = bf0[0] + bf0[4];
4450
0
    bf1[1] = bf0[1] + bf0[5];
4451
0
    bf1[2] = bf0[2] + bf0[6];
4452
0
    bf1[3] = bf0[3] + bf0[7];
4453
0
    bf1[4] = bf0[0] - bf0[4];
4454
0
    bf1[5] = bf0[1] - bf0[5];
4455
0
    bf1[6] = bf0[2] - bf0[6];
4456
0
    bf1[7] = bf0[3] - bf0[7];
4457
4458
    // stage 6
4459
0
    cospi  = cospi_arr(cos_bit);
4460
0
    bf0    = output;
4461
0
    bf1    = step;
4462
0
    bf1[1] = half_btf(cospi[60], bf0[0], -cospi[4], bf0[1], cos_bit);
4463
0
    bf1[3] = half_btf(cospi[44], bf0[2], -cospi[20], bf0[3], cos_bit);
4464
0
    bf1[4] = half_btf(cospi[36], bf0[4], cospi[28], bf0[5], cos_bit);
4465
0
    bf1[6] = half_btf(cospi[52], bf0[6], cospi[12], bf0[7], cos_bit);
4466
4467
    // stage 7
4468
0
    bf0    = step;
4469
0
    bf1    = output;
4470
0
    bf1[0] = bf0[1];
4471
0
    bf1[1] = bf0[6];
4472
0
    bf1[2] = bf0[3];
4473
0
    bf1[3] = bf0[4];
4474
0
}
4475
4476
0
void svt_av1_fdct8_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4477
0
    (void)stage_range;
4478
0
    const int32_t* cospi;
4479
4480
0
    int32_t *bf0, *bf1;
4481
0
    int32_t  step[8];
4482
4483
    // stage 0;
4484
4485
    // stage 1;
4486
0
    bf1    = output;
4487
0
    bf1[0] = input[0] + input[7];
4488
0
    bf1[1] = input[1] + input[6];
4489
0
    bf1[2] = input[2] + input[5];
4490
0
    bf1[3] = input[3] + input[4];
4491
0
    bf1[4] = -input[4] + input[3];
4492
0
    bf1[5] = -input[5] + input[2];
4493
0
    bf1[6] = -input[6] + input[1];
4494
0
    bf1[7] = -input[7] + input[0];
4495
4496
    // stage 2
4497
0
    cospi  = cospi_arr(cos_bit);
4498
0
    bf0    = output;
4499
0
    bf1    = step;
4500
0
    bf1[0] = bf0[0] + bf0[3];
4501
0
    bf1[1] = bf0[1] + bf0[2];
4502
0
    bf1[2] = -bf0[2] + bf0[1];
4503
0
    bf1[3] = -bf0[3] + bf0[0];
4504
0
    bf1[4] = bf0[4];
4505
0
    bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
4506
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
4507
0
    bf1[7] = bf0[7];
4508
4509
    // stage 3
4510
0
    cospi  = cospi_arr(cos_bit);
4511
0
    bf0    = step;
4512
0
    bf1    = output;
4513
0
    bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
4514
0
    bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
4515
0
    bf1[4] = bf0[4] + bf0[5];
4516
0
    bf1[5] = -bf0[5] + bf0[4];
4517
0
    bf1[6] = -bf0[6] + bf0[7];
4518
0
    bf1[7] = bf0[7] + bf0[6];
4519
4520
    // stage 4
4521
0
    cospi  = cospi_arr(cos_bit);
4522
0
    bf0    = output;
4523
0
    bf1    = step;
4524
0
    bf1[0] = bf0[0];
4525
0
    bf1[2] = bf0[2];
4526
0
    bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
4527
0
    bf1[6] = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
4528
4529
    // stage 5
4530
0
    bf0    = step;
4531
0
    bf1    = output;
4532
0
    bf1[0] = bf0[0];
4533
0
    bf1[1] = bf0[4];
4534
0
    bf1[2] = bf0[2];
4535
0
    bf1[3] = bf0[6];
4536
0
}
4537
4538
0
void svt_av1_fidentity4_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4539
0
    (void)stage_range;
4540
0
    (void)cos_bit;
4541
0
    output[0] = round_shift((int64_t)input[0] * new_sqrt2, new_sqrt2_bits);
4542
0
    output[1] = round_shift((int64_t)input[1] * new_sqrt2, new_sqrt2_bits);
4543
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
4544
0
}
4545
4546
0
void svt_av1_fadst4_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4547
0
    (void)stage_range;
4548
0
    int32_t        bit   = cos_bit;
4549
0
    const int32_t* sinpi = sinpi_arr(bit);
4550
0
    int32_t        x0, x1, x2, x3;
4551
0
    int32_t        s0, s2, s4, s5, s7;
4552
4553
    // stage 0
4554
0
    x0 = input[0];
4555
0
    x1 = input[1];
4556
0
    x2 = input[2];
4557
0
    x3 = input[3];
4558
4559
0
    if (!(x0 | x1 | x2 | x3)) {
4560
0
        output[0] = output[1] = output[2] = output[3] = 0;
4561
0
        return;
4562
0
    }
4563
4564
    // stage 1
4565
0
    s0 = sinpi[1] * x0;
4566
0
    s2 = sinpi[2] * x1;
4567
0
    s4 = sinpi[3] * x2;
4568
0
    s5 = sinpi[4] * x3;
4569
0
    s7 = x0 + x1;
4570
4571
    // stage 2
4572
0
    s7 = s7 - x3;
4573
4574
    // stage 3
4575
0
    x0 = s0 + s2;
4576
0
    x1 = sinpi[3] * s7;
4577
4578
    // stage 4
4579
0
    x0 = x0 + s5;
4580
4581
    // stage 5
4582
0
    s0 = x0 + s4;
4583
4584
    // 1-D transform scaling factor is sqrt(2).
4585
0
    output[0] = round_shift(s0, bit);
4586
0
    output[1] = round_shift(x1, bit);
4587
0
}
4588
4589
0
void svt_av1_fdct4_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4590
0
    (void)stage_range;
4591
0
    const int32_t* cospi;
4592
4593
0
    int32_t* bf0;
4594
0
    int32_t  step[4];
4595
4596
    // stage 1;
4597
0
    bf0    = step;
4598
0
    bf0[0] = input[0] + input[3];
4599
0
    bf0[1] = input[1] + input[2];
4600
0
    bf0[2] = -input[2] + input[1];
4601
0
    bf0[3] = -input[3] + input[0];
4602
4603
    // stage 2
4604
0
    cospi = cospi_arr(cos_bit);
4605
4606
0
    output[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
4607
0
    output[1] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
4608
0
}
4609
4610
0
void svt_av1_fdct32_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4611
0
    (void)stage_range;
4612
0
    const int32_t* cospi;
4613
4614
0
    int32_t *bf0, *bf1;
4615
0
    int32_t  step[32];
4616
4617
    // stage 0;
4618
4619
    // stage 1;
4620
0
    bf1     = output;
4621
0
    bf1[0]  = input[0] + input[31];
4622
0
    bf1[1]  = input[1] + input[30];
4623
0
    bf1[2]  = input[2] + input[29];
4624
0
    bf1[3]  = input[3] + input[28];
4625
0
    bf1[4]  = input[4] + input[27];
4626
0
    bf1[5]  = input[5] + input[26];
4627
0
    bf1[6]  = input[6] + input[25];
4628
0
    bf1[7]  = input[7] + input[24];
4629
0
    bf1[8]  = input[8] + input[23];
4630
0
    bf1[9]  = input[9] + input[22];
4631
0
    bf1[10] = input[10] + input[21];
4632
0
    bf1[11] = input[11] + input[20];
4633
0
    bf1[12] = input[12] + input[19];
4634
0
    bf1[13] = input[13] + input[18];
4635
0
    bf1[14] = input[14] + input[17];
4636
0
    bf1[15] = input[15] + input[16];
4637
0
    bf1[16] = -input[16] + input[15];
4638
0
    bf1[17] = -input[17] + input[14];
4639
0
    bf1[18] = -input[18] + input[13];
4640
0
    bf1[19] = -input[19] + input[12];
4641
0
    bf1[20] = -input[20] + input[11];
4642
0
    bf1[21] = -input[21] + input[10];
4643
0
    bf1[22] = -input[22] + input[9];
4644
0
    bf1[23] = -input[23] + input[8];
4645
0
    bf1[24] = -input[24] + input[7];
4646
0
    bf1[25] = -input[25] + input[6];
4647
0
    bf1[26] = -input[26] + input[5];
4648
0
    bf1[27] = -input[27] + input[4];
4649
0
    bf1[28] = -input[28] + input[3];
4650
0
    bf1[29] = -input[29] + input[2];
4651
0
    bf1[30] = -input[30] + input[1];
4652
0
    bf1[31] = -input[31] + input[0];
4653
4654
    // stage 2
4655
0
    cospi   = cospi_arr(cos_bit);
4656
0
    bf0     = output;
4657
0
    bf1     = step;
4658
0
    bf1[0]  = bf0[0] + bf0[15];
4659
0
    bf1[1]  = bf0[1] + bf0[14];
4660
0
    bf1[2]  = bf0[2] + bf0[13];
4661
0
    bf1[3]  = bf0[3] + bf0[12];
4662
0
    bf1[4]  = bf0[4] + bf0[11];
4663
0
    bf1[5]  = bf0[5] + bf0[10];
4664
0
    bf1[6]  = bf0[6] + bf0[9];
4665
0
    bf1[7]  = bf0[7] + bf0[8];
4666
0
    bf1[8]  = -bf0[8] + bf0[7];
4667
0
    bf1[9]  = -bf0[9] + bf0[6];
4668
0
    bf1[10] = -bf0[10] + bf0[5];
4669
0
    bf1[11] = -bf0[11] + bf0[4];
4670
0
    bf1[12] = -bf0[12] + bf0[3];
4671
0
    bf1[13] = -bf0[13] + bf0[2];
4672
0
    bf1[14] = -bf0[14] + bf0[1];
4673
0
    bf1[15] = -bf0[15] + bf0[0];
4674
0
    bf1[16] = bf0[16];
4675
0
    bf1[17] = bf0[17];
4676
0
    bf1[18] = bf0[18];
4677
0
    bf1[19] = bf0[19];
4678
0
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
4679
0
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
4680
0
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
4681
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
4682
0
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
4683
0
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
4684
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
4685
0
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
4686
0
    bf1[28] = bf0[28];
4687
0
    bf1[29] = bf0[29];
4688
0
    bf1[30] = bf0[30];
4689
0
    bf1[31] = bf0[31];
4690
4691
    // stage 3
4692
0
    cospi   = cospi_arr(cos_bit);
4693
0
    bf0     = step;
4694
0
    bf1     = output;
4695
0
    bf1[0]  = bf0[0] + bf0[7];
4696
0
    bf1[1]  = bf0[1] + bf0[6];
4697
0
    bf1[2]  = bf0[2] + bf0[5];
4698
0
    bf1[3]  = bf0[3] + bf0[4];
4699
0
    bf1[4]  = -bf0[4] + bf0[3];
4700
0
    bf1[5]  = -bf0[5] + bf0[2];
4701
0
    bf1[6]  = -bf0[6] + bf0[1];
4702
0
    bf1[7]  = -bf0[7] + bf0[0];
4703
0
    bf1[8]  = bf0[8];
4704
0
    bf1[9]  = bf0[9];
4705
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
4706
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
4707
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
4708
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
4709
0
    bf1[14] = bf0[14];
4710
0
    bf1[15] = bf0[15];
4711
0
    bf1[16] = bf0[16] + bf0[23];
4712
0
    bf1[17] = bf0[17] + bf0[22];
4713
0
    bf1[18] = bf0[18] + bf0[21];
4714
0
    bf1[19] = bf0[19] + bf0[20];
4715
0
    bf1[20] = -bf0[20] + bf0[19];
4716
0
    bf1[21] = -bf0[21] + bf0[18];
4717
0
    bf1[22] = -bf0[22] + bf0[17];
4718
0
    bf1[23] = -bf0[23] + bf0[16];
4719
0
    bf1[24] = -bf0[24] + bf0[31];
4720
0
    bf1[25] = -bf0[25] + bf0[30];
4721
0
    bf1[26] = -bf0[26] + bf0[29];
4722
0
    bf1[27] = -bf0[27] + bf0[28];
4723
0
    bf1[28] = bf0[28] + bf0[27];
4724
0
    bf1[29] = bf0[29] + bf0[26];
4725
0
    bf1[30] = bf0[30] + bf0[25];
4726
0
    bf1[31] = bf0[31] + bf0[24];
4727
4728
    // stage 4
4729
0
    cospi   = cospi_arr(cos_bit);
4730
0
    bf0     = output;
4731
0
    bf1     = step;
4732
0
    bf1[0]  = bf0[0] + bf0[3];
4733
0
    bf1[1]  = bf0[1] + bf0[2];
4734
0
    bf1[2]  = -bf0[2] + bf0[1];
4735
0
    bf1[3]  = -bf0[3] + bf0[0];
4736
0
    bf1[4]  = bf0[4];
4737
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
4738
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
4739
0
    bf1[7]  = bf0[7];
4740
0
    bf1[8]  = bf0[8] + bf0[11];
4741
0
    bf1[9]  = bf0[9] + bf0[10];
4742
0
    bf1[10] = -bf0[10] + bf0[9];
4743
0
    bf1[11] = -bf0[11] + bf0[8];
4744
0
    bf1[12] = -bf0[12] + bf0[15];
4745
0
    bf1[13] = -bf0[13] + bf0[14];
4746
0
    bf1[14] = bf0[14] + bf0[13];
4747
0
    bf1[15] = bf0[15] + bf0[12];
4748
0
    bf1[16] = bf0[16];
4749
0
    bf1[17] = bf0[17];
4750
0
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
4751
0
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
4752
0
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
4753
0
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
4754
0
    bf1[22] = bf0[22];
4755
0
    bf1[23] = bf0[23];
4756
0
    bf1[24] = bf0[24];
4757
0
    bf1[25] = bf0[25];
4758
0
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
4759
0
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
4760
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
4761
0
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
4762
0
    bf1[30] = bf0[30];
4763
0
    bf1[31] = bf0[31];
4764
4765
    // stage 5
4766
0
    cospi   = cospi_arr(cos_bit);
4767
0
    bf0     = step;
4768
0
    bf1     = output;
4769
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
4770
0
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
4771
0
    bf1[4]  = bf0[4] + bf0[5];
4772
0
    bf1[5]  = -bf0[5] + bf0[4];
4773
0
    bf1[6]  = -bf0[6] + bf0[7];
4774
0
    bf1[7]  = bf0[7] + bf0[6];
4775
0
    bf1[8]  = bf0[8];
4776
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
4777
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
4778
0
    bf1[11] = bf0[11];
4779
0
    bf1[12] = bf0[12];
4780
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
4781
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
4782
0
    bf1[15] = bf0[15];
4783
0
    bf1[16] = bf0[16] + bf0[19];
4784
0
    bf1[17] = bf0[17] + bf0[18];
4785
0
    bf1[18] = -bf0[18] + bf0[17];
4786
0
    bf1[19] = -bf0[19] + bf0[16];
4787
0
    bf1[20] = -bf0[20] + bf0[23];
4788
0
    bf1[21] = -bf0[21] + bf0[22];
4789
0
    bf1[22] = bf0[22] + bf0[21];
4790
0
    bf1[23] = bf0[23] + bf0[20];
4791
0
    bf1[24] = bf0[24] + bf0[27];
4792
0
    bf1[25] = bf0[25] + bf0[26];
4793
0
    bf1[26] = -bf0[26] + bf0[25];
4794
0
    bf1[27] = -bf0[27] + bf0[24];
4795
0
    bf1[28] = -bf0[28] + bf0[31];
4796
0
    bf1[29] = -bf0[29] + bf0[30];
4797
0
    bf1[30] = bf0[30] + bf0[29];
4798
0
    bf1[31] = bf0[31] + bf0[28];
4799
4800
    // stage 6
4801
0
    cospi   = cospi_arr(cos_bit);
4802
0
    bf0     = output;
4803
0
    bf1     = step;
4804
0
    bf1[0]  = bf0[0];
4805
0
    bf1[2]  = bf0[2];
4806
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
4807
0
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
4808
0
    bf1[8]  = bf0[8] + bf0[9];
4809
0
    bf1[9]  = -bf0[9] + bf0[8];
4810
0
    bf1[10] = -bf0[10] + bf0[11];
4811
0
    bf1[11] = bf0[11] + bf0[10];
4812
0
    bf1[12] = bf0[12] + bf0[13];
4813
0
    bf1[13] = -bf0[13] + bf0[12];
4814
0
    bf1[14] = -bf0[14] + bf0[15];
4815
0
    bf1[15] = bf0[15] + bf0[14];
4816
0
    bf1[16] = bf0[16];
4817
0
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
4818
0
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
4819
0
    bf1[19] = bf0[19];
4820
0
    bf1[20] = bf0[20];
4821
0
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
4822
0
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
4823
0
    bf1[23] = bf0[23];
4824
0
    bf1[24] = bf0[24];
4825
0
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
4826
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
4827
0
    bf1[27] = bf0[27];
4828
0
    bf1[28] = bf0[28];
4829
0
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
4830
0
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
4831
0
    bf1[31] = bf0[31];
4832
4833
    // stage 7
4834
0
    cospi   = cospi_arr(cos_bit);
4835
0
    bf0     = step;
4836
0
    bf1     = output;
4837
0
    bf1[0]  = bf0[0];
4838
0
    bf1[2]  = bf0[2];
4839
0
    bf1[4]  = bf0[4];
4840
0
    bf1[6]  = bf0[6];
4841
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
4842
0
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
4843
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
4844
0
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
4845
0
    bf1[16] = bf0[16] + bf0[17];
4846
0
    bf1[17] = -bf0[17] + bf0[16];
4847
0
    bf1[18] = -bf0[18] + bf0[19];
4848
0
    bf1[19] = bf0[19] + bf0[18];
4849
0
    bf1[20] = bf0[20] + bf0[21];
4850
0
    bf1[21] = -bf0[21] + bf0[20];
4851
0
    bf1[22] = -bf0[22] + bf0[23];
4852
0
    bf1[23] = bf0[23] + bf0[22];
4853
0
    bf1[24] = bf0[24] + bf0[25];
4854
0
    bf1[25] = -bf0[25] + bf0[24];
4855
0
    bf1[26] = -bf0[26] + bf0[27];
4856
0
    bf1[27] = bf0[27] + bf0[26];
4857
0
    bf1[28] = bf0[28] + bf0[29];
4858
0
    bf1[29] = -bf0[29] + bf0[28];
4859
0
    bf1[30] = -bf0[30] + bf0[31];
4860
0
    bf1[31] = bf0[31] + bf0[30];
4861
4862
    // stage 8
4863
0
    cospi   = cospi_arr(cos_bit);
4864
0
    bf0     = output;
4865
0
    bf1     = step;
4866
0
    bf1[0]  = bf0[0];
4867
0
    bf1[2]  = bf0[2];
4868
0
    bf1[4]  = bf0[4];
4869
0
    bf1[6]  = bf0[6];
4870
0
    bf1[8]  = bf0[8];
4871
0
    bf1[10] = bf0[10];
4872
0
    bf1[12] = bf0[12];
4873
0
    bf1[14] = bf0[14];
4874
0
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
4875
0
    bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
4876
0
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
4877
0
    bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
4878
0
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
4879
0
    bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
4880
0
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
4881
0
    bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
4882
4883
    // stage 9
4884
0
    bf0     = step;
4885
0
    bf1     = output;
4886
0
    bf1[0]  = bf0[0];
4887
0
    bf1[1]  = bf0[16];
4888
0
    bf1[2]  = bf0[8];
4889
0
    bf1[3]  = bf0[24];
4890
0
    bf1[4]  = bf0[4];
4891
0
    bf1[5]  = bf0[20];
4892
0
    bf1[6]  = bf0[12];
4893
0
    bf1[7]  = bf0[28];
4894
0
    bf1[8]  = bf0[2];
4895
0
    bf1[9]  = bf0[18];
4896
0
    bf1[10] = bf0[10];
4897
0
    bf1[11] = bf0[26];
4898
0
    bf1[12] = bf0[6];
4899
0
    bf1[13] = bf0[22];
4900
0
    bf1[14] = bf0[14];
4901
0
    bf1[15] = bf0[30];
4902
0
}
4903
4904
0
void svt_av1_fidentity32_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4905
0
    (void)stage_range;
4906
0
    (void)cos_bit;
4907
0
    for (int32_t i = 0; i < 16; ++i) {
4908
0
        output[i] = input[i] * 4;
4909
0
    }
4910
0
}
4911
4912
0
void svt_av1_fdct64_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4913
0
    (void)stage_range;
4914
0
    const int32_t* cospi;
4915
4916
0
    int32_t *bf0, *bf1;
4917
0
    int32_t  step[64];
4918
4919
    // stage 0;
4920
4921
    // stage 1;
4922
0
    bf1     = output;
4923
0
    bf1[0]  = input[0] + input[63];
4924
0
    bf1[1]  = input[1] + input[62];
4925
0
    bf1[2]  = input[2] + input[61];
4926
0
    bf1[3]  = input[3] + input[60];
4927
0
    bf1[4]  = input[4] + input[59];
4928
0
    bf1[5]  = input[5] + input[58];
4929
0
    bf1[6]  = input[6] + input[57];
4930
0
    bf1[7]  = input[7] + input[56];
4931
0
    bf1[8]  = input[8] + input[55];
4932
0
    bf1[9]  = input[9] + input[54];
4933
0
    bf1[10] = input[10] + input[53];
4934
0
    bf1[11] = input[11] + input[52];
4935
0
    bf1[12] = input[12] + input[51];
4936
0
    bf1[13] = input[13] + input[50];
4937
0
    bf1[14] = input[14] + input[49];
4938
0
    bf1[15] = input[15] + input[48];
4939
0
    bf1[16] = input[16] + input[47];
4940
0
    bf1[17] = input[17] + input[46];
4941
0
    bf1[18] = input[18] + input[45];
4942
0
    bf1[19] = input[19] + input[44];
4943
0
    bf1[20] = input[20] + input[43];
4944
0
    bf1[21] = input[21] + input[42];
4945
0
    bf1[22] = input[22] + input[41];
4946
0
    bf1[23] = input[23] + input[40];
4947
0
    bf1[24] = input[24] + input[39];
4948
0
    bf1[25] = input[25] + input[38];
4949
0
    bf1[26] = input[26] + input[37];
4950
0
    bf1[27] = input[27] + input[36];
4951
0
    bf1[28] = input[28] + input[35];
4952
0
    bf1[29] = input[29] + input[34];
4953
0
    bf1[30] = input[30] + input[33];
4954
0
    bf1[31] = input[31] + input[32];
4955
0
    bf1[32] = -input[32] + input[31];
4956
0
    bf1[33] = -input[33] + input[30];
4957
0
    bf1[34] = -input[34] + input[29];
4958
0
    bf1[35] = -input[35] + input[28];
4959
0
    bf1[36] = -input[36] + input[27];
4960
0
    bf1[37] = -input[37] + input[26];
4961
0
    bf1[38] = -input[38] + input[25];
4962
0
    bf1[39] = -input[39] + input[24];
4963
0
    bf1[40] = -input[40] + input[23];
4964
0
    bf1[41] = -input[41] + input[22];
4965
0
    bf1[42] = -input[42] + input[21];
4966
0
    bf1[43] = -input[43] + input[20];
4967
0
    bf1[44] = -input[44] + input[19];
4968
0
    bf1[45] = -input[45] + input[18];
4969
0
    bf1[46] = -input[46] + input[17];
4970
0
    bf1[47] = -input[47] + input[16];
4971
0
    bf1[48] = -input[48] + input[15];
4972
0
    bf1[49] = -input[49] + input[14];
4973
0
    bf1[50] = -input[50] + input[13];
4974
0
    bf1[51] = -input[51] + input[12];
4975
0
    bf1[52] = -input[52] + input[11];
4976
0
    bf1[53] = -input[53] + input[10];
4977
0
    bf1[54] = -input[54] + input[9];
4978
0
    bf1[55] = -input[55] + input[8];
4979
0
    bf1[56] = -input[56] + input[7];
4980
0
    bf1[57] = -input[57] + input[6];
4981
0
    bf1[58] = -input[58] + input[5];
4982
0
    bf1[59] = -input[59] + input[4];
4983
0
    bf1[60] = -input[60] + input[3];
4984
0
    bf1[61] = -input[61] + input[2];
4985
0
    bf1[62] = -input[62] + input[1];
4986
0
    bf1[63] = -input[63] + input[0];
4987
4988
    // stage 2
4989
0
    cospi   = cospi_arr(cos_bit);
4990
0
    bf0     = output;
4991
0
    bf1     = step;
4992
0
    bf1[0]  = bf0[0] + bf0[31];
4993
0
    bf1[1]  = bf0[1] + bf0[30];
4994
0
    bf1[2]  = bf0[2] + bf0[29];
4995
0
    bf1[3]  = bf0[3] + bf0[28];
4996
0
    bf1[4]  = bf0[4] + bf0[27];
4997
0
    bf1[5]  = bf0[5] + bf0[26];
4998
0
    bf1[6]  = bf0[6] + bf0[25];
4999
0
    bf1[7]  = bf0[7] + bf0[24];
5000
0
    bf1[8]  = bf0[8] + bf0[23];
5001
0
    bf1[9]  = bf0[9] + bf0[22];
5002
0
    bf1[10] = bf0[10] + bf0[21];
5003
0
    bf1[11] = bf0[11] + bf0[20];
5004
0
    bf1[12] = bf0[12] + bf0[19];
5005
0
    bf1[13] = bf0[13] + bf0[18];
5006
0
    bf1[14] = bf0[14] + bf0[17];
5007
0
    bf1[15] = bf0[15] + bf0[16];
5008
0
    bf1[16] = -bf0[16] + bf0[15];
5009
0
    bf1[17] = -bf0[17] + bf0[14];
5010
0
    bf1[18] = -bf0[18] + bf0[13];
5011
0
    bf1[19] = -bf0[19] + bf0[12];
5012
0
    bf1[20] = -bf0[20] + bf0[11];
5013
0
    bf1[21] = -bf0[21] + bf0[10];
5014
0
    bf1[22] = -bf0[22] + bf0[9];
5015
0
    bf1[23] = -bf0[23] + bf0[8];
5016
0
    bf1[24] = -bf0[24] + bf0[7];
5017
0
    bf1[25] = -bf0[25] + bf0[6];
5018
0
    bf1[26] = -bf0[26] + bf0[5];
5019
0
    bf1[27] = -bf0[27] + bf0[4];
5020
0
    bf1[28] = -bf0[28] + bf0[3];
5021
0
    bf1[29] = -bf0[29] + bf0[2];
5022
0
    bf1[30] = -bf0[30] + bf0[1];
5023
0
    bf1[31] = -bf0[31] + bf0[0];
5024
0
    bf1[32] = bf0[32];
5025
0
    bf1[33] = bf0[33];
5026
0
    bf1[34] = bf0[34];
5027
0
    bf1[35] = bf0[35];
5028
0
    bf1[36] = bf0[36];
5029
0
    bf1[37] = bf0[37];
5030
0
    bf1[38] = bf0[38];
5031
0
    bf1[39] = bf0[39];
5032
0
    bf1[40] = half_btf(-cospi[32], bf0[40], cospi[32], bf0[55], cos_bit);
5033
0
    bf1[41] = half_btf(-cospi[32], bf0[41], cospi[32], bf0[54], cos_bit);
5034
0
    bf1[42] = half_btf(-cospi[32], bf0[42], cospi[32], bf0[53], cos_bit);
5035
0
    bf1[43] = half_btf(-cospi[32], bf0[43], cospi[32], bf0[52], cos_bit);
5036
0
    bf1[44] = half_btf(-cospi[32], bf0[44], cospi[32], bf0[51], cos_bit);
5037
0
    bf1[45] = half_btf(-cospi[32], bf0[45], cospi[32], bf0[50], cos_bit);
5038
0
    bf1[46] = half_btf(-cospi[32], bf0[46], cospi[32], bf0[49], cos_bit);
5039
0
    bf1[47] = half_btf(-cospi[32], bf0[47], cospi[32], bf0[48], cos_bit);
5040
0
    bf1[48] = half_btf(cospi[32], bf0[48], cospi[32], bf0[47], cos_bit);
5041
0
    bf1[49] = half_btf(cospi[32], bf0[49], cospi[32], bf0[46], cos_bit);
5042
0
    bf1[50] = half_btf(cospi[32], bf0[50], cospi[32], bf0[45], cos_bit);
5043
0
    bf1[51] = half_btf(cospi[32], bf0[51], cospi[32], bf0[44], cos_bit);
5044
0
    bf1[52] = half_btf(cospi[32], bf0[52], cospi[32], bf0[43], cos_bit);
5045
0
    bf1[53] = half_btf(cospi[32], bf0[53], cospi[32], bf0[42], cos_bit);
5046
0
    bf1[54] = half_btf(cospi[32], bf0[54], cospi[32], bf0[41], cos_bit);
5047
0
    bf1[55] = half_btf(cospi[32], bf0[55], cospi[32], bf0[40], cos_bit);
5048
0
    bf1[56] = bf0[56];
5049
0
    bf1[57] = bf0[57];
5050
0
    bf1[58] = bf0[58];
5051
0
    bf1[59] = bf0[59];
5052
0
    bf1[60] = bf0[60];
5053
0
    bf1[61] = bf0[61];
5054
0
    bf1[62] = bf0[62];
5055
0
    bf1[63] = bf0[63];
5056
5057
    // stage 3
5058
0
    cospi   = cospi_arr(cos_bit);
5059
0
    bf0     = step;
5060
0
    bf1     = output;
5061
0
    bf1[0]  = bf0[0] + bf0[15];
5062
0
    bf1[1]  = bf0[1] + bf0[14];
5063
0
    bf1[2]  = bf0[2] + bf0[13];
5064
0
    bf1[3]  = bf0[3] + bf0[12];
5065
0
    bf1[4]  = bf0[4] + bf0[11];
5066
0
    bf1[5]  = bf0[5] + bf0[10];
5067
0
    bf1[6]  = bf0[6] + bf0[9];
5068
0
    bf1[7]  = bf0[7] + bf0[8];
5069
0
    bf1[8]  = -bf0[8] + bf0[7];
5070
0
    bf1[9]  = -bf0[9] + bf0[6];
5071
0
    bf1[10] = -bf0[10] + bf0[5];
5072
0
    bf1[11] = -bf0[11] + bf0[4];
5073
0
    bf1[12] = -bf0[12] + bf0[3];
5074
0
    bf1[13] = -bf0[13] + bf0[2];
5075
0
    bf1[14] = -bf0[14] + bf0[1];
5076
0
    bf1[15] = -bf0[15] + bf0[0];
5077
0
    bf1[16] = bf0[16];
5078
0
    bf1[17] = bf0[17];
5079
0
    bf1[18] = bf0[18];
5080
0
    bf1[19] = bf0[19];
5081
0
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
5082
0
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
5083
0
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
5084
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
5085
0
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
5086
0
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
5087
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
5088
0
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
5089
0
    bf1[28] = bf0[28];
5090
0
    bf1[29] = bf0[29];
5091
0
    bf1[30] = bf0[30];
5092
0
    bf1[31] = bf0[31];
5093
0
    bf1[32] = bf0[32] + bf0[47];
5094
0
    bf1[33] = bf0[33] + bf0[46];
5095
0
    bf1[34] = bf0[34] + bf0[45];
5096
0
    bf1[35] = bf0[35] + bf0[44];
5097
0
    bf1[36] = bf0[36] + bf0[43];
5098
0
    bf1[37] = bf0[37] + bf0[42];
5099
0
    bf1[38] = bf0[38] + bf0[41];
5100
0
    bf1[39] = bf0[39] + bf0[40];
5101
0
    bf1[40] = -bf0[40] + bf0[39];
5102
0
    bf1[41] = -bf0[41] + bf0[38];
5103
0
    bf1[42] = -bf0[42] + bf0[37];
5104
0
    bf1[43] = -bf0[43] + bf0[36];
5105
0
    bf1[44] = -bf0[44] + bf0[35];
5106
0
    bf1[45] = -bf0[45] + bf0[34];
5107
0
    bf1[46] = -bf0[46] + bf0[33];
5108
0
    bf1[47] = -bf0[47] + bf0[32];
5109
0
    bf1[48] = -bf0[48] + bf0[63];
5110
0
    bf1[49] = -bf0[49] + bf0[62];
5111
0
    bf1[50] = -bf0[50] + bf0[61];
5112
0
    bf1[51] = -bf0[51] + bf0[60];
5113
0
    bf1[52] = -bf0[52] + bf0[59];
5114
0
    bf1[53] = -bf0[53] + bf0[58];
5115
0
    bf1[54] = -bf0[54] + bf0[57];
5116
0
    bf1[55] = -bf0[55] + bf0[56];
5117
0
    bf1[56] = bf0[56] + bf0[55];
5118
0
    bf1[57] = bf0[57] + bf0[54];
5119
0
    bf1[58] = bf0[58] + bf0[53];
5120
0
    bf1[59] = bf0[59] + bf0[52];
5121
0
    bf1[60] = bf0[60] + bf0[51];
5122
0
    bf1[61] = bf0[61] + bf0[50];
5123
0
    bf1[62] = bf0[62] + bf0[49];
5124
0
    bf1[63] = bf0[63] + bf0[48];
5125
5126
    // stage 4
5127
0
    cospi   = cospi_arr(cos_bit);
5128
0
    bf0     = output;
5129
0
    bf1     = step;
5130
0
    bf1[0]  = bf0[0] + bf0[7];
5131
0
    bf1[1]  = bf0[1] + bf0[6];
5132
0
    bf1[2]  = bf0[2] + bf0[5];
5133
0
    bf1[3]  = bf0[3] + bf0[4];
5134
0
    bf1[4]  = -bf0[4] + bf0[3];
5135
0
    bf1[5]  = -bf0[5] + bf0[2];
5136
0
    bf1[6]  = -bf0[6] + bf0[1];
5137
0
    bf1[7]  = -bf0[7] + bf0[0];
5138
0
    bf1[8]  = bf0[8];
5139
0
    bf1[9]  = bf0[9];
5140
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
5141
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
5142
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
5143
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
5144
0
    bf1[14] = bf0[14];
5145
0
    bf1[15] = bf0[15];
5146
0
    bf1[16] = bf0[16] + bf0[23];
5147
0
    bf1[17] = bf0[17] + bf0[22];
5148
0
    bf1[18] = bf0[18] + bf0[21];
5149
0
    bf1[19] = bf0[19] + bf0[20];
5150
0
    bf1[20] = -bf0[20] + bf0[19];
5151
0
    bf1[21] = -bf0[21] + bf0[18];
5152
0
    bf1[22] = -bf0[22] + bf0[17];
5153
0
    bf1[23] = -bf0[23] + bf0[16];
5154
0
    bf1[24] = -bf0[24] + bf0[31];
5155
0
    bf1[25] = -bf0[25] + bf0[30];
5156
0
    bf1[26] = -bf0[26] + bf0[29];
5157
0
    bf1[27] = -bf0[27] + bf0[28];
5158
0
    bf1[28] = bf0[28] + bf0[27];
5159
0
    bf1[29] = bf0[29] + bf0[26];
5160
0
    bf1[30] = bf0[30] + bf0[25];
5161
0
    bf1[31] = bf0[31] + bf0[24];
5162
0
    bf1[32] = bf0[32];
5163
0
    bf1[33] = bf0[33];
5164
0
    bf1[34] = bf0[34];
5165
0
    bf1[35] = bf0[35];
5166
0
    bf1[36] = half_btf(-cospi[16], bf0[36], cospi[48], bf0[59], cos_bit);
5167
0
    bf1[37] = half_btf(-cospi[16], bf0[37], cospi[48], bf0[58], cos_bit);
5168
0
    bf1[38] = half_btf(-cospi[16], bf0[38], cospi[48], bf0[57], cos_bit);
5169
0
    bf1[39] = half_btf(-cospi[16], bf0[39], cospi[48], bf0[56], cos_bit);
5170
0
    bf1[40] = half_btf(-cospi[48], bf0[40], -cospi[16], bf0[55], cos_bit);
5171
0
    bf1[41] = half_btf(-cospi[48], bf0[41], -cospi[16], bf0[54], cos_bit);
5172
0
    bf1[42] = half_btf(-cospi[48], bf0[42], -cospi[16], bf0[53], cos_bit);
5173
0
    bf1[43] = half_btf(-cospi[48], bf0[43], -cospi[16], bf0[52], cos_bit);
5174
0
    bf1[44] = bf0[44];
5175
0
    bf1[45] = bf0[45];
5176
0
    bf1[46] = bf0[46];
5177
0
    bf1[47] = bf0[47];
5178
0
    bf1[48] = bf0[48];
5179
0
    bf1[49] = bf0[49];
5180
0
    bf1[50] = bf0[50];
5181
0
    bf1[51] = bf0[51];
5182
0
    bf1[52] = half_btf(cospi[48], bf0[52], -cospi[16], bf0[43], cos_bit);
5183
0
    bf1[53] = half_btf(cospi[48], bf0[53], -cospi[16], bf0[42], cos_bit);
5184
0
    bf1[54] = half_btf(cospi[48], bf0[54], -cospi[16], bf0[41], cos_bit);
5185
0
    bf1[55] = half_btf(cospi[48], bf0[55], -cospi[16], bf0[40], cos_bit);
5186
0
    bf1[56] = half_btf(cospi[16], bf0[56], cospi[48], bf0[39], cos_bit);
5187
0
    bf1[57] = half_btf(cospi[16], bf0[57], cospi[48], bf0[38], cos_bit);
5188
0
    bf1[58] = half_btf(cospi[16], bf0[58], cospi[48], bf0[37], cos_bit);
5189
0
    bf1[59] = half_btf(cospi[16], bf0[59], cospi[48], bf0[36], cos_bit);
5190
0
    bf1[60] = bf0[60];
5191
0
    bf1[61] = bf0[61];
5192
0
    bf1[62] = bf0[62];
5193
0
    bf1[63] = bf0[63];
5194
5195
    // stage 5
5196
0
    cospi   = cospi_arr(cos_bit);
5197
0
    bf0     = step;
5198
0
    bf1     = output;
5199
0
    bf1[0]  = bf0[0] + bf0[3];
5200
0
    bf1[1]  = bf0[1] + bf0[2];
5201
0
    bf1[2]  = -bf0[2] + bf0[1];
5202
0
    bf1[3]  = -bf0[3] + bf0[0];
5203
0
    bf1[4]  = bf0[4];
5204
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
5205
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
5206
0
    bf1[7]  = bf0[7];
5207
0
    bf1[8]  = bf0[8] + bf0[11];
5208
0
    bf1[9]  = bf0[9] + bf0[10];
5209
0
    bf1[10] = -bf0[10] + bf0[9];
5210
0
    bf1[11] = -bf0[11] + bf0[8];
5211
0
    bf1[12] = -bf0[12] + bf0[15];
5212
0
    bf1[13] = -bf0[13] + bf0[14];
5213
0
    bf1[14] = bf0[14] + bf0[13];
5214
0
    bf1[15] = bf0[15] + bf0[12];
5215
0
    bf1[16] = bf0[16];
5216
0
    bf1[17] = bf0[17];
5217
0
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
5218
0
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
5219
0
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
5220
0
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
5221
0
    bf1[22] = bf0[22];
5222
0
    bf1[23] = bf0[23];
5223
0
    bf1[24] = bf0[24];
5224
0
    bf1[25] = bf0[25];
5225
0
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
5226
0
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
5227
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
5228
0
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
5229
0
    bf1[30] = bf0[30];
5230
0
    bf1[31] = bf0[31];
5231
0
    bf1[32] = bf0[32] + bf0[39];
5232
0
    bf1[33] = bf0[33] + bf0[38];
5233
0
    bf1[34] = bf0[34] + bf0[37];
5234
0
    bf1[35] = bf0[35] + bf0[36];
5235
0
    bf1[36] = -bf0[36] + bf0[35];
5236
0
    bf1[37] = -bf0[37] + bf0[34];
5237
0
    bf1[38] = -bf0[38] + bf0[33];
5238
0
    bf1[39] = -bf0[39] + bf0[32];
5239
0
    bf1[40] = -bf0[40] + bf0[47];
5240
0
    bf1[41] = -bf0[41] + bf0[46];
5241
0
    bf1[42] = -bf0[42] + bf0[45];
5242
0
    bf1[43] = -bf0[43] + bf0[44];
5243
0
    bf1[44] = bf0[44] + bf0[43];
5244
0
    bf1[45] = bf0[45] + bf0[42];
5245
0
    bf1[46] = bf0[46] + bf0[41];
5246
0
    bf1[47] = bf0[47] + bf0[40];
5247
0
    bf1[48] = bf0[48] + bf0[55];
5248
0
    bf1[49] = bf0[49] + bf0[54];
5249
0
    bf1[50] = bf0[50] + bf0[53];
5250
0
    bf1[51] = bf0[51] + bf0[52];
5251
0
    bf1[52] = -bf0[52] + bf0[51];
5252
0
    bf1[53] = -bf0[53] + bf0[50];
5253
0
    bf1[54] = -bf0[54] + bf0[49];
5254
0
    bf1[55] = -bf0[55] + bf0[48];
5255
0
    bf1[56] = -bf0[56] + bf0[63];
5256
0
    bf1[57] = -bf0[57] + bf0[62];
5257
0
    bf1[58] = -bf0[58] + bf0[61];
5258
0
    bf1[59] = -bf0[59] + bf0[60];
5259
0
    bf1[60] = bf0[60] + bf0[59];
5260
0
    bf1[61] = bf0[61] + bf0[58];
5261
0
    bf1[62] = bf0[62] + bf0[57];
5262
0
    bf1[63] = bf0[63] + bf0[56];
5263
5264
    // stage 6
5265
0
    cospi   = cospi_arr(cos_bit);
5266
0
    bf0     = output;
5267
0
    bf1     = step;
5268
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
5269
0
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
5270
0
    bf1[4]  = bf0[4] + bf0[5];
5271
0
    bf1[5]  = -bf0[5] + bf0[4];
5272
0
    bf1[6]  = -bf0[6] + bf0[7];
5273
0
    bf1[7]  = bf0[7] + bf0[6];
5274
0
    bf1[8]  = bf0[8];
5275
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
5276
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
5277
0
    bf1[11] = bf0[11];
5278
0
    bf1[12] = bf0[12];
5279
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
5280
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
5281
0
    bf1[15] = bf0[15];
5282
0
    bf1[16] = bf0[16] + bf0[19];
5283
0
    bf1[17] = bf0[17] + bf0[18];
5284
0
    bf1[18] = -bf0[18] + bf0[17];
5285
0
    bf1[19] = -bf0[19] + bf0[16];
5286
0
    bf1[20] = -bf0[20] + bf0[23];
5287
0
    bf1[21] = -bf0[21] + bf0[22];
5288
0
    bf1[22] = bf0[22] + bf0[21];
5289
0
    bf1[23] = bf0[23] + bf0[20];
5290
0
    bf1[24] = bf0[24] + bf0[27];
5291
0
    bf1[25] = bf0[25] + bf0[26];
5292
0
    bf1[26] = -bf0[26] + bf0[25];
5293
0
    bf1[27] = -bf0[27] + bf0[24];
5294
0
    bf1[28] = -bf0[28] + bf0[31];
5295
0
    bf1[29] = -bf0[29] + bf0[30];
5296
0
    bf1[30] = bf0[30] + bf0[29];
5297
0
    bf1[31] = bf0[31] + bf0[28];
5298
0
    bf1[32] = bf0[32];
5299
0
    bf1[33] = bf0[33];
5300
0
    bf1[34] = half_btf(-cospi[8], bf0[34], cospi[56], bf0[61], cos_bit);
5301
0
    bf1[35] = half_btf(-cospi[8], bf0[35], cospi[56], bf0[60], cos_bit);
5302
0
    bf1[36] = half_btf(-cospi[56], bf0[36], -cospi[8], bf0[59], cos_bit);
5303
0
    bf1[37] = half_btf(-cospi[56], bf0[37], -cospi[8], bf0[58], cos_bit);
5304
0
    bf1[38] = bf0[38];
5305
0
    bf1[39] = bf0[39];
5306
0
    bf1[40] = bf0[40];
5307
0
    bf1[41] = bf0[41];
5308
0
    bf1[42] = half_btf(-cospi[40], bf0[42], cospi[24], bf0[53], cos_bit);
5309
0
    bf1[43] = half_btf(-cospi[40], bf0[43], cospi[24], bf0[52], cos_bit);
5310
0
    bf1[44] = half_btf(-cospi[24], bf0[44], -cospi[40], bf0[51], cos_bit);
5311
0
    bf1[45] = half_btf(-cospi[24], bf0[45], -cospi[40], bf0[50], cos_bit);
5312
0
    bf1[46] = bf0[46];
5313
0
    bf1[47] = bf0[47];
5314
0
    bf1[48] = bf0[48];
5315
0
    bf1[49] = bf0[49];
5316
0
    bf1[50] = half_btf(cospi[24], bf0[50], -cospi[40], bf0[45], cos_bit);
5317
0
    bf1[51] = half_btf(cospi[24], bf0[51], -cospi[40], bf0[44], cos_bit);
5318
0
    bf1[52] = half_btf(cospi[40], bf0[52], cospi[24], bf0[43], cos_bit);
5319
0
    bf1[53] = half_btf(cospi[40], bf0[53], cospi[24], bf0[42], cos_bit);
5320
0
    bf1[54] = bf0[54];
5321
0
    bf1[55] = bf0[55];
5322
0
    bf1[56] = bf0[56];
5323
0
    bf1[57] = bf0[57];
5324
0
    bf1[58] = half_btf(cospi[56], bf0[58], -cospi[8], bf0[37], cos_bit);
5325
0
    bf1[59] = half_btf(cospi[56], bf0[59], -cospi[8], bf0[36], cos_bit);
5326
0
    bf1[60] = half_btf(cospi[8], bf0[60], cospi[56], bf0[35], cos_bit);
5327
0
    bf1[61] = half_btf(cospi[8], bf0[61], cospi[56], bf0[34], cos_bit);
5328
0
    bf1[62] = bf0[62];
5329
0
    bf1[63] = bf0[63];
5330
5331
    // stage 7
5332
0
    cospi   = cospi_arr(cos_bit);
5333
0
    bf0     = step;
5334
0
    bf1     = output;
5335
0
    bf1[0]  = bf0[0];
5336
0
    bf1[2]  = bf0[2];
5337
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
5338
0
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
5339
0
    bf1[8]  = bf0[8] + bf0[9];
5340
0
    bf1[9]  = -bf0[9] + bf0[8];
5341
0
    bf1[10] = -bf0[10] + bf0[11];
5342
0
    bf1[11] = bf0[11] + bf0[10];
5343
0
    bf1[12] = bf0[12] + bf0[13];
5344
0
    bf1[13] = -bf0[13] + bf0[12];
5345
0
    bf1[14] = -bf0[14] + bf0[15];
5346
0
    bf1[15] = bf0[15] + bf0[14];
5347
0
    bf1[16] = bf0[16];
5348
0
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
5349
0
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
5350
0
    bf1[19] = bf0[19];
5351
0
    bf1[20] = bf0[20];
5352
0
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
5353
0
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
5354
0
    bf1[23] = bf0[23];
5355
0
    bf1[24] = bf0[24];
5356
0
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
5357
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
5358
0
    bf1[27] = bf0[27];
5359
0
    bf1[28] = bf0[28];
5360
0
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
5361
0
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
5362
0
    bf1[31] = bf0[31];
5363
0
    bf1[32] = bf0[32] + bf0[35];
5364
0
    bf1[33] = bf0[33] + bf0[34];
5365
0
    bf1[34] = -bf0[34] + bf0[33];
5366
0
    bf1[35] = -bf0[35] + bf0[32];
5367
0
    bf1[36] = -bf0[36] + bf0[39];
5368
0
    bf1[37] = -bf0[37] + bf0[38];
5369
0
    bf1[38] = bf0[38] + bf0[37];
5370
0
    bf1[39] = bf0[39] + bf0[36];
5371
0
    bf1[40] = bf0[40] + bf0[43];
5372
0
    bf1[41] = bf0[41] + bf0[42];
5373
0
    bf1[42] = -bf0[42] + bf0[41];
5374
0
    bf1[43] = -bf0[43] + bf0[40];
5375
0
    bf1[44] = -bf0[44] + bf0[47];
5376
0
    bf1[45] = -bf0[45] + bf0[46];
5377
0
    bf1[46] = bf0[46] + bf0[45];
5378
0
    bf1[47] = bf0[47] + bf0[44];
5379
0
    bf1[48] = bf0[48] + bf0[51];
5380
0
    bf1[49] = bf0[49] + bf0[50];
5381
0
    bf1[50] = -bf0[50] + bf0[49];
5382
0
    bf1[51] = -bf0[51] + bf0[48];
5383
0
    bf1[52] = -bf0[52] + bf0[55];
5384
0
    bf1[53] = -bf0[53] + bf0[54];
5385
0
    bf1[54] = bf0[54] + bf0[53];
5386
0
    bf1[55] = bf0[55] + bf0[52];
5387
0
    bf1[56] = bf0[56] + bf0[59];
5388
0
    bf1[57] = bf0[57] + bf0[58];
5389
0
    bf1[58] = -bf0[58] + bf0[57];
5390
0
    bf1[59] = -bf0[59] + bf0[56];
5391
0
    bf1[60] = -bf0[60] + bf0[63];
5392
0
    bf1[61] = -bf0[61] + bf0[62];
5393
0
    bf1[62] = bf0[62] + bf0[61];
5394
0
    bf1[63] = bf0[63] + bf0[60];
5395
5396
    // stage 8
5397
0
    cospi   = cospi_arr(cos_bit);
5398
0
    bf0     = output;
5399
0
    bf1     = step;
5400
0
    bf1[0]  = bf0[0];
5401
0
    bf1[2]  = bf0[2];
5402
0
    bf1[4]  = bf0[4];
5403
0
    bf1[6]  = bf0[6];
5404
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
5405
0
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
5406
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
5407
0
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
5408
0
    bf1[16] = bf0[16] + bf0[17];
5409
0
    bf1[17] = -bf0[17] + bf0[16];
5410
0
    bf1[18] = -bf0[18] + bf0[19];
5411
0
    bf1[19] = bf0[19] + bf0[18];
5412
0
    bf1[20] = bf0[20] + bf0[21];
5413
0
    bf1[21] = -bf0[21] + bf0[20];
5414
0
    bf1[22] = -bf0[22] + bf0[23];
5415
0
    bf1[23] = bf0[23] + bf0[22];
5416
0
    bf1[24] = bf0[24] + bf0[25];
5417
0
    bf1[25] = -bf0[25] + bf0[24];
5418
0
    bf1[26] = -bf0[26] + bf0[27];
5419
0
    bf1[27] = bf0[27] + bf0[26];
5420
0
    bf1[28] = bf0[28] + bf0[29];
5421
0
    bf1[29] = -bf0[29] + bf0[28];
5422
0
    bf1[30] = -bf0[30] + bf0[31];
5423
0
    bf1[31] = bf0[31] + bf0[30];
5424
0
    bf1[32] = bf0[32];
5425
0
    bf1[33] = half_btf(-cospi[4], bf0[33], cospi[60], bf0[62], cos_bit);
5426
0
    bf1[34] = half_btf(-cospi[60], bf0[34], -cospi[4], bf0[61], cos_bit);
5427
0
    bf1[35] = bf0[35];
5428
0
    bf1[36] = bf0[36];
5429
0
    bf1[37] = half_btf(-cospi[36], bf0[37], cospi[28], bf0[58], cos_bit);
5430
0
    bf1[38] = half_btf(-cospi[28], bf0[38], -cospi[36], bf0[57], cos_bit);
5431
0
    bf1[39] = bf0[39];
5432
0
    bf1[40] = bf0[40];
5433
0
    bf1[41] = half_btf(-cospi[20], bf0[41], cospi[44], bf0[54], cos_bit);
5434
0
    bf1[42] = half_btf(-cospi[44], bf0[42], -cospi[20], bf0[53], cos_bit);
5435
0
    bf1[43] = bf0[43];
5436
0
    bf1[44] = bf0[44];
5437
0
    bf1[45] = half_btf(-cospi[52], bf0[45], cospi[12], bf0[50], cos_bit);
5438
0
    bf1[46] = half_btf(-cospi[12], bf0[46], -cospi[52], bf0[49], cos_bit);
5439
0
    bf1[47] = bf0[47];
5440
0
    bf1[48] = bf0[48];
5441
0
    bf1[49] = half_btf(cospi[12], bf0[49], -cospi[52], bf0[46], cos_bit);
5442
0
    bf1[50] = half_btf(cospi[52], bf0[50], cospi[12], bf0[45], cos_bit);
5443
0
    bf1[51] = bf0[51];
5444
0
    bf1[52] = bf0[52];
5445
0
    bf1[53] = half_btf(cospi[44], bf0[53], -cospi[20], bf0[42], cos_bit);
5446
0
    bf1[54] = half_btf(cospi[20], bf0[54], cospi[44], bf0[41], cos_bit);
5447
0
    bf1[55] = bf0[55];
5448
0
    bf1[56] = bf0[56];
5449
0
    bf1[57] = half_btf(cospi[28], bf0[57], -cospi[36], bf0[38], cos_bit);
5450
0
    bf1[58] = half_btf(cospi[36], bf0[58], cospi[28], bf0[37], cos_bit);
5451
0
    bf1[59] = bf0[59];
5452
0
    bf1[60] = bf0[60];
5453
0
    bf1[61] = half_btf(cospi[60], bf0[61], -cospi[4], bf0[34], cos_bit);
5454
0
    bf1[62] = half_btf(cospi[4], bf0[62], cospi[60], bf0[33], cos_bit);
5455
0
    bf1[63] = bf0[63];
5456
5457
    // stage 9
5458
0
    cospi   = cospi_arr(cos_bit);
5459
0
    bf0     = step;
5460
0
    bf1     = output;
5461
0
    bf1[0]  = bf0[0];
5462
0
    bf1[2]  = bf0[2];
5463
0
    bf1[4]  = bf0[4];
5464
0
    bf1[6]  = bf0[6];
5465
0
    bf1[8]  = bf0[8];
5466
0
    bf1[10] = bf0[10];
5467
0
    bf1[12] = bf0[12];
5468
0
    bf1[14] = bf0[14];
5469
0
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
5470
0
    bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
5471
0
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
5472
0
    bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
5473
0
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
5474
0
    bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
5475
0
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
5476
0
    bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
5477
0
    bf1[32] = bf0[32] + bf0[33];
5478
0
    bf1[33] = -bf0[33] + bf0[32];
5479
0
    bf1[34] = -bf0[34] + bf0[35];
5480
0
    bf1[35] = bf0[35] + bf0[34];
5481
0
    bf1[36] = bf0[36] + bf0[37];
5482
0
    bf1[37] = -bf0[37] + bf0[36];
5483
0
    bf1[38] = -bf0[38] + bf0[39];
5484
0
    bf1[39] = bf0[39] + bf0[38];
5485
0
    bf1[40] = bf0[40] + bf0[41];
5486
0
    bf1[41] = -bf0[41] + bf0[40];
5487
0
    bf1[42] = -bf0[42] + bf0[43];
5488
0
    bf1[43] = bf0[43] + bf0[42];
5489
0
    bf1[44] = bf0[44] + bf0[45];
5490
0
    bf1[45] = -bf0[45] + bf0[44];
5491
0
    bf1[46] = -bf0[46] + bf0[47];
5492
0
    bf1[47] = bf0[47] + bf0[46];
5493
0
    bf1[48] = bf0[48] + bf0[49];
5494
0
    bf1[49] = -bf0[49] + bf0[48];
5495
0
    bf1[50] = -bf0[50] + bf0[51];
5496
0
    bf1[51] = bf0[51] + bf0[50];
5497
0
    bf1[52] = bf0[52] + bf0[53];
5498
0
    bf1[53] = -bf0[53] + bf0[52];
5499
0
    bf1[54] = -bf0[54] + bf0[55];
5500
0
    bf1[55] = bf0[55] + bf0[54];
5501
0
    bf1[56] = bf0[56] + bf0[57];
5502
0
    bf1[57] = -bf0[57] + bf0[56];
5503
0
    bf1[58] = -bf0[58] + bf0[59];
5504
0
    bf1[59] = bf0[59] + bf0[58];
5505
0
    bf1[60] = bf0[60] + bf0[61];
5506
0
    bf1[61] = -bf0[61] + bf0[60];
5507
0
    bf1[62] = -bf0[62] + bf0[63];
5508
0
    bf1[63] = bf0[63] + bf0[62];
5509
5510
    // stage 10
5511
0
    cospi   = cospi_arr(cos_bit);
5512
0
    bf0     = output;
5513
0
    bf1     = step;
5514
0
    bf1[0]  = bf0[0];
5515
0
    bf1[2]  = bf0[2];
5516
0
    bf1[4]  = bf0[4];
5517
0
    bf1[6]  = bf0[6];
5518
0
    bf1[8]  = bf0[8];
5519
0
    bf1[10] = bf0[10];
5520
0
    bf1[12] = bf0[12];
5521
0
    bf1[14] = bf0[14];
5522
0
    bf1[16] = bf0[16];
5523
0
    bf1[18] = bf0[18];
5524
0
    bf1[20] = bf0[20];
5525
0
    bf1[22] = bf0[22];
5526
0
    bf1[24] = bf0[24];
5527
0
    bf1[26] = bf0[26];
5528
0
    bf1[28] = bf0[28];
5529
0
    bf1[30] = bf0[30];
5530
0
    bf1[32] = half_btf(cospi[63], bf0[32], cospi[1], bf0[63], cos_bit);
5531
0
    bf1[34] = half_btf(cospi[47], bf0[34], cospi[17], bf0[61], cos_bit);
5532
0
    bf1[36] = half_btf(cospi[55], bf0[36], cospi[9], bf0[59], cos_bit);
5533
0
    bf1[38] = half_btf(cospi[39], bf0[38], cospi[25], bf0[57], cos_bit);
5534
0
    bf1[40] = half_btf(cospi[59], bf0[40], cospi[5], bf0[55], cos_bit);
5535
0
    bf1[42] = half_btf(cospi[43], bf0[42], cospi[21], bf0[53], cos_bit);
5536
0
    bf1[44] = half_btf(cospi[51], bf0[44], cospi[13], bf0[51], cos_bit);
5537
0
    bf1[46] = half_btf(cospi[35], bf0[46], cospi[29], bf0[49], cos_bit);
5538
0
    bf1[48] = half_btf(cospi[3], bf0[48], -cospi[61], bf0[47], cos_bit);
5539
0
    bf1[50] = half_btf(cospi[19], bf0[50], -cospi[45], bf0[45], cos_bit);
5540
0
    bf1[52] = half_btf(cospi[11], bf0[52], -cospi[53], bf0[43], cos_bit);
5541
0
    bf1[54] = half_btf(cospi[27], bf0[54], -cospi[37], bf0[41], cos_bit);
5542
0
    bf1[56] = half_btf(cospi[7], bf0[56], -cospi[57], bf0[39], cos_bit);
5543
0
    bf1[58] = half_btf(cospi[23], bf0[58], -cospi[41], bf0[37], cos_bit);
5544
0
    bf1[60] = half_btf(cospi[15], bf0[60], -cospi[49], bf0[35], cos_bit);
5545
0
    bf1[62] = half_btf(cospi[31], bf0[62], -cospi[33], bf0[33], cos_bit);
5546
5547
    // stage 11
5548
0
    bf0     = step;
5549
0
    bf1     = output;
5550
0
    bf1[0]  = bf0[0];
5551
0
    bf1[1]  = bf0[32];
5552
0
    bf1[2]  = bf0[16];
5553
0
    bf1[3]  = bf0[48];
5554
0
    bf1[4]  = bf0[8];
5555
0
    bf1[5]  = bf0[40];
5556
0
    bf1[6]  = bf0[24];
5557
0
    bf1[7]  = bf0[56];
5558
0
    bf1[8]  = bf0[4];
5559
0
    bf1[9]  = bf0[36];
5560
0
    bf1[10] = bf0[20];
5561
0
    bf1[11] = bf0[52];
5562
0
    bf1[12] = bf0[12];
5563
0
    bf1[13] = bf0[44];
5564
0
    bf1[14] = bf0[28];
5565
0
    bf1[15] = bf0[60];
5566
0
    bf1[16] = bf0[2];
5567
0
    bf1[17] = bf0[34];
5568
0
    bf1[18] = bf0[18];
5569
0
    bf1[19] = bf0[50];
5570
0
    bf1[20] = bf0[10];
5571
0
    bf1[21] = bf0[42];
5572
0
    bf1[22] = bf0[26];
5573
0
    bf1[23] = bf0[58];
5574
0
    bf1[24] = bf0[6];
5575
0
    bf1[25] = bf0[38];
5576
0
    bf1[26] = bf0[22];
5577
0
    bf1[27] = bf0[54];
5578
0
    bf1[28] = bf0[14];
5579
0
    bf1[29] = bf0[46];
5580
0
    bf1[30] = bf0[30];
5581
0
    bf1[31] = bf0[62];
5582
0
}
5583
5584
0
static void av1_fidentity64_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5585
0
    (void)stage_range;
5586
0
    (void)cos_bit;
5587
0
    for (int32_t i = 0; i < 32; ++i) {
5588
0
        output[i] = round_shift((int64_t)input[i] * 4 * new_sqrt2, new_sqrt2_bits);
5589
0
    }
5590
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
5591
0
}
5592
5593
0
static INLINE TxfmFunc fwd_txfm_type_to_func_N2(TxfmType txfmtype) {
5594
0
    switch (txfmtype) {
5595
0
    case TXFM_TYPE_DCT4:
5596
0
        return svt_av1_fdct4_new_N2;
5597
0
    case TXFM_TYPE_DCT8:
5598
0
        return svt_av1_fdct8_new_N2;
5599
0
    case TXFM_TYPE_DCT16:
5600
0
        return svt_av1_fdct16_new_N2;
5601
0
    case TXFM_TYPE_DCT32:
5602
0
        return svt_av1_fdct32_new_N2;
5603
0
    case TXFM_TYPE_DCT64:
5604
0
        return svt_av1_fdct64_new_N2;
5605
0
    case TXFM_TYPE_ADST4:
5606
0
        return svt_av1_fadst4_new_N2;
5607
0
    case TXFM_TYPE_ADST8:
5608
0
        return svt_av1_fadst8_new_N2;
5609
0
    case TXFM_TYPE_ADST16:
5610
0
        return svt_av1_fadst16_new_N2;
5611
0
    case TXFM_TYPE_ADST32:
5612
0
        return av1_fadst32_new;
5613
0
    case TXFM_TYPE_IDENTITY4:
5614
0
        return svt_av1_fidentity4_N2_c;
5615
0
    case TXFM_TYPE_IDENTITY8:
5616
0
        return svt_av1_fidentity8_N2_c;
5617
0
    case TXFM_TYPE_IDENTITY16:
5618
0
        return svt_av1_fidentity16_N2_c;
5619
0
    case TXFM_TYPE_IDENTITY32:
5620
0
        return svt_av1_fidentity32_N2_c;
5621
0
    case TXFM_TYPE_IDENTITY64:
5622
0
        return av1_fidentity64_N2_c;
5623
0
    default:
5624
0
        assert(0);
5625
0
        return NULL;
5626
0
    }
5627
0
}
5628
5629
static INLINE void av1_tranform_two_d_core_N2_c(int16_t* input, uint32_t input_stride, int32_t* output,
5630
0
                                                const Txfm2dFlipCfg* cfg, int32_t* buf, uint8_t bit_depth) {
5631
0
    int32_t c, r;
5632
    // Note when assigning txfm_size_col, we use the txfm_size from the
5633
    // row configuration and vice versa. This is intentionally done to
5634
    // accurately perform rectangular transforms. When the transform is
5635
    // rectangular, the number of columns will be the same as the
5636
    // txfm_size stored in the row cfg struct. It will make no difference
5637
    // for square transforms.
5638
0
    const int32_t txfm_size_col = tx_size_wide[cfg->tx_size];
5639
0
    const int32_t txfm_size_row = tx_size_high[cfg->tx_size];
5640
    // Take the shift from the larger dimension in the rectangular case.
5641
0
    const int8_t* shift     = cfg->shift;
5642
0
    const int32_t rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
5643
0
    int8_t        stage_range_col[MAX_TXFM_STAGE_NUM];
5644
0
    int8_t        stage_range_row[MAX_TXFM_STAGE_NUM];
5645
0
    assert(cfg->stage_num_col <= MAX_TXFM_STAGE_NUM);
5646
0
    assert(cfg->stage_num_row <= MAX_TXFM_STAGE_NUM);
5647
0
    svt_av1_gen_fwd_stage_range(stage_range_col, stage_range_row, cfg, bit_depth);
5648
5649
0
    const int8_t   cos_bit_col   = cfg->cos_bit_col;
5650
0
    const int8_t   cos_bit_row   = cfg->cos_bit_row;
5651
0
    const TxfmFunc txfm_func_col = fwd_txfm_type_to_func_N2(cfg->txfm_type_col);
5652
0
    const TxfmFunc txfm_func_row = fwd_txfm_type_to_func_N2(cfg->txfm_type_row);
5653
0
    ASSERT(txfm_func_col != NULL);
5654
0
    ASSERT(txfm_func_row != NULL);
5655
    // use output buffer as temp buffer
5656
0
    int32_t* temp_in  = output;
5657
0
    int32_t* temp_out = output + txfm_size_row;
5658
5659
    // Columns
5660
0
    for (c = 0; c < txfm_size_col; ++c) {
5661
0
        if (cfg->ud_flip == 0) {
5662
0
            for (r = 0; r < txfm_size_row; ++r) {
5663
0
                temp_in[r] = input[r * input_stride + c];
5664
0
            }
5665
0
        } else {
5666
0
            for (r = 0; r < txfm_size_row; ++r) {
5667
                // flip upside down
5668
0
                temp_in[r] = input[(txfm_size_row - r - 1) * input_stride + c];
5669
0
            }
5670
0
        }
5671
0
        svt_av1_round_shift_array_c(temp_in, txfm_size_row, -shift[0]); // NM svt_av1_round_shift_array_c
5672
0
        txfm_func_col(temp_in, temp_out, cos_bit_col, stage_range_col);
5673
0
        svt_av1_round_shift_array_c(temp_out, txfm_size_row / 2, -shift[1]); // NM svt_av1_round_shift_array_c
5674
0
        if (cfg->lr_flip == 0) {
5675
0
            for (r = 0; r < txfm_size_row; ++r) {
5676
0
                buf[r * txfm_size_col + c] = temp_out[r];
5677
0
            }
5678
0
        } else {
5679
0
            for (r = 0; r < txfm_size_row; ++r) {
5680
                // flip from left to right
5681
0
                buf[r * txfm_size_col + (txfm_size_col - c - 1)] = temp_out[r];
5682
0
            }
5683
0
        }
5684
0
    }
5685
5686
    // Rows
5687
0
    for (r = 0; r < txfm_size_row / 2; ++r) {
5688
0
        txfm_func_row(buf + r * txfm_size_col, output + r * txfm_size_col, cos_bit_row, stage_range_row);
5689
0
        svt_av1_round_shift_array_c(output + r * txfm_size_col, txfm_size_col / 2, -shift[2]);
5690
5691
0
        if (abs(rect_type) == 1) {
5692
            // Multiply everything by Sqrt2 if the transform is rectangular and the
5693
            // size difference is a factor of 2.
5694
0
            for (c = 0; c < txfm_size_col / 2; ++c) {
5695
0
                output[r * txfm_size_col + c] = round_shift((int64_t)output[r * txfm_size_col + c] * new_sqrt2,
5696
0
                                                            new_sqrt2_bits);
5697
0
            }
5698
0
        }
5699
0
    }
5700
5701
0
    for (int i = 0; i < (txfm_size_col * txfm_size_row); i++) {
5702
0
        if (i % txfm_size_col >= (txfm_size_col >> 1) || i / txfm_size_col >= (txfm_size_row >> 1)) {
5703
0
            output[i] = 0;
5704
0
        }
5705
0
    }
5706
0
}
5707
5708
void svt_aom_transform_two_d_64x64_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5709
0
                                        uint8_t bit_depth) {
5710
0
    int32_t       intermediate_transform_buffer[64 * 64];
5711
0
    Txfm2dFlipCfg cfg;
5712
0
    svt_aom_transform_config(transform_type, TX_64X64, &cfg);
5713
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5714
0
}
5715
5716
void svt_aom_transform_two_d_32x32_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5717
0
                                        uint8_t bit_depth) {
5718
0
    int32_t       intermediate_transform_buffer[32 * 32];
5719
0
    Txfm2dFlipCfg cfg;
5720
0
    svt_aom_transform_config(transform_type, TX_32X32, &cfg);
5721
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5722
0
}
5723
5724
void svt_aom_transform_two_d_16x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5725
0
                                        uint8_t bit_depth) {
5726
0
    int32_t       intermediate_transform_buffer[16 * 16];
5727
0
    Txfm2dFlipCfg cfg;
5728
0
    svt_aom_transform_config(transform_type, TX_16X16, &cfg);
5729
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5730
0
}
5731
5732
void svt_aom_transform_two_d_8x8_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5733
0
                                      uint8_t bit_depth) {
5734
0
    int32_t       intermediate_transform_buffer[8 * 8];
5735
0
    Txfm2dFlipCfg cfg;
5736
0
    svt_aom_transform_config(transform_type, TX_8X8, &cfg);
5737
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5738
0
}
5739
5740
void svt_aom_transform_two_d_4x4_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5741
0
                                      uint8_t bit_depth) {
5742
0
    int32_t       intermediate_transform_buffer[4 * 4];
5743
0
    Txfm2dFlipCfg cfg;
5744
0
    svt_aom_transform_config(transform_type, TX_4X4, &cfg);
5745
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5746
0
}
5747
5748
void svt_av1_fwd_txfm2d_64x32_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5749
0
                                   uint8_t bit_depth) {
5750
0
    int32_t       intermediate_transform_buffer[64 * 32];
5751
0
    Txfm2dFlipCfg cfg;
5752
0
    svt_aom_transform_config(transform_type, TX_64X32, &cfg);
5753
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5754
0
}
5755
5756
void svt_av1_fwd_txfm2d_32x64_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5757
0
                                   uint8_t bit_depth) {
5758
0
    int32_t       intermediate_transform_buffer[32 * 64];
5759
0
    Txfm2dFlipCfg cfg;
5760
0
    svt_aom_transform_config(transform_type, TX_32X64, &cfg);
5761
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5762
0
}
5763
5764
void svt_av1_fwd_txfm2d_64x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5765
0
                                   uint8_t bit_depth) {
5766
0
    int32_t       intermediate_transform_buffer[64 * 16];
5767
0
    Txfm2dFlipCfg cfg;
5768
0
    svt_aom_transform_config(transform_type, TX_64X16, &cfg);
5769
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5770
0
}
5771
5772
void svt_av1_fwd_txfm2d_16x64_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5773
0
                                   uint8_t bit_depth) {
5774
0
    int32_t       intermediate_transform_buffer[16 * 64];
5775
0
    Txfm2dFlipCfg cfg;
5776
0
    svt_aom_transform_config(transform_type, TX_16X64, &cfg);
5777
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5778
0
}
5779
5780
void svt_av1_fwd_txfm2d_32x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5781
0
                                   uint8_t bit_depth) {
5782
0
    int32_t       intermediate_transform_buffer[32 * 16];
5783
0
    Txfm2dFlipCfg cfg;
5784
0
    svt_aom_transform_config(transform_type, TX_32X16, &cfg);
5785
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5786
0
}
5787
5788
void svt_av1_fwd_txfm2d_16x32_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5789
0
                                   uint8_t bit_depth) {
5790
0
    int32_t       intermediate_transform_buffer[16 * 32];
5791
0
    Txfm2dFlipCfg cfg;
5792
0
    svt_aom_transform_config(transform_type, TX_16X32, &cfg);
5793
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5794
0
}
5795
5796
void svt_av1_fwd_txfm2d_16x8_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5797
0
                                  uint8_t bit_depth) {
5798
0
    int32_t       intermediate_transform_buffer[16 * 8];
5799
0
    Txfm2dFlipCfg cfg;
5800
0
    svt_aom_transform_config(transform_type, TX_16X8, &cfg);
5801
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5802
0
}
5803
5804
void svt_av1_fwd_txfm2d_8x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5805
0
                                  uint8_t bit_depth) {
5806
0
    int32_t       intermediate_transform_buffer[8 * 16];
5807
0
    Txfm2dFlipCfg cfg;
5808
0
    svt_aom_transform_config(transform_type, TX_8X16, &cfg);
5809
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5810
0
}
5811
5812
void svt_av1_fwd_txfm2d_32x8_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5813
0
                                  uint8_t bit_depth) {
5814
0
    int32_t       intermediate_transform_buffer[32 * 8];
5815
0
    Txfm2dFlipCfg cfg;
5816
0
    svt_aom_transform_config(transform_type, TX_32X8, &cfg);
5817
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5818
0
}
5819
5820
void svt_av1_fwd_txfm2d_8x32_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5821
0
                                  uint8_t bit_depth) {
5822
0
    int32_t       intermediate_transform_buffer[8 * 32];
5823
0
    Txfm2dFlipCfg cfg;
5824
0
    svt_aom_transform_config(transform_type, TX_8X32, &cfg);
5825
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5826
0
}
5827
5828
void svt_av1_fwd_txfm2d_16x4_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5829
0
                                  uint8_t bit_depth) {
5830
0
    int32_t       intermediate_transform_buffer[16 * 4];
5831
0
    Txfm2dFlipCfg cfg;
5832
0
    svt_aom_transform_config(transform_type, TX_16X4, &cfg);
5833
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5834
0
}
5835
5836
void svt_av1_fwd_txfm2d_4x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5837
0
                                  uint8_t bit_depth) {
5838
0
    int32_t       intermediate_transform_buffer[4 * 16];
5839
0
    Txfm2dFlipCfg cfg;
5840
0
    svt_aom_transform_config(transform_type, TX_4X16, &cfg);
5841
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5842
0
}
5843
5844
void svt_av1_fwd_txfm2d_8x4_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5845
0
                                 uint8_t bit_depth) {
5846
0
    int32_t       intermediate_transform_buffer[8 * 4];
5847
0
    Txfm2dFlipCfg cfg;
5848
0
    svt_aom_transform_config(transform_type, TX_8X4, &cfg);
5849
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5850
0
}
5851
5852
void svt_av1_fwd_txfm2d_4x8_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5853
0
                                 uint8_t bit_depth) {
5854
0
    int32_t       intermediate_transform_buffer[4 * 8];
5855
0
    Txfm2dFlipCfg cfg;
5856
0
    svt_aom_transform_config(transform_type, TX_4X8, &cfg);
5857
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5858
0
}
5859
5860
0
void svt_av1_fdct4_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5861
0
    (void)stage_range;
5862
0
    const int32_t* cospi = cospi_arr(cos_bit);
5863
0
    int32_t        step[2];
5864
5865
    // stage 1;
5866
0
    step[0] = input[0] + input[3];
5867
0
    step[1] = input[1] + input[2];
5868
5869
0
    output[0] = half_btf(cospi[32], step[0], cospi[32], step[1], cos_bit);
5870
0
}
5871
5872
0
void svt_av1_fadst4_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5873
0
    (void)stage_range;
5874
0
    int32_t        bit   = cos_bit;
5875
0
    const int32_t* sinpi = sinpi_arr(bit);
5876
0
    int32_t        x0, x1, x2, x3;
5877
0
    int32_t        s0, s2, s4, s5;
5878
5879
    // stage 0
5880
0
    x0 = input[0];
5881
0
    x1 = input[1];
5882
0
    x2 = input[2];
5883
0
    x3 = input[3];
5884
5885
0
    if (!(x0 | x1 | x2 | x3)) {
5886
0
        output[0] = output[1] = output[2] = output[3] = 0;
5887
0
        return;
5888
0
    }
5889
5890
    // stage 1
5891
0
    s0 = sinpi[1] * x0;
5892
0
    s2 = sinpi[2] * x1;
5893
0
    s4 = sinpi[3] * x2;
5894
0
    s5 = sinpi[4] * x3;
5895
5896
    // stage 3
5897
0
    x0 = s0 + s2;
5898
5899
    // stage 4
5900
0
    x0 = x0 + s5;
5901
5902
    // stage 5
5903
0
    s0 = x0 + s4;
5904
5905
    // 1-D transform scaling factor is sqrt(2).
5906
0
    output[0] = round_shift(s0, bit);
5907
0
}
5908
5909
0
void svt_av1_fidentity4_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5910
0
    (void)stage_range;
5911
0
    (void)cos_bit;
5912
0
    output[0] = round_shift((int64_t)input[0] * new_sqrt2, new_sqrt2_bits);
5913
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
5914
0
}
5915
5916
0
void svt_av1_fdct8_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5917
0
    (void)stage_range;
5918
0
    const int32_t* cospi;
5919
5920
0
    int32_t *bf0, *bf1;
5921
0
    int32_t  step[8];
5922
5923
    // stage 0;
5924
5925
    // stage 1;
5926
0
    bf1    = output;
5927
0
    bf1[0] = input[0] + input[7];
5928
0
    bf1[1] = input[1] + input[6];
5929
0
    bf1[2] = input[2] + input[5];
5930
0
    bf1[3] = input[3] + input[4];
5931
0
    bf1[4] = -input[4] + input[3];
5932
0
    bf1[5] = -input[5] + input[2];
5933
0
    bf1[6] = -input[6] + input[1];
5934
0
    bf1[7] = -input[7] + input[0];
5935
5936
    // stage 2
5937
0
    cospi  = cospi_arr(cos_bit);
5938
0
    bf0    = output;
5939
0
    bf1    = step;
5940
0
    bf1[0] = bf0[0] + bf0[3];
5941
0
    bf1[1] = bf0[1] + bf0[2];
5942
0
    bf1[4] = bf0[4];
5943
0
    bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
5944
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
5945
0
    bf1[7] = bf0[7];
5946
5947
    // stage 3
5948
0
    bf0    = step;
5949
0
    bf1    = output;
5950
0
    bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
5951
0
    bf1[4] = bf0[4] + bf0[5];
5952
0
    bf1[7] = bf0[7] + bf0[6];
5953
5954
    // stage 4
5955
0
    bf0    = output;
5956
0
    bf1    = step;
5957
0
    bf1[0] = bf0[0];
5958
0
    bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
5959
5960
    // stage 5
5961
0
    bf0    = step;
5962
0
    bf1    = output;
5963
0
    bf1[0] = bf0[0];
5964
0
    bf1[1] = bf0[4];
5965
0
}
5966
5967
0
void svt_av1_fadst8_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5968
0
    (void)stage_range;
5969
0
    const int32_t* cospi;
5970
5971
0
    int32_t *bf0, *bf1;
5972
0
    int32_t  step[8];
5973
5974
    // stage 0;
5975
5976
    // stage 1;
5977
0
    assert(output != input);
5978
0
    bf1    = output;
5979
0
    bf1[0] = input[0];
5980
0
    bf1[1] = -input[7];
5981
0
    bf1[2] = -input[3];
5982
0
    bf1[3] = input[4];
5983
0
    bf1[4] = -input[1];
5984
0
    bf1[5] = input[6];
5985
0
    bf1[6] = input[2];
5986
0
    bf1[7] = -input[5];
5987
5988
    // stage 2
5989
0
    cospi  = cospi_arr(cos_bit);
5990
0
    bf0    = output;
5991
0
    bf1    = step;
5992
0
    bf1[0] = bf0[0];
5993
0
    bf1[1] = bf0[1];
5994
0
    bf1[2] = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
5995
0
    bf1[3] = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
5996
0
    bf1[4] = bf0[4];
5997
0
    bf1[5] = bf0[5];
5998
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
5999
0
    bf1[7] = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
6000
6001
    // stage 3
6002
0
    bf0    = step;
6003
0
    bf1    = output;
6004
0
    bf1[0] = bf0[0] + bf0[2];
6005
0
    bf1[1] = bf0[1] + bf0[3];
6006
0
    bf1[2] = bf0[0] - bf0[2];
6007
0
    bf1[3] = bf0[1] - bf0[3];
6008
0
    bf1[4] = bf0[4] + bf0[6];
6009
0
    bf1[5] = bf0[5] + bf0[7];
6010
0
    bf1[6] = bf0[4] - bf0[6];
6011
0
    bf1[7] = bf0[5] - bf0[7];
6012
6013
    // stage 4
6014
0
    bf0    = output;
6015
0
    bf1    = step;
6016
0
    bf1[0] = bf0[0];
6017
0
    bf1[1] = bf0[1];
6018
0
    bf1[2] = bf0[2];
6019
0
    bf1[3] = bf0[3];
6020
0
    bf1[4] = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
6021
0
    bf1[5] = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
6022
0
    bf1[6] = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
6023
0
    bf1[7] = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
6024
6025
    // stage 5
6026
0
    bf0    = step;
6027
0
    bf1    = output;
6028
0
    bf1[0] = bf0[0] + bf0[4];
6029
0
    bf1[1] = bf0[1] + bf0[5];
6030
0
    bf1[6] = bf0[2] - bf0[6];
6031
0
    bf1[7] = bf0[3] - bf0[7];
6032
6033
    // stage 6
6034
0
    bf0    = output;
6035
0
    bf1    = step;
6036
0
    bf1[1] = half_btf(cospi[60], bf0[0], -cospi[4], bf0[1], cos_bit);
6037
0
    bf1[6] = half_btf(cospi[52], bf0[6], cospi[12], bf0[7], cos_bit);
6038
6039
    // stage 7
6040
0
    bf0    = step;
6041
0
    bf1    = output;
6042
0
    bf1[0] = bf0[1];
6043
0
    bf1[1] = bf0[6];
6044
0
}
6045
6046
0
void svt_av1_fidentity8_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6047
0
    (void)stage_range;
6048
0
    (void)cos_bit;
6049
0
    for (int32_t i = 0; i < 2; ++i) {
6050
0
        output[i] = input[i] * 2;
6051
0
    }
6052
0
}
6053
6054
0
void svt_av1_fdct16_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6055
0
    (void)stage_range;
6056
0
    const int32_t* cospi;
6057
6058
0
    int32_t *bf0, *bf1;
6059
0
    int32_t  step[16];
6060
6061
    // stage 0;
6062
6063
    // stage 1;
6064
0
    bf1     = output;
6065
0
    bf1[0]  = input[0] + input[15];
6066
0
    bf1[1]  = input[1] + input[14];
6067
0
    bf1[2]  = input[2] + input[13];
6068
0
    bf1[3]  = input[3] + input[12];
6069
0
    bf1[4]  = input[4] + input[11];
6070
0
    bf1[5]  = input[5] + input[10];
6071
0
    bf1[6]  = input[6] + input[9];
6072
0
    bf1[7]  = input[7] + input[8];
6073
0
    bf1[8]  = -input[8] + input[7];
6074
0
    bf1[9]  = -input[9] + input[6];
6075
0
    bf1[10] = -input[10] + input[5];
6076
0
    bf1[11] = -input[11] + input[4];
6077
0
    bf1[12] = -input[12] + input[3];
6078
0
    bf1[13] = -input[13] + input[2];
6079
0
    bf1[14] = -input[14] + input[1];
6080
0
    bf1[15] = -input[15] + input[0];
6081
6082
    // stage 2
6083
0
    cospi   = cospi_arr(cos_bit);
6084
0
    bf0     = output;
6085
0
    bf1     = step;
6086
0
    bf1[0]  = bf0[0] + bf0[7];
6087
0
    bf1[1]  = bf0[1] + bf0[6];
6088
0
    bf1[2]  = bf0[2] + bf0[5];
6089
0
    bf1[3]  = bf0[3] + bf0[4];
6090
0
    bf1[4]  = -bf0[4] + bf0[3];
6091
0
    bf1[5]  = -bf0[5] + bf0[2];
6092
0
    bf1[6]  = -bf0[6] + bf0[1];
6093
0
    bf1[7]  = -bf0[7] + bf0[0];
6094
0
    bf1[8]  = bf0[8];
6095
0
    bf1[9]  = bf0[9];
6096
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
6097
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
6098
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
6099
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
6100
0
    bf1[14] = bf0[14];
6101
0
    bf1[15] = bf0[15];
6102
6103
    // stage 3
6104
0
    bf0     = step;
6105
0
    bf1     = output;
6106
0
    bf1[0]  = bf0[0] + bf0[3];
6107
0
    bf1[1]  = bf0[1] + bf0[2];
6108
0
    bf1[4]  = bf0[4];
6109
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
6110
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
6111
0
    bf1[7]  = bf0[7];
6112
0
    bf1[8]  = bf0[8] + bf0[11];
6113
0
    bf1[9]  = bf0[9] + bf0[10];
6114
0
    bf1[10] = -bf0[10] + bf0[9];
6115
0
    bf1[11] = -bf0[11] + bf0[8];
6116
0
    bf1[12] = -bf0[12] + bf0[15];
6117
0
    bf1[13] = -bf0[13] + bf0[14];
6118
0
    bf1[14] = bf0[14] + bf0[13];
6119
0
    bf1[15] = bf0[15] + bf0[12];
6120
6121
    // stage 4
6122
0
    bf0     = output;
6123
0
    bf1     = step;
6124
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
6125
0
    bf1[4]  = bf0[4] + bf0[5];
6126
0
    bf1[7]  = bf0[7] + bf0[6];
6127
0
    bf1[8]  = bf0[8];
6128
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
6129
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
6130
0
    bf1[11] = bf0[11];
6131
0
    bf1[12] = bf0[12];
6132
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
6133
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
6134
0
    bf1[15] = bf0[15];
6135
6136
    // stage 5
6137
0
    bf0     = step;
6138
0
    bf1     = output;
6139
0
    bf1[0]  = bf0[0];
6140
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
6141
0
    bf1[8]  = bf0[8] + bf0[9];
6142
0
    bf1[11] = bf0[11] + bf0[10];
6143
0
    bf1[12] = bf0[12] + bf0[13];
6144
0
    bf1[15] = bf0[15] + bf0[14];
6145
6146
    // stage 6
6147
0
    bf0     = output;
6148
0
    bf1     = step;
6149
0
    bf1[0]  = bf0[0];
6150
0
    bf1[4]  = bf0[4];
6151
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
6152
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
6153
6154
    // stage 7
6155
0
    bf0    = step;
6156
0
    bf1    = output;
6157
0
    bf1[0] = bf0[0];
6158
0
    bf1[1] = bf0[8];
6159
0
    bf1[2] = bf0[4];
6160
0
    bf1[3] = bf0[12];
6161
0
}
6162
6163
0
void svt_av1_fadst16_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6164
0
    (void)stage_range;
6165
0
    const int32_t* cospi;
6166
6167
0
    int32_t *bf0, *bf1;
6168
0
    int32_t  step[16];
6169
6170
    // stage 0;
6171
6172
    // stage 1;
6173
0
    assert(output != input);
6174
0
    bf1     = output;
6175
0
    bf1[0]  = input[0];
6176
0
    bf1[1]  = -input[15];
6177
0
    bf1[2]  = -input[7];
6178
0
    bf1[3]  = input[8];
6179
0
    bf1[4]  = -input[3];
6180
0
    bf1[5]  = input[12];
6181
0
    bf1[6]  = input[4];
6182
0
    bf1[7]  = -input[11];
6183
0
    bf1[8]  = -input[1];
6184
0
    bf1[9]  = input[14];
6185
0
    bf1[10] = input[6];
6186
0
    bf1[11] = -input[9];
6187
0
    bf1[12] = input[2];
6188
0
    bf1[13] = -input[13];
6189
0
    bf1[14] = -input[5];
6190
0
    bf1[15] = input[10];
6191
6192
    // stage 2
6193
0
    cospi   = cospi_arr(cos_bit);
6194
0
    bf0     = output;
6195
0
    bf1     = step;
6196
0
    bf1[0]  = bf0[0];
6197
0
    bf1[1]  = bf0[1];
6198
0
    bf1[2]  = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
6199
0
    bf1[3]  = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
6200
0
    bf1[4]  = bf0[4];
6201
0
    bf1[5]  = bf0[5];
6202
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
6203
0
    bf1[7]  = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
6204
0
    bf1[8]  = bf0[8];
6205
0
    bf1[9]  = bf0[9];
6206
0
    bf1[10] = half_btf(cospi[32], bf0[10], cospi[32], bf0[11], cos_bit);
6207
0
    bf1[11] = half_btf(cospi[32], bf0[10], -cospi[32], bf0[11], cos_bit);
6208
0
    bf1[12] = bf0[12];
6209
0
    bf1[13] = bf0[13];
6210
0
    bf1[14] = half_btf(cospi[32], bf0[14], cospi[32], bf0[15], cos_bit);
6211
0
    bf1[15] = half_btf(cospi[32], bf0[14], -cospi[32], bf0[15], cos_bit);
6212
6213
    // stage 3
6214
0
    bf0     = step;
6215
0
    bf1     = output;
6216
0
    bf1[0]  = bf0[0] + bf0[2];
6217
0
    bf1[1]  = bf0[1] + bf0[3];
6218
0
    bf1[2]  = bf0[0] - bf0[2];
6219
0
    bf1[3]  = bf0[1] - bf0[3];
6220
0
    bf1[4]  = bf0[4] + bf0[6];
6221
0
    bf1[5]  = bf0[5] + bf0[7];
6222
0
    bf1[6]  = bf0[4] - bf0[6];
6223
0
    bf1[7]  = bf0[5] - bf0[7];
6224
0
    bf1[8]  = bf0[8] + bf0[10];
6225
0
    bf1[9]  = bf0[9] + bf0[11];
6226
0
    bf1[10] = bf0[8] - bf0[10];
6227
0
    bf1[11] = bf0[9] - bf0[11];
6228
0
    bf1[12] = bf0[12] + bf0[14];
6229
0
    bf1[13] = bf0[13] + bf0[15];
6230
0
    bf1[14] = bf0[12] - bf0[14];
6231
0
    bf1[15] = bf0[13] - bf0[15];
6232
6233
    // stage 4
6234
0
    bf0     = output;
6235
0
    bf1     = step;
6236
0
    bf1[0]  = bf0[0];
6237
0
    bf1[1]  = bf0[1];
6238
0
    bf1[2]  = bf0[2];
6239
0
    bf1[3]  = bf0[3];
6240
0
    bf1[4]  = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
6241
0
    bf1[5]  = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
6242
0
    bf1[6]  = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
6243
0
    bf1[7]  = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
6244
0
    bf1[8]  = bf0[8];
6245
0
    bf1[9]  = bf0[9];
6246
0
    bf1[10] = bf0[10];
6247
0
    bf1[11] = bf0[11];
6248
0
    bf1[12] = half_btf(cospi[16], bf0[12], cospi[48], bf0[13], cos_bit);
6249
0
    bf1[13] = half_btf(cospi[48], bf0[12], -cospi[16], bf0[13], cos_bit);
6250
0
    bf1[14] = half_btf(-cospi[48], bf0[14], cospi[16], bf0[15], cos_bit);
6251
0
    bf1[15] = half_btf(cospi[16], bf0[14], cospi[48], bf0[15], cos_bit);
6252
6253
    // stage 5
6254
0
    bf0     = step;
6255
0
    bf1     = output;
6256
0
    bf1[0]  = bf0[0] + bf0[4];
6257
0
    bf1[1]  = bf0[1] + bf0[5];
6258
0
    bf1[2]  = bf0[2] + bf0[6];
6259
0
    bf1[3]  = bf0[3] + bf0[7];
6260
0
    bf1[4]  = bf0[0] - bf0[4];
6261
0
    bf1[5]  = bf0[1] - bf0[5];
6262
0
    bf1[6]  = bf0[2] - bf0[6];
6263
0
    bf1[7]  = bf0[3] - bf0[7];
6264
0
    bf1[8]  = bf0[8] + bf0[12];
6265
0
    bf1[9]  = bf0[9] + bf0[13];
6266
0
    bf1[10] = bf0[10] + bf0[14];
6267
0
    bf1[11] = bf0[11] + bf0[15];
6268
0
    bf1[12] = bf0[8] - bf0[12];
6269
0
    bf1[13] = bf0[9] - bf0[13];
6270
0
    bf1[14] = bf0[10] - bf0[14];
6271
0
    bf1[15] = bf0[11] - bf0[15];
6272
6273
    // stage 6
6274
0
    bf0     = output;
6275
0
    bf1     = step;
6276
0
    bf1[0]  = bf0[0];
6277
0
    bf1[1]  = bf0[1];
6278
0
    bf1[2]  = bf0[2];
6279
0
    bf1[3]  = bf0[3];
6280
0
    bf1[4]  = bf0[4];
6281
0
    bf1[5]  = bf0[5];
6282
0
    bf1[6]  = bf0[6];
6283
0
    bf1[7]  = bf0[7];
6284
0
    bf1[8]  = half_btf(cospi[8], bf0[8], cospi[56], bf0[9], cos_bit);
6285
0
    bf1[9]  = half_btf(cospi[56], bf0[8], -cospi[8], bf0[9], cos_bit);
6286
0
    bf1[10] = half_btf(cospi[40], bf0[10], cospi[24], bf0[11], cos_bit);
6287
0
    bf1[11] = half_btf(cospi[24], bf0[10], -cospi[40], bf0[11], cos_bit);
6288
0
    bf1[12] = half_btf(-cospi[56], bf0[12], cospi[8], bf0[13], cos_bit);
6289
0
    bf1[13] = half_btf(cospi[8], bf0[12], cospi[56], bf0[13], cos_bit);
6290
0
    bf1[14] = half_btf(-cospi[24], bf0[14], cospi[40], bf0[15], cos_bit);
6291
0
    bf1[15] = half_btf(cospi[40], bf0[14], cospi[24], bf0[15], cos_bit);
6292
6293
    // stage 7
6294
0
    bf0     = step;
6295
0
    bf1     = output;
6296
0
    bf1[0]  = bf0[0] + bf0[8];
6297
0
    bf1[1]  = bf0[1] + bf0[9];
6298
0
    bf1[2]  = bf0[2] + bf0[10];
6299
0
    bf1[3]  = bf0[3] + bf0[11];
6300
0
    bf1[12] = bf0[4] - bf0[12];
6301
0
    bf1[13] = bf0[5] - bf0[13];
6302
0
    bf1[14] = bf0[6] - bf0[14];
6303
0
    bf1[15] = bf0[7] - bf0[15];
6304
6305
    // stage 8
6306
0
    bf0     = output;
6307
0
    bf1     = step;
6308
0
    bf1[1]  = half_btf(cospi[62], bf0[0], -cospi[2], bf0[1], cos_bit);
6309
0
    bf1[3]  = half_btf(cospi[54], bf0[2], -cospi[10], bf0[3], cos_bit);
6310
0
    bf1[12] = half_btf(cospi[50], bf0[12], cospi[14], bf0[13], cos_bit);
6311
0
    bf1[14] = half_btf(cospi[58], bf0[14], cospi[6], bf0[15], cos_bit);
6312
6313
    // stage 9
6314
0
    bf0    = step;
6315
0
    bf1    = output;
6316
0
    bf1[0] = bf0[1];
6317
0
    bf1[1] = bf0[14];
6318
0
    bf1[2] = bf0[3];
6319
0
    bf1[3] = bf0[12];
6320
0
}
6321
6322
0
void svt_av1_fidentity16_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6323
0
    (void)stage_range;
6324
0
    (void)cos_bit;
6325
0
    for (int32_t i = 0; i < 4; ++i) {
6326
0
        output[i] = round_shift((int64_t)input[i] * 2 * new_sqrt2, new_sqrt2_bits);
6327
0
    }
6328
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
6329
0
}
6330
6331
0
void svt_av1_fdct32_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6332
0
    (void)stage_range;
6333
0
    const int32_t* cospi;
6334
6335
0
    int32_t *bf0, *bf1;
6336
0
    int32_t  step[32];
6337
6338
    // stage 0;
6339
6340
    // stage 1;
6341
0
    bf1     = output;
6342
0
    bf1[0]  = input[0] + input[31];
6343
0
    bf1[1]  = input[1] + input[30];
6344
0
    bf1[2]  = input[2] + input[29];
6345
0
    bf1[3]  = input[3] + input[28];
6346
0
    bf1[4]  = input[4] + input[27];
6347
0
    bf1[5]  = input[5] + input[26];
6348
0
    bf1[6]  = input[6] + input[25];
6349
0
    bf1[7]  = input[7] + input[24];
6350
0
    bf1[8]  = input[8] + input[23];
6351
0
    bf1[9]  = input[9] + input[22];
6352
0
    bf1[10] = input[10] + input[21];
6353
0
    bf1[11] = input[11] + input[20];
6354
0
    bf1[12] = input[12] + input[19];
6355
0
    bf1[13] = input[13] + input[18];
6356
0
    bf1[14] = input[14] + input[17];
6357
0
    bf1[15] = input[15] + input[16];
6358
0
    bf1[16] = -input[16] + input[15];
6359
0
    bf1[17] = -input[17] + input[14];
6360
0
    bf1[18] = -input[18] + input[13];
6361
0
    bf1[19] = -input[19] + input[12];
6362
0
    bf1[20] = -input[20] + input[11];
6363
0
    bf1[21] = -input[21] + input[10];
6364
0
    bf1[22] = -input[22] + input[9];
6365
0
    bf1[23] = -input[23] + input[8];
6366
0
    bf1[24] = -input[24] + input[7];
6367
0
    bf1[25] = -input[25] + input[6];
6368
0
    bf1[26] = -input[26] + input[5];
6369
0
    bf1[27] = -input[27] + input[4];
6370
0
    bf1[28] = -input[28] + input[3];
6371
0
    bf1[29] = -input[29] + input[2];
6372
0
    bf1[30] = -input[30] + input[1];
6373
0
    bf1[31] = -input[31] + input[0];
6374
6375
    // stage 2
6376
0
    cospi   = cospi_arr(cos_bit);
6377
0
    bf0     = output;
6378
0
    bf1     = step;
6379
0
    bf1[0]  = bf0[0] + bf0[15];
6380
0
    bf1[1]  = bf0[1] + bf0[14];
6381
0
    bf1[2]  = bf0[2] + bf0[13];
6382
0
    bf1[3]  = bf0[3] + bf0[12];
6383
0
    bf1[4]  = bf0[4] + bf0[11];
6384
0
    bf1[5]  = bf0[5] + bf0[10];
6385
0
    bf1[6]  = bf0[6] + bf0[9];
6386
0
    bf1[7]  = bf0[7] + bf0[8];
6387
0
    bf1[8]  = -bf0[8] + bf0[7];
6388
0
    bf1[9]  = -bf0[9] + bf0[6];
6389
0
    bf1[10] = -bf0[10] + bf0[5];
6390
0
    bf1[11] = -bf0[11] + bf0[4];
6391
0
    bf1[12] = -bf0[12] + bf0[3];
6392
0
    bf1[13] = -bf0[13] + bf0[2];
6393
0
    bf1[14] = -bf0[14] + bf0[1];
6394
0
    bf1[15] = -bf0[15] + bf0[0];
6395
0
    bf1[16] = bf0[16];
6396
0
    bf1[17] = bf0[17];
6397
0
    bf1[18] = bf0[18];
6398
0
    bf1[19] = bf0[19];
6399
0
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
6400
0
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
6401
0
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
6402
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
6403
0
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
6404
0
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
6405
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
6406
0
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
6407
0
    bf1[28] = bf0[28];
6408
0
    bf1[29] = bf0[29];
6409
0
    bf1[30] = bf0[30];
6410
0
    bf1[31] = bf0[31];
6411
6412
    // stage 3
6413
0
    bf0     = step;
6414
0
    bf1     = output;
6415
0
    bf1[0]  = bf0[0] + bf0[7];
6416
0
    bf1[1]  = bf0[1] + bf0[6];
6417
0
    bf1[2]  = bf0[2] + bf0[5];
6418
0
    bf1[3]  = bf0[3] + bf0[4];
6419
0
    bf1[4]  = -bf0[4] + bf0[3];
6420
0
    bf1[5]  = -bf0[5] + bf0[2];
6421
0
    bf1[6]  = -bf0[6] + bf0[1];
6422
0
    bf1[7]  = -bf0[7] + bf0[0];
6423
0
    bf1[8]  = bf0[8];
6424
0
    bf1[9]  = bf0[9];
6425
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
6426
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
6427
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
6428
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
6429
0
    bf1[14] = bf0[14];
6430
0
    bf1[15] = bf0[15];
6431
0
    bf1[16] = bf0[16] + bf0[23];
6432
0
    bf1[17] = bf0[17] + bf0[22];
6433
0
    bf1[18] = bf0[18] + bf0[21];
6434
0
    bf1[19] = bf0[19] + bf0[20];
6435
0
    bf1[20] = -bf0[20] + bf0[19];
6436
0
    bf1[21] = -bf0[21] + bf0[18];
6437
0
    bf1[22] = -bf0[22] + bf0[17];
6438
0
    bf1[23] = -bf0[23] + bf0[16];
6439
0
    bf1[24] = -bf0[24] + bf0[31];
6440
0
    bf1[25] = -bf0[25] + bf0[30];
6441
0
    bf1[26] = -bf0[26] + bf0[29];
6442
0
    bf1[27] = -bf0[27] + bf0[28];
6443
0
    bf1[28] = bf0[28] + bf0[27];
6444
0
    bf1[29] = bf0[29] + bf0[26];
6445
0
    bf1[30] = bf0[30] + bf0[25];
6446
0
    bf1[31] = bf0[31] + bf0[24];
6447
6448
    // stage 4
6449
0
    bf0     = output;
6450
0
    bf1     = step;
6451
0
    bf1[0]  = bf0[0] + bf0[3];
6452
0
    bf1[1]  = bf0[1] + bf0[2];
6453
0
    bf1[4]  = bf0[4];
6454
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
6455
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
6456
0
    bf1[7]  = bf0[7];
6457
0
    bf1[8]  = bf0[8] + bf0[11];
6458
0
    bf1[9]  = bf0[9] + bf0[10];
6459
0
    bf1[10] = -bf0[10] + bf0[9];
6460
0
    bf1[11] = -bf0[11] + bf0[8];
6461
0
    bf1[12] = -bf0[12] + bf0[15];
6462
0
    bf1[13] = -bf0[13] + bf0[14];
6463
0
    bf1[14] = bf0[14] + bf0[13];
6464
0
    bf1[15] = bf0[15] + bf0[12];
6465
0
    bf1[16] = bf0[16];
6466
0
    bf1[17] = bf0[17];
6467
0
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
6468
0
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
6469
0
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
6470
0
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
6471
0
    bf1[22] = bf0[22];
6472
0
    bf1[23] = bf0[23];
6473
0
    bf1[24] = bf0[24];
6474
0
    bf1[25] = bf0[25];
6475
0
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
6476
0
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
6477
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
6478
0
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
6479
0
    bf1[30] = bf0[30];
6480
0
    bf1[31] = bf0[31];
6481
6482
    // stage 5
6483
0
    bf0     = step;
6484
0
    bf1     = output;
6485
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
6486
0
    bf1[4]  = bf0[4] + bf0[5];
6487
0
    bf1[7]  = bf0[7] + bf0[6];
6488
0
    bf1[8]  = bf0[8];
6489
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
6490
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
6491
0
    bf1[11] = bf0[11];
6492
0
    bf1[12] = bf0[12];
6493
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
6494
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
6495
0
    bf1[15] = bf0[15];
6496
0
    bf1[16] = bf0[16] + bf0[19];
6497
0
    bf1[17] = bf0[17] + bf0[18];
6498
0
    bf1[18] = -bf0[18] + bf0[17];
6499
0
    bf1[19] = -bf0[19] + bf0[16];
6500
0
    bf1[20] = -bf0[20] + bf0[23];
6501
0
    bf1[21] = -bf0[21] + bf0[22];
6502
0
    bf1[22] = bf0[22] + bf0[21];
6503
0
    bf1[23] = bf0[23] + bf0[20];
6504
0
    bf1[24] = bf0[24] + bf0[27];
6505
0
    bf1[25] = bf0[25] + bf0[26];
6506
0
    bf1[26] = -bf0[26] + bf0[25];
6507
0
    bf1[27] = -bf0[27] + bf0[24];
6508
0
    bf1[28] = -bf0[28] + bf0[31];
6509
0
    bf1[29] = -bf0[29] + bf0[30];
6510
0
    bf1[30] = bf0[30] + bf0[29];
6511
0
    bf1[31] = bf0[31] + bf0[28];
6512
6513
    // stage 6
6514
0
    bf0     = output;
6515
0
    bf1     = step;
6516
0
    bf1[0]  = bf0[0];
6517
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
6518
0
    bf1[8]  = bf0[8] + bf0[9];
6519
0
    bf1[11] = bf0[11] + bf0[10];
6520
0
    bf1[12] = bf0[12] + bf0[13];
6521
0
    bf1[15] = bf0[15] + bf0[14];
6522
0
    bf1[16] = bf0[16];
6523
0
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
6524
0
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
6525
0
    bf1[19] = bf0[19];
6526
0
    bf1[20] = bf0[20];
6527
0
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
6528
0
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
6529
0
    bf1[23] = bf0[23];
6530
0
    bf1[24] = bf0[24];
6531
0
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
6532
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
6533
0
    bf1[27] = bf0[27];
6534
0
    bf1[28] = bf0[28];
6535
0
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
6536
0
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
6537
0
    bf1[31] = bf0[31];
6538
6539
    // stage 7
6540
0
    bf0     = step;
6541
0
    bf1     = output;
6542
0
    bf1[0]  = bf0[0];
6543
0
    bf1[4]  = bf0[4];
6544
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
6545
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
6546
0
    bf1[16] = bf0[16] + bf0[17];
6547
0
    bf1[19] = bf0[19] + bf0[18];
6548
0
    bf1[20] = bf0[20] + bf0[21];
6549
0
    bf1[23] = bf0[23] + bf0[22];
6550
0
    bf1[24] = bf0[24] + bf0[25];
6551
0
    bf1[27] = bf0[27] + bf0[26];
6552
0
    bf1[28] = bf0[28] + bf0[29];
6553
0
    bf1[31] = bf0[31] + bf0[30];
6554
6555
    // stage 8
6556
0
    bf0     = output;
6557
0
    bf1     = step;
6558
0
    bf1[0]  = bf0[0];
6559
0
    bf1[4]  = bf0[4];
6560
0
    bf1[8]  = bf0[8];
6561
0
    bf1[12] = bf0[12];
6562
0
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
6563
0
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
6564
0
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
6565
0
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
6566
6567
    // stage 9
6568
0
    bf0    = step;
6569
0
    bf1    = output;
6570
0
    bf1[0] = bf0[0];
6571
0
    bf1[1] = bf0[16];
6572
0
    bf1[2] = bf0[8];
6573
0
    bf1[3] = bf0[24];
6574
0
    bf1[4] = bf0[4];
6575
0
    bf1[5] = bf0[20];
6576
0
    bf1[6] = bf0[12];
6577
0
    bf1[7] = bf0[28];
6578
0
}
6579
6580
0
void svt_av1_fidentity32_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6581
0
    (void)stage_range;
6582
0
    (void)cos_bit;
6583
0
    for (int32_t i = 0; i < 8; ++i) {
6584
0
        output[i] = input[i] * 4;
6585
0
    }
6586
0
}
6587
6588
0
void svt_av1_fdct64_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6589
0
    (void)stage_range;
6590
0
    const int32_t* cospi;
6591
6592
0
    int32_t *bf0, *bf1;
6593
0
    int32_t  step[64];
6594
6595
    // stage 0;
6596
6597
    // stage 1;
6598
0
    bf1     = output;
6599
0
    bf1[0]  = input[0] + input[63];
6600
0
    bf1[1]  = input[1] + input[62];
6601
0
    bf1[2]  = input[2] + input[61];
6602
0
    bf1[3]  = input[3] + input[60];
6603
0
    bf1[4]  = input[4] + input[59];
6604
0
    bf1[5]  = input[5] + input[58];
6605
0
    bf1[6]  = input[6] + input[57];
6606
0
    bf1[7]  = input[7] + input[56];
6607
0
    bf1[8]  = input[8] + input[55];
6608
0
    bf1[9]  = input[9] + input[54];
6609
0
    bf1[10] = input[10] + input[53];
6610
0
    bf1[11] = input[11] + input[52];
6611
0
    bf1[12] = input[12] + input[51];
6612
0
    bf1[13] = input[13] + input[50];
6613
0
    bf1[14] = input[14] + input[49];
6614
0
    bf1[15] = input[15] + input[48];
6615
0
    bf1[16] = input[16] + input[47];
6616
0
    bf1[17] = input[17] + input[46];
6617
0
    bf1[18] = input[18] + input[45];
6618
0
    bf1[19] = input[19] + input[44];
6619
0
    bf1[20] = input[20] + input[43];
6620
0
    bf1[21] = input[21] + input[42];
6621
0
    bf1[22] = input[22] + input[41];
6622
0
    bf1[23] = input[23] + input[40];
6623
0
    bf1[24] = input[24] + input[39];
6624
0
    bf1[25] = input[25] + input[38];
6625
0
    bf1[26] = input[26] + input[37];
6626
0
    bf1[27] = input[27] + input[36];
6627
0
    bf1[28] = input[28] + input[35];
6628
0
    bf1[29] = input[29] + input[34];
6629
0
    bf1[30] = input[30] + input[33];
6630
0
    bf1[31] = input[31] + input[32];
6631
0
    bf1[32] = -input[32] + input[31];
6632
0
    bf1[33] = -input[33] + input[30];
6633
0
    bf1[34] = -input[34] + input[29];
6634
0
    bf1[35] = -input[35] + input[28];
6635
0
    bf1[36] = -input[36] + input[27];
6636
0
    bf1[37] = -input[37] + input[26];
6637
0
    bf1[38] = -input[38] + input[25];
6638
0
    bf1[39] = -input[39] + input[24];
6639
0
    bf1[40] = -input[40] + input[23];
6640
0
    bf1[41] = -input[41] + input[22];
6641
0
    bf1[42] = -input[42] + input[21];
6642
0
    bf1[43] = -input[43] + input[20];
6643
0
    bf1[44] = -input[44] + input[19];
6644
0
    bf1[45] = -input[45] + input[18];
6645
0
    bf1[46] = -input[46] + input[17];
6646
0
    bf1[47] = -input[47] + input[16];
6647
0
    bf1[48] = -input[48] + input[15];
6648
0
    bf1[49] = -input[49] + input[14];
6649
0
    bf1[50] = -input[50] + input[13];
6650
0
    bf1[51] = -input[51] + input[12];
6651
0
    bf1[52] = -input[52] + input[11];
6652
0
    bf1[53] = -input[53] + input[10];
6653
0
    bf1[54] = -input[54] + input[9];
6654
0
    bf1[55] = -input[55] + input[8];
6655
0
    bf1[56] = -input[56] + input[7];
6656
0
    bf1[57] = -input[57] + input[6];
6657
0
    bf1[58] = -input[58] + input[5];
6658
0
    bf1[59] = -input[59] + input[4];
6659
0
    bf1[60] = -input[60] + input[3];
6660
0
    bf1[61] = -input[61] + input[2];
6661
0
    bf1[62] = -input[62] + input[1];
6662
0
    bf1[63] = -input[63] + input[0];
6663
6664
    // stage 2
6665
0
    cospi   = cospi_arr(cos_bit);
6666
0
    bf0     = output;
6667
0
    bf1     = step;
6668
0
    bf1[0]  = bf0[0] + bf0[31];
6669
0
    bf1[1]  = bf0[1] + bf0[30];
6670
0
    bf1[2]  = bf0[2] + bf0[29];
6671
0
    bf1[3]  = bf0[3] + bf0[28];
6672
0
    bf1[4]  = bf0[4] + bf0[27];
6673
0
    bf1[5]  = bf0[5] + bf0[26];
6674
0
    bf1[6]  = bf0[6] + bf0[25];
6675
0
    bf1[7]  = bf0[7] + bf0[24];
6676
0
    bf1[8]  = bf0[8] + bf0[23];
6677
0
    bf1[9]  = bf0[9] + bf0[22];
6678
0
    bf1[10] = bf0[10] + bf0[21];
6679
0
    bf1[11] = bf0[11] + bf0[20];
6680
0
    bf1[12] = bf0[12] + bf0[19];
6681
0
    bf1[13] = bf0[13] + bf0[18];
6682
0
    bf1[14] = bf0[14] + bf0[17];
6683
0
    bf1[15] = bf0[15] + bf0[16];
6684
0
    bf1[16] = -bf0[16] + bf0[15];
6685
0
    bf1[17] = -bf0[17] + bf0[14];
6686
0
    bf1[18] = -bf0[18] + bf0[13];
6687
0
    bf1[19] = -bf0[19] + bf0[12];
6688
0
    bf1[20] = -bf0[20] + bf0[11];
6689
0
    bf1[21] = -bf0[21] + bf0[10];
6690
0
    bf1[22] = -bf0[22] + bf0[9];
6691
0
    bf1[23] = -bf0[23] + bf0[8];
6692
0
    bf1[24] = -bf0[24] + bf0[7];
6693
0
    bf1[25] = -bf0[25] + bf0[6];
6694
0
    bf1[26] = -bf0[26] + bf0[5];
6695
0
    bf1[27] = -bf0[27] + bf0[4];
6696
0
    bf1[28] = -bf0[28] + bf0[3];
6697
0
    bf1[29] = -bf0[29] + bf0[2];
6698
0
    bf1[30] = -bf0[30] + bf0[1];
6699
0
    bf1[31] = -bf0[31] + bf0[0];
6700
0
    bf1[32] = bf0[32];
6701
0
    bf1[33] = bf0[33];
6702
0
    bf1[34] = bf0[34];
6703
0
    bf1[35] = bf0[35];
6704
0
    bf1[36] = bf0[36];
6705
0
    bf1[37] = bf0[37];
6706
0
    bf1[38] = bf0[38];
6707
0
    bf1[39] = bf0[39];
6708
0
    bf1[40] = half_btf(-cospi[32], bf0[40], cospi[32], bf0[55], cos_bit);
6709
0
    bf1[41] = half_btf(-cospi[32], bf0[41], cospi[32], bf0[54], cos_bit);
6710
0
    bf1[42] = half_btf(-cospi[32], bf0[42], cospi[32], bf0[53], cos_bit);
6711
0
    bf1[43] = half_btf(-cospi[32], bf0[43], cospi[32], bf0[52], cos_bit);
6712
0
    bf1[44] = half_btf(-cospi[32], bf0[44], cospi[32], bf0[51], cos_bit);
6713
0
    bf1[45] = half_btf(-cospi[32], bf0[45], cospi[32], bf0[50], cos_bit);
6714
0
    bf1[46] = half_btf(-cospi[32], bf0[46], cospi[32], bf0[49], cos_bit);
6715
0
    bf1[47] = half_btf(-cospi[32], bf0[47], cospi[32], bf0[48], cos_bit);
6716
0
    bf1[48] = half_btf(cospi[32], bf0[48], cospi[32], bf0[47], cos_bit);
6717
0
    bf1[49] = half_btf(cospi[32], bf0[49], cospi[32], bf0[46], cos_bit);
6718
0
    bf1[50] = half_btf(cospi[32], bf0[50], cospi[32], bf0[45], cos_bit);
6719
0
    bf1[51] = half_btf(cospi[32], bf0[51], cospi[32], bf0[44], cos_bit);
6720
0
    bf1[52] = half_btf(cospi[32], bf0[52], cospi[32], bf0[43], cos_bit);
6721
0
    bf1[53] = half_btf(cospi[32], bf0[53], cospi[32], bf0[42], cos_bit);
6722
0
    bf1[54] = half_btf(cospi[32], bf0[54], cospi[32], bf0[41], cos_bit);
6723
0
    bf1[55] = half_btf(cospi[32], bf0[55], cospi[32], bf0[40], cos_bit);
6724
0
    bf1[56] = bf0[56];
6725
0
    bf1[57] = bf0[57];
6726
0
    bf1[58] = bf0[58];
6727
0
    bf1[59] = bf0[59];
6728
0
    bf1[60] = bf0[60];
6729
0
    bf1[61] = bf0[61];
6730
0
    bf1[62] = bf0[62];
6731
0
    bf1[63] = bf0[63];
6732
6733
    // stage 3
6734
0
    cospi   = cospi_arr(cos_bit);
6735
0
    bf0     = step;
6736
0
    bf1     = output;
6737
0
    bf1[0]  = bf0[0] + bf0[15];
6738
0
    bf1[1]  = bf0[1] + bf0[14];
6739
0
    bf1[2]  = bf0[2] + bf0[13];
6740
0
    bf1[3]  = bf0[3] + bf0[12];
6741
0
    bf1[4]  = bf0[4] + bf0[11];
6742
0
    bf1[5]  = bf0[5] + bf0[10];
6743
0
    bf1[6]  = bf0[6] + bf0[9];
6744
0
    bf1[7]  = bf0[7] + bf0[8];
6745
0
    bf1[8]  = -bf0[8] + bf0[7];
6746
0
    bf1[9]  = -bf0[9] + bf0[6];
6747
0
    bf1[10] = -bf0[10] + bf0[5];
6748
0
    bf1[11] = -bf0[11] + bf0[4];
6749
0
    bf1[12] = -bf0[12] + bf0[3];
6750
0
    bf1[13] = -bf0[13] + bf0[2];
6751
0
    bf1[14] = -bf0[14] + bf0[1];
6752
0
    bf1[15] = -bf0[15] + bf0[0];
6753
0
    bf1[16] = bf0[16];
6754
0
    bf1[17] = bf0[17];
6755
0
    bf1[18] = bf0[18];
6756
0
    bf1[19] = bf0[19];
6757
0
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
6758
0
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
6759
0
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
6760
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
6761
0
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
6762
0
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
6763
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
6764
0
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
6765
0
    bf1[28] = bf0[28];
6766
0
    bf1[29] = bf0[29];
6767
0
    bf1[30] = bf0[30];
6768
0
    bf1[31] = bf0[31];
6769
0
    bf1[32] = bf0[32] + bf0[47];
6770
0
    bf1[33] = bf0[33] + bf0[46];
6771
0
    bf1[34] = bf0[34] + bf0[45];
6772
0
    bf1[35] = bf0[35] + bf0[44];
6773
0
    bf1[36] = bf0[36] + bf0[43];
6774
0
    bf1[37] = bf0[37] + bf0[42];
6775
0
    bf1[38] = bf0[38] + bf0[41];
6776
0
    bf1[39] = bf0[39] + bf0[40];
6777
0
    bf1[40] = -bf0[40] + bf0[39];
6778
0
    bf1[41] = -bf0[41] + bf0[38];
6779
0
    bf1[42] = -bf0[42] + bf0[37];
6780
0
    bf1[43] = -bf0[43] + bf0[36];
6781
0
    bf1[44] = -bf0[44] + bf0[35];
6782
0
    bf1[45] = -bf0[45] + bf0[34];
6783
0
    bf1[46] = -bf0[46] + bf0[33];
6784
0
    bf1[47] = -bf0[47] + bf0[32];
6785
0
    bf1[48] = -bf0[48] + bf0[63];
6786
0
    bf1[49] = -bf0[49] + bf0[62];
6787
0
    bf1[50] = -bf0[50] + bf0[61];
6788
0
    bf1[51] = -bf0[51] + bf0[60];
6789
0
    bf1[52] = -bf0[52] + bf0[59];
6790
0
    bf1[53] = -bf0[53] + bf0[58];
6791
0
    bf1[54] = -bf0[54] + bf0[57];
6792
0
    bf1[55] = -bf0[55] + bf0[56];
6793
0
    bf1[56] = bf0[56] + bf0[55];
6794
0
    bf1[57] = bf0[57] + bf0[54];
6795
0
    bf1[58] = bf0[58] + bf0[53];
6796
0
    bf1[59] = bf0[59] + bf0[52];
6797
0
    bf1[60] = bf0[60] + bf0[51];
6798
0
    bf1[61] = bf0[61] + bf0[50];
6799
0
    bf1[62] = bf0[62] + bf0[49];
6800
0
    bf1[63] = bf0[63] + bf0[48];
6801
6802
    // stage 4
6803
0
    cospi   = cospi_arr(cos_bit);
6804
0
    bf0     = output;
6805
0
    bf1     = step;
6806
0
    bf1[0]  = bf0[0] + bf0[7];
6807
0
    bf1[1]  = bf0[1] + bf0[6];
6808
0
    bf1[2]  = bf0[2] + bf0[5];
6809
0
    bf1[3]  = bf0[3] + bf0[4];
6810
0
    bf1[4]  = -bf0[4] + bf0[3];
6811
0
    bf1[5]  = -bf0[5] + bf0[2];
6812
0
    bf1[6]  = -bf0[6] + bf0[1];
6813
0
    bf1[7]  = -bf0[7] + bf0[0];
6814
0
    bf1[8]  = bf0[8];
6815
0
    bf1[9]  = bf0[9];
6816
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
6817
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
6818
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
6819
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
6820
0
    bf1[14] = bf0[14];
6821
0
    bf1[15] = bf0[15];
6822
0
    bf1[16] = bf0[16] + bf0[23];
6823
0
    bf1[17] = bf0[17] + bf0[22];
6824
0
    bf1[18] = bf0[18] + bf0[21];
6825
0
    bf1[19] = bf0[19] + bf0[20];
6826
0
    bf1[20] = -bf0[20] + bf0[19];
6827
0
    bf1[21] = -bf0[21] + bf0[18];
6828
0
    bf1[22] = -bf0[22] + bf0[17];
6829
0
    bf1[23] = -bf0[23] + bf0[16];
6830
0
    bf1[24] = -bf0[24] + bf0[31];
6831
0
    bf1[25] = -bf0[25] + bf0[30];
6832
0
    bf1[26] = -bf0[26] + bf0[29];
6833
0
    bf1[27] = -bf0[27] + bf0[28];
6834
0
    bf1[28] = bf0[28] + bf0[27];
6835
0
    bf1[29] = bf0[29] + bf0[26];
6836
0
    bf1[30] = bf0[30] + bf0[25];
6837
0
    bf1[31] = bf0[31] + bf0[24];
6838
0
    bf1[32] = bf0[32];
6839
0
    bf1[33] = bf0[33];
6840
0
    bf1[34] = bf0[34];
6841
0
    bf1[35] = bf0[35];
6842
0
    bf1[36] = half_btf(-cospi[16], bf0[36], cospi[48], bf0[59], cos_bit);
6843
0
    bf1[37] = half_btf(-cospi[16], bf0[37], cospi[48], bf0[58], cos_bit);
6844
0
    bf1[38] = half_btf(-cospi[16], bf0[38], cospi[48], bf0[57], cos_bit);
6845
0
    bf1[39] = half_btf(-cospi[16], bf0[39], cospi[48], bf0[56], cos_bit);
6846
0
    bf1[40] = half_btf(-cospi[48], bf0[40], -cospi[16], bf0[55], cos_bit);
6847
0
    bf1[41] = half_btf(-cospi[48], bf0[41], -cospi[16], bf0[54], cos_bit);
6848
0
    bf1[42] = half_btf(-cospi[48], bf0[42], -cospi[16], bf0[53], cos_bit);
6849
0
    bf1[43] = half_btf(-cospi[48], bf0[43], -cospi[16], bf0[52], cos_bit);
6850
0
    bf1[44] = bf0[44];
6851
0
    bf1[45] = bf0[45];
6852
0
    bf1[46] = bf0[46];
6853
0
    bf1[47] = bf0[47];
6854
0
    bf1[48] = bf0[48];
6855
0
    bf1[49] = bf0[49];
6856
0
    bf1[50] = bf0[50];
6857
0
    bf1[51] = bf0[51];
6858
0
    bf1[52] = half_btf(cospi[48], bf0[52], -cospi[16], bf0[43], cos_bit);
6859
0
    bf1[53] = half_btf(cospi[48], bf0[53], -cospi[16], bf0[42], cos_bit);
6860
0
    bf1[54] = half_btf(cospi[48], bf0[54], -cospi[16], bf0[41], cos_bit);
6861
0
    bf1[55] = half_btf(cospi[48], bf0[55], -cospi[16], bf0[40], cos_bit);
6862
0
    bf1[56] = half_btf(cospi[16], bf0[56], cospi[48], bf0[39], cos_bit);
6863
0
    bf1[57] = half_btf(cospi[16], bf0[57], cospi[48], bf0[38], cos_bit);
6864
0
    bf1[58] = half_btf(cospi[16], bf0[58], cospi[48], bf0[37], cos_bit);
6865
0
    bf1[59] = half_btf(cospi[16], bf0[59], cospi[48], bf0[36], cos_bit);
6866
0
    bf1[60] = bf0[60];
6867
0
    bf1[61] = bf0[61];
6868
0
    bf1[62] = bf0[62];
6869
0
    bf1[63] = bf0[63];
6870
6871
    // stage 5
6872
0
    cospi   = cospi_arr(cos_bit);
6873
0
    bf0     = step;
6874
0
    bf1     = output;
6875
0
    bf1[0]  = bf0[0] + bf0[3];
6876
0
    bf1[1]  = bf0[1] + bf0[2];
6877
0
    bf1[4]  = bf0[4];
6878
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
6879
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
6880
0
    bf1[7]  = bf0[7];
6881
0
    bf1[8]  = bf0[8] + bf0[11];
6882
0
    bf1[9]  = bf0[9] + bf0[10];
6883
0
    bf1[10] = -bf0[10] + bf0[9];
6884
0
    bf1[11] = -bf0[11] + bf0[8];
6885
0
    bf1[12] = -bf0[12] + bf0[15];
6886
0
    bf1[13] = -bf0[13] + bf0[14];
6887
0
    bf1[14] = bf0[14] + bf0[13];
6888
0
    bf1[15] = bf0[15] + bf0[12];
6889
0
    bf1[16] = bf0[16];
6890
0
    bf1[17] = bf0[17];
6891
0
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
6892
0
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
6893
0
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
6894
0
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
6895
0
    bf1[22] = bf0[22];
6896
0
    bf1[23] = bf0[23];
6897
0
    bf1[24] = bf0[24];
6898
0
    bf1[25] = bf0[25];
6899
0
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
6900
0
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
6901
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
6902
0
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
6903
0
    bf1[30] = bf0[30];
6904
0
    bf1[31] = bf0[31];
6905
0
    bf1[32] = bf0[32] + bf0[39];
6906
0
    bf1[33] = bf0[33] + bf0[38];
6907
0
    bf1[34] = bf0[34] + bf0[37];
6908
0
    bf1[35] = bf0[35] + bf0[36];
6909
0
    bf1[36] = -bf0[36] + bf0[35];
6910
0
    bf1[37] = -bf0[37] + bf0[34];
6911
0
    bf1[38] = -bf0[38] + bf0[33];
6912
0
    bf1[39] = -bf0[39] + bf0[32];
6913
0
    bf1[40] = -bf0[40] + bf0[47];
6914
0
    bf1[41] = -bf0[41] + bf0[46];
6915
0
    bf1[42] = -bf0[42] + bf0[45];
6916
0
    bf1[43] = -bf0[43] + bf0[44];
6917
0
    bf1[44] = bf0[44] + bf0[43];
6918
0
    bf1[45] = bf0[45] + bf0[42];
6919
0
    bf1[46] = bf0[46] + bf0[41];
6920
0
    bf1[47] = bf0[47] + bf0[40];
6921
0
    bf1[48] = bf0[48] + bf0[55];
6922
0
    bf1[49] = bf0[49] + bf0[54];
6923
0
    bf1[50] = bf0[50] + bf0[53];
6924
0
    bf1[51] = bf0[51] + bf0[52];
6925
0
    bf1[52] = -bf0[52] + bf0[51];
6926
0
    bf1[53] = -bf0[53] + bf0[50];
6927
0
    bf1[54] = -bf0[54] + bf0[49];
6928
0
    bf1[55] = -bf0[55] + bf0[48];
6929
0
    bf1[56] = -bf0[56] + bf0[63];
6930
0
    bf1[57] = -bf0[57] + bf0[62];
6931
0
    bf1[58] = -bf0[58] + bf0[61];
6932
0
    bf1[59] = -bf0[59] + bf0[60];
6933
0
    bf1[60] = bf0[60] + bf0[59];
6934
0
    bf1[61] = bf0[61] + bf0[58];
6935
0
    bf1[62] = bf0[62] + bf0[57];
6936
0
    bf1[63] = bf0[63] + bf0[56];
6937
6938
    // stage 6
6939
0
    cospi   = cospi_arr(cos_bit);
6940
0
    bf0     = output;
6941
0
    bf1     = step;
6942
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
6943
0
    bf1[4]  = bf0[4] + bf0[5];
6944
0
    bf1[7]  = bf0[7] + bf0[6];
6945
0
    bf1[8]  = bf0[8];
6946
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
6947
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
6948
0
    bf1[11] = bf0[11];
6949
0
    bf1[12] = bf0[12];
6950
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
6951
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
6952
0
    bf1[15] = bf0[15];
6953
0
    bf1[16] = bf0[16] + bf0[19];
6954
0
    bf1[17] = bf0[17] + bf0[18];
6955
0
    bf1[18] = -bf0[18] + bf0[17];
6956
0
    bf1[19] = -bf0[19] + bf0[16];
6957
0
    bf1[20] = -bf0[20] + bf0[23];
6958
0
    bf1[21] = -bf0[21] + bf0[22];
6959
0
    bf1[22] = bf0[22] + bf0[21];
6960
0
    bf1[23] = bf0[23] + bf0[20];
6961
0
    bf1[24] = bf0[24] + bf0[27];
6962
0
    bf1[25] = bf0[25] + bf0[26];
6963
0
    bf1[26] = -bf0[26] + bf0[25];
6964
0
    bf1[27] = -bf0[27] + bf0[24];
6965
0
    bf1[28] = -bf0[28] + bf0[31];
6966
0
    bf1[29] = -bf0[29] + bf0[30];
6967
0
    bf1[30] = bf0[30] + bf0[29];
6968
0
    bf1[31] = bf0[31] + bf0[28];
6969
0
    bf1[32] = bf0[32];
6970
0
    bf1[33] = bf0[33];
6971
0
    bf1[34] = half_btf(-cospi[8], bf0[34], cospi[56], bf0[61], cos_bit);
6972
0
    bf1[35] = half_btf(-cospi[8], bf0[35], cospi[56], bf0[60], cos_bit);
6973
0
    bf1[36] = half_btf(-cospi[56], bf0[36], -cospi[8], bf0[59], cos_bit);
6974
0
    bf1[37] = half_btf(-cospi[56], bf0[37], -cospi[8], bf0[58], cos_bit);
6975
0
    bf1[38] = bf0[38];
6976
0
    bf1[39] = bf0[39];
6977
0
    bf1[40] = bf0[40];
6978
0
    bf1[41] = bf0[41];
6979
0
    bf1[42] = half_btf(-cospi[40], bf0[42], cospi[24], bf0[53], cos_bit);
6980
0
    bf1[43] = half_btf(-cospi[40], bf0[43], cospi[24], bf0[52], cos_bit);
6981
0
    bf1[44] = half_btf(-cospi[24], bf0[44], -cospi[40], bf0[51], cos_bit);
6982
0
    bf1[45] = half_btf(-cospi[24], bf0[45], -cospi[40], bf0[50], cos_bit);
6983
0
    bf1[46] = bf0[46];
6984
0
    bf1[47] = bf0[47];
6985
0
    bf1[48] = bf0[48];
6986
0
    bf1[49] = bf0[49];
6987
0
    bf1[50] = half_btf(cospi[24], bf0[50], -cospi[40], bf0[45], cos_bit);
6988
0
    bf1[51] = half_btf(cospi[24], bf0[51], -cospi[40], bf0[44], cos_bit);
6989
0
    bf1[52] = half_btf(cospi[40], bf0[52], cospi[24], bf0[43], cos_bit);
6990
0
    bf1[53] = half_btf(cospi[40], bf0[53], cospi[24], bf0[42], cos_bit);
6991
0
    bf1[54] = bf0[54];
6992
0
    bf1[55] = bf0[55];
6993
0
    bf1[56] = bf0[56];
6994
0
    bf1[57] = bf0[57];
6995
0
    bf1[58] = half_btf(cospi[56], bf0[58], -cospi[8], bf0[37], cos_bit);
6996
0
    bf1[59] = half_btf(cospi[56], bf0[59], -cospi[8], bf0[36], cos_bit);
6997
0
    bf1[60] = half_btf(cospi[8], bf0[60], cospi[56], bf0[35], cos_bit);
6998
0
    bf1[61] = half_btf(cospi[8], bf0[61], cospi[56], bf0[34], cos_bit);
6999
0
    bf1[62] = bf0[62];
7000
0
    bf1[63] = bf0[63];
7001
7002
    // stage 7
7003
0
    cospi   = cospi_arr(cos_bit);
7004
0
    bf0     = step;
7005
0
    bf1     = output;
7006
0
    bf1[0]  = bf0[0];
7007
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
7008
0
    bf1[8]  = bf0[8] + bf0[9];
7009
0
    bf1[11] = bf0[11] + bf0[10];
7010
0
    bf1[12] = bf0[12] + bf0[13];
7011
0
    bf1[15] = bf0[15] + bf0[14];
7012
0
    bf1[16] = bf0[16];
7013
0
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
7014
0
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
7015
0
    bf1[19] = bf0[19];
7016
0
    bf1[20] = bf0[20];
7017
0
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
7018
0
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
7019
0
    bf1[23] = bf0[23];
7020
0
    bf1[24] = bf0[24];
7021
0
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
7022
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
7023
0
    bf1[27] = bf0[27];
7024
0
    bf1[28] = bf0[28];
7025
0
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
7026
0
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
7027
0
    bf1[31] = bf0[31];
7028
0
    bf1[32] = bf0[32] + bf0[35];
7029
0
    bf1[33] = bf0[33] + bf0[34];
7030
0
    bf1[34] = -bf0[34] + bf0[33];
7031
0
    bf1[35] = -bf0[35] + bf0[32];
7032
0
    bf1[36] = -bf0[36] + bf0[39];
7033
0
    bf1[37] = -bf0[37] + bf0[38];
7034
0
    bf1[38] = bf0[38] + bf0[37];
7035
0
    bf1[39] = bf0[39] + bf0[36];
7036
0
    bf1[40] = bf0[40] + bf0[43];
7037
0
    bf1[41] = bf0[41] + bf0[42];
7038
0
    bf1[42] = -bf0[42] + bf0[41];
7039
0
    bf1[43] = -bf0[43] + bf0[40];
7040
0
    bf1[44] = -bf0[44] + bf0[47];
7041
0
    bf1[45] = -bf0[45] + bf0[46];
7042
0
    bf1[46] = bf0[46] + bf0[45];
7043
0
    bf1[47] = bf0[47] + bf0[44];
7044
0
    bf1[48] = bf0[48] + bf0[51];
7045
0
    bf1[49] = bf0[49] + bf0[50];
7046
0
    bf1[50] = -bf0[50] + bf0[49];
7047
0
    bf1[51] = -bf0[51] + bf0[48];
7048
0
    bf1[52] = -bf0[52] + bf0[55];
7049
0
    bf1[53] = -bf0[53] + bf0[54];
7050
0
    bf1[54] = bf0[54] + bf0[53];
7051
0
    bf1[55] = bf0[55] + bf0[52];
7052
0
    bf1[56] = bf0[56] + bf0[59];
7053
0
    bf1[57] = bf0[57] + bf0[58];
7054
0
    bf1[58] = -bf0[58] + bf0[57];
7055
0
    bf1[59] = -bf0[59] + bf0[56];
7056
0
    bf1[60] = -bf0[60] + bf0[63];
7057
0
    bf1[61] = -bf0[61] + bf0[62];
7058
0
    bf1[62] = bf0[62] + bf0[61];
7059
0
    bf1[63] = bf0[63] + bf0[60];
7060
7061
    // stage 8
7062
0
    cospi   = cospi_arr(cos_bit);
7063
0
    bf0     = output;
7064
0
    bf1     = step;
7065
0
    bf1[0]  = bf0[0];
7066
0
    bf1[4]  = bf0[4];
7067
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
7068
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
7069
0
    bf1[16] = bf0[16] + bf0[17];
7070
0
    bf1[19] = bf0[19] + bf0[18];
7071
0
    bf1[20] = bf0[20] + bf0[21];
7072
0
    bf1[23] = bf0[23] + bf0[22];
7073
0
    bf1[24] = bf0[24] + bf0[25];
7074
0
    bf1[27] = bf0[27] + bf0[26];
7075
0
    bf1[28] = bf0[28] + bf0[29];
7076
0
    bf1[31] = bf0[31] + bf0[30];
7077
0
    bf1[32] = bf0[32];
7078
0
    bf1[33] = half_btf(-cospi[4], bf0[33], cospi[60], bf0[62], cos_bit);
7079
0
    bf1[34] = half_btf(-cospi[60], bf0[34], -cospi[4], bf0[61], cos_bit);
7080
0
    bf1[35] = bf0[35];
7081
0
    bf1[36] = bf0[36];
7082
0
    bf1[37] = half_btf(-cospi[36], bf0[37], cospi[28], bf0[58], cos_bit);
7083
0
    bf1[38] = half_btf(-cospi[28], bf0[38], -cospi[36], bf0[57], cos_bit);
7084
0
    bf1[39] = bf0[39];
7085
0
    bf1[40] = bf0[40];
7086
0
    bf1[41] = half_btf(-cospi[20], bf0[41], cospi[44], bf0[54], cos_bit);
7087
0
    bf1[42] = half_btf(-cospi[44], bf0[42], -cospi[20], bf0[53], cos_bit);
7088
0
    bf1[43] = bf0[43];
7089
0
    bf1[44] = bf0[44];
7090
0
    bf1[45] = half_btf(-cospi[52], bf0[45], cospi[12], bf0[50], cos_bit);
7091
0
    bf1[46] = half_btf(-cospi[12], bf0[46], -cospi[52], bf0[49], cos_bit);
7092
0
    bf1[47] = bf0[47];
7093
0
    bf1[48] = bf0[48];
7094
0
    bf1[49] = half_btf(cospi[12], bf0[49], -cospi[52], bf0[46], cos_bit);
7095
0
    bf1[50] = half_btf(cospi[52], bf0[50], cospi[12], bf0[45], cos_bit);
7096
0
    bf1[51] = bf0[51];
7097
0
    bf1[52] = bf0[52];
7098
0
    bf1[53] = half_btf(cospi[44], bf0[53], -cospi[20], bf0[42], cos_bit);
7099
0
    bf1[54] = half_btf(cospi[20], bf0[54], cospi[44], bf0[41], cos_bit);
7100
0
    bf1[55] = bf0[55];
7101
0
    bf1[56] = bf0[56];
7102
0
    bf1[57] = half_btf(cospi[28], bf0[57], -cospi[36], bf0[38], cos_bit);
7103
0
    bf1[58] = half_btf(cospi[36], bf0[58], cospi[28], bf0[37], cos_bit);
7104
0
    bf1[59] = bf0[59];
7105
0
    bf1[60] = bf0[60];
7106
0
    bf1[61] = half_btf(cospi[60], bf0[61], -cospi[4], bf0[34], cos_bit);
7107
0
    bf1[62] = half_btf(cospi[4], bf0[62], cospi[60], bf0[33], cos_bit);
7108
0
    bf1[63] = bf0[63];
7109
7110
    // stage 9
7111
0
    cospi   = cospi_arr(cos_bit);
7112
0
    bf0     = step;
7113
0
    bf1     = output;
7114
0
    bf1[0]  = bf0[0];
7115
0
    bf1[4]  = bf0[4];
7116
0
    bf1[8]  = bf0[8];
7117
0
    bf1[12] = bf0[12];
7118
0
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
7119
0
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
7120
0
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
7121
0
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
7122
0
    bf1[32] = bf0[32] + bf0[33];
7123
0
    bf1[35] = bf0[35] + bf0[34];
7124
0
    bf1[36] = bf0[36] + bf0[37];
7125
0
    bf1[39] = bf0[39] + bf0[38];
7126
0
    bf1[40] = bf0[40] + bf0[41];
7127
0
    bf1[43] = bf0[43] + bf0[42];
7128
0
    bf1[44] = bf0[44] + bf0[45];
7129
0
    bf1[47] = bf0[47] + bf0[46];
7130
0
    bf1[48] = bf0[48] + bf0[49];
7131
0
    bf1[51] = bf0[51] + bf0[50];
7132
0
    bf1[52] = bf0[52] + bf0[53];
7133
0
    bf1[55] = bf0[55] + bf0[54];
7134
0
    bf1[56] = bf0[56] + bf0[57];
7135
0
    bf1[59] = bf0[59] + bf0[58];
7136
0
    bf1[60] = bf0[60] + bf0[61];
7137
0
    bf1[63] = bf0[63] + bf0[62];
7138
7139
    // stage 10
7140
0
    cospi   = cospi_arr(cos_bit);
7141
0
    bf0     = output;
7142
0
    bf1     = step;
7143
0
    bf1[0]  = bf0[0];
7144
0
    bf1[4]  = bf0[4];
7145
0
    bf1[8]  = bf0[8];
7146
0
    bf1[12] = bf0[12];
7147
0
    bf1[16] = bf0[16];
7148
0
    bf1[20] = bf0[20];
7149
0
    bf1[24] = bf0[24];
7150
0
    bf1[28] = bf0[28];
7151
0
    bf1[32] = half_btf(cospi[63], bf0[32], cospi[1], bf0[63], cos_bit);
7152
0
    bf1[36] = half_btf(cospi[55], bf0[36], cospi[9], bf0[59], cos_bit);
7153
0
    bf1[40] = half_btf(cospi[59], bf0[40], cospi[5], bf0[55], cos_bit);
7154
0
    bf1[44] = half_btf(cospi[51], bf0[44], cospi[13], bf0[51], cos_bit);
7155
0
    bf1[48] = half_btf(cospi[3], bf0[48], -cospi[61], bf0[47], cos_bit);
7156
0
    bf1[52] = half_btf(cospi[11], bf0[52], -cospi[53], bf0[43], cos_bit);
7157
0
    bf1[56] = half_btf(cospi[7], bf0[56], -cospi[57], bf0[39], cos_bit);
7158
0
    bf1[60] = half_btf(cospi[15], bf0[60], -cospi[49], bf0[35], cos_bit);
7159
7160
    // stage 11
7161
0
    bf0     = step;
7162
0
    bf1     = output;
7163
0
    bf1[0]  = bf0[0];
7164
0
    bf1[1]  = bf0[32];
7165
0
    bf1[2]  = bf0[16];
7166
0
    bf1[3]  = bf0[48];
7167
0
    bf1[4]  = bf0[8];
7168
0
    bf1[5]  = bf0[40];
7169
0
    bf1[6]  = bf0[24];
7170
0
    bf1[7]  = bf0[56];
7171
0
    bf1[8]  = bf0[4];
7172
0
    bf1[9]  = bf0[36];
7173
0
    bf1[10] = bf0[20];
7174
0
    bf1[11] = bf0[52];
7175
0
    bf1[12] = bf0[12];
7176
0
    bf1[13] = bf0[44];
7177
0
    bf1[14] = bf0[28];
7178
0
    bf1[15] = bf0[60];
7179
0
}
7180
7181
0
static void av1_fidentity64_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
7182
0
    (void)stage_range;
7183
0
    (void)cos_bit;
7184
0
    for (int32_t i = 0; i < 16; ++i) {
7185
0
        output[i] = round_shift((int64_t)input[i] * 4 * new_sqrt2, new_sqrt2_bits);
7186
0
    }
7187
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
7188
0
}
7189
7190
0
static INLINE TxfmFunc fwd_txfm_type_to_func_N4(TxfmType txfmtype) {
7191
0
    switch (txfmtype) {
7192
0
    case TXFM_TYPE_DCT4:
7193
0
        return svt_av1_fdct4_new_N4;
7194
0
    case TXFM_TYPE_DCT8:
7195
0
        return svt_av1_fdct8_new_N4;
7196
0
    case TXFM_TYPE_DCT16:
7197
0
        return svt_av1_fdct16_new_N4;
7198
0
    case TXFM_TYPE_DCT32:
7199
0
        return svt_av1_fdct32_new_N4;
7200
0
    case TXFM_TYPE_DCT64:
7201
0
        return svt_av1_fdct64_new_N4;
7202
0
    case TXFM_TYPE_ADST4:
7203
0
        return svt_av1_fadst4_new_N4;
7204
0
    case TXFM_TYPE_ADST8:
7205
0
        return svt_av1_fadst8_new_N4;
7206
0
    case TXFM_TYPE_ADST16:
7207
0
        return svt_av1_fadst16_new_N4;
7208
0
    case TXFM_TYPE_ADST32:
7209
0
        return av1_fadst32_new;
7210
0
    case TXFM_TYPE_IDENTITY4:
7211
0
        return svt_av1_fidentity4_N4_c;
7212
0
    case TXFM_TYPE_IDENTITY8:
7213
0
        return svt_av1_fidentity8_N4_c;
7214
0
    case TXFM_TYPE_IDENTITY16:
7215
0
        return svt_av1_fidentity16_N4_c;
7216
0
    case TXFM_TYPE_IDENTITY32:
7217
0
        return svt_av1_fidentity32_N4_c;
7218
0
    case TXFM_TYPE_IDENTITY64:
7219
0
        return av1_fidentity64_N4_c;
7220
0
    default:
7221
0
        assert(0);
7222
0
        return NULL;
7223
0
    }
7224
0
}
7225
7226
static INLINE void av1_tranform_two_d_core_N4_c(int16_t* input, uint32_t input_stride, int32_t* output,
7227
0
                                                const Txfm2dFlipCfg* cfg, int32_t* buf, uint8_t bit_depth) {
7228
0
    int32_t c, r;
7229
    // Note when assigning txfm_size_col, we use the txfm_size from the
7230
    // row configuration and vice versa. This is intentionally done to
7231
    // accurately perform rectangular transforms. When the transform is
7232
    // rectangular, the number of columns will be the same as the
7233
    // txfm_size stored in the row cfg struct. It will make no difference
7234
    // for square transforms.
7235
0
    const int32_t txfm_size_col = tx_size_wide[cfg->tx_size];
7236
0
    const int32_t txfm_size_row = tx_size_high[cfg->tx_size];
7237
    // Take the shift from the larger dimension in the rectangular case.
7238
0
    const int8_t* shift     = cfg->shift;
7239
0
    const int32_t rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
7240
0
    int8_t        stage_range_col[MAX_TXFM_STAGE_NUM];
7241
0
    int8_t        stage_range_row[MAX_TXFM_STAGE_NUM];
7242
0
    assert(cfg->stage_num_col <= MAX_TXFM_STAGE_NUM);
7243
0
    assert(cfg->stage_num_row <= MAX_TXFM_STAGE_NUM);
7244
0
    svt_av1_gen_fwd_stage_range(stage_range_col, stage_range_row, cfg, bit_depth);
7245
7246
0
    const int8_t   cos_bit_col   = cfg->cos_bit_col;
7247
0
    const int8_t   cos_bit_row   = cfg->cos_bit_row;
7248
0
    const TxfmFunc txfm_func_col = fwd_txfm_type_to_func_N4(cfg->txfm_type_col);
7249
0
    const TxfmFunc txfm_func_row = fwd_txfm_type_to_func_N4(cfg->txfm_type_row);
7250
0
    ASSERT(txfm_func_col != NULL);
7251
0
    ASSERT(txfm_func_row != NULL);
7252
    // use output buffer as temp buffer
7253
0
    int32_t* temp_in  = output;
7254
0
    int32_t* temp_out = output + txfm_size_row;
7255
7256
    // Columns
7257
0
    for (c = 0; c < txfm_size_col; ++c) {
7258
0
        if (cfg->ud_flip == 0) {
7259
0
            for (r = 0; r < txfm_size_row; ++r) {
7260
0
                temp_in[r] = input[r * input_stride + c];
7261
0
            }
7262
0
        } else {
7263
0
            for (r = 0; r < txfm_size_row; ++r) {
7264
                // flip upside down
7265
0
                temp_in[r] = input[(txfm_size_row - r - 1) * input_stride + c];
7266
0
            }
7267
0
        }
7268
0
        svt_av1_round_shift_array_c(temp_in, txfm_size_row, -shift[0]); // NM svt_av1_round_shift_array_c
7269
0
        txfm_func_col(temp_in, temp_out, cos_bit_col, stage_range_col);
7270
0
        svt_av1_round_shift_array_c(temp_out, txfm_size_row / 4, -shift[1]); // NM svt_av1_round_shift_array_c
7271
0
        if (cfg->lr_flip == 0) {
7272
0
            for (r = 0; r < txfm_size_row; ++r) {
7273
0
                buf[r * txfm_size_col + c] = temp_out[r];
7274
0
            }
7275
0
        } else {
7276
0
            for (r = 0; r < txfm_size_row; ++r) {
7277
                // flip from left to right
7278
0
                buf[r * txfm_size_col + (txfm_size_col - c - 1)] = temp_out[r];
7279
0
            }
7280
0
        }
7281
0
    }
7282
7283
    // Rows
7284
0
    for (r = 0; r < txfm_size_row / 4; ++r) {
7285
0
        txfm_func_row(buf + r * txfm_size_col, output + r * txfm_size_col, cos_bit_row, stage_range_row);
7286
0
        svt_av1_round_shift_array_c(output + r * txfm_size_col, txfm_size_col / 4, -shift[2]);
7287
7288
0
        if (abs(rect_type) == 1) {
7289
            // Multiply everything by Sqrt2 if the transform is rectangular and the
7290
            // size difference is a factor of 2.
7291
0
            for (c = 0; c < txfm_size_col / 4; ++c) {
7292
0
                output[r * txfm_size_col + c] = round_shift((int64_t)output[r * txfm_size_col + c] * new_sqrt2,
7293
0
                                                            new_sqrt2_bits);
7294
0
            }
7295
0
        }
7296
0
    }
7297
0
    for (int i = 0; i < (txfm_size_col * txfm_size_row); i++) {
7298
0
        if (i % txfm_size_col >= (txfm_size_col >> 2) || i / txfm_size_col >= (txfm_size_row >> 2)) {
7299
0
            output[i] = 0;
7300
0
        }
7301
0
    }
7302
0
}
7303
7304
void svt_aom_transform_two_d_64x64_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7305
0
                                        uint8_t bit_depth) {
7306
0
    int32_t       intermediate_transform_buffer[64 * 64];
7307
0
    Txfm2dFlipCfg cfg;
7308
0
    svt_aom_transform_config(transform_type, TX_64X64, &cfg);
7309
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7310
0
}
7311
7312
void svt_aom_transform_two_d_32x32_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7313
0
                                        uint8_t bit_depth) {
7314
0
    int32_t       intermediate_transform_buffer[32 * 32];
7315
0
    Txfm2dFlipCfg cfg;
7316
0
    svt_aom_transform_config(transform_type, TX_32X32, &cfg);
7317
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7318
0
}
7319
7320
void svt_aom_transform_two_d_16x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7321
0
                                        uint8_t bit_depth) {
7322
0
    int32_t       intermediate_transform_buffer[16 * 16];
7323
0
    Txfm2dFlipCfg cfg;
7324
0
    svt_aom_transform_config(transform_type, TX_16X16, &cfg);
7325
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7326
0
}
7327
7328
void svt_aom_transform_two_d_8x8_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7329
0
                                      uint8_t bit_depth) {
7330
0
    int32_t       intermediate_transform_buffer[8 * 8];
7331
0
    Txfm2dFlipCfg cfg;
7332
0
    svt_aom_transform_config(transform_type, TX_8X8, &cfg);
7333
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7334
0
}
7335
7336
void svt_aom_transform_two_d_4x4_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7337
0
                                      uint8_t bit_depth) {
7338
0
    int32_t       intermediate_transform_buffer[4 * 4];
7339
0
    Txfm2dFlipCfg cfg;
7340
0
    svt_aom_transform_config(transform_type, TX_4X4, &cfg);
7341
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7342
0
}
7343
7344
void svt_av1_fwd_txfm2d_64x32_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7345
0
                                   uint8_t bit_depth) {
7346
0
    int32_t       intermediate_transform_buffer[64 * 32];
7347
0
    Txfm2dFlipCfg cfg;
7348
0
    svt_aom_transform_config(transform_type, TX_64X32, &cfg);
7349
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7350
0
}
7351
7352
void svt_av1_fwd_txfm2d_32x64_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7353
0
                                   uint8_t bit_depth) {
7354
0
    int32_t       intermediate_transform_buffer[32 * 64];
7355
0
    Txfm2dFlipCfg cfg;
7356
0
    svt_aom_transform_config(transform_type, TX_32X64, &cfg);
7357
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7358
0
}
7359
7360
void svt_av1_fwd_txfm2d_64x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7361
0
                                   uint8_t bit_depth) {
7362
0
    int32_t       intermediate_transform_buffer[64 * 16];
7363
0
    Txfm2dFlipCfg cfg;
7364
0
    svt_aom_transform_config(transform_type, TX_64X16, &cfg);
7365
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7366
0
}
7367
7368
void svt_av1_fwd_txfm2d_16x64_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7369
0
                                   uint8_t bit_depth) {
7370
0
    int32_t       intermediate_transform_buffer[16 * 64];
7371
0
    Txfm2dFlipCfg cfg;
7372
0
    svt_aom_transform_config(transform_type, TX_16X64, &cfg);
7373
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7374
0
}
7375
7376
void svt_av1_fwd_txfm2d_32x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7377
0
                                   uint8_t bit_depth) {
7378
0
    int32_t       intermediate_transform_buffer[32 * 16];
7379
0
    Txfm2dFlipCfg cfg;
7380
0
    svt_aom_transform_config(transform_type, TX_32X16, &cfg);
7381
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7382
0
}
7383
7384
void svt_av1_fwd_txfm2d_16x32_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7385
0
                                   uint8_t bit_depth) {
7386
0
    int32_t       intermediate_transform_buffer[16 * 32];
7387
0
    Txfm2dFlipCfg cfg;
7388
0
    svt_aom_transform_config(transform_type, TX_16X32, &cfg);
7389
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7390
0
}
7391
7392
void svt_av1_fwd_txfm2d_16x8_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7393
0
                                  uint8_t bit_depth) {
7394
0
    int32_t       intermediate_transform_buffer[16 * 8];
7395
0
    Txfm2dFlipCfg cfg;
7396
0
    svt_aom_transform_config(transform_type, TX_16X8, &cfg);
7397
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7398
0
}
7399
7400
void svt_av1_fwd_txfm2d_8x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7401
0
                                  uint8_t bit_depth) {
7402
0
    int32_t       intermediate_transform_buffer[8 * 16];
7403
0
    Txfm2dFlipCfg cfg;
7404
0
    svt_aom_transform_config(transform_type, TX_8X16, &cfg);
7405
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7406
0
}
7407
7408
void svt_av1_fwd_txfm2d_32x8_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7409
0
                                  uint8_t bit_depth) {
7410
0
    int32_t       intermediate_transform_buffer[32 * 8];
7411
0
    Txfm2dFlipCfg cfg;
7412
0
    svt_aom_transform_config(transform_type, TX_32X8, &cfg);
7413
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7414
0
}
7415
7416
void svt_av1_fwd_txfm2d_8x32_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7417
0
                                  uint8_t bit_depth) {
7418
0
    int32_t       intermediate_transform_buffer[8 * 32];
7419
0
    Txfm2dFlipCfg cfg;
7420
0
    svt_aom_transform_config(transform_type, TX_8X32, &cfg);
7421
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7422
0
}
7423
7424
void svt_av1_fwd_txfm2d_16x4_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7425
0
                                  uint8_t bit_depth) {
7426
0
    int32_t       intermediate_transform_buffer[16 * 4];
7427
0
    Txfm2dFlipCfg cfg;
7428
0
    svt_aom_transform_config(transform_type, TX_16X4, &cfg);
7429
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7430
0
}
7431
7432
void svt_av1_fwd_txfm2d_4x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7433
0
                                  uint8_t bit_depth) {
7434
0
    int32_t       intermediate_transform_buffer[4 * 16];
7435
0
    Txfm2dFlipCfg cfg;
7436
0
    svt_aom_transform_config(transform_type, TX_4X16, &cfg);
7437
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7438
0
}
7439
7440
void svt_av1_fwd_txfm2d_8x4_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7441
0
                                 uint8_t bit_depth) {
7442
0
    int32_t       intermediate_transform_buffer[8 * 4];
7443
0
    Txfm2dFlipCfg cfg;
7444
0
    svt_aom_transform_config(transform_type, TX_8X4, &cfg);
7445
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7446
0
}
7447
7448
void svt_av1_fwd_txfm2d_4x8_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7449
0
                                 uint8_t bit_depth) {
7450
0
    int32_t       intermediate_transform_buffer[4 * 8];
7451
0
    Txfm2dFlipCfg cfg;
7452
0
    svt_aom_transform_config(transform_type, TX_4X8, &cfg);
7453
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7454
0
}