Coverage Report

Created: 2026-10-28 06:18

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
229k
                                 int32_t bd) {
150
    // Take the shift from the larger dimension in the rectangular case.
151
229k
    const int8_t* shift = cfg->shift;
152
    // i < MAX_TXFM_STAGE_NUM will mute above array bounds warning
153
1.65M
    for (int32_t i = 0; i < cfg->stage_num_col && i < MAX_TXFM_STAGE_NUM; ++i) {
154
1.42M
        stage_range_col[i] = (int8_t)(cfg->stage_range_col[i] + shift[0] + bd + 1);
155
1.42M
    }
156
    // i < MAX_TXFM_STAGE_NUM will mute above array bounds warning
157
1.65M
    for (int32_t i = 0; i < cfg->stage_num_row && i < MAX_TXFM_STAGE_NUM; ++i) {
158
1.43M
        stage_range_row[i] = (int8_t)(cfg->stage_range_row[i] + shift[0] + shift[1] + bd + 1);
159
1.43M
    }
160
229k
}
161
162
41.6k
void svt_av1_fdct4_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
163
41.6k
    (void)stage_range;
164
41.6k
    const int32_t* cospi;
165
166
41.6k
    int32_t *bf0, *bf1;
167
41.6k
    int32_t  step[4];
168
169
    // stage 0;
170
171
    // stage 1;
172
41.6k
    bf1    = output;
173
41.6k
    bf1[0] = input[0] + input[3];
174
41.6k
    bf1[1] = input[1] + input[2];
175
41.6k
    bf1[2] = -input[2] + input[1];
176
41.6k
    bf1[3] = -input[3] + input[0];
177
178
    // stage 2
179
41.6k
    cospi  = cospi_arr(cos_bit);
180
41.6k
    bf0    = output;
181
41.6k
    bf1    = step;
182
41.6k
    bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
183
41.6k
    bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
184
41.6k
    bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
185
41.6k
    bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
186
187
    // stage 3
188
41.6k
    bf0    = step;
189
41.6k
    bf1    = output;
190
41.6k
    bf1[0] = bf0[0];
191
41.6k
    bf1[1] = bf0[2];
192
41.6k
    bf1[2] = bf0[1];
193
41.6k
    bf1[3] = bf0[3];
194
41.6k
}
195
196
3.31M
void svt_av1_fdct8_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
197
3.31M
    (void)stage_range;
198
3.31M
    const int32_t* cospi;
199
200
3.31M
    int32_t *bf0, *bf1;
201
3.31M
    int32_t  step[8];
202
203
    // stage 0;
204
205
    // stage 1;
206
3.31M
    bf1    = output;
207
3.31M
    bf1[0] = input[0] + input[7];
208
3.31M
    bf1[1] = input[1] + input[6];
209
3.31M
    bf1[2] = input[2] + input[5];
210
3.31M
    bf1[3] = input[3] + input[4];
211
3.31M
    bf1[4] = -input[4] + input[3];
212
3.31M
    bf1[5] = -input[5] + input[2];
213
3.31M
    bf1[6] = -input[6] + input[1];
214
3.31M
    bf1[7] = -input[7] + input[0];
215
216
    // stage 2
217
3.31M
    cospi  = cospi_arr(cos_bit);
218
3.31M
    bf0    = output;
219
3.31M
    bf1    = step;
220
3.31M
    bf1[0] = bf0[0] + bf0[3];
221
3.31M
    bf1[1] = bf0[1] + bf0[2];
222
3.31M
    bf1[2] = -bf0[2] + bf0[1];
223
3.31M
    bf1[3] = -bf0[3] + bf0[0];
224
3.31M
    bf1[4] = bf0[4];
225
3.31M
    bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
226
3.31M
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
227
3.31M
    bf1[7] = bf0[7];
228
229
    // stage 3
230
3.31M
    cospi  = cospi_arr(cos_bit);
231
3.31M
    bf0    = step;
232
3.31M
    bf1    = output;
233
3.31M
    bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
234
3.31M
    bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
235
3.31M
    bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
236
3.31M
    bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
237
3.31M
    bf1[4] = bf0[4] + bf0[5];
238
3.31M
    bf1[5] = -bf0[5] + bf0[4];
239
3.31M
    bf1[6] = -bf0[6] + bf0[7];
240
3.31M
    bf1[7] = bf0[7] + bf0[6];
241
242
    // stage 4
243
3.31M
    cospi  = cospi_arr(cos_bit);
244
3.31M
    bf0    = output;
245
3.31M
    bf1    = step;
246
3.31M
    bf1[0] = bf0[0];
247
3.31M
    bf1[1] = bf0[1];
248
3.31M
    bf1[2] = bf0[2];
249
3.31M
    bf1[3] = bf0[3];
250
3.31M
    bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
251
3.31M
    bf1[5] = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
252
3.31M
    bf1[6] = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
253
3.31M
    bf1[7] = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
254
255
    // stage 5
256
3.31M
    bf0    = step;
257
3.31M
    bf1    = output;
258
3.31M
    bf1[0] = bf0[0];
259
3.31M
    bf1[1] = bf0[4];
260
3.31M
    bf1[2] = bf0[2];
261
3.31M
    bf1[3] = bf0[6];
262
3.31M
    bf1[4] = bf0[1];
263
3.31M
    bf1[5] = bf0[5];
264
3.31M
    bf1[6] = bf0[3];
265
3.31M
    bf1[7] = bf0[7];
266
3.31M
}
267
268
124k
void svt_av1_fdct16_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
269
124k
    (void)stage_range;
270
124k
    const int32_t* cospi;
271
272
124k
    int32_t *bf0, *bf1;
273
124k
    int32_t  step[16];
274
275
    // stage 0;
276
277
    // stage 1;
278
124k
    bf1     = output;
279
124k
    bf1[0]  = input[0] + input[15];
280
124k
    bf1[1]  = input[1] + input[14];
281
124k
    bf1[2]  = input[2] + input[13];
282
124k
    bf1[3]  = input[3] + input[12];
283
124k
    bf1[4]  = input[4] + input[11];
284
124k
    bf1[5]  = input[5] + input[10];
285
124k
    bf1[6]  = input[6] + input[9];
286
124k
    bf1[7]  = input[7] + input[8];
287
124k
    bf1[8]  = -input[8] + input[7];
288
124k
    bf1[9]  = -input[9] + input[6];
289
124k
    bf1[10] = -input[10] + input[5];
290
124k
    bf1[11] = -input[11] + input[4];
291
124k
    bf1[12] = -input[12] + input[3];
292
124k
    bf1[13] = -input[13] + input[2];
293
124k
    bf1[14] = -input[14] + input[1];
294
124k
    bf1[15] = -input[15] + input[0];
295
296
    // stage 2
297
124k
    cospi   = cospi_arr(cos_bit);
298
124k
    bf0     = output;
299
124k
    bf1     = step;
300
124k
    bf1[0]  = bf0[0] + bf0[7];
301
124k
    bf1[1]  = bf0[1] + bf0[6];
302
124k
    bf1[2]  = bf0[2] + bf0[5];
303
124k
    bf1[3]  = bf0[3] + bf0[4];
304
124k
    bf1[4]  = -bf0[4] + bf0[3];
305
124k
    bf1[5]  = -bf0[5] + bf0[2];
306
124k
    bf1[6]  = -bf0[6] + bf0[1];
307
124k
    bf1[7]  = -bf0[7] + bf0[0];
308
124k
    bf1[8]  = bf0[8];
309
124k
    bf1[9]  = bf0[9];
310
124k
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
311
124k
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
312
124k
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
313
124k
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
314
124k
    bf1[14] = bf0[14];
315
124k
    bf1[15] = bf0[15];
316
317
    // stage 3
318
124k
    cospi   = cospi_arr(cos_bit);
319
124k
    bf0     = step;
320
124k
    bf1     = output;
321
124k
    bf1[0]  = bf0[0] + bf0[3];
322
124k
    bf1[1]  = bf0[1] + bf0[2];
323
124k
    bf1[2]  = -bf0[2] + bf0[1];
324
124k
    bf1[3]  = -bf0[3] + bf0[0];
325
124k
    bf1[4]  = bf0[4];
326
124k
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
327
124k
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
328
124k
    bf1[7]  = bf0[7];
329
124k
    bf1[8]  = bf0[8] + bf0[11];
330
124k
    bf1[9]  = bf0[9] + bf0[10];
331
124k
    bf1[10] = -bf0[10] + bf0[9];
332
124k
    bf1[11] = -bf0[11] + bf0[8];
333
124k
    bf1[12] = -bf0[12] + bf0[15];
334
124k
    bf1[13] = -bf0[13] + bf0[14];
335
124k
    bf1[14] = bf0[14] + bf0[13];
336
124k
    bf1[15] = bf0[15] + bf0[12];
337
338
    // stage 4
339
124k
    cospi   = cospi_arr(cos_bit);
340
124k
    bf0     = output;
341
124k
    bf1     = step;
342
124k
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
343
124k
    bf1[1]  = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
344
124k
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
345
124k
    bf1[3]  = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
346
124k
    bf1[4]  = bf0[4] + bf0[5];
347
124k
    bf1[5]  = -bf0[5] + bf0[4];
348
124k
    bf1[6]  = -bf0[6] + bf0[7];
349
124k
    bf1[7]  = bf0[7] + bf0[6];
350
124k
    bf1[8]  = bf0[8];
351
124k
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
352
124k
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
353
124k
    bf1[11] = bf0[11];
354
124k
    bf1[12] = bf0[12];
355
124k
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
356
124k
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
357
124k
    bf1[15] = bf0[15];
358
359
    // stage 5
360
124k
    cospi   = cospi_arr(cos_bit);
361
124k
    bf0     = step;
362
124k
    bf1     = output;
363
124k
    bf1[0]  = bf0[0];
364
124k
    bf1[1]  = bf0[1];
365
124k
    bf1[2]  = bf0[2];
366
124k
    bf1[3]  = bf0[3];
367
124k
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
368
124k
    bf1[5]  = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
369
124k
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
370
124k
    bf1[7]  = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
371
124k
    bf1[8]  = bf0[8] + bf0[9];
372
124k
    bf1[9]  = -bf0[9] + bf0[8];
373
124k
    bf1[10] = -bf0[10] + bf0[11];
374
124k
    bf1[11] = bf0[11] + bf0[10];
375
124k
    bf1[12] = bf0[12] + bf0[13];
376
124k
    bf1[13] = -bf0[13] + bf0[12];
377
124k
    bf1[14] = -bf0[14] + bf0[15];
378
124k
    bf1[15] = bf0[15] + bf0[14];
379
380
    // stage 6
381
124k
    cospi   = cospi_arr(cos_bit);
382
124k
    bf0     = output;
383
124k
    bf1     = step;
384
124k
    bf1[0]  = bf0[0];
385
124k
    bf1[1]  = bf0[1];
386
124k
    bf1[2]  = bf0[2];
387
124k
    bf1[3]  = bf0[3];
388
124k
    bf1[4]  = bf0[4];
389
124k
    bf1[5]  = bf0[5];
390
124k
    bf1[6]  = bf0[6];
391
124k
    bf1[7]  = bf0[7];
392
124k
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
393
124k
    bf1[9]  = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
394
124k
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
395
124k
    bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
396
124k
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
397
124k
    bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
398
124k
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
399
124k
    bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
400
401
    // stage 7
402
124k
    bf0     = step;
403
124k
    bf1     = output;
404
124k
    bf1[0]  = bf0[0];
405
124k
    bf1[1]  = bf0[8];
406
124k
    bf1[2]  = bf0[4];
407
124k
    bf1[3]  = bf0[12];
408
124k
    bf1[4]  = bf0[2];
409
124k
    bf1[5]  = bf0[10];
410
124k
    bf1[6]  = bf0[6];
411
124k
    bf1[7]  = bf0[14];
412
124k
    bf1[8]  = bf0[1];
413
124k
    bf1[9]  = bf0[9];
414
124k
    bf1[10] = bf0[5];
415
124k
    bf1[11] = bf0[13];
416
124k
    bf1[12] = bf0[3];
417
124k
    bf1[13] = bf0[11];
418
124k
    bf1[14] = bf0[7];
419
124k
    bf1[15] = bf0[15];
420
124k
}
421
422
531k
void svt_av1_fdct32_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
423
531k
    (void)stage_range;
424
531k
    const int32_t* cospi;
425
426
531k
    int32_t *bf0, *bf1;
427
531k
    int32_t  step[32];
428
429
    // stage 0;
430
431
    // stage 1;
432
531k
    bf1     = output;
433
531k
    bf1[0]  = input[0] + input[31];
434
531k
    bf1[1]  = input[1] + input[30];
435
531k
    bf1[2]  = input[2] + input[29];
436
531k
    bf1[3]  = input[3] + input[28];
437
531k
    bf1[4]  = input[4] + input[27];
438
531k
    bf1[5]  = input[5] + input[26];
439
531k
    bf1[6]  = input[6] + input[25];
440
531k
    bf1[7]  = input[7] + input[24];
441
531k
    bf1[8]  = input[8] + input[23];
442
531k
    bf1[9]  = input[9] + input[22];
443
531k
    bf1[10] = input[10] + input[21];
444
531k
    bf1[11] = input[11] + input[20];
445
531k
    bf1[12] = input[12] + input[19];
446
531k
    bf1[13] = input[13] + input[18];
447
531k
    bf1[14] = input[14] + input[17];
448
531k
    bf1[15] = input[15] + input[16];
449
531k
    bf1[16] = -input[16] + input[15];
450
531k
    bf1[17] = -input[17] + input[14];
451
531k
    bf1[18] = -input[18] + input[13];
452
531k
    bf1[19] = -input[19] + input[12];
453
531k
    bf1[20] = -input[20] + input[11];
454
531k
    bf1[21] = -input[21] + input[10];
455
531k
    bf1[22] = -input[22] + input[9];
456
531k
    bf1[23] = -input[23] + input[8];
457
531k
    bf1[24] = -input[24] + input[7];
458
531k
    bf1[25] = -input[25] + input[6];
459
531k
    bf1[26] = -input[26] + input[5];
460
531k
    bf1[27] = -input[27] + input[4];
461
531k
    bf1[28] = -input[28] + input[3];
462
531k
    bf1[29] = -input[29] + input[2];
463
531k
    bf1[30] = -input[30] + input[1];
464
531k
    bf1[31] = -input[31] + input[0];
465
466
    // stage 2
467
531k
    cospi   = cospi_arr(cos_bit);
468
531k
    bf0     = output;
469
531k
    bf1     = step;
470
531k
    bf1[0]  = bf0[0] + bf0[15];
471
531k
    bf1[1]  = bf0[1] + bf0[14];
472
531k
    bf1[2]  = bf0[2] + bf0[13];
473
531k
    bf1[3]  = bf0[3] + bf0[12];
474
531k
    bf1[4]  = bf0[4] + bf0[11];
475
531k
    bf1[5]  = bf0[5] + bf0[10];
476
531k
    bf1[6]  = bf0[6] + bf0[9];
477
531k
    bf1[7]  = bf0[7] + bf0[8];
478
531k
    bf1[8]  = -bf0[8] + bf0[7];
479
531k
    bf1[9]  = -bf0[9] + bf0[6];
480
531k
    bf1[10] = -bf0[10] + bf0[5];
481
531k
    bf1[11] = -bf0[11] + bf0[4];
482
531k
    bf1[12] = -bf0[12] + bf0[3];
483
531k
    bf1[13] = -bf0[13] + bf0[2];
484
531k
    bf1[14] = -bf0[14] + bf0[1];
485
531k
    bf1[15] = -bf0[15] + bf0[0];
486
531k
    bf1[16] = bf0[16];
487
531k
    bf1[17] = bf0[17];
488
531k
    bf1[18] = bf0[18];
489
531k
    bf1[19] = bf0[19];
490
531k
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
491
531k
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
492
531k
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
493
531k
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
494
531k
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
495
531k
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
496
531k
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
497
531k
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
498
531k
    bf1[28] = bf0[28];
499
531k
    bf1[29] = bf0[29];
500
531k
    bf1[30] = bf0[30];
501
531k
    bf1[31] = bf0[31];
502
503
    // stage 3
504
531k
    cospi   = cospi_arr(cos_bit);
505
531k
    bf0     = step;
506
531k
    bf1     = output;
507
531k
    bf1[0]  = bf0[0] + bf0[7];
508
531k
    bf1[1]  = bf0[1] + bf0[6];
509
531k
    bf1[2]  = bf0[2] + bf0[5];
510
531k
    bf1[3]  = bf0[3] + bf0[4];
511
531k
    bf1[4]  = -bf0[4] + bf0[3];
512
531k
    bf1[5]  = -bf0[5] + bf0[2];
513
531k
    bf1[6]  = -bf0[6] + bf0[1];
514
531k
    bf1[7]  = -bf0[7] + bf0[0];
515
531k
    bf1[8]  = bf0[8];
516
531k
    bf1[9]  = bf0[9];
517
531k
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
518
531k
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
519
531k
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
520
531k
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
521
531k
    bf1[14] = bf0[14];
522
531k
    bf1[15] = bf0[15];
523
531k
    bf1[16] = bf0[16] + bf0[23];
524
531k
    bf1[17] = bf0[17] + bf0[22];
525
531k
    bf1[18] = bf0[18] + bf0[21];
526
531k
    bf1[19] = bf0[19] + bf0[20];
527
531k
    bf1[20] = -bf0[20] + bf0[19];
528
531k
    bf1[21] = -bf0[21] + bf0[18];
529
531k
    bf1[22] = -bf0[22] + bf0[17];
530
531k
    bf1[23] = -bf0[23] + bf0[16];
531
531k
    bf1[24] = -bf0[24] + bf0[31];
532
531k
    bf1[25] = -bf0[25] + bf0[30];
533
531k
    bf1[26] = -bf0[26] + bf0[29];
534
531k
    bf1[27] = -bf0[27] + bf0[28];
535
531k
    bf1[28] = bf0[28] + bf0[27];
536
531k
    bf1[29] = bf0[29] + bf0[26];
537
531k
    bf1[30] = bf0[30] + bf0[25];
538
531k
    bf1[31] = bf0[31] + bf0[24];
539
540
    // stage 4
541
531k
    cospi   = cospi_arr(cos_bit);
542
531k
    bf0     = output;
543
531k
    bf1     = step;
544
531k
    bf1[0]  = bf0[0] + bf0[3];
545
531k
    bf1[1]  = bf0[1] + bf0[2];
546
531k
    bf1[2]  = -bf0[2] + bf0[1];
547
531k
    bf1[3]  = -bf0[3] + bf0[0];
548
531k
    bf1[4]  = bf0[4];
549
531k
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
550
531k
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
551
531k
    bf1[7]  = bf0[7];
552
531k
    bf1[8]  = bf0[8] + bf0[11];
553
531k
    bf1[9]  = bf0[9] + bf0[10];
554
531k
    bf1[10] = -bf0[10] + bf0[9];
555
531k
    bf1[11] = -bf0[11] + bf0[8];
556
531k
    bf1[12] = -bf0[12] + bf0[15];
557
531k
    bf1[13] = -bf0[13] + bf0[14];
558
531k
    bf1[14] = bf0[14] + bf0[13];
559
531k
    bf1[15] = bf0[15] + bf0[12];
560
531k
    bf1[16] = bf0[16];
561
531k
    bf1[17] = bf0[17];
562
531k
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
563
531k
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
564
531k
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
565
531k
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
566
531k
    bf1[22] = bf0[22];
567
531k
    bf1[23] = bf0[23];
568
531k
    bf1[24] = bf0[24];
569
531k
    bf1[25] = bf0[25];
570
531k
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
571
531k
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
572
531k
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
573
531k
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
574
531k
    bf1[30] = bf0[30];
575
531k
    bf1[31] = bf0[31];
576
577
    // stage 5
578
531k
    cospi   = cospi_arr(cos_bit);
579
531k
    bf0     = step;
580
531k
    bf1     = output;
581
531k
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
582
531k
    bf1[1]  = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
583
531k
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
584
531k
    bf1[3]  = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
585
531k
    bf1[4]  = bf0[4] + bf0[5];
586
531k
    bf1[5]  = -bf0[5] + bf0[4];
587
531k
    bf1[6]  = -bf0[6] + bf0[7];
588
531k
    bf1[7]  = bf0[7] + bf0[6];
589
531k
    bf1[8]  = bf0[8];
590
531k
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
591
531k
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
592
531k
    bf1[11] = bf0[11];
593
531k
    bf1[12] = bf0[12];
594
531k
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
595
531k
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
596
531k
    bf1[15] = bf0[15];
597
531k
    bf1[16] = bf0[16] + bf0[19];
598
531k
    bf1[17] = bf0[17] + bf0[18];
599
531k
    bf1[18] = -bf0[18] + bf0[17];
600
531k
    bf1[19] = -bf0[19] + bf0[16];
601
531k
    bf1[20] = -bf0[20] + bf0[23];
602
531k
    bf1[21] = -bf0[21] + bf0[22];
603
531k
    bf1[22] = bf0[22] + bf0[21];
604
531k
    bf1[23] = bf0[23] + bf0[20];
605
531k
    bf1[24] = bf0[24] + bf0[27];
606
531k
    bf1[25] = bf0[25] + bf0[26];
607
531k
    bf1[26] = -bf0[26] + bf0[25];
608
531k
    bf1[27] = -bf0[27] + bf0[24];
609
531k
    bf1[28] = -bf0[28] + bf0[31];
610
531k
    bf1[29] = -bf0[29] + bf0[30];
611
531k
    bf1[30] = bf0[30] + bf0[29];
612
531k
    bf1[31] = bf0[31] + bf0[28];
613
614
    // stage 6
615
531k
    cospi   = cospi_arr(cos_bit);
616
531k
    bf0     = output;
617
531k
    bf1     = step;
618
531k
    bf1[0]  = bf0[0];
619
531k
    bf1[1]  = bf0[1];
620
531k
    bf1[2]  = bf0[2];
621
531k
    bf1[3]  = bf0[3];
622
531k
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
623
531k
    bf1[5]  = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
624
531k
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
625
531k
    bf1[7]  = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
626
531k
    bf1[8]  = bf0[8] + bf0[9];
627
531k
    bf1[9]  = -bf0[9] + bf0[8];
628
531k
    bf1[10] = -bf0[10] + bf0[11];
629
531k
    bf1[11] = bf0[11] + bf0[10];
630
531k
    bf1[12] = bf0[12] + bf0[13];
631
531k
    bf1[13] = -bf0[13] + bf0[12];
632
531k
    bf1[14] = -bf0[14] + bf0[15];
633
531k
    bf1[15] = bf0[15] + bf0[14];
634
531k
    bf1[16] = bf0[16];
635
531k
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
636
531k
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
637
531k
    bf1[19] = bf0[19];
638
531k
    bf1[20] = bf0[20];
639
531k
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
640
531k
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
641
531k
    bf1[23] = bf0[23];
642
531k
    bf1[24] = bf0[24];
643
531k
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
644
531k
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
645
531k
    bf1[27] = bf0[27];
646
531k
    bf1[28] = bf0[28];
647
531k
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
648
531k
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
649
531k
    bf1[31] = bf0[31];
650
651
    // stage 7
652
531k
    cospi   = cospi_arr(cos_bit);
653
531k
    bf0     = step;
654
531k
    bf1     = output;
655
531k
    bf1[0]  = bf0[0];
656
531k
    bf1[1]  = bf0[1];
657
531k
    bf1[2]  = bf0[2];
658
531k
    bf1[3]  = bf0[3];
659
531k
    bf1[4]  = bf0[4];
660
531k
    bf1[5]  = bf0[5];
661
531k
    bf1[6]  = bf0[6];
662
531k
    bf1[7]  = bf0[7];
663
531k
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
664
531k
    bf1[9]  = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
665
531k
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
666
531k
    bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
667
531k
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
668
531k
    bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
669
531k
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
670
531k
    bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
671
531k
    bf1[16] = bf0[16] + bf0[17];
672
531k
    bf1[17] = -bf0[17] + bf0[16];
673
531k
    bf1[18] = -bf0[18] + bf0[19];
674
531k
    bf1[19] = bf0[19] + bf0[18];
675
531k
    bf1[20] = bf0[20] + bf0[21];
676
531k
    bf1[21] = -bf0[21] + bf0[20];
677
531k
    bf1[22] = -bf0[22] + bf0[23];
678
531k
    bf1[23] = bf0[23] + bf0[22];
679
531k
    bf1[24] = bf0[24] + bf0[25];
680
531k
    bf1[25] = -bf0[25] + bf0[24];
681
531k
    bf1[26] = -bf0[26] + bf0[27];
682
531k
    bf1[27] = bf0[27] + bf0[26];
683
531k
    bf1[28] = bf0[28] + bf0[29];
684
531k
    bf1[29] = -bf0[29] + bf0[28];
685
531k
    bf1[30] = -bf0[30] + bf0[31];
686
531k
    bf1[31] = bf0[31] + bf0[30];
687
688
    // stage 8
689
531k
    cospi   = cospi_arr(cos_bit);
690
531k
    bf0     = output;
691
531k
    bf1     = step;
692
531k
    bf1[0]  = bf0[0];
693
531k
    bf1[1]  = bf0[1];
694
531k
    bf1[2]  = bf0[2];
695
531k
    bf1[3]  = bf0[3];
696
531k
    bf1[4]  = bf0[4];
697
531k
    bf1[5]  = bf0[5];
698
531k
    bf1[6]  = bf0[6];
699
531k
    bf1[7]  = bf0[7];
700
531k
    bf1[8]  = bf0[8];
701
531k
    bf1[9]  = bf0[9];
702
531k
    bf1[10] = bf0[10];
703
531k
    bf1[11] = bf0[11];
704
531k
    bf1[12] = bf0[12];
705
531k
    bf1[13] = bf0[13];
706
531k
    bf1[14] = bf0[14];
707
531k
    bf1[15] = bf0[15];
708
531k
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
709
531k
    bf1[17] = half_btf(cospi[30], bf0[17], cospi[34], bf0[30], cos_bit);
710
531k
    bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
711
531k
    bf1[19] = half_btf(cospi[14], bf0[19], cospi[50], bf0[28], cos_bit);
712
531k
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
713
531k
    bf1[21] = half_btf(cospi[22], bf0[21], cospi[42], bf0[26], cos_bit);
714
531k
    bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
715
531k
    bf1[23] = half_btf(cospi[6], bf0[23], cospi[58], bf0[24], cos_bit);
716
531k
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
717
531k
    bf1[25] = half_btf(cospi[38], bf0[25], -cospi[26], bf0[22], cos_bit);
718
531k
    bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
719
531k
    bf1[27] = half_btf(cospi[54], bf0[27], -cospi[10], bf0[20], cos_bit);
720
531k
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
721
531k
    bf1[29] = half_btf(cospi[46], bf0[29], -cospi[18], bf0[18], cos_bit);
722
531k
    bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
723
531k
    bf1[31] = half_btf(cospi[62], bf0[31], -cospi[2], bf0[16], cos_bit);
724
725
    // stage 9
726
531k
    bf0     = step;
727
531k
    bf1     = output;
728
531k
    bf1[0]  = bf0[0];
729
531k
    bf1[1]  = bf0[16];
730
531k
    bf1[2]  = bf0[8];
731
531k
    bf1[3]  = bf0[24];
732
531k
    bf1[4]  = bf0[4];
733
531k
    bf1[5]  = bf0[20];
734
531k
    bf1[6]  = bf0[12];
735
531k
    bf1[7]  = bf0[28];
736
531k
    bf1[8]  = bf0[2];
737
531k
    bf1[9]  = bf0[18];
738
531k
    bf1[10] = bf0[10];
739
531k
    bf1[11] = bf0[26];
740
531k
    bf1[12] = bf0[6];
741
531k
    bf1[13] = bf0[22];
742
531k
    bf1[14] = bf0[14];
743
531k
    bf1[15] = bf0[30];
744
531k
    bf1[16] = bf0[1];
745
531k
    bf1[17] = bf0[17];
746
531k
    bf1[18] = bf0[9];
747
531k
    bf1[19] = bf0[25];
748
531k
    bf1[20] = bf0[5];
749
531k
    bf1[21] = bf0[21];
750
531k
    bf1[22] = bf0[13];
751
531k
    bf1[23] = bf0[29];
752
531k
    bf1[24] = bf0[3];
753
531k
    bf1[25] = bf0[19];
754
531k
    bf1[26] = bf0[11];
755
531k
    bf1[27] = bf0[27];
756
531k
    bf1[28] = bf0[7];
757
531k
    bf1[29] = bf0[23];
758
531k
    bf1[30] = bf0[15];
759
531k
    bf1[31] = bf0[31];
760
531k
}
761
762
452k
void svt_av1_fdct64_new(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
763
452k
    (void)stage_range;
764
452k
    const int32_t* cospi;
765
766
452k
    int32_t *bf0, *bf1;
767
452k
    int32_t  step[64];
768
769
    // stage 0;
770
771
    // stage 1;
772
452k
    bf1     = output;
773
452k
    bf1[0]  = input[0] + input[63];
774
452k
    bf1[1]  = input[1] + input[62];
775
452k
    bf1[2]  = input[2] + input[61];
776
452k
    bf1[3]  = input[3] + input[60];
777
452k
    bf1[4]  = input[4] + input[59];
778
452k
    bf1[5]  = input[5] + input[58];
779
452k
    bf1[6]  = input[6] + input[57];
780
452k
    bf1[7]  = input[7] + input[56];
781
452k
    bf1[8]  = input[8] + input[55];
782
452k
    bf1[9]  = input[9] + input[54];
783
452k
    bf1[10] = input[10] + input[53];
784
452k
    bf1[11] = input[11] + input[52];
785
452k
    bf1[12] = input[12] + input[51];
786
452k
    bf1[13] = input[13] + input[50];
787
452k
    bf1[14] = input[14] + input[49];
788
452k
    bf1[15] = input[15] + input[48];
789
452k
    bf1[16] = input[16] + input[47];
790
452k
    bf1[17] = input[17] + input[46];
791
452k
    bf1[18] = input[18] + input[45];
792
452k
    bf1[19] = input[19] + input[44];
793
452k
    bf1[20] = input[20] + input[43];
794
452k
    bf1[21] = input[21] + input[42];
795
452k
    bf1[22] = input[22] + input[41];
796
452k
    bf1[23] = input[23] + input[40];
797
452k
    bf1[24] = input[24] + input[39];
798
452k
    bf1[25] = input[25] + input[38];
799
452k
    bf1[26] = input[26] + input[37];
800
452k
    bf1[27] = input[27] + input[36];
801
452k
    bf1[28] = input[28] + input[35];
802
452k
    bf1[29] = input[29] + input[34];
803
452k
    bf1[30] = input[30] + input[33];
804
452k
    bf1[31] = input[31] + input[32];
805
452k
    bf1[32] = -input[32] + input[31];
806
452k
    bf1[33] = -input[33] + input[30];
807
452k
    bf1[34] = -input[34] + input[29];
808
452k
    bf1[35] = -input[35] + input[28];
809
452k
    bf1[36] = -input[36] + input[27];
810
452k
    bf1[37] = -input[37] + input[26];
811
452k
    bf1[38] = -input[38] + input[25];
812
452k
    bf1[39] = -input[39] + input[24];
813
452k
    bf1[40] = -input[40] + input[23];
814
452k
    bf1[41] = -input[41] + input[22];
815
452k
    bf1[42] = -input[42] + input[21];
816
452k
    bf1[43] = -input[43] + input[20];
817
452k
    bf1[44] = -input[44] + input[19];
818
452k
    bf1[45] = -input[45] + input[18];
819
452k
    bf1[46] = -input[46] + input[17];
820
452k
    bf1[47] = -input[47] + input[16];
821
452k
    bf1[48] = -input[48] + input[15];
822
452k
    bf1[49] = -input[49] + input[14];
823
452k
    bf1[50] = -input[50] + input[13];
824
452k
    bf1[51] = -input[51] + input[12];
825
452k
    bf1[52] = -input[52] + input[11];
826
452k
    bf1[53] = -input[53] + input[10];
827
452k
    bf1[54] = -input[54] + input[9];
828
452k
    bf1[55] = -input[55] + input[8];
829
452k
    bf1[56] = -input[56] + input[7];
830
452k
    bf1[57] = -input[57] + input[6];
831
452k
    bf1[58] = -input[58] + input[5];
832
452k
    bf1[59] = -input[59] + input[4];
833
452k
    bf1[60] = -input[60] + input[3];
834
452k
    bf1[61] = -input[61] + input[2];
835
452k
    bf1[62] = -input[62] + input[1];
836
452k
    bf1[63] = -input[63] + input[0];
837
838
    // stage 2
839
452k
    cospi   = cospi_arr(cos_bit);
840
452k
    bf0     = output;
841
452k
    bf1     = step;
842
452k
    bf1[0]  = bf0[0] + bf0[31];
843
452k
    bf1[1]  = bf0[1] + bf0[30];
844
452k
    bf1[2]  = bf0[2] + bf0[29];
845
452k
    bf1[3]  = bf0[3] + bf0[28];
846
452k
    bf1[4]  = bf0[4] + bf0[27];
847
452k
    bf1[5]  = bf0[5] + bf0[26];
848
452k
    bf1[6]  = bf0[6] + bf0[25];
849
452k
    bf1[7]  = bf0[7] + bf0[24];
850
452k
    bf1[8]  = bf0[8] + bf0[23];
851
452k
    bf1[9]  = bf0[9] + bf0[22];
852
452k
    bf1[10] = bf0[10] + bf0[21];
853
452k
    bf1[11] = bf0[11] + bf0[20];
854
452k
    bf1[12] = bf0[12] + bf0[19];
855
452k
    bf1[13] = bf0[13] + bf0[18];
856
452k
    bf1[14] = bf0[14] + bf0[17];
857
452k
    bf1[15] = bf0[15] + bf0[16];
858
452k
    bf1[16] = -bf0[16] + bf0[15];
859
452k
    bf1[17] = -bf0[17] + bf0[14];
860
452k
    bf1[18] = -bf0[18] + bf0[13];
861
452k
    bf1[19] = -bf0[19] + bf0[12];
862
452k
    bf1[20] = -bf0[20] + bf0[11];
863
452k
    bf1[21] = -bf0[21] + bf0[10];
864
452k
    bf1[22] = -bf0[22] + bf0[9];
865
452k
    bf1[23] = -bf0[23] + bf0[8];
866
452k
    bf1[24] = -bf0[24] + bf0[7];
867
452k
    bf1[25] = -bf0[25] + bf0[6];
868
452k
    bf1[26] = -bf0[26] + bf0[5];
869
452k
    bf1[27] = -bf0[27] + bf0[4];
870
452k
    bf1[28] = -bf0[28] + bf0[3];
871
452k
    bf1[29] = -bf0[29] + bf0[2];
872
452k
    bf1[30] = -bf0[30] + bf0[1];
873
452k
    bf1[31] = -bf0[31] + bf0[0];
874
452k
    bf1[32] = bf0[32];
875
452k
    bf1[33] = bf0[33];
876
452k
    bf1[34] = bf0[34];
877
452k
    bf1[35] = bf0[35];
878
452k
    bf1[36] = bf0[36];
879
452k
    bf1[37] = bf0[37];
880
452k
    bf1[38] = bf0[38];
881
452k
    bf1[39] = bf0[39];
882
452k
    bf1[40] = half_btf(-cospi[32], bf0[40], cospi[32], bf0[55], cos_bit);
883
452k
    bf1[41] = half_btf(-cospi[32], bf0[41], cospi[32], bf0[54], cos_bit);
884
452k
    bf1[42] = half_btf(-cospi[32], bf0[42], cospi[32], bf0[53], cos_bit);
885
452k
    bf1[43] = half_btf(-cospi[32], bf0[43], cospi[32], bf0[52], cos_bit);
886
452k
    bf1[44] = half_btf(-cospi[32], bf0[44], cospi[32], bf0[51], cos_bit);
887
452k
    bf1[45] = half_btf(-cospi[32], bf0[45], cospi[32], bf0[50], cos_bit);
888
452k
    bf1[46] = half_btf(-cospi[32], bf0[46], cospi[32], bf0[49], cos_bit);
889
452k
    bf1[47] = half_btf(-cospi[32], bf0[47], cospi[32], bf0[48], cos_bit);
890
452k
    bf1[48] = half_btf(cospi[32], bf0[48], cospi[32], bf0[47], cos_bit);
891
452k
    bf1[49] = half_btf(cospi[32], bf0[49], cospi[32], bf0[46], cos_bit);
892
452k
    bf1[50] = half_btf(cospi[32], bf0[50], cospi[32], bf0[45], cos_bit);
893
452k
    bf1[51] = half_btf(cospi[32], bf0[51], cospi[32], bf0[44], cos_bit);
894
452k
    bf1[52] = half_btf(cospi[32], bf0[52], cospi[32], bf0[43], cos_bit);
895
452k
    bf1[53] = half_btf(cospi[32], bf0[53], cospi[32], bf0[42], cos_bit);
896
452k
    bf1[54] = half_btf(cospi[32], bf0[54], cospi[32], bf0[41], cos_bit);
897
452k
    bf1[55] = half_btf(cospi[32], bf0[55], cospi[32], bf0[40], cos_bit);
898
452k
    bf1[56] = bf0[56];
899
452k
    bf1[57] = bf0[57];
900
452k
    bf1[58] = bf0[58];
901
452k
    bf1[59] = bf0[59];
902
452k
    bf1[60] = bf0[60];
903
452k
    bf1[61] = bf0[61];
904
452k
    bf1[62] = bf0[62];
905
452k
    bf1[63] = bf0[63];
906
907
    // stage 3
908
452k
    cospi   = cospi_arr(cos_bit);
909
452k
    bf0     = step;
910
452k
    bf1     = output;
911
452k
    bf1[0]  = bf0[0] + bf0[15];
912
452k
    bf1[1]  = bf0[1] + bf0[14];
913
452k
    bf1[2]  = bf0[2] + bf0[13];
914
452k
    bf1[3]  = bf0[3] + bf0[12];
915
452k
    bf1[4]  = bf0[4] + bf0[11];
916
452k
    bf1[5]  = bf0[5] + bf0[10];
917
452k
    bf1[6]  = bf0[6] + bf0[9];
918
452k
    bf1[7]  = bf0[7] + bf0[8];
919
452k
    bf1[8]  = -bf0[8] + bf0[7];
920
452k
    bf1[9]  = -bf0[9] + bf0[6];
921
452k
    bf1[10] = -bf0[10] + bf0[5];
922
452k
    bf1[11] = -bf0[11] + bf0[4];
923
452k
    bf1[12] = -bf0[12] + bf0[3];
924
452k
    bf1[13] = -bf0[13] + bf0[2];
925
452k
    bf1[14] = -bf0[14] + bf0[1];
926
452k
    bf1[15] = -bf0[15] + bf0[0];
927
452k
    bf1[16] = bf0[16];
928
452k
    bf1[17] = bf0[17];
929
452k
    bf1[18] = bf0[18];
930
452k
    bf1[19] = bf0[19];
931
452k
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
932
452k
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
933
452k
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
934
452k
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
935
452k
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
936
452k
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
937
452k
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
938
452k
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
939
452k
    bf1[28] = bf0[28];
940
452k
    bf1[29] = bf0[29];
941
452k
    bf1[30] = bf0[30];
942
452k
    bf1[31] = bf0[31];
943
452k
    bf1[32] = bf0[32] + bf0[47];
944
452k
    bf1[33] = bf0[33] + bf0[46];
945
452k
    bf1[34] = bf0[34] + bf0[45];
946
452k
    bf1[35] = bf0[35] + bf0[44];
947
452k
    bf1[36] = bf0[36] + bf0[43];
948
452k
    bf1[37] = bf0[37] + bf0[42];
949
452k
    bf1[38] = bf0[38] + bf0[41];
950
452k
    bf1[39] = bf0[39] + bf0[40];
951
452k
    bf1[40] = -bf0[40] + bf0[39];
952
452k
    bf1[41] = -bf0[41] + bf0[38];
953
452k
    bf1[42] = -bf0[42] + bf0[37];
954
452k
    bf1[43] = -bf0[43] + bf0[36];
955
452k
    bf1[44] = -bf0[44] + bf0[35];
956
452k
    bf1[45] = -bf0[45] + bf0[34];
957
452k
    bf1[46] = -bf0[46] + bf0[33];
958
452k
    bf1[47] = -bf0[47] + bf0[32];
959
452k
    bf1[48] = -bf0[48] + bf0[63];
960
452k
    bf1[49] = -bf0[49] + bf0[62];
961
452k
    bf1[50] = -bf0[50] + bf0[61];
962
452k
    bf1[51] = -bf0[51] + bf0[60];
963
452k
    bf1[52] = -bf0[52] + bf0[59];
964
452k
    bf1[53] = -bf0[53] + bf0[58];
965
452k
    bf1[54] = -bf0[54] + bf0[57];
966
452k
    bf1[55] = -bf0[55] + bf0[56];
967
452k
    bf1[56] = bf0[56] + bf0[55];
968
452k
    bf1[57] = bf0[57] + bf0[54];
969
452k
    bf1[58] = bf0[58] + bf0[53];
970
452k
    bf1[59] = bf0[59] + bf0[52];
971
452k
    bf1[60] = bf0[60] + bf0[51];
972
452k
    bf1[61] = bf0[61] + bf0[50];
973
452k
    bf1[62] = bf0[62] + bf0[49];
974
452k
    bf1[63] = bf0[63] + bf0[48];
975
976
    // stage 4
977
452k
    cospi   = cospi_arr(cos_bit);
978
452k
    bf0     = output;
979
452k
    bf1     = step;
980
452k
    bf1[0]  = bf0[0] + bf0[7];
981
452k
    bf1[1]  = bf0[1] + bf0[6];
982
452k
    bf1[2]  = bf0[2] + bf0[5];
983
452k
    bf1[3]  = bf0[3] + bf0[4];
984
452k
    bf1[4]  = -bf0[4] + bf0[3];
985
452k
    bf1[5]  = -bf0[5] + bf0[2];
986
452k
    bf1[6]  = -bf0[6] + bf0[1];
987
452k
    bf1[7]  = -bf0[7] + bf0[0];
988
452k
    bf1[8]  = bf0[8];
989
452k
    bf1[9]  = bf0[9];
990
452k
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
991
452k
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
992
452k
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
993
452k
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
994
452k
    bf1[14] = bf0[14];
995
452k
    bf1[15] = bf0[15];
996
452k
    bf1[16] = bf0[16] + bf0[23];
997
452k
    bf1[17] = bf0[17] + bf0[22];
998
452k
    bf1[18] = bf0[18] + bf0[21];
999
452k
    bf1[19] = bf0[19] + bf0[20];
1000
452k
    bf1[20] = -bf0[20] + bf0[19];
1001
452k
    bf1[21] = -bf0[21] + bf0[18];
1002
452k
    bf1[22] = -bf0[22] + bf0[17];
1003
452k
    bf1[23] = -bf0[23] + bf0[16];
1004
452k
    bf1[24] = -bf0[24] + bf0[31];
1005
452k
    bf1[25] = -bf0[25] + bf0[30];
1006
452k
    bf1[26] = -bf0[26] + bf0[29];
1007
452k
    bf1[27] = -bf0[27] + bf0[28];
1008
452k
    bf1[28] = bf0[28] + bf0[27];
1009
452k
    bf1[29] = bf0[29] + bf0[26];
1010
452k
    bf1[30] = bf0[30] + bf0[25];
1011
452k
    bf1[31] = bf0[31] + bf0[24];
1012
452k
    bf1[32] = bf0[32];
1013
452k
    bf1[33] = bf0[33];
1014
452k
    bf1[34] = bf0[34];
1015
452k
    bf1[35] = bf0[35];
1016
452k
    bf1[36] = half_btf(-cospi[16], bf0[36], cospi[48], bf0[59], cos_bit);
1017
452k
    bf1[37] = half_btf(-cospi[16], bf0[37], cospi[48], bf0[58], cos_bit);
1018
452k
    bf1[38] = half_btf(-cospi[16], bf0[38], cospi[48], bf0[57], cos_bit);
1019
452k
    bf1[39] = half_btf(-cospi[16], bf0[39], cospi[48], bf0[56], cos_bit);
1020
452k
    bf1[40] = half_btf(-cospi[48], bf0[40], -cospi[16], bf0[55], cos_bit);
1021
452k
    bf1[41] = half_btf(-cospi[48], bf0[41], -cospi[16], bf0[54], cos_bit);
1022
452k
    bf1[42] = half_btf(-cospi[48], bf0[42], -cospi[16], bf0[53], cos_bit);
1023
452k
    bf1[43] = half_btf(-cospi[48], bf0[43], -cospi[16], bf0[52], cos_bit);
1024
452k
    bf1[44] = bf0[44];
1025
452k
    bf1[45] = bf0[45];
1026
452k
    bf1[46] = bf0[46];
1027
452k
    bf1[47] = bf0[47];
1028
452k
    bf1[48] = bf0[48];
1029
452k
    bf1[49] = bf0[49];
1030
452k
    bf1[50] = bf0[50];
1031
452k
    bf1[51] = bf0[51];
1032
452k
    bf1[52] = half_btf(cospi[48], bf0[52], -cospi[16], bf0[43], cos_bit);
1033
452k
    bf1[53] = half_btf(cospi[48], bf0[53], -cospi[16], bf0[42], cos_bit);
1034
452k
    bf1[54] = half_btf(cospi[48], bf0[54], -cospi[16], bf0[41], cos_bit);
1035
452k
    bf1[55] = half_btf(cospi[48], bf0[55], -cospi[16], bf0[40], cos_bit);
1036
452k
    bf1[56] = half_btf(cospi[16], bf0[56], cospi[48], bf0[39], cos_bit);
1037
452k
    bf1[57] = half_btf(cospi[16], bf0[57], cospi[48], bf0[38], cos_bit);
1038
452k
    bf1[58] = half_btf(cospi[16], bf0[58], cospi[48], bf0[37], cos_bit);
1039
452k
    bf1[59] = half_btf(cospi[16], bf0[59], cospi[48], bf0[36], cos_bit);
1040
452k
    bf1[60] = bf0[60];
1041
452k
    bf1[61] = bf0[61];
1042
452k
    bf1[62] = bf0[62];
1043
452k
    bf1[63] = bf0[63];
1044
1045
    // stage 5
1046
452k
    cospi   = cospi_arr(cos_bit);
1047
452k
    bf0     = step;
1048
452k
    bf1     = output;
1049
452k
    bf1[0]  = bf0[0] + bf0[3];
1050
452k
    bf1[1]  = bf0[1] + bf0[2];
1051
452k
    bf1[2]  = -bf0[2] + bf0[1];
1052
452k
    bf1[3]  = -bf0[3] + bf0[0];
1053
452k
    bf1[4]  = bf0[4];
1054
452k
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
1055
452k
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
1056
452k
    bf1[7]  = bf0[7];
1057
452k
    bf1[8]  = bf0[8] + bf0[11];
1058
452k
    bf1[9]  = bf0[9] + bf0[10];
1059
452k
    bf1[10] = -bf0[10] + bf0[9];
1060
452k
    bf1[11] = -bf0[11] + bf0[8];
1061
452k
    bf1[12] = -bf0[12] + bf0[15];
1062
452k
    bf1[13] = -bf0[13] + bf0[14];
1063
452k
    bf1[14] = bf0[14] + bf0[13];
1064
452k
    bf1[15] = bf0[15] + bf0[12];
1065
452k
    bf1[16] = bf0[16];
1066
452k
    bf1[17] = bf0[17];
1067
452k
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
1068
452k
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
1069
452k
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
1070
452k
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
1071
452k
    bf1[22] = bf0[22];
1072
452k
    bf1[23] = bf0[23];
1073
452k
    bf1[24] = bf0[24];
1074
452k
    bf1[25] = bf0[25];
1075
452k
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
1076
452k
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
1077
452k
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
1078
452k
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
1079
452k
    bf1[30] = bf0[30];
1080
452k
    bf1[31] = bf0[31];
1081
452k
    bf1[32] = bf0[32] + bf0[39];
1082
452k
    bf1[33] = bf0[33] + bf0[38];
1083
452k
    bf1[34] = bf0[34] + bf0[37];
1084
452k
    bf1[35] = bf0[35] + bf0[36];
1085
452k
    bf1[36] = -bf0[36] + bf0[35];
1086
452k
    bf1[37] = -bf0[37] + bf0[34];
1087
452k
    bf1[38] = -bf0[38] + bf0[33];
1088
452k
    bf1[39] = -bf0[39] + bf0[32];
1089
452k
    bf1[40] = -bf0[40] + bf0[47];
1090
452k
    bf1[41] = -bf0[41] + bf0[46];
1091
452k
    bf1[42] = -bf0[42] + bf0[45];
1092
452k
    bf1[43] = -bf0[43] + bf0[44];
1093
452k
    bf1[44] = bf0[44] + bf0[43];
1094
452k
    bf1[45] = bf0[45] + bf0[42];
1095
452k
    bf1[46] = bf0[46] + bf0[41];
1096
452k
    bf1[47] = bf0[47] + bf0[40];
1097
452k
    bf1[48] = bf0[48] + bf0[55];
1098
452k
    bf1[49] = bf0[49] + bf0[54];
1099
452k
    bf1[50] = bf0[50] + bf0[53];
1100
452k
    bf1[51] = bf0[51] + bf0[52];
1101
452k
    bf1[52] = -bf0[52] + bf0[51];
1102
452k
    bf1[53] = -bf0[53] + bf0[50];
1103
452k
    bf1[54] = -bf0[54] + bf0[49];
1104
452k
    bf1[55] = -bf0[55] + bf0[48];
1105
452k
    bf1[56] = -bf0[56] + bf0[63];
1106
452k
    bf1[57] = -bf0[57] + bf0[62];
1107
452k
    bf1[58] = -bf0[58] + bf0[61];
1108
452k
    bf1[59] = -bf0[59] + bf0[60];
1109
452k
    bf1[60] = bf0[60] + bf0[59];
1110
452k
    bf1[61] = bf0[61] + bf0[58];
1111
452k
    bf1[62] = bf0[62] + bf0[57];
1112
452k
    bf1[63] = bf0[63] + bf0[56];
1113
1114
    // stage 6
1115
452k
    cospi   = cospi_arr(cos_bit);
1116
452k
    bf0     = output;
1117
452k
    bf1     = step;
1118
452k
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
1119
452k
    bf1[1]  = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
1120
452k
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
1121
452k
    bf1[3]  = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
1122
452k
    bf1[4]  = bf0[4] + bf0[5];
1123
452k
    bf1[5]  = -bf0[5] + bf0[4];
1124
452k
    bf1[6]  = -bf0[6] + bf0[7];
1125
452k
    bf1[7]  = bf0[7] + bf0[6];
1126
452k
    bf1[8]  = bf0[8];
1127
452k
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
1128
452k
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
1129
452k
    bf1[11] = bf0[11];
1130
452k
    bf1[12] = bf0[12];
1131
452k
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
1132
452k
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
1133
452k
    bf1[15] = bf0[15];
1134
452k
    bf1[16] = bf0[16] + bf0[19];
1135
452k
    bf1[17] = bf0[17] + bf0[18];
1136
452k
    bf1[18] = -bf0[18] + bf0[17];
1137
452k
    bf1[19] = -bf0[19] + bf0[16];
1138
452k
    bf1[20] = -bf0[20] + bf0[23];
1139
452k
    bf1[21] = -bf0[21] + bf0[22];
1140
452k
    bf1[22] = bf0[22] + bf0[21];
1141
452k
    bf1[23] = bf0[23] + bf0[20];
1142
452k
    bf1[24] = bf0[24] + bf0[27];
1143
452k
    bf1[25] = bf0[25] + bf0[26];
1144
452k
    bf1[26] = -bf0[26] + bf0[25];
1145
452k
    bf1[27] = -bf0[27] + bf0[24];
1146
452k
    bf1[28] = -bf0[28] + bf0[31];
1147
452k
    bf1[29] = -bf0[29] + bf0[30];
1148
452k
    bf1[30] = bf0[30] + bf0[29];
1149
452k
    bf1[31] = bf0[31] + bf0[28];
1150
452k
    bf1[32] = bf0[32];
1151
452k
    bf1[33] = bf0[33];
1152
452k
    bf1[34] = half_btf(-cospi[8], bf0[34], cospi[56], bf0[61], cos_bit);
1153
452k
    bf1[35] = half_btf(-cospi[8], bf0[35], cospi[56], bf0[60], cos_bit);
1154
452k
    bf1[36] = half_btf(-cospi[56], bf0[36], -cospi[8], bf0[59], cos_bit);
1155
452k
    bf1[37] = half_btf(-cospi[56], bf0[37], -cospi[8], bf0[58], cos_bit);
1156
452k
    bf1[38] = bf0[38];
1157
452k
    bf1[39] = bf0[39];
1158
452k
    bf1[40] = bf0[40];
1159
452k
    bf1[41] = bf0[41];
1160
452k
    bf1[42] = half_btf(-cospi[40], bf0[42], cospi[24], bf0[53], cos_bit);
1161
452k
    bf1[43] = half_btf(-cospi[40], bf0[43], cospi[24], bf0[52], cos_bit);
1162
452k
    bf1[44] = half_btf(-cospi[24], bf0[44], -cospi[40], bf0[51], cos_bit);
1163
452k
    bf1[45] = half_btf(-cospi[24], bf0[45], -cospi[40], bf0[50], cos_bit);
1164
452k
    bf1[46] = bf0[46];
1165
452k
    bf1[47] = bf0[47];
1166
452k
    bf1[48] = bf0[48];
1167
452k
    bf1[49] = bf0[49];
1168
452k
    bf1[50] = half_btf(cospi[24], bf0[50], -cospi[40], bf0[45], cos_bit);
1169
452k
    bf1[51] = half_btf(cospi[24], bf0[51], -cospi[40], bf0[44], cos_bit);
1170
452k
    bf1[52] = half_btf(cospi[40], bf0[52], cospi[24], bf0[43], cos_bit);
1171
452k
    bf1[53] = half_btf(cospi[40], bf0[53], cospi[24], bf0[42], cos_bit);
1172
452k
    bf1[54] = bf0[54];
1173
452k
    bf1[55] = bf0[55];
1174
452k
    bf1[56] = bf0[56];
1175
452k
    bf1[57] = bf0[57];
1176
452k
    bf1[58] = half_btf(cospi[56], bf0[58], -cospi[8], bf0[37], cos_bit);
1177
452k
    bf1[59] = half_btf(cospi[56], bf0[59], -cospi[8], bf0[36], cos_bit);
1178
452k
    bf1[60] = half_btf(cospi[8], bf0[60], cospi[56], bf0[35], cos_bit);
1179
452k
    bf1[61] = half_btf(cospi[8], bf0[61], cospi[56], bf0[34], cos_bit);
1180
452k
    bf1[62] = bf0[62];
1181
452k
    bf1[63] = bf0[63];
1182
1183
    // stage 7
1184
452k
    cospi   = cospi_arr(cos_bit);
1185
452k
    bf0     = step;
1186
452k
    bf1     = output;
1187
452k
    bf1[0]  = bf0[0];
1188
452k
    bf1[1]  = bf0[1];
1189
452k
    bf1[2]  = bf0[2];
1190
452k
    bf1[3]  = bf0[3];
1191
452k
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
1192
452k
    bf1[5]  = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
1193
452k
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
1194
452k
    bf1[7]  = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
1195
452k
    bf1[8]  = bf0[8] + bf0[9];
1196
452k
    bf1[9]  = -bf0[9] + bf0[8];
1197
452k
    bf1[10] = -bf0[10] + bf0[11];
1198
452k
    bf1[11] = bf0[11] + bf0[10];
1199
452k
    bf1[12] = bf0[12] + bf0[13];
1200
452k
    bf1[13] = -bf0[13] + bf0[12];
1201
452k
    bf1[14] = -bf0[14] + bf0[15];
1202
452k
    bf1[15] = bf0[15] + bf0[14];
1203
452k
    bf1[16] = bf0[16];
1204
452k
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
1205
452k
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
1206
452k
    bf1[19] = bf0[19];
1207
452k
    bf1[20] = bf0[20];
1208
452k
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
1209
452k
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
1210
452k
    bf1[23] = bf0[23];
1211
452k
    bf1[24] = bf0[24];
1212
452k
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
1213
452k
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
1214
452k
    bf1[27] = bf0[27];
1215
452k
    bf1[28] = bf0[28];
1216
452k
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
1217
452k
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
1218
452k
    bf1[31] = bf0[31];
1219
452k
    bf1[32] = bf0[32] + bf0[35];
1220
452k
    bf1[33] = bf0[33] + bf0[34];
1221
452k
    bf1[34] = -bf0[34] + bf0[33];
1222
452k
    bf1[35] = -bf0[35] + bf0[32];
1223
452k
    bf1[36] = -bf0[36] + bf0[39];
1224
452k
    bf1[37] = -bf0[37] + bf0[38];
1225
452k
    bf1[38] = bf0[38] + bf0[37];
1226
452k
    bf1[39] = bf0[39] + bf0[36];
1227
452k
    bf1[40] = bf0[40] + bf0[43];
1228
452k
    bf1[41] = bf0[41] + bf0[42];
1229
452k
    bf1[42] = -bf0[42] + bf0[41];
1230
452k
    bf1[43] = -bf0[43] + bf0[40];
1231
452k
    bf1[44] = -bf0[44] + bf0[47];
1232
452k
    bf1[45] = -bf0[45] + bf0[46];
1233
452k
    bf1[46] = bf0[46] + bf0[45];
1234
452k
    bf1[47] = bf0[47] + bf0[44];
1235
452k
    bf1[48] = bf0[48] + bf0[51];
1236
452k
    bf1[49] = bf0[49] + bf0[50];
1237
452k
    bf1[50] = -bf0[50] + bf0[49];
1238
452k
    bf1[51] = -bf0[51] + bf0[48];
1239
452k
    bf1[52] = -bf0[52] + bf0[55];
1240
452k
    bf1[53] = -bf0[53] + bf0[54];
1241
452k
    bf1[54] = bf0[54] + bf0[53];
1242
452k
    bf1[55] = bf0[55] + bf0[52];
1243
452k
    bf1[56] = bf0[56] + bf0[59];
1244
452k
    bf1[57] = bf0[57] + bf0[58];
1245
452k
    bf1[58] = -bf0[58] + bf0[57];
1246
452k
    bf1[59] = -bf0[59] + bf0[56];
1247
452k
    bf1[60] = -bf0[60] + bf0[63];
1248
452k
    bf1[61] = -bf0[61] + bf0[62];
1249
452k
    bf1[62] = bf0[62] + bf0[61];
1250
452k
    bf1[63] = bf0[63] + bf0[60];
1251
1252
    // stage 8
1253
452k
    cospi   = cospi_arr(cos_bit);
1254
452k
    bf0     = output;
1255
452k
    bf1     = step;
1256
452k
    bf1[0]  = bf0[0];
1257
452k
    bf1[1]  = bf0[1];
1258
452k
    bf1[2]  = bf0[2];
1259
452k
    bf1[3]  = bf0[3];
1260
452k
    bf1[4]  = bf0[4];
1261
452k
    bf1[5]  = bf0[5];
1262
452k
    bf1[6]  = bf0[6];
1263
452k
    bf1[7]  = bf0[7];
1264
452k
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
1265
452k
    bf1[9]  = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
1266
452k
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
1267
452k
    bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
1268
452k
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
1269
452k
    bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
1270
452k
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
1271
452k
    bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
1272
452k
    bf1[16] = bf0[16] + bf0[17];
1273
452k
    bf1[17] = -bf0[17] + bf0[16];
1274
452k
    bf1[18] = -bf0[18] + bf0[19];
1275
452k
    bf1[19] = bf0[19] + bf0[18];
1276
452k
    bf1[20] = bf0[20] + bf0[21];
1277
452k
    bf1[21] = -bf0[21] + bf0[20];
1278
452k
    bf1[22] = -bf0[22] + bf0[23];
1279
452k
    bf1[23] = bf0[23] + bf0[22];
1280
452k
    bf1[24] = bf0[24] + bf0[25];
1281
452k
    bf1[25] = -bf0[25] + bf0[24];
1282
452k
    bf1[26] = -bf0[26] + bf0[27];
1283
452k
    bf1[27] = bf0[27] + bf0[26];
1284
452k
    bf1[28] = bf0[28] + bf0[29];
1285
452k
    bf1[29] = -bf0[29] + bf0[28];
1286
452k
    bf1[30] = -bf0[30] + bf0[31];
1287
452k
    bf1[31] = bf0[31] + bf0[30];
1288
452k
    bf1[32] = bf0[32];
1289
452k
    bf1[33] = half_btf(-cospi[4], bf0[33], cospi[60], bf0[62], cos_bit);
1290
452k
    bf1[34] = half_btf(-cospi[60], bf0[34], -cospi[4], bf0[61], cos_bit);
1291
452k
    bf1[35] = bf0[35];
1292
452k
    bf1[36] = bf0[36];
1293
452k
    bf1[37] = half_btf(-cospi[36], bf0[37], cospi[28], bf0[58], cos_bit);
1294
452k
    bf1[38] = half_btf(-cospi[28], bf0[38], -cospi[36], bf0[57], cos_bit);
1295
452k
    bf1[39] = bf0[39];
1296
452k
    bf1[40] = bf0[40];
1297
452k
    bf1[41] = half_btf(-cospi[20], bf0[41], cospi[44], bf0[54], cos_bit);
1298
452k
    bf1[42] = half_btf(-cospi[44], bf0[42], -cospi[20], bf0[53], cos_bit);
1299
452k
    bf1[43] = bf0[43];
1300
452k
    bf1[44] = bf0[44];
1301
452k
    bf1[45] = half_btf(-cospi[52], bf0[45], cospi[12], bf0[50], cos_bit);
1302
452k
    bf1[46] = half_btf(-cospi[12], bf0[46], -cospi[52], bf0[49], cos_bit);
1303
452k
    bf1[47] = bf0[47];
1304
452k
    bf1[48] = bf0[48];
1305
452k
    bf1[49] = half_btf(cospi[12], bf0[49], -cospi[52], bf0[46], cos_bit);
1306
452k
    bf1[50] = half_btf(cospi[52], bf0[50], cospi[12], bf0[45], cos_bit);
1307
452k
    bf1[51] = bf0[51];
1308
452k
    bf1[52] = bf0[52];
1309
452k
    bf1[53] = half_btf(cospi[44], bf0[53], -cospi[20], bf0[42], cos_bit);
1310
452k
    bf1[54] = half_btf(cospi[20], bf0[54], cospi[44], bf0[41], cos_bit);
1311
452k
    bf1[55] = bf0[55];
1312
452k
    bf1[56] = bf0[56];
1313
452k
    bf1[57] = half_btf(cospi[28], bf0[57], -cospi[36], bf0[38], cos_bit);
1314
452k
    bf1[58] = half_btf(cospi[36], bf0[58], cospi[28], bf0[37], cos_bit);
1315
452k
    bf1[59] = bf0[59];
1316
452k
    bf1[60] = bf0[60];
1317
452k
    bf1[61] = half_btf(cospi[60], bf0[61], -cospi[4], bf0[34], cos_bit);
1318
452k
    bf1[62] = half_btf(cospi[4], bf0[62], cospi[60], bf0[33], cos_bit);
1319
452k
    bf1[63] = bf0[63];
1320
1321
    // stage 9
1322
452k
    cospi   = cospi_arr(cos_bit);
1323
452k
    bf0     = step;
1324
452k
    bf1     = output;
1325
452k
    bf1[0]  = bf0[0];
1326
452k
    bf1[1]  = bf0[1];
1327
452k
    bf1[2]  = bf0[2];
1328
452k
    bf1[3]  = bf0[3];
1329
452k
    bf1[4]  = bf0[4];
1330
452k
    bf1[5]  = bf0[5];
1331
452k
    bf1[6]  = bf0[6];
1332
452k
    bf1[7]  = bf0[7];
1333
452k
    bf1[8]  = bf0[8];
1334
452k
    bf1[9]  = bf0[9];
1335
452k
    bf1[10] = bf0[10];
1336
452k
    bf1[11] = bf0[11];
1337
452k
    bf1[12] = bf0[12];
1338
452k
    bf1[13] = bf0[13];
1339
452k
    bf1[14] = bf0[14];
1340
452k
    bf1[15] = bf0[15];
1341
452k
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
1342
452k
    bf1[17] = half_btf(cospi[30], bf0[17], cospi[34], bf0[30], cos_bit);
1343
452k
    bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
1344
452k
    bf1[19] = half_btf(cospi[14], bf0[19], cospi[50], bf0[28], cos_bit);
1345
452k
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
1346
452k
    bf1[21] = half_btf(cospi[22], bf0[21], cospi[42], bf0[26], cos_bit);
1347
452k
    bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
1348
452k
    bf1[23] = half_btf(cospi[6], bf0[23], cospi[58], bf0[24], cos_bit);
1349
452k
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
1350
452k
    bf1[25] = half_btf(cospi[38], bf0[25], -cospi[26], bf0[22], cos_bit);
1351
452k
    bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
1352
452k
    bf1[27] = half_btf(cospi[54], bf0[27], -cospi[10], bf0[20], cos_bit);
1353
452k
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
1354
452k
    bf1[29] = half_btf(cospi[46], bf0[29], -cospi[18], bf0[18], cos_bit);
1355
452k
    bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
1356
452k
    bf1[31] = half_btf(cospi[62], bf0[31], -cospi[2], bf0[16], cos_bit);
1357
452k
    bf1[32] = bf0[32] + bf0[33];
1358
452k
    bf1[33] = -bf0[33] + bf0[32];
1359
452k
    bf1[34] = -bf0[34] + bf0[35];
1360
452k
    bf1[35] = bf0[35] + bf0[34];
1361
452k
    bf1[36] = bf0[36] + bf0[37];
1362
452k
    bf1[37] = -bf0[37] + bf0[36];
1363
452k
    bf1[38] = -bf0[38] + bf0[39];
1364
452k
    bf1[39] = bf0[39] + bf0[38];
1365
452k
    bf1[40] = bf0[40] + bf0[41];
1366
452k
    bf1[41] = -bf0[41] + bf0[40];
1367
452k
    bf1[42] = -bf0[42] + bf0[43];
1368
452k
    bf1[43] = bf0[43] + bf0[42];
1369
452k
    bf1[44] = bf0[44] + bf0[45];
1370
452k
    bf1[45] = -bf0[45] + bf0[44];
1371
452k
    bf1[46] = -bf0[46] + bf0[47];
1372
452k
    bf1[47] = bf0[47] + bf0[46];
1373
452k
    bf1[48] = bf0[48] + bf0[49];
1374
452k
    bf1[49] = -bf0[49] + bf0[48];
1375
452k
    bf1[50] = -bf0[50] + bf0[51];
1376
452k
    bf1[51] = bf0[51] + bf0[50];
1377
452k
    bf1[52] = bf0[52] + bf0[53];
1378
452k
    bf1[53] = -bf0[53] + bf0[52];
1379
452k
    bf1[54] = -bf0[54] + bf0[55];
1380
452k
    bf1[55] = bf0[55] + bf0[54];
1381
452k
    bf1[56] = bf0[56] + bf0[57];
1382
452k
    bf1[57] = -bf0[57] + bf0[56];
1383
452k
    bf1[58] = -bf0[58] + bf0[59];
1384
452k
    bf1[59] = bf0[59] + bf0[58];
1385
452k
    bf1[60] = bf0[60] + bf0[61];
1386
452k
    bf1[61] = -bf0[61] + bf0[60];
1387
452k
    bf1[62] = -bf0[62] + bf0[63];
1388
452k
    bf1[63] = bf0[63] + bf0[62];
1389
1390
    // stage 10
1391
452k
    cospi   = cospi_arr(cos_bit);
1392
452k
    bf0     = output;
1393
452k
    bf1     = step;
1394
452k
    bf1[0]  = bf0[0];
1395
452k
    bf1[1]  = bf0[1];
1396
452k
    bf1[2]  = bf0[2];
1397
452k
    bf1[3]  = bf0[3];
1398
452k
    bf1[4]  = bf0[4];
1399
452k
    bf1[5]  = bf0[5];
1400
452k
    bf1[6]  = bf0[6];
1401
452k
    bf1[7]  = bf0[7];
1402
452k
    bf1[8]  = bf0[8];
1403
452k
    bf1[9]  = bf0[9];
1404
452k
    bf1[10] = bf0[10];
1405
452k
    bf1[11] = bf0[11];
1406
452k
    bf1[12] = bf0[12];
1407
452k
    bf1[13] = bf0[13];
1408
452k
    bf1[14] = bf0[14];
1409
452k
    bf1[15] = bf0[15];
1410
452k
    bf1[16] = bf0[16];
1411
452k
    bf1[17] = bf0[17];
1412
452k
    bf1[18] = bf0[18];
1413
452k
    bf1[19] = bf0[19];
1414
452k
    bf1[20] = bf0[20];
1415
452k
    bf1[21] = bf0[21];
1416
452k
    bf1[22] = bf0[22];
1417
452k
    bf1[23] = bf0[23];
1418
452k
    bf1[24] = bf0[24];
1419
452k
    bf1[25] = bf0[25];
1420
452k
    bf1[26] = bf0[26];
1421
452k
    bf1[27] = bf0[27];
1422
452k
    bf1[28] = bf0[28];
1423
452k
    bf1[29] = bf0[29];
1424
452k
    bf1[30] = bf0[30];
1425
452k
    bf1[31] = bf0[31];
1426
452k
    bf1[32] = half_btf(cospi[63], bf0[32], cospi[1], bf0[63], cos_bit);
1427
452k
    bf1[33] = half_btf(cospi[31], bf0[33], cospi[33], bf0[62], cos_bit);
1428
452k
    bf1[34] = half_btf(cospi[47], bf0[34], cospi[17], bf0[61], cos_bit);
1429
452k
    bf1[35] = half_btf(cospi[15], bf0[35], cospi[49], bf0[60], cos_bit);
1430
452k
    bf1[36] = half_btf(cospi[55], bf0[36], cospi[9], bf0[59], cos_bit);
1431
452k
    bf1[37] = half_btf(cospi[23], bf0[37], cospi[41], bf0[58], cos_bit);
1432
452k
    bf1[38] = half_btf(cospi[39], bf0[38], cospi[25], bf0[57], cos_bit);
1433
452k
    bf1[39] = half_btf(cospi[7], bf0[39], cospi[57], bf0[56], cos_bit);
1434
452k
    bf1[40] = half_btf(cospi[59], bf0[40], cospi[5], bf0[55], cos_bit);
1435
452k
    bf1[41] = half_btf(cospi[27], bf0[41], cospi[37], bf0[54], cos_bit);
1436
452k
    bf1[42] = half_btf(cospi[43], bf0[42], cospi[21], bf0[53], cos_bit);
1437
452k
    bf1[43] = half_btf(cospi[11], bf0[43], cospi[53], bf0[52], cos_bit);
1438
452k
    bf1[44] = half_btf(cospi[51], bf0[44], cospi[13], bf0[51], cos_bit);
1439
452k
    bf1[45] = half_btf(cospi[19], bf0[45], cospi[45], bf0[50], cos_bit);
1440
452k
    bf1[46] = half_btf(cospi[35], bf0[46], cospi[29], bf0[49], cos_bit);
1441
452k
    bf1[47] = half_btf(cospi[3], bf0[47], cospi[61], bf0[48], cos_bit);
1442
452k
    bf1[48] = half_btf(cospi[3], bf0[48], -cospi[61], bf0[47], cos_bit);
1443
452k
    bf1[49] = half_btf(cospi[35], bf0[49], -cospi[29], bf0[46], cos_bit);
1444
452k
    bf1[50] = half_btf(cospi[19], bf0[50], -cospi[45], bf0[45], cos_bit);
1445
452k
    bf1[51] = half_btf(cospi[51], bf0[51], -cospi[13], bf0[44], cos_bit);
1446
452k
    bf1[52] = half_btf(cospi[11], bf0[52], -cospi[53], bf0[43], cos_bit);
1447
452k
    bf1[53] = half_btf(cospi[43], bf0[53], -cospi[21], bf0[42], cos_bit);
1448
452k
    bf1[54] = half_btf(cospi[27], bf0[54], -cospi[37], bf0[41], cos_bit);
1449
452k
    bf1[55] = half_btf(cospi[59], bf0[55], -cospi[5], bf0[40], cos_bit);
1450
452k
    bf1[56] = half_btf(cospi[7], bf0[56], -cospi[57], bf0[39], cos_bit);
1451
452k
    bf1[57] = half_btf(cospi[39], bf0[57], -cospi[25], bf0[38], cos_bit);
1452
452k
    bf1[58] = half_btf(cospi[23], bf0[58], -cospi[41], bf0[37], cos_bit);
1453
452k
    bf1[59] = half_btf(cospi[55], bf0[59], -cospi[9], bf0[36], cos_bit);
1454
452k
    bf1[60] = half_btf(cospi[15], bf0[60], -cospi[49], bf0[35], cos_bit);
1455
452k
    bf1[61] = half_btf(cospi[47], bf0[61], -cospi[17], bf0[34], cos_bit);
1456
452k
    bf1[62] = half_btf(cospi[31], bf0[62], -cospi[33], bf0[33], cos_bit);
1457
452k
    bf1[63] = half_btf(cospi[63], bf0[63], -cospi[1], bf0[32], cos_bit);
1458
1459
    // stage 11
1460
452k
    bf0     = step;
1461
452k
    bf1     = output;
1462
452k
    bf1[0]  = bf0[0];
1463
452k
    bf1[1]  = bf0[32];
1464
452k
    bf1[2]  = bf0[16];
1465
452k
    bf1[3]  = bf0[48];
1466
452k
    bf1[4]  = bf0[8];
1467
452k
    bf1[5]  = bf0[40];
1468
452k
    bf1[6]  = bf0[24];
1469
452k
    bf1[7]  = bf0[56];
1470
452k
    bf1[8]  = bf0[4];
1471
452k
    bf1[9]  = bf0[36];
1472
452k
    bf1[10] = bf0[20];
1473
452k
    bf1[11] = bf0[52];
1474
452k
    bf1[12] = bf0[12];
1475
452k
    bf1[13] = bf0[44];
1476
452k
    bf1[14] = bf0[28];
1477
452k
    bf1[15] = bf0[60];
1478
452k
    bf1[16] = bf0[2];
1479
452k
    bf1[17] = bf0[34];
1480
452k
    bf1[18] = bf0[18];
1481
452k
    bf1[19] = bf0[50];
1482
452k
    bf1[20] = bf0[10];
1483
452k
    bf1[21] = bf0[42];
1484
452k
    bf1[22] = bf0[26];
1485
452k
    bf1[23] = bf0[58];
1486
452k
    bf1[24] = bf0[6];
1487
452k
    bf1[25] = bf0[38];
1488
452k
    bf1[26] = bf0[22];
1489
452k
    bf1[27] = bf0[54];
1490
452k
    bf1[28] = bf0[14];
1491
452k
    bf1[29] = bf0[46];
1492
452k
    bf1[30] = bf0[30];
1493
452k
    bf1[31] = bf0[62];
1494
452k
    bf1[32] = bf0[1];
1495
452k
    bf1[33] = bf0[33];
1496
452k
    bf1[34] = bf0[17];
1497
452k
    bf1[35] = bf0[49];
1498
452k
    bf1[36] = bf0[9];
1499
452k
    bf1[37] = bf0[41];
1500
452k
    bf1[38] = bf0[25];
1501
452k
    bf1[39] = bf0[57];
1502
452k
    bf1[40] = bf0[5];
1503
452k
    bf1[41] = bf0[37];
1504
452k
    bf1[42] = bf0[21];
1505
452k
    bf1[43] = bf0[53];
1506
452k
    bf1[44] = bf0[13];
1507
452k
    bf1[45] = bf0[45];
1508
452k
    bf1[46] = bf0[29];
1509
452k
    bf1[47] = bf0[61];
1510
452k
    bf1[48] = bf0[3];
1511
452k
    bf1[49] = bf0[35];
1512
452k
    bf1[50] = bf0[19];
1513
452k
    bf1[51] = bf0[51];
1514
452k
    bf1[52] = bf0[11];
1515
452k
    bf1[53] = bf0[43];
1516
452k
    bf1[54] = bf0[27];
1517
452k
    bf1[55] = bf0[59];
1518
452k
    bf1[56] = bf0[7];
1519
452k
    bf1[57] = bf0[39];
1520
452k
    bf1[58] = bf0[23];
1521
452k
    bf1[59] = bf0[55];
1522
452k
    bf1[60] = bf0[15];
1523
452k
    bf1[61] = bf0[47];
1524
452k
    bf1[62] = bf0[31];
1525
452k
    bf1[63] = bf0[63];
1526
452k
}
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
459k
TxfmFunc svt_aom_fwd_txfm_type_to_func(TxfmType txfmtype) {
2362
459k
    switch (txfmtype) {
2363
10.4k
    case TXFM_TYPE_DCT4:
2364
10.4k
        return svt_av1_fdct4_new;
2365
418k
    case TXFM_TYPE_DCT8:
2366
418k
        return svt_av1_fdct8_new;
2367
7.76k
    case TXFM_TYPE_DCT16:
2368
7.76k
        return svt_av1_fdct16_new;
2369
14.5k
    case TXFM_TYPE_DCT32:
2370
14.5k
        return svt_av1_fdct32_new;
2371
8.14k
    case TXFM_TYPE_DCT64:
2372
8.14k
        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
459k
    }
2395
459k
}
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
229k
                                             const Txfm2dFlipCfg* cfg, int32_t* buf, uint8_t bit_depth) {
2400
229k
    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
229k
    const int32_t txfm_size_col = tx_size_wide[cfg->tx_size];
2408
229k
    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
229k
    const int8_t* shift     = cfg->shift;
2411
229k
    const int32_t rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
2412
229k
    int8_t        stage_range_col[MAX_TXFM_STAGE_NUM];
2413
229k
    int8_t        stage_range_row[MAX_TXFM_STAGE_NUM];
2414
229k
    assert(cfg->stage_num_col <= MAX_TXFM_STAGE_NUM);
2415
229k
    assert(cfg->stage_num_row <= MAX_TXFM_STAGE_NUM);
2416
229k
    svt_av1_gen_fwd_stage_range(stage_range_col, stage_range_row, cfg, bit_depth);
2417
2418
229k
    const int8_t   cos_bit_col   = cfg->cos_bit_col;
2419
229k
    const int8_t   cos_bit_row   = cfg->cos_bit_row;
2420
229k
    const TxfmFunc txfm_func_col = svt_aom_fwd_txfm_type_to_func(cfg->txfm_type_col);
2421
229k
    const TxfmFunc txfm_func_row = svt_aom_fwd_txfm_type_to_func(cfg->txfm_type_row);
2422
229k
    ASSERT(txfm_func_col != NULL);
2423
229k
    ASSERT(txfm_func_row != NULL);
2424
    // use output buffer as temp buffer
2425
229k
    int32_t* temp_in  = output;
2426
229k
    int32_t* temp_out = output + txfm_size_row;
2427
2428
    // Columns
2429
2.50M
    for (c = 0; c < txfm_size_col; ++c) {
2430
2.27M
        if (cfg->ud_flip == 0) {
2431
39.5M
            for (r = 0; r < txfm_size_row; ++r) {
2432
37.3M
                temp_in[r] = input[r * input_stride + c];
2433
37.3M
            }
2434
2.27M
        } else {
2435
242
            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
242
        }
2440
2.27M
        svt_av1_round_shift_array_c(temp_in, txfm_size_row, -shift[0]); // NM svt_av1_round_shift_array_c
2441
2.27M
        txfm_func_col(temp_in, temp_out, cos_bit_col, stage_range_col);
2442
2.27M
        svt_av1_round_shift_array_c(temp_out, txfm_size_row, -shift[1]); // NM svt_av1_round_shift_array_c
2443
2.28M
        if (cfg->lr_flip == 0) {
2444
39.6M
            for (r = 0; r < txfm_size_row; ++r) {
2445
37.3M
                buf[r * txfm_size_col + c] = temp_out[r];
2446
37.3M
            }
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
2.27M
    }
2454
2455
    // Rows
2456
2.44M
    for (r = 0; r < txfm_size_row; ++r) {
2457
2.21M
        txfm_func_row(buf + r * txfm_size_col, output + r * txfm_size_col, cos_bit_row, stage_range_row);
2458
2.21M
        svt_av1_round_shift_array_c(output + r * txfm_size_col, txfm_size_col, -shift[2]);
2459
2460
2.21M
        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.39M
            for (c = 0; c < txfm_size_col; ++c) {
2464
4.33M
                output[r * txfm_size_col + c] = round_shift((int64_t)output[r * txfm_size_col + c] * new_sqrt2,
2465
4.33M
                                                            new_sqrt2_bits);
2466
4.33M
            }
2467
67.6k
        }
2468
2.21M
    }
2469
229k
}
2470
2471
229k
static INLINE void set_fwd_txfm_non_scale_range(Txfm2dFlipCfg* cfg) {
2472
229k
    av1_zero(cfg->stage_range_col);
2473
229k
    av1_zero(cfg->stage_range_row);
2474
2475
229k
    if (cfg->txfm_type_col == TXFM_TYPE_INVALID) {
2476
0
        return;
2477
0
    }
2478
2479
229k
    const int8_t* range_mult2_col = fwd_txfm_range_mult2_list[cfg->txfm_type_col];
2480
229k
    const int32_t stage_num_col   = MIN(cfg->stage_num_col, MAX_TXFM_STAGE_NUM);
2481
1.65M
    for (int32_t i = 0; i < stage_num_col; ++i) {
2482
1.42M
        cfg->stage_range_col[i] = (range_mult2_col[i] + 1) >> 1;
2483
1.42M
    }
2484
2485
229k
    if (cfg->txfm_type_row != TXFM_TYPE_INVALID) {
2486
229k
        const int8_t* range_mult2_row = fwd_txfm_range_mult2_list[cfg->txfm_type_row];
2487
229k
        const int32_t stage_num_row   = MIN(cfg->stage_num_row, MAX_TXFM_STAGE_NUM);
2488
1.65M
        for (int32_t i = 0; i < stage_num_row; ++i) {
2489
1.43M
            cfg->stage_range_row[i] = (range_mult2_col[cfg->stage_num_col - 1] + range_mult2_row[i] + 1) >> 1;
2490
1.43M
        }
2491
229k
    }
2492
229k
}
2493
2494
229k
void svt_aom_transform_config(TxType tx_type, TxSize tx_size, Txfm2dFlipCfg* cfg) {
2495
229k
    assert(cfg != NULL);
2496
229k
    cfg->tx_size = tx_size;
2497
229k
    set_flip_cfg(tx_type, cfg);
2498
229k
    const TxType1D tx_type_1d_col = vtx_tab[tx_type];
2499
229k
    const TxType1D tx_type_1d_row = htx_tab[tx_type];
2500
229k
    const int32_t  txw_idx        = tx_size_wide_log2[tx_size] - tx_size_wide_log2[0];
2501
229k
    const int32_t  txh_idx        = tx_size_high_log2[tx_size] - tx_size_high_log2[0];
2502
229k
    cfg->shift                    = fwd_txfm_shift_ls[tx_size];
2503
229k
    cfg->cos_bit_col              = fwd_cos_bit_col[txw_idx][txh_idx];
2504
229k
    cfg->cos_bit_row              = fwd_cos_bit_row[txw_idx][txh_idx];
2505
229k
    cfg->txfm_type_col            = av1_txfm_type_ls[txh_idx][tx_type_1d_col];
2506
229k
    cfg->txfm_type_row            = av1_txfm_type_ls[txw_idx][tx_type_1d_row];
2507
229k
    cfg->stage_num_col            = av1_txfm_stage_num_list[cfg->txfm_type_col];
2508
229k
    cfg->stage_num_row            = av1_txfm_stage_num_list[cfg->txfm_type_row];
2509
229k
    set_fwd_txfm_non_scale_range(cfg);
2510
229k
}
2511
2512
8.13k
static uint64_t energy_computation(int32_t* coeff, uint32_t coeff_stride, uint32_t area_width, uint32_t area_height) {
2513
8.13k
    uint64_t prediction_distortion = 0;
2514
2515
268k
    for (uint32_t row_index = 0; row_index < area_height; ++row_index) {
2516
11.6M
        for (uint32_t column_index = 0; column_index < area_width; ++column_index) {
2517
11.3M
            prediction_distortion += (int64_t)SQR((int64_t)(coeff[column_index]));
2518
11.3M
        }
2519
259k
        coeff += coeff_stride;
2520
259k
    }
2521
2522
8.13k
    return prediction_distortion;
2523
8.13k
}
2524
2525
3.01k
uint64_t svt_handle_transform64x64_c(int32_t* output) {
2526
3.01k
    uint64_t three_quad_energy;
2527
2528
    // top - right 32x32 area.
2529
3.01k
    three_quad_energy = energy_computation(output + 32, 64, 32, 32);
2530
    //bottom 64x32 area.
2531
3.01k
    three_quad_energy += energy_computation(output + 32 * 64, 64, 64, 32);
2532
2533
    // Re-pack non-zero coeffs in the first 32x32 indices.
2534
96.4k
    for (int32_t row = 1; row < 32; ++row) {
2535
93.4k
        svt_memcpy_c(output + row * 32, output + row * 64, 32 * sizeof(*output));
2536
93.4k
    }
2537
2538
3.01k
    return three_quad_energy;
2539
3.01k
}
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.01k
                                     uint8_t bit_depth) {
2543
3.01k
    int32_t       intermediate_transform_buffer[64 * 64];
2544
3.01k
    Txfm2dFlipCfg cfg;
2545
    //av1_get_fwd_txfm_cfg
2546
3.01k
    svt_aom_transform_config(transform_type, TX_64X64, &cfg);
2547
    //fwd_txfm2d_c
2548
3.01k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2549
3.01k
}
2550
2551
void svt_av1_transform_two_d_32x32_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2552
6.19k
                                     uint8_t bit_depth) {
2553
6.19k
    int32_t       intermediate_transform_buffer[32 * 32];
2554
6.19k
    Txfm2dFlipCfg cfg;
2555
2556
6.19k
    svt_aom_transform_config(transform_type, TX_32X32, &cfg);
2557
2558
6.19k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2559
6.19k
}
2560
2561
void svt_av1_transform_two_d_16x16_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2562
3.88k
                                     uint8_t bit_depth) {
2563
3.88k
    int32_t       intermediate_transform_buffer[16 * 16];
2564
3.88k
    Txfm2dFlipCfg cfg;
2565
2566
3.88k
    svt_aom_transform_config(transform_type, TX_16X16, &cfg);
2567
2568
3.88k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2569
3.88k
}
2570
2571
void svt_av1_transform_two_d_8x8_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
2572
209k
                                   uint8_t bit_depth) {
2573
209k
    int32_t       intermediate_transform_buffer[8 * 8];
2574
209k
    Txfm2dFlipCfg cfg;
2575
2576
209k
    svt_aom_transform_config(transform_type, TX_8X8, &cfg);
2577
2578
209k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2579
209k
}
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.20k
                                   uint8_t bit_depth) {
2583
5.20k
    int32_t       intermediate_transform_buffer[4 * 4];
2584
5.20k
    Txfm2dFlipCfg cfg;
2585
2586
5.20k
    svt_aom_transform_config(transform_type, TX_4X4, &cfg);
2587
2588
5.20k
    av1_tranform_two_d_core_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2589
5.20k
}
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.11k
                                uint8_t bit_depth) {
2596
2.11k
    int32_t       intermediate_transform_buffer[64 * 32];
2597
2.11k
    Txfm2dFlipCfg cfg;
2598
    /*av1_get_fwd_txfm_cfg*/
2599
2.11k
    svt_aom_transform_config(transform_type, TX_64X32, &cfg);
2600
2.11k
    /*fwd_txfm2d_c*/ av1_tranform_two_d_core_c(
2601
2.11k
        input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
2602
2.11k
}
2603
2604
2.11k
uint64_t svt_handle_transform64x32_c(int32_t* output) {
2605
    // top - right 32x32 area.
2606
2.11k
    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
67.6k
    for (int32_t row = 1; row < 32; ++row) {
2610
65.5k
        svt_memcpy_c(output + row * 32, output + row * 64, 32 * sizeof(*output));
2611
65.5k
    }
2612
2613
2.11k
    return three_quad_energy;
2614
2.11k
}
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 && CONFIG_ENABLE_TX_PF_ALL
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 && CONFIG_ENABLE_TX_PF_ALL
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
#if CONFIG_ENABLE_TX_PF_ALL
3150
static EbErrorType av1_estimate_transform_ONLY_DC(int16_t* residual_buffer, uint32_t residual_stride,
3151
                                                  int32_t* coeff_buffer, uint32_t coeff_stride, TxSize transform_size,
3152
                                                  uint64_t* three_quad_energy, uint32_t bit_depth,
3153
                                                  TxType transform_type, PlaneType component_type)
3154
3155
0
{
3156
0
    EbErrorType return_error = av1_estimate_transform_N4(residual_buffer,
3157
0
                                                         residual_stride,
3158
0
                                                         coeff_buffer,
3159
0
                                                         coeff_stride,
3160
0
                                                         transform_size,
3161
0
                                                         three_quad_energy,
3162
0
                                                         bit_depth,
3163
0
                                                         transform_type,
3164
0
                                                         component_type);
3165
3166
0
    for (int i = 1; i < (tx_size_wide[transform_size] * tx_size_high[transform_size]); i++) {
3167
0
        if (i % tx_size_wide[transform_size] < (tx_size_wide[transform_size] >> 2) ||
3168
0
            i / tx_size_wide[transform_size] < (tx_size_high[transform_size] >> 2)) {
3169
0
            coeff_buffer[i] = 0;
3170
0
        }
3171
0
    }
3172
0
    return return_error;
3173
0
}
3174
#endif // CONFIG_ENABLE_TX_PF_ALL
3175
3176
static EbErrorType av1_estimate_transform_default(int16_t* residual_buffer, uint32_t residual_stride,
3177
                                                  int32_t* coeff_buffer, uint32_t coeff_stride, TxSize transform_size,
3178
                                                  uint64_t* three_quad_energy, uint32_t bit_depth,
3179
                                                  TxType transform_type, PlaneType component_type)
3180
3181
229k
{
3182
229k
    EbErrorType return_error = EB_ErrorNone;
3183
3184
229k
    (void)coeff_stride;
3185
229k
    (void)component_type;
3186
3187
229k
    switch (transform_size) {
3188
2.11k
    case TX_64X32:
3189
2.11k
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3190
2.11k
        if (transform_type != DCT_DCT) {
3191
0
            svt_av1_fwd_txfm2d_64x32_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3192
0
        } else
3193
2.11k
#endif
3194
2.11k
        {
3195
2.11k
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3196
2.11k
            svt_av1_fwd_txfm2d_64x32(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3197
2.11k
        }
3198
3199
2.11k
        *three_quad_energy = svt_handle_transform64x32(coeff_buffer);
3200
3201
2.11k
        break;
3202
3203
0
    case TX_32X64:
3204
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3205
0
        if (transform_type != DCT_DCT) {
3206
0
            svt_av1_fwd_txfm2d_32x64_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3207
0
        } else
3208
0
#endif
3209
0
        {
3210
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3211
0
            svt_av1_fwd_txfm2d_32x64(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3212
0
        }
3213
3214
0
        *three_quad_energy = svt_handle_transform32x64(coeff_buffer);
3215
3216
0
        break;
3217
3218
0
    case TX_64X16:
3219
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3220
0
        if (transform_type != DCT_DCT) {
3221
0
            svt_av1_fwd_txfm2d_64x16_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3222
0
        } else
3223
0
#endif
3224
0
        {
3225
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3226
0
            svt_av1_fwd_txfm2d_64x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3227
0
        }
3228
3229
0
        *three_quad_energy = svt_handle_transform64x16(coeff_buffer);
3230
3231
0
        break;
3232
3233
0
    case TX_16X64:
3234
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3235
0
        if (transform_type != DCT_DCT) {
3236
0
            svt_av1_fwd_txfm2d_16x64_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3237
0
        } else
3238
0
#endif
3239
0
        {
3240
0
            assert(transform_type == DCT_DCT); // non-DCT at large/rect tx forbidden by ext-tx set
3241
0
            svt_av1_fwd_txfm2d_16x64(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3242
0
        }
3243
3244
0
        *three_quad_energy = svt_handle_transform16x64(coeff_buffer);
3245
3246
0
        break;
3247
3248
0
    case TX_32X16:
3249
        // TTK
3250
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3251
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3252
0
            svt_av1_fwd_txfm2d_32x16_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3253
0
        } else
3254
0
#endif
3255
0
        {
3256
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3257
0
            svt_av1_fwd_txfm2d_32x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3258
0
        }
3259
0
        break;
3260
3261
0
    case TX_16X32:
3262
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3263
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3264
0
            svt_av1_fwd_txfm2d_16x32_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3265
0
        } else
3266
0
#endif
3267
0
        {
3268
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3269
0
            svt_av1_fwd_txfm2d_16x32(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3270
0
        }
3271
0
        break;
3272
3273
0
    case TX_16X8:
3274
0
        svt_av1_fwd_txfm2d_16x8(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3275
0
        break;
3276
3277
0
    case TX_8X16:
3278
0
        svt_av1_fwd_txfm2d_8x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3279
0
        break;
3280
3281
0
    case TX_32X8:
3282
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3283
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3284
0
            svt_av1_fwd_txfm2d_32x8_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3285
0
        } else
3286
0
#endif
3287
0
        {
3288
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3289
0
            svt_av1_fwd_txfm2d_32x8(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3290
0
        }
3291
0
        break;
3292
3293
0
    case TX_8X32:
3294
0
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3295
0
        if (transform_type != DCT_DCT && transform_type != IDTX) {
3296
0
            svt_av1_fwd_txfm2d_8x32_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3297
0
        } else
3298
0
#endif
3299
0
        {
3300
0
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3301
0
            svt_av1_fwd_txfm2d_8x32(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3302
0
        }
3303
0
        break;
3304
0
    case TX_16X4:
3305
0
        svt_av1_fwd_txfm2d_16x4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3306
0
        break;
3307
0
    case TX_4X16:
3308
0
        svt_av1_fwd_txfm2d_4x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3309
0
        break;
3310
0
    case TX_8X4:
3311
3312
0
        svt_av1_fwd_txfm2d_8x4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3313
3314
0
        break;
3315
0
    case TX_4X8:
3316
3317
0
        svt_av1_fwd_txfm2d_4x8(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3318
3319
0
        break;
3320
3321
3.01k
    case TX_64X64:
3322
3323
3.01k
        svt_av1_fwd_txfm2d_64x64(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3324
3325
3.01k
        *three_quad_energy = svt_handle_transform64x64(coeff_buffer);
3326
3327
3.01k
        break;
3328
3329
6.19k
    case TX_32X32:
3330
6.19k
#if CONFIG_ENABLE_NON_DCT_LARGE_TX
3331
6.19k
        if (transform_type == V_DCT || transform_type == H_DCT || transform_type == V_ADST ||
3332
6.19k
            transform_type == H_ADST || transform_type == V_FLIPADST || transform_type == H_FLIPADST) {
3333
            // Non-DCT at 32x32 is forbidden by the ext-tx set (never hit); C fallback only.
3334
0
            svt_av1_transform_two_d_32x32_c(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3335
0
        } else
3336
6.19k
#endif
3337
6.19k
        {
3338
6.19k
            assert(transform_type == DCT_DCT || transform_type == IDTX);
3339
6.19k
            svt_av1_fwd_txfm2d_32x32(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3340
6.19k
        }
3341
3342
6.19k
        break;
3343
3344
3.88k
    case TX_16X16:
3345
3346
3.88k
        svt_av1_fwd_txfm2d_16x16(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3347
3348
3.88k
        break;
3349
209k
    case TX_8X8:
3350
3351
209k
        svt_av1_fwd_txfm2d_8x8(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3352
3353
209k
        break;
3354
5.20k
    case TX_4X4:
3355
3356
5.20k
        svt_av1_fwd_txfm2d_4x4(residual_buffer, coeff_buffer, residual_stride, transform_type, bit_depth);
3357
3358
5.20k
        break;
3359
0
    default:
3360
0
        assert(0);
3361
0
        break;
3362
229k
    }
3363
3364
229k
    return return_error;
3365
229k
}
3366
3367
/* 4-point reversible, orthonormal Walsh-Hadamard in 3.5 adds, 0.5 shifts per
3368
   pixel.
3369
   Shared for both high and low bit depth.
3370
 */
3371
1.20M
void svt_av1_fwht4x4_c(int16_t* input, int32_t* output, uint32_t stride) {
3372
1.20M
    int            i;
3373
1.20M
    int64_t        a1, b1, c1, d1, e1;
3374
1.20M
    const int16_t* ip_pass0 = input;
3375
1.20M
    const int32_t* ip       = NULL;
3376
1.20M
    int32_t*       op       = output;
3377
3378
5.99M
    for (i = 0; i < 4; i++) {
3379
4.79M
        a1 = ip_pass0[0 * stride];
3380
4.79M
        b1 = ip_pass0[1 * stride];
3381
4.79M
        c1 = ip_pass0[2 * stride];
3382
4.79M
        d1 = ip_pass0[3 * stride];
3383
3384
4.79M
        a1 += b1;
3385
4.79M
        d1 = d1 - c1;
3386
4.79M
        e1 = (a1 - d1) >> 1;
3387
4.79M
        b1 = e1 - b1;
3388
4.79M
        c1 = e1 - c1;
3389
4.79M
        a1 -= c1;
3390
4.79M
        d1 += b1;
3391
4.79M
        op[0] = (int32_t)a1;
3392
4.79M
        op[1] = (int32_t)c1;
3393
4.79M
        op[2] = (int32_t)d1;
3394
4.79M
        op[3] = (int32_t)b1;
3395
3396
4.79M
        ip_pass0++;
3397
4.79M
        op += 4;
3398
4.79M
    }
3399
1.20M
    ip = output;
3400
1.20M
    op = output;
3401
3402
5.97M
    for (i = 0; i < 4; i++) {
3403
4.77M
        a1 = ip[4 * 0];
3404
4.77M
        b1 = ip[4 * 1];
3405
4.77M
        c1 = ip[4 * 2];
3406
4.77M
        d1 = ip[4 * 3];
3407
3408
4.77M
        a1 += b1;
3409
4.77M
        d1 -= c1;
3410
4.77M
        e1 = (a1 - d1) >> 1;
3411
4.77M
        b1 = e1 - b1;
3412
4.77M
        c1 = e1 - c1;
3413
4.77M
        a1 -= c1;
3414
4.77M
        d1 += b1;
3415
4.77M
        op[4 * 0] = (int32_t)(a1 * UNIT_QUANT_FACTOR);
3416
4.77M
        op[4 * 1] = (int32_t)(c1 * UNIT_QUANT_FACTOR);
3417
4.77M
        op[4 * 2] = (int32_t)(d1 * UNIT_QUANT_FACTOR);
3418
4.77M
        op[4 * 3] = (int32_t)(b1 * UNIT_QUANT_FACTOR);
3419
3420
4.77M
        ip++;
3421
4.77M
        op++;
3422
4.77M
    }
3423
1.20M
}
3424
3425
/*********************************************************************
3426
* Transform
3427
*   Note there is an implicit assumption that TU Size <= PU Size,
3428
*   which is different than the HEVC requirements.
3429
*********************************************************************/
3430
EbErrorType svt_aom_estimate_transform(PictureControlSet* pcs, ModeDecisionContext* ctx, int16_t* residual_buffer,
3431
                                       uint32_t residual_stride, int32_t* coeff_buffer, uint32_t coeff_stride,
3432
                                       TxSize transform_size, uint64_t* three_quad_energy, uint32_t bit_depth,
3433
                                       TxType transform_type, PlaneType component_type, TxCoeffShape trans_coeff_shape)
3434
3435
1.43M
{
3436
1.43M
    (void)trans_coeff_shape;
3437
1.43M
    (void)coeff_stride;
3438
1.43M
    (void)component_type;
3439
3440
    // Lossless uses a 4x4 WHT; guard on TX_4X4 so larger sizes fall through and
3441
    // fill the full coeff_buffer, avoiding an uninitialized read. Fixes gitlab#2373.
3442
1.43M
    if (svt_av1_is_lossless_segment(pcs, ctx->blk_ptr->segment_id) && transform_size == TX_4X4) {
3443
1.20M
        assert(transform_type == DCT_DCT);
3444
1.20M
        int32_t dst[16];
3445
3446
1.20M
        svt_av1_fwht4x4(residual_buffer, dst, residual_stride);
3447
5.85M
        for (int i = 0; i < 4; i++) {
3448
22.9M
            for (int j = 0; j < 4; j++) {
3449
18.2M
                coeff_buffer[(j << 2) + i] = dst[(i << 2) + j];
3450
18.2M
            }
3451
4.65M
        }
3452
1.20M
        return EB_ErrorNone;
3453
1.20M
    }
3454
3455
228k
    switch (trans_coeff_shape) {
3456
229k
    case DEFAULT_SHAPE:
3457
229k
        return av1_estimate_transform_default(residual_buffer,
3458
229k
                                              residual_stride,
3459
229k
                                              coeff_buffer,
3460
229k
                                              coeff_stride,
3461
229k
                                              transform_size,
3462
229k
                                              three_quad_energy,
3463
229k
                                              bit_depth,
3464
229k
                                              transform_type,
3465
229k
                                              component_type);
3466
0
#if CONFIG_ENABLE_TX_PF_N2 && CONFIG_ENABLE_TX_PF_ALL
3467
0
    case N2_SHAPE:
3468
0
        return av1_estimate_transform_N2(residual_buffer,
3469
0
                                         residual_stride,
3470
0
                                         coeff_buffer,
3471
0
                                         coeff_stride,
3472
0
                                         transform_size,
3473
0
                                         three_quad_energy,
3474
0
                                         bit_depth,
3475
0
                                         transform_type,
3476
0
                                         component_type);
3477
0
#endif
3478
0
    case N4_SHAPE:
3479
0
        return av1_estimate_transform_N4(residual_buffer,
3480
0
                                         residual_stride,
3481
0
                                         coeff_buffer,
3482
0
                                         coeff_stride,
3483
0
                                         transform_size,
3484
0
                                         three_quad_energy,
3485
0
                                         bit_depth,
3486
0
                                         transform_type,
3487
0
                                         component_type);
3488
0
#if CONFIG_ENABLE_TX_PF_ALL
3489
0
    case ONLY_DC_SHAPE:
3490
0
        return av1_estimate_transform_ONLY_DC(residual_buffer,
3491
0
                                              residual_stride,
3492
0
                                              coeff_buffer,
3493
0
                                              coeff_stride,
3494
0
                                              transform_size,
3495
0
                                              three_quad_energy,
3496
0
                                              bit_depth,
3497
0
                                              transform_type,
3498
0
                                              component_type);
3499
0
#endif
3500
0
    default:
3501
0
        break;
3502
228k
    }
3503
3504
228k
    assert(0);
3505
0
    return EB_ErrorBadParameter;
3506
228k
}
3507
3508
// PF_N4
3509
0
static void highbd_fwd_txfm_64x64_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3510
0
    assert(txfm_param->tx_type == DCT_DCT);
3511
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3512
0
    const int bd        = txfm_param->bd;
3513
0
    svt_av1_fwd_txfm2d_64x64_N4(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3514
0
}
3515
3516
0
static void highbd_fwd_txfm_32x64_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3517
0
    assert(txfm_param->tx_type == DCT_DCT);
3518
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3519
0
    const int bd        = txfm_param->bd;
3520
0
    svt_av1_fwd_txfm2d_32x64_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3521
0
}
3522
3523
0
static void highbd_fwd_txfm_64x32_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3524
0
    assert(txfm_param->tx_type == DCT_DCT);
3525
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3526
0
    const int bd        = txfm_param->bd;
3527
0
    svt_av1_fwd_txfm2d_64x32_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3528
0
}
3529
3530
0
static void highbd_fwd_txfm_16x64_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3531
0
    assert(txfm_param->tx_type == DCT_DCT);
3532
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3533
0
    const int bd        = txfm_param->bd;
3534
0
    svt_av1_fwd_txfm2d_16x64_N4(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3535
0
}
3536
3537
0
static void highbd_fwd_txfm_64x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3538
0
    assert(txfm_param->tx_type == DCT_DCT);
3539
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3540
0
    const int bd        = txfm_param->bd;
3541
0
    svt_av1_fwd_txfm2d_64x16_N4(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3542
0
}
3543
3544
0
static void highbd_fwd_txfm_32x32_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3545
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3546
0
    const TxType tx_type   = txfm_param->tx_type;
3547
0
    const int    bd        = txfm_param->bd;
3548
0
    svt_av1_fwd_txfm2d_32x32_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3549
0
}
3550
3551
0
static void highbd_fwd_txfm_16x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3552
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3553
0
    const TxType tx_type   = txfm_param->tx_type;
3554
0
    const int    bd        = txfm_param->bd;
3555
0
    svt_av1_fwd_txfm2d_16x16_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3556
0
}
3557
3558
0
static void highbd_fwd_txfm_8x8_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3559
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3560
0
    const TxType tx_type   = txfm_param->tx_type;
3561
0
    const int    bd        = txfm_param->bd;
3562
0
    svt_av1_fwd_txfm2d_8x8_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3563
0
}
3564
3565
0
static void highbd_fwd_txfm_4x8_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3566
0
    int32_t* dst_coeff = (int32_t*)coeff;
3567
0
    svt_av1_fwd_txfm2d_4x8_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3568
0
}
3569
3570
0
static void highbd_fwd_txfm_8x4_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3571
0
    int32_t* dst_coeff = (int32_t*)coeff;
3572
0
    svt_av1_fwd_txfm2d_8x4_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3573
0
}
3574
3575
0
static void highbd_fwd_txfm_8x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3576
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3577
0
    const TxType tx_type   = txfm_param->tx_type;
3578
0
    const int    bd        = txfm_param->bd;
3579
0
    svt_av1_fwd_txfm2d_8x16_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3580
0
}
3581
3582
0
static void highbd_fwd_txfm_16x8_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3583
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3584
0
    const TxType tx_type   = txfm_param->tx_type;
3585
0
    const int    bd        = txfm_param->bd;
3586
0
    svt_av1_fwd_txfm2d_16x8_N4(src_diff, dst_coeff, diff_stride, tx_type, bd);
3587
0
}
3588
3589
0
static void highbd_fwd_txfm_16x32_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3590
0
    int32_t* dst_coeff = (int32_t*)coeff;
3591
0
    svt_av1_fwd_txfm2d_16x32_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3592
0
}
3593
3594
0
static void highbd_fwd_txfm_32x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3595
0
    int32_t* dst_coeff = (int32_t*)coeff;
3596
0
    svt_av1_fwd_txfm2d_32x16_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3597
0
}
3598
3599
0
static void highbd_fwd_txfm_4x16_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3600
0
    int32_t* dst_coeff = (int32_t*)coeff;
3601
0
    svt_av1_fwd_txfm2d_4x16(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3602
0
}
3603
3604
0
static void highbd_fwd_txfm_16x4_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3605
0
    int32_t* dst_coeff = (int32_t*)coeff;
3606
0
    svt_av1_fwd_txfm2d_16x4_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3607
0
}
3608
3609
0
static void highbd_fwd_txfm_8x32_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3610
0
    int32_t* dst_coeff = (int32_t*)coeff;
3611
0
    svt_av1_fwd_txfm2d_8x32_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3612
0
}
3613
3614
0
static void highbd_fwd_txfm_32x8_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3615
0
    int32_t* dst_coeff = (int32_t*)coeff;
3616
0
    svt_av1_fwd_txfm2d_32x8_N4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3617
0
}
3618
3619
//PF_N2
3620
// CONFIG_ENABLE_TX_PF_ALL: TPL (the only N2 user) codes 16x16, 16x4 and 32x8 only.
3621
#if CONFIG_ENABLE_TX_PF_ALL
3622
0
static void highbd_fwd_txfm_64x64_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3623
0
    assert(txfm_param->tx_type == DCT_DCT);
3624
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3625
0
    const int bd        = txfm_param->bd;
3626
0
    svt_av1_fwd_txfm2d_64x64_N2(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3627
0
}
3628
3629
0
static void highbd_fwd_txfm_32x64_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3630
0
    assert(txfm_param->tx_type == DCT_DCT);
3631
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3632
0
    const int bd        = txfm_param->bd;
3633
0
    svt_av1_fwd_txfm2d_32x64_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3634
0
}
3635
3636
0
static void highbd_fwd_txfm_64x32_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3637
0
    assert(txfm_param->tx_type == DCT_DCT);
3638
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3639
0
    const int bd        = txfm_param->bd;
3640
0
    svt_av1_fwd_txfm2d_64x32_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3641
0
}
3642
3643
0
static void highbd_fwd_txfm_16x64_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3644
0
    assert(txfm_param->tx_type == DCT_DCT);
3645
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3646
0
    const int bd        = txfm_param->bd;
3647
0
    svt_av1_fwd_txfm2d_16x64_N2(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3648
0
}
3649
3650
0
static void highbd_fwd_txfm_64x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3651
0
    assert(txfm_param->tx_type == DCT_DCT);
3652
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3653
0
    const int bd        = txfm_param->bd;
3654
0
    svt_av1_fwd_txfm2d_64x16_N2(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3655
0
}
3656
3657
0
static void highbd_fwd_txfm_32x32_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3658
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3659
0
    const TxType tx_type   = txfm_param->tx_type;
3660
0
    const int    bd        = txfm_param->bd;
3661
0
    svt_av1_fwd_txfm2d_32x32_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3662
0
}
3663
#endif // CONFIG_ENABLE_TX_PF_ALL
3664
3665
0
static void highbd_fwd_txfm_16x16_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_16x16_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3670
0
}
3671
3672
#if CONFIG_ENABLE_TX_PF_ALL
3673
0
static void highbd_fwd_txfm_8x8_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3674
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3675
0
    const TxType tx_type   = txfm_param->tx_type;
3676
0
    const int    bd        = txfm_param->bd;
3677
0
    svt_av1_fwd_txfm2d_8x8_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3678
0
}
3679
3680
0
static void highbd_fwd_txfm_4x8_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3681
0
    int32_t* dst_coeff = (int32_t*)coeff;
3682
0
    svt_av1_fwd_txfm2d_4x8_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3683
0
}
3684
3685
0
static void highbd_fwd_txfm_8x4_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3686
0
    int32_t* dst_coeff = (int32_t*)coeff;
3687
0
    svt_av1_fwd_txfm2d_8x4_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3688
0
}
3689
3690
0
static void highbd_fwd_txfm_8x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3691
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3692
0
    const TxType tx_type   = txfm_param->tx_type;
3693
0
    const int    bd        = txfm_param->bd;
3694
0
    svt_av1_fwd_txfm2d_8x16_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3695
0
}
3696
3697
0
static void highbd_fwd_txfm_16x8_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3698
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3699
0
    const TxType tx_type   = txfm_param->tx_type;
3700
0
    const int    bd        = txfm_param->bd;
3701
0
    svt_av1_fwd_txfm2d_16x8_N2(src_diff, dst_coeff, diff_stride, tx_type, bd);
3702
0
}
3703
3704
0
static void highbd_fwd_txfm_16x32_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3705
0
    int32_t* dst_coeff = (int32_t*)coeff;
3706
0
    svt_av1_fwd_txfm2d_16x32_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3707
0
}
3708
3709
0
static void highbd_fwd_txfm_32x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3710
0
    int32_t* dst_coeff = (int32_t*)coeff;
3711
0
    svt_av1_fwd_txfm2d_32x16_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3712
0
}
3713
3714
0
static void highbd_fwd_txfm_4x16_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3715
0
    int32_t* dst_coeff = (int32_t*)coeff;
3716
0
    svt_av1_fwd_txfm2d_4x16(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3717
0
}
3718
#endif // CONFIG_ENABLE_TX_PF_ALL
3719
3720
0
static void highbd_fwd_txfm_16x4_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3721
0
    int32_t* dst_coeff = (int32_t*)coeff;
3722
0
    svt_av1_fwd_txfm2d_16x4_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3723
0
}
3724
3725
#if CONFIG_ENABLE_TX_PF_ALL
3726
0
static void highbd_fwd_txfm_8x32_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3727
0
    int32_t* dst_coeff = (int32_t*)coeff;
3728
0
    svt_av1_fwd_txfm2d_8x32_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3729
0
}
3730
#endif // CONFIG_ENABLE_TX_PF_ALL
3731
3732
0
static void highbd_fwd_txfm_32x8_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3733
0
    int32_t* dst_coeff = (int32_t*)coeff;
3734
0
    svt_av1_fwd_txfm2d_32x8_N2(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3735
0
}
3736
3737
0
static void highbd_fwd_txfm_64x64(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3738
0
    assert(txfm_param->tx_type == DCT_DCT);
3739
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3740
0
    const int bd        = txfm_param->bd;
3741
0
    svt_av1_fwd_txfm2d_64x64(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3742
0
}
3743
3744
0
static void highbd_fwd_txfm_32x64(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3745
0
    assert(txfm_param->tx_type == DCT_DCT);
3746
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3747
0
    const int bd        = txfm_param->bd;
3748
0
    svt_av1_fwd_txfm2d_32x64(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3749
0
}
3750
3751
0
static void highbd_fwd_txfm_64x32(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3752
0
    assert(txfm_param->tx_type == DCT_DCT);
3753
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3754
0
    const int bd        = txfm_param->bd;
3755
0
    svt_av1_fwd_txfm2d_64x32(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, bd);
3756
0
}
3757
3758
0
static void highbd_fwd_txfm_16x64(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3759
0
    assert(txfm_param->tx_type == DCT_DCT);
3760
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3761
0
    const int bd        = txfm_param->bd;
3762
0
    svt_av1_fwd_txfm2d_16x64(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3763
0
}
3764
3765
0
static void highbd_fwd_txfm_64x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3766
0
    assert(txfm_param->tx_type == DCT_DCT);
3767
0
    int32_t*  dst_coeff = (int32_t*)coeff;
3768
0
    const int bd        = txfm_param->bd;
3769
0
    svt_av1_fwd_txfm2d_64x16(src_diff, dst_coeff, diff_stride, DCT_DCT, bd);
3770
0
}
3771
3772
0
static void highbd_fwd_txfm_32x32(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3773
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3774
0
    const TxType tx_type   = txfm_param->tx_type;
3775
0
    const int    bd        = txfm_param->bd;
3776
0
    svt_av1_fwd_txfm2d_32x32(src_diff, dst_coeff, diff_stride, tx_type, bd);
3777
0
}
3778
3779
0
static void highbd_fwd_txfm_16x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3780
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3781
0
    const TxType tx_type   = txfm_param->tx_type;
3782
0
    const int    bd        = txfm_param->bd;
3783
0
    svt_av1_fwd_txfm2d_16x16(src_diff, dst_coeff, diff_stride, tx_type, bd);
3784
0
}
3785
3786
0
static void highbd_fwd_txfm_8x8(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3787
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3788
0
    const TxType tx_type   = txfm_param->tx_type;
3789
0
    const int    bd        = txfm_param->bd;
3790
0
    svt_av1_fwd_txfm2d_8x8(src_diff, dst_coeff, diff_stride, tx_type, bd);
3791
0
}
3792
3793
0
static void highbd_fwd_txfm_4x8(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3794
0
    int32_t* dst_coeff = (int32_t*)coeff;
3795
0
    svt_av1_fwd_txfm2d_4x8(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3796
0
}
3797
3798
0
static void highbd_fwd_txfm_8x4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3799
0
    int32_t* dst_coeff = (int32_t*)coeff;
3800
0
    svt_av1_fwd_txfm2d_8x4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3801
0
}
3802
3803
0
static void highbd_fwd_txfm_8x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3804
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3805
0
    const TxType tx_type   = txfm_param->tx_type;
3806
0
    const int    bd        = txfm_param->bd;
3807
0
    svt_av1_fwd_txfm2d_8x16(src_diff, dst_coeff, diff_stride, tx_type, bd);
3808
0
}
3809
3810
0
static void highbd_fwd_txfm_16x8(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3811
0
    int32_t*     dst_coeff = (int32_t*)coeff;
3812
0
    const TxType tx_type   = txfm_param->tx_type;
3813
0
    const int    bd        = txfm_param->bd;
3814
0
    svt_av1_fwd_txfm2d_16x8(src_diff, dst_coeff, diff_stride, tx_type, bd);
3815
0
}
3816
3817
0
static void highbd_fwd_txfm_16x32(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3818
0
    int32_t* dst_coeff = (int32_t*)coeff;
3819
0
    svt_av1_fwd_txfm2d_16x32(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3820
0
}
3821
3822
0
static void highbd_fwd_txfm_32x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3823
0
    int32_t* dst_coeff = (int32_t*)coeff;
3824
0
    svt_av1_fwd_txfm2d_32x16(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3825
0
}
3826
3827
0
static void highbd_fwd_txfm_4x16(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3828
0
    int32_t* dst_coeff = (int32_t*)coeff;
3829
0
    svt_av1_fwd_txfm2d_4x16(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3830
0
}
3831
3832
0
static void highbd_fwd_txfm_16x4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3833
0
    int32_t* dst_coeff = (int32_t*)coeff;
3834
0
    svt_av1_fwd_txfm2d_16x4(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3835
0
}
3836
3837
0
static void highbd_fwd_txfm_8x32(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3838
0
    int32_t* dst_coeff = (int32_t*)coeff;
3839
0
    svt_av1_fwd_txfm2d_8x32(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3840
0
}
3841
3842
0
static void highbd_fwd_txfm_32x8(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3843
0
    int32_t* dst_coeff = (int32_t*)coeff;
3844
0
    svt_av1_fwd_txfm2d_32x8(src_diff, dst_coeff, diff_stride, txfm_param->tx_type, txfm_param->bd);
3845
0
}
3846
3847
0
void svt_av1_highbd_fwd_txfm_n4(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3848
0
    assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
3849
0
    const TxSize tx_size = txfm_param->tx_size;
3850
0
    switch (tx_size) {
3851
0
    case TX_64X64:
3852
0
        highbd_fwd_txfm_64x64_n4(src_diff, coeff, diff_stride, txfm_param);
3853
0
        break;
3854
0
    case TX_32X64:
3855
0
        highbd_fwd_txfm_32x64_n4(src_diff, coeff, diff_stride, txfm_param);
3856
0
        break;
3857
0
    case TX_64X32:
3858
0
        highbd_fwd_txfm_64x32_n4(src_diff, coeff, diff_stride, txfm_param);
3859
0
        break;
3860
0
    case TX_16X64:
3861
0
        highbd_fwd_txfm_16x64_n4(src_diff, coeff, diff_stride, txfm_param);
3862
0
        break;
3863
0
    case TX_64X16:
3864
0
        highbd_fwd_txfm_64x16_n4(src_diff, coeff, diff_stride, txfm_param);
3865
0
        break;
3866
0
    case TX_32X32:
3867
0
        highbd_fwd_txfm_32x32_n4(src_diff, coeff, diff_stride, txfm_param);
3868
0
        break;
3869
0
    case TX_16X16:
3870
0
        highbd_fwd_txfm_16x16_n4(src_diff, coeff, diff_stride, txfm_param);
3871
0
        break;
3872
0
    case TX_8X8:
3873
0
        highbd_fwd_txfm_8x8_n4(src_diff, coeff, diff_stride, txfm_param);
3874
0
        break;
3875
0
    case TX_4X8:
3876
0
        highbd_fwd_txfm_4x8_n4(src_diff, coeff, diff_stride, txfm_param);
3877
0
        break;
3878
0
    case TX_8X4:
3879
0
        highbd_fwd_txfm_8x4_n4(src_diff, coeff, diff_stride, txfm_param);
3880
0
        break;
3881
0
    case TX_8X16:
3882
0
        highbd_fwd_txfm_8x16_n4(src_diff, coeff, diff_stride, txfm_param);
3883
0
        break;
3884
0
    case TX_16X8:
3885
0
        highbd_fwd_txfm_16x8_n4(src_diff, coeff, diff_stride, txfm_param);
3886
0
        break;
3887
0
    case TX_16X32:
3888
0
        highbd_fwd_txfm_16x32_n4(src_diff, coeff, diff_stride, txfm_param);
3889
0
        break;
3890
0
    case TX_32X16:
3891
0
        highbd_fwd_txfm_32x16_n4(src_diff, coeff, diff_stride, txfm_param);
3892
0
        break;
3893
0
    case TX_4X4:
3894
        //hack highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, txfm_param);
3895
0
        break;
3896
0
    case TX_4X16:
3897
0
        highbd_fwd_txfm_4x16_n4(src_diff, coeff, diff_stride, txfm_param);
3898
0
        break;
3899
0
    case TX_16X4:
3900
0
        highbd_fwd_txfm_16x4_n4(src_diff, coeff, diff_stride, txfm_param);
3901
0
        break;
3902
0
    case TX_8X32:
3903
0
        highbd_fwd_txfm_8x32_n4(src_diff, coeff, diff_stride, txfm_param);
3904
0
        break;
3905
0
    case TX_32X8:
3906
0
        highbd_fwd_txfm_32x8_n4(src_diff, coeff, diff_stride, txfm_param);
3907
0
        break;
3908
0
    default:
3909
0
        assert(0);
3910
0
        break;
3911
0
    }
3912
0
}
3913
3914
0
void svt_av1_highbd_fwd_txfm_n2(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3915
0
    assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
3916
0
    const TxSize tx_size = txfm_param->tx_size;
3917
0
    switch (tx_size) {
3918
0
#if CONFIG_ENABLE_TX_PF_ALL
3919
0
    case TX_64X64:
3920
0
        highbd_fwd_txfm_64x64_n2(src_diff, coeff, diff_stride, txfm_param);
3921
0
        break;
3922
0
    case TX_32X64:
3923
0
        highbd_fwd_txfm_32x64_n2(src_diff, coeff, diff_stride, txfm_param);
3924
0
        break;
3925
0
    case TX_64X32:
3926
0
        highbd_fwd_txfm_64x32_n2(src_diff, coeff, diff_stride, txfm_param);
3927
0
        break;
3928
0
    case TX_16X64:
3929
0
        highbd_fwd_txfm_16x64_n2(src_diff, coeff, diff_stride, txfm_param);
3930
0
        break;
3931
0
    case TX_64X16:
3932
0
        highbd_fwd_txfm_64x16_n2(src_diff, coeff, diff_stride, txfm_param);
3933
0
        break;
3934
0
    case TX_32X32:
3935
0
        highbd_fwd_txfm_32x32_n2(src_diff, coeff, diff_stride, txfm_param);
3936
0
        break;
3937
0
#endif // CONFIG_ENABLE_TX_PF_ALL
3938
0
    case TX_16X16:
3939
0
        highbd_fwd_txfm_16x16_n2(src_diff, coeff, diff_stride, txfm_param);
3940
0
        break;
3941
0
#if CONFIG_ENABLE_TX_PF_ALL
3942
0
    case TX_8X8:
3943
0
        highbd_fwd_txfm_8x8_n2(src_diff, coeff, diff_stride, txfm_param);
3944
0
        break;
3945
0
    case TX_4X8:
3946
0
        highbd_fwd_txfm_4x8_n2(src_diff, coeff, diff_stride, txfm_param);
3947
0
        break;
3948
0
    case TX_8X4:
3949
0
        highbd_fwd_txfm_8x4_n2(src_diff, coeff, diff_stride, txfm_param);
3950
0
        break;
3951
0
    case TX_8X16:
3952
0
        highbd_fwd_txfm_8x16_n2(src_diff, coeff, diff_stride, txfm_param);
3953
0
        break;
3954
0
    case TX_16X8:
3955
0
        highbd_fwd_txfm_16x8_n2(src_diff, coeff, diff_stride, txfm_param);
3956
0
        break;
3957
0
    case TX_16X32:
3958
0
        highbd_fwd_txfm_16x32_n2(src_diff, coeff, diff_stride, txfm_param);
3959
0
        break;
3960
0
    case TX_32X16:
3961
0
        highbd_fwd_txfm_32x16_n2(src_diff, coeff, diff_stride, txfm_param);
3962
0
        break;
3963
0
    case TX_4X4:
3964
        //hack highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, txfm_param);
3965
0
        break;
3966
0
    case TX_4X16:
3967
0
        highbd_fwd_txfm_4x16_n2(src_diff, coeff, diff_stride, txfm_param);
3968
0
        break;
3969
0
#endif // CONFIG_ENABLE_TX_PF_ALL
3970
0
    case TX_16X4:
3971
0
        highbd_fwd_txfm_16x4_n2(src_diff, coeff, diff_stride, txfm_param);
3972
0
        break;
3973
0
#if CONFIG_ENABLE_TX_PF_ALL
3974
0
    case TX_8X32:
3975
0
        highbd_fwd_txfm_8x32_n2(src_diff, coeff, diff_stride, txfm_param);
3976
0
        break;
3977
0
#endif // CONFIG_ENABLE_TX_PF_ALL
3978
0
    case TX_32X8:
3979
0
        highbd_fwd_txfm_32x8_n2(src_diff, coeff, diff_stride, txfm_param);
3980
0
        break;
3981
0
    default:
3982
0
        assert(0);
3983
0
        break;
3984
0
    }
3985
0
}
3986
3987
0
void svt_av1_highbd_fwd_txfm(int16_t* src_diff, TranLow* coeff, int diff_stride, TxfmParam* txfm_param) {
3988
0
    assert(av1_ext_tx_used[txfm_param->tx_set_type][txfm_param->tx_type]);
3989
0
    const TxSize tx_size = txfm_param->tx_size;
3990
0
    switch (tx_size) {
3991
0
    case TX_64X64:
3992
0
        highbd_fwd_txfm_64x64(src_diff, coeff, diff_stride, txfm_param);
3993
0
        break;
3994
0
    case TX_32X64:
3995
0
        highbd_fwd_txfm_32x64(src_diff, coeff, diff_stride, txfm_param);
3996
0
        break;
3997
0
    case TX_64X32:
3998
0
        highbd_fwd_txfm_64x32(src_diff, coeff, diff_stride, txfm_param);
3999
0
        break;
4000
0
    case TX_16X64:
4001
0
        highbd_fwd_txfm_16x64(src_diff, coeff, diff_stride, txfm_param);
4002
0
        break;
4003
0
    case TX_64X16:
4004
0
        highbd_fwd_txfm_64x16(src_diff, coeff, diff_stride, txfm_param);
4005
0
        break;
4006
0
    case TX_32X32:
4007
0
        highbd_fwd_txfm_32x32(src_diff, coeff, diff_stride, txfm_param);
4008
0
        break;
4009
0
    case TX_16X16:
4010
0
        highbd_fwd_txfm_16x16(src_diff, coeff, diff_stride, txfm_param);
4011
0
        break;
4012
0
    case TX_8X8:
4013
0
        highbd_fwd_txfm_8x8(src_diff, coeff, diff_stride, txfm_param);
4014
0
        break;
4015
0
    case TX_4X8:
4016
0
        highbd_fwd_txfm_4x8(src_diff, coeff, diff_stride, txfm_param);
4017
0
        break;
4018
0
    case TX_8X4:
4019
0
        highbd_fwd_txfm_8x4(src_diff, coeff, diff_stride, txfm_param);
4020
0
        break;
4021
0
    case TX_8X16:
4022
0
        highbd_fwd_txfm_8x16(src_diff, coeff, diff_stride, txfm_param);
4023
0
        break;
4024
0
    case TX_16X8:
4025
0
        highbd_fwd_txfm_16x8(src_diff, coeff, diff_stride, txfm_param);
4026
0
        break;
4027
0
    case TX_16X32:
4028
0
        highbd_fwd_txfm_16x32(src_diff, coeff, diff_stride, txfm_param);
4029
0
        break;
4030
0
    case TX_32X16:
4031
0
        highbd_fwd_txfm_32x16(src_diff, coeff, diff_stride, txfm_param);
4032
0
        break;
4033
0
    case TX_4X4:
4034
        //hack highbd_fwd_txfm_4x4(src_diff, coeff, diff_stride, txfm_param);
4035
0
        break;
4036
0
    case TX_4X16:
4037
0
        highbd_fwd_txfm_4x16(src_diff, coeff, diff_stride, txfm_param);
4038
0
        break;
4039
0
    case TX_16X4:
4040
0
        highbd_fwd_txfm_16x4(src_diff, coeff, diff_stride, txfm_param);
4041
0
        break;
4042
0
    case TX_8X32:
4043
0
        highbd_fwd_txfm_8x32(src_diff, coeff, diff_stride, txfm_param);
4044
0
        break;
4045
0
    case TX_32X8:
4046
0
        highbd_fwd_txfm_32x8(src_diff, coeff, diff_stride, txfm_param);
4047
0
        break;
4048
0
    default:
4049
0
        assert(0);
4050
0
        break;
4051
0
    }
4052
0
}
4053
4054
void svt_av1_wht_fwd_txfm(int16_t* src_diff, int bw, int32_t* coeff, TxSize tx_size, TxCoeffShape pf_shape,
4055
0
                          int bit_depth, int is_hbd) {
4056
0
    TxfmParam txfm_param;
4057
0
    txfm_param.tx_type     = DCT_DCT;
4058
0
    txfm_param.tx_size     = tx_size;
4059
0
    txfm_param.lossless    = 0;
4060
0
    txfm_param.tx_set_type = EXT_TX_SET_ALL16;
4061
4062
0
    txfm_param.bd     = bit_depth;
4063
0
    txfm_param.is_hbd = is_hbd;
4064
0
    switch (pf_shape) {
4065
0
    case N4_SHAPE:
4066
0
        svt_av1_highbd_fwd_txfm_n4(src_diff, coeff, bw, &txfm_param);
4067
0
        break;
4068
0
    case N2_SHAPE:
4069
0
        svt_av1_highbd_fwd_txfm_n2(src_diff, coeff, bw, &txfm_param);
4070
0
        break;
4071
0
    default:
4072
0
#if CONFIG_ENABLE_TPL_HQ
4073
0
        svt_av1_highbd_fwd_txfm(src_diff, coeff, bw, &txfm_param);
4074
#else
4075
        // CONFIG_ENABLE_TPL_HQ: TPL params levels 4/5 use the N2/N4 shapes only.
4076
        assert(0);
4077
#endif
4078
0
    }
4079
0
}
4080
4081
0
void svt_av1_fidentity16_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4082
0
    (void)stage_range;
4083
0
    (void)cos_bit;
4084
0
    for (int32_t i = 0; i < 8; ++i) {
4085
0
        output[i] = round_shift((int64_t)input[i] * 2 * new_sqrt2, new_sqrt2_bits);
4086
0
    }
4087
4088
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
4089
0
}
4090
4091
0
void svt_av1_fadst16_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4092
0
    (void)stage_range;
4093
0
    const int32_t* cospi;
4094
4095
0
    int32_t *bf0, *bf1;
4096
0
    int32_t  step[16];
4097
4098
    // stage 0;
4099
4100
    // stage 1;
4101
0
    assert(output != input);
4102
0
    bf1     = output;
4103
0
    bf1[0]  = input[0];
4104
0
    bf1[1]  = -input[15];
4105
0
    bf1[2]  = -input[7];
4106
0
    bf1[3]  = input[8];
4107
0
    bf1[4]  = -input[3];
4108
0
    bf1[5]  = input[12];
4109
0
    bf1[6]  = input[4];
4110
0
    bf1[7]  = -input[11];
4111
0
    bf1[8]  = -input[1];
4112
0
    bf1[9]  = input[14];
4113
0
    bf1[10] = input[6];
4114
0
    bf1[11] = -input[9];
4115
0
    bf1[12] = input[2];
4116
0
    bf1[13] = -input[13];
4117
0
    bf1[14] = -input[5];
4118
0
    bf1[15] = input[10];
4119
4120
    // stage 2
4121
0
    cospi   = cospi_arr(cos_bit);
4122
0
    bf0     = output;
4123
0
    bf1     = step;
4124
0
    bf1[0]  = bf0[0];
4125
0
    bf1[1]  = bf0[1];
4126
0
    bf1[2]  = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
4127
0
    bf1[3]  = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
4128
0
    bf1[4]  = bf0[4];
4129
0
    bf1[5]  = bf0[5];
4130
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
4131
0
    bf1[7]  = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
4132
0
    bf1[8]  = bf0[8];
4133
0
    bf1[9]  = bf0[9];
4134
0
    bf1[10] = half_btf(cospi[32], bf0[10], cospi[32], bf0[11], cos_bit);
4135
0
    bf1[11] = half_btf(cospi[32], bf0[10], -cospi[32], bf0[11], cos_bit);
4136
0
    bf1[12] = bf0[12];
4137
0
    bf1[13] = bf0[13];
4138
0
    bf1[14] = half_btf(cospi[32], bf0[14], cospi[32], bf0[15], cos_bit);
4139
0
    bf1[15] = half_btf(cospi[32], bf0[14], -cospi[32], bf0[15], cos_bit);
4140
4141
    // stage 3
4142
0
    bf0     = step;
4143
0
    bf1     = output;
4144
0
    bf1[0]  = bf0[0] + bf0[2];
4145
0
    bf1[1]  = bf0[1] + bf0[3];
4146
0
    bf1[2]  = bf0[0] - bf0[2];
4147
0
    bf1[3]  = bf0[1] - bf0[3];
4148
0
    bf1[4]  = bf0[4] + bf0[6];
4149
0
    bf1[5]  = bf0[5] + bf0[7];
4150
0
    bf1[6]  = bf0[4] - bf0[6];
4151
0
    bf1[7]  = bf0[5] - bf0[7];
4152
0
    bf1[8]  = bf0[8] + bf0[10];
4153
0
    bf1[9]  = bf0[9] + bf0[11];
4154
0
    bf1[10] = bf0[8] - bf0[10];
4155
0
    bf1[11] = bf0[9] - bf0[11];
4156
0
    bf1[12] = bf0[12] + bf0[14];
4157
0
    bf1[13] = bf0[13] + bf0[15];
4158
0
    bf1[14] = bf0[12] - bf0[14];
4159
0
    bf1[15] = bf0[13] - bf0[15];
4160
4161
    // stage 4
4162
0
    cospi   = cospi_arr(cos_bit);
4163
0
    bf0     = output;
4164
0
    bf1     = step;
4165
0
    bf1[0]  = bf0[0];
4166
0
    bf1[1]  = bf0[1];
4167
0
    bf1[2]  = bf0[2];
4168
0
    bf1[3]  = bf0[3];
4169
0
    bf1[4]  = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
4170
0
    bf1[5]  = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
4171
0
    bf1[6]  = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
4172
0
    bf1[7]  = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
4173
0
    bf1[8]  = bf0[8];
4174
0
    bf1[9]  = bf0[9];
4175
0
    bf1[10] = bf0[10];
4176
0
    bf1[11] = bf0[11];
4177
0
    bf1[12] = half_btf(cospi[16], bf0[12], cospi[48], bf0[13], cos_bit);
4178
0
    bf1[13] = half_btf(cospi[48], bf0[12], -cospi[16], bf0[13], cos_bit);
4179
0
    bf1[14] = half_btf(-cospi[48], bf0[14], cospi[16], bf0[15], cos_bit);
4180
0
    bf1[15] = half_btf(cospi[16], bf0[14], cospi[48], bf0[15], cos_bit);
4181
4182
    // stage 5
4183
0
    bf0     = step;
4184
0
    bf1     = output;
4185
0
    bf1[0]  = bf0[0] + bf0[4];
4186
0
    bf1[1]  = bf0[1] + bf0[5];
4187
0
    bf1[2]  = bf0[2] + bf0[6];
4188
0
    bf1[3]  = bf0[3] + bf0[7];
4189
0
    bf1[4]  = bf0[0] - bf0[4];
4190
0
    bf1[5]  = bf0[1] - bf0[5];
4191
0
    bf1[6]  = bf0[2] - bf0[6];
4192
0
    bf1[7]  = bf0[3] - bf0[7];
4193
0
    bf1[8]  = bf0[8] + bf0[12];
4194
0
    bf1[9]  = bf0[9] + bf0[13];
4195
0
    bf1[10] = bf0[10] + bf0[14];
4196
0
    bf1[11] = bf0[11] + bf0[15];
4197
0
    bf1[12] = bf0[8] - bf0[12];
4198
0
    bf1[13] = bf0[9] - bf0[13];
4199
0
    bf1[14] = bf0[10] - bf0[14];
4200
0
    bf1[15] = bf0[11] - bf0[15];
4201
4202
    // stage 6
4203
0
    cospi   = cospi_arr(cos_bit);
4204
0
    bf0     = output;
4205
0
    bf1     = step;
4206
0
    bf1[0]  = bf0[0];
4207
0
    bf1[1]  = bf0[1];
4208
0
    bf1[2]  = bf0[2];
4209
0
    bf1[3]  = bf0[3];
4210
0
    bf1[4]  = bf0[4];
4211
0
    bf1[5]  = bf0[5];
4212
0
    bf1[6]  = bf0[6];
4213
0
    bf1[7]  = bf0[7];
4214
0
    bf1[8]  = half_btf(cospi[8], bf0[8], cospi[56], bf0[9], cos_bit);
4215
0
    bf1[9]  = half_btf(cospi[56], bf0[8], -cospi[8], bf0[9], cos_bit);
4216
0
    bf1[10] = half_btf(cospi[40], bf0[10], cospi[24], bf0[11], cos_bit);
4217
0
    bf1[11] = half_btf(cospi[24], bf0[10], -cospi[40], bf0[11], cos_bit);
4218
0
    bf1[12] = half_btf(-cospi[56], bf0[12], cospi[8], bf0[13], cos_bit);
4219
0
    bf1[13] = half_btf(cospi[8], bf0[12], cospi[56], bf0[13], cos_bit);
4220
0
    bf1[14] = half_btf(-cospi[24], bf0[14], cospi[40], bf0[15], cos_bit);
4221
0
    bf1[15] = half_btf(cospi[40], bf0[14], cospi[24], bf0[15], cos_bit);
4222
4223
    // stage 7
4224
0
    bf0     = step;
4225
0
    bf1     = output;
4226
0
    bf1[0]  = bf0[0] + bf0[8];
4227
0
    bf1[1]  = bf0[1] + bf0[9];
4228
0
    bf1[2]  = bf0[2] + bf0[10];
4229
0
    bf1[3]  = bf0[3] + bf0[11];
4230
0
    bf1[4]  = bf0[4] + bf0[12];
4231
0
    bf1[5]  = bf0[5] + bf0[13];
4232
0
    bf1[6]  = bf0[6] + bf0[14];
4233
0
    bf1[7]  = bf0[7] + bf0[15];
4234
0
    bf1[8]  = bf0[0] - bf0[8];
4235
0
    bf1[9]  = bf0[1] - bf0[9];
4236
0
    bf1[10] = bf0[2] - bf0[10];
4237
0
    bf1[11] = bf0[3] - bf0[11];
4238
0
    bf1[12] = bf0[4] - bf0[12];
4239
0
    bf1[13] = bf0[5] - bf0[13];
4240
0
    bf1[14] = bf0[6] - bf0[14];
4241
0
    bf1[15] = bf0[7] - bf0[15];
4242
4243
    // stage 8
4244
0
    cospi   = cospi_arr(cos_bit);
4245
0
    bf0     = output;
4246
0
    bf1     = step;
4247
0
    bf1[1]  = half_btf(cospi[62], bf0[0], -cospi[2], bf0[1], cos_bit);
4248
0
    bf1[3]  = half_btf(cospi[54], bf0[2], -cospi[10], bf0[3], cos_bit);
4249
0
    bf1[5]  = half_btf(cospi[46], bf0[4], -cospi[18], bf0[5], cos_bit);
4250
0
    bf1[7]  = half_btf(cospi[38], bf0[6], -cospi[26], bf0[7], cos_bit);
4251
0
    bf1[8]  = half_btf(cospi[34], bf0[8], cospi[30], bf0[9], cos_bit);
4252
0
    bf1[10] = half_btf(cospi[42], bf0[10], cospi[22], bf0[11], cos_bit);
4253
0
    bf1[12] = half_btf(cospi[50], bf0[12], cospi[14], bf0[13], cos_bit);
4254
0
    bf1[14] = half_btf(cospi[58], bf0[14], cospi[6], bf0[15], cos_bit);
4255
4256
    // stage 9
4257
0
    bf0    = step;
4258
0
    bf1    = output;
4259
0
    bf1[0] = bf0[1];
4260
0
    bf1[1] = bf0[14];
4261
0
    bf1[2] = bf0[3];
4262
0
    bf1[3] = bf0[12];
4263
0
    bf1[4] = bf0[5];
4264
0
    bf1[5] = bf0[10];
4265
0
    bf1[6] = bf0[7];
4266
0
    bf1[7] = bf0[8];
4267
0
}
4268
4269
0
void svt_av1_fdct16_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4270
0
    (void)stage_range;
4271
0
    const int32_t* cospi;
4272
4273
0
    int32_t *bf0, *bf1;
4274
0
    int32_t  step[16];
4275
4276
    // stage 0;
4277
4278
    // stage 1;
4279
0
    bf1     = output;
4280
0
    bf1[0]  = input[0] + input[15];
4281
0
    bf1[1]  = input[1] + input[14];
4282
0
    bf1[2]  = input[2] + input[13];
4283
0
    bf1[3]  = input[3] + input[12];
4284
0
    bf1[4]  = input[4] + input[11];
4285
0
    bf1[5]  = input[5] + input[10];
4286
0
    bf1[6]  = input[6] + input[9];
4287
0
    bf1[7]  = input[7] + input[8];
4288
0
    bf1[8]  = -input[8] + input[7];
4289
0
    bf1[9]  = -input[9] + input[6];
4290
0
    bf1[10] = -input[10] + input[5];
4291
0
    bf1[11] = -input[11] + input[4];
4292
0
    bf1[12] = -input[12] + input[3];
4293
0
    bf1[13] = -input[13] + input[2];
4294
0
    bf1[14] = -input[14] + input[1];
4295
0
    bf1[15] = -input[15] + input[0];
4296
4297
    // stage 2
4298
0
    cospi   = cospi_arr(cos_bit);
4299
0
    bf0     = output;
4300
0
    bf1     = step;
4301
0
    bf1[0]  = bf0[0] + bf0[7];
4302
0
    bf1[1]  = bf0[1] + bf0[6];
4303
0
    bf1[2]  = bf0[2] + bf0[5];
4304
0
    bf1[3]  = bf0[3] + bf0[4];
4305
0
    bf1[4]  = -bf0[4] + bf0[3];
4306
0
    bf1[5]  = -bf0[5] + bf0[2];
4307
0
    bf1[6]  = -bf0[6] + bf0[1];
4308
0
    bf1[7]  = -bf0[7] + bf0[0];
4309
0
    bf1[8]  = bf0[8];
4310
0
    bf1[9]  = bf0[9];
4311
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
4312
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
4313
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
4314
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
4315
0
    bf1[14] = bf0[14];
4316
0
    bf1[15] = bf0[15];
4317
4318
    // stage 3
4319
0
    cospi   = cospi_arr(cos_bit);
4320
0
    bf0     = step;
4321
0
    bf1     = output;
4322
0
    bf1[0]  = bf0[0] + bf0[3];
4323
0
    bf1[1]  = bf0[1] + bf0[2];
4324
0
    bf1[2]  = -bf0[2] + bf0[1];
4325
0
    bf1[3]  = -bf0[3] + bf0[0];
4326
0
    bf1[4]  = bf0[4];
4327
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
4328
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
4329
0
    bf1[7]  = bf0[7];
4330
0
    bf1[8]  = bf0[8] + bf0[11];
4331
0
    bf1[9]  = bf0[9] + bf0[10];
4332
0
    bf1[10] = -bf0[10] + bf0[9];
4333
0
    bf1[11] = -bf0[11] + bf0[8];
4334
0
    bf1[12] = -bf0[12] + bf0[15];
4335
0
    bf1[13] = -bf0[13] + bf0[14];
4336
0
    bf1[14] = bf0[14] + bf0[13];
4337
0
    bf1[15] = bf0[15] + bf0[12];
4338
4339
    // stage 4
4340
0
    cospi   = cospi_arr(cos_bit);
4341
0
    bf0     = output;
4342
0
    bf1     = step;
4343
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
4344
0
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
4345
0
    bf1[4]  = bf0[4] + bf0[5];
4346
0
    bf1[5]  = -bf0[5] + bf0[4];
4347
0
    bf1[6]  = -bf0[6] + bf0[7];
4348
0
    bf1[7]  = bf0[7] + bf0[6];
4349
0
    bf1[8]  = bf0[8];
4350
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
4351
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
4352
0
    bf1[11] = bf0[11];
4353
0
    bf1[12] = bf0[12];
4354
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
4355
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
4356
0
    bf1[15] = bf0[15];
4357
4358
    // stage 5
4359
0
    cospi   = cospi_arr(cos_bit);
4360
0
    bf0     = step;
4361
0
    bf1     = output;
4362
0
    bf1[0]  = bf0[0];
4363
0
    bf1[2]  = bf0[2];
4364
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
4365
0
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
4366
0
    bf1[8]  = bf0[8] + bf0[9];
4367
0
    bf1[9]  = -bf0[9] + bf0[8];
4368
0
    bf1[10] = -bf0[10] + bf0[11];
4369
0
    bf1[11] = bf0[11] + bf0[10];
4370
0
    bf1[12] = bf0[12] + bf0[13];
4371
0
    bf1[13] = -bf0[13] + bf0[12];
4372
0
    bf1[14] = -bf0[14] + bf0[15];
4373
0
    bf1[15] = bf0[15] + bf0[14];
4374
4375
    // stage 6
4376
0
    cospi   = cospi_arr(cos_bit);
4377
0
    bf0     = output;
4378
0
    bf1     = step;
4379
0
    bf1[0]  = bf0[0];
4380
0
    bf1[2]  = bf0[2];
4381
0
    bf1[4]  = bf0[4];
4382
0
    bf1[6]  = bf0[6];
4383
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
4384
0
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
4385
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
4386
0
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
4387
4388
    // stage 7
4389
0
    bf0    = step;
4390
0
    bf1    = output;
4391
0
    bf1[0] = bf0[0];
4392
0
    bf1[1] = bf0[8];
4393
0
    bf1[2] = bf0[4];
4394
0
    bf1[3] = bf0[12];
4395
0
    bf1[4] = bf0[2];
4396
0
    bf1[5] = bf0[10];
4397
0
    bf1[6] = bf0[6];
4398
0
    bf1[7] = bf0[14];
4399
0
}
4400
4401
0
void svt_av1_fidentity8_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4402
0
    (void)stage_range;
4403
0
    (void)cos_bit;
4404
0
    for (int32_t i = 0; i < 4; ++i) {
4405
0
        output[i] = input[i] * 2;
4406
0
    }
4407
0
}
4408
4409
0
void svt_av1_fadst8_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4410
0
    (void)stage_range;
4411
0
    const int32_t* cospi;
4412
4413
0
    int32_t *bf0, *bf1;
4414
0
    int32_t  step[8];
4415
4416
    // stage 0;
4417
4418
    // stage 1;
4419
0
    assert(output != input);
4420
0
    bf1    = output;
4421
0
    bf1[0] = input[0];
4422
0
    bf1[1] = -input[7];
4423
0
    bf1[2] = -input[3];
4424
0
    bf1[3] = input[4];
4425
0
    bf1[4] = -input[1];
4426
0
    bf1[5] = input[6];
4427
0
    bf1[6] = input[2];
4428
0
    bf1[7] = -input[5];
4429
4430
    // stage 2
4431
0
    cospi  = cospi_arr(cos_bit);
4432
0
    bf0    = output;
4433
0
    bf1    = step;
4434
0
    bf1[0] = bf0[0];
4435
0
    bf1[1] = bf0[1];
4436
0
    bf1[2] = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
4437
0
    bf1[3] = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
4438
0
    bf1[4] = bf0[4];
4439
0
    bf1[5] = bf0[5];
4440
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
4441
0
    bf1[7] = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
4442
4443
    // stage 3
4444
0
    bf0    = step;
4445
0
    bf1    = output;
4446
0
    bf1[0] = bf0[0] + bf0[2];
4447
0
    bf1[1] = bf0[1] + bf0[3];
4448
0
    bf1[2] = bf0[0] - bf0[2];
4449
0
    bf1[3] = bf0[1] - bf0[3];
4450
0
    bf1[4] = bf0[4] + bf0[6];
4451
0
    bf1[5] = bf0[5] + bf0[7];
4452
0
    bf1[6] = bf0[4] - bf0[6];
4453
0
    bf1[7] = bf0[5] - bf0[7];
4454
4455
    // stage 4
4456
0
    cospi  = cospi_arr(cos_bit);
4457
0
    bf0    = output;
4458
0
    bf1    = step;
4459
0
    bf1[0] = bf0[0];
4460
0
    bf1[1] = bf0[1];
4461
0
    bf1[2] = bf0[2];
4462
0
    bf1[3] = bf0[3];
4463
0
    bf1[4] = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
4464
0
    bf1[5] = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
4465
0
    bf1[6] = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
4466
0
    bf1[7] = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
4467
4468
    // stage 5
4469
0
    bf0    = step;
4470
0
    bf1    = output;
4471
0
    bf1[0] = bf0[0] + bf0[4];
4472
0
    bf1[1] = bf0[1] + bf0[5];
4473
0
    bf1[2] = bf0[2] + bf0[6];
4474
0
    bf1[3] = bf0[3] + bf0[7];
4475
0
    bf1[4] = bf0[0] - bf0[4];
4476
0
    bf1[5] = bf0[1] - bf0[5];
4477
0
    bf1[6] = bf0[2] - bf0[6];
4478
0
    bf1[7] = bf0[3] - bf0[7];
4479
4480
    // stage 6
4481
0
    cospi  = cospi_arr(cos_bit);
4482
0
    bf0    = output;
4483
0
    bf1    = step;
4484
0
    bf1[1] = half_btf(cospi[60], bf0[0], -cospi[4], bf0[1], cos_bit);
4485
0
    bf1[3] = half_btf(cospi[44], bf0[2], -cospi[20], bf0[3], cos_bit);
4486
0
    bf1[4] = half_btf(cospi[36], bf0[4], cospi[28], bf0[5], cos_bit);
4487
0
    bf1[6] = half_btf(cospi[52], bf0[6], cospi[12], bf0[7], cos_bit);
4488
4489
    // stage 7
4490
0
    bf0    = step;
4491
0
    bf1    = output;
4492
0
    bf1[0] = bf0[1];
4493
0
    bf1[1] = bf0[6];
4494
0
    bf1[2] = bf0[3];
4495
0
    bf1[3] = bf0[4];
4496
0
}
4497
4498
0
void svt_av1_fdct8_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4499
0
    (void)stage_range;
4500
0
    const int32_t* cospi;
4501
4502
0
    int32_t *bf0, *bf1;
4503
0
    int32_t  step[8];
4504
4505
    // stage 0;
4506
4507
    // stage 1;
4508
0
    bf1    = output;
4509
0
    bf1[0] = input[0] + input[7];
4510
0
    bf1[1] = input[1] + input[6];
4511
0
    bf1[2] = input[2] + input[5];
4512
0
    bf1[3] = input[3] + input[4];
4513
0
    bf1[4] = -input[4] + input[3];
4514
0
    bf1[5] = -input[5] + input[2];
4515
0
    bf1[6] = -input[6] + input[1];
4516
0
    bf1[7] = -input[7] + input[0];
4517
4518
    // stage 2
4519
0
    cospi  = cospi_arr(cos_bit);
4520
0
    bf0    = output;
4521
0
    bf1    = step;
4522
0
    bf1[0] = bf0[0] + bf0[3];
4523
0
    bf1[1] = bf0[1] + bf0[2];
4524
0
    bf1[2] = -bf0[2] + bf0[1];
4525
0
    bf1[3] = -bf0[3] + bf0[0];
4526
0
    bf1[4] = bf0[4];
4527
0
    bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
4528
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
4529
0
    bf1[7] = bf0[7];
4530
4531
    // stage 3
4532
0
    cospi  = cospi_arr(cos_bit);
4533
0
    bf0    = step;
4534
0
    bf1    = output;
4535
0
    bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
4536
0
    bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
4537
0
    bf1[4] = bf0[4] + bf0[5];
4538
0
    bf1[5] = -bf0[5] + bf0[4];
4539
0
    bf1[6] = -bf0[6] + bf0[7];
4540
0
    bf1[7] = bf0[7] + bf0[6];
4541
4542
    // stage 4
4543
0
    cospi  = cospi_arr(cos_bit);
4544
0
    bf0    = output;
4545
0
    bf1    = step;
4546
0
    bf1[0] = bf0[0];
4547
0
    bf1[2] = bf0[2];
4548
0
    bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
4549
0
    bf1[6] = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
4550
4551
    // stage 5
4552
0
    bf0    = step;
4553
0
    bf1    = output;
4554
0
    bf1[0] = bf0[0];
4555
0
    bf1[1] = bf0[4];
4556
0
    bf1[2] = bf0[2];
4557
0
    bf1[3] = bf0[6];
4558
0
}
4559
4560
0
void svt_av1_fidentity4_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4561
0
    (void)stage_range;
4562
0
    (void)cos_bit;
4563
0
    output[0] = round_shift((int64_t)input[0] * new_sqrt2, new_sqrt2_bits);
4564
0
    output[1] = round_shift((int64_t)input[1] * new_sqrt2, new_sqrt2_bits);
4565
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
4566
0
}
4567
4568
0
void svt_av1_fadst4_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4569
0
    (void)stage_range;
4570
0
    int32_t        bit   = cos_bit;
4571
0
    const int32_t* sinpi = sinpi_arr(bit);
4572
0
    int32_t        x0, x1, x2, x3;
4573
0
    int32_t        s0, s2, s4, s5, s7;
4574
4575
    // stage 0
4576
0
    x0 = input[0];
4577
0
    x1 = input[1];
4578
0
    x2 = input[2];
4579
0
    x3 = input[3];
4580
4581
0
    if (!(x0 | x1 | x2 | x3)) {
4582
0
        output[0] = output[1] = output[2] = output[3] = 0;
4583
0
        return;
4584
0
    }
4585
4586
    // stage 1
4587
0
    s0 = sinpi[1] * x0;
4588
0
    s2 = sinpi[2] * x1;
4589
0
    s4 = sinpi[3] * x2;
4590
0
    s5 = sinpi[4] * x3;
4591
0
    s7 = x0 + x1;
4592
4593
    // stage 2
4594
0
    s7 = s7 - x3;
4595
4596
    // stage 3
4597
0
    x0 = s0 + s2;
4598
0
    x1 = sinpi[3] * s7;
4599
4600
    // stage 4
4601
0
    x0 = x0 + s5;
4602
4603
    // stage 5
4604
0
    s0 = x0 + s4;
4605
4606
    // 1-D transform scaling factor is sqrt(2).
4607
0
    output[0] = round_shift(s0, bit);
4608
0
    output[1] = round_shift(x1, bit);
4609
0
}
4610
4611
0
void svt_av1_fdct4_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4612
0
    (void)stage_range;
4613
0
    const int32_t* cospi;
4614
4615
0
    int32_t* bf0;
4616
0
    int32_t  step[4];
4617
4618
    // stage 1;
4619
0
    bf0    = step;
4620
0
    bf0[0] = input[0] + input[3];
4621
0
    bf0[1] = input[1] + input[2];
4622
0
    bf0[2] = -input[2] + input[1];
4623
0
    bf0[3] = -input[3] + input[0];
4624
4625
    // stage 2
4626
0
    cospi = cospi_arr(cos_bit);
4627
4628
0
    output[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
4629
0
    output[1] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
4630
0
}
4631
4632
0
void svt_av1_fdct32_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4633
0
    (void)stage_range;
4634
0
    const int32_t* cospi;
4635
4636
0
    int32_t *bf0, *bf1;
4637
0
    int32_t  step[32];
4638
4639
    // stage 0;
4640
4641
    // stage 1;
4642
0
    bf1     = output;
4643
0
    bf1[0]  = input[0] + input[31];
4644
0
    bf1[1]  = input[1] + input[30];
4645
0
    bf1[2]  = input[2] + input[29];
4646
0
    bf1[3]  = input[3] + input[28];
4647
0
    bf1[4]  = input[4] + input[27];
4648
0
    bf1[5]  = input[5] + input[26];
4649
0
    bf1[6]  = input[6] + input[25];
4650
0
    bf1[7]  = input[7] + input[24];
4651
0
    bf1[8]  = input[8] + input[23];
4652
0
    bf1[9]  = input[9] + input[22];
4653
0
    bf1[10] = input[10] + input[21];
4654
0
    bf1[11] = input[11] + input[20];
4655
0
    bf1[12] = input[12] + input[19];
4656
0
    bf1[13] = input[13] + input[18];
4657
0
    bf1[14] = input[14] + input[17];
4658
0
    bf1[15] = input[15] + input[16];
4659
0
    bf1[16] = -input[16] + input[15];
4660
0
    bf1[17] = -input[17] + input[14];
4661
0
    bf1[18] = -input[18] + input[13];
4662
0
    bf1[19] = -input[19] + input[12];
4663
0
    bf1[20] = -input[20] + input[11];
4664
0
    bf1[21] = -input[21] + input[10];
4665
0
    bf1[22] = -input[22] + input[9];
4666
0
    bf1[23] = -input[23] + input[8];
4667
0
    bf1[24] = -input[24] + input[7];
4668
0
    bf1[25] = -input[25] + input[6];
4669
0
    bf1[26] = -input[26] + input[5];
4670
0
    bf1[27] = -input[27] + input[4];
4671
0
    bf1[28] = -input[28] + input[3];
4672
0
    bf1[29] = -input[29] + input[2];
4673
0
    bf1[30] = -input[30] + input[1];
4674
0
    bf1[31] = -input[31] + input[0];
4675
4676
    // stage 2
4677
0
    cospi   = cospi_arr(cos_bit);
4678
0
    bf0     = output;
4679
0
    bf1     = step;
4680
0
    bf1[0]  = bf0[0] + bf0[15];
4681
0
    bf1[1]  = bf0[1] + bf0[14];
4682
0
    bf1[2]  = bf0[2] + bf0[13];
4683
0
    bf1[3]  = bf0[3] + bf0[12];
4684
0
    bf1[4]  = bf0[4] + bf0[11];
4685
0
    bf1[5]  = bf0[5] + bf0[10];
4686
0
    bf1[6]  = bf0[6] + bf0[9];
4687
0
    bf1[7]  = bf0[7] + bf0[8];
4688
0
    bf1[8]  = -bf0[8] + bf0[7];
4689
0
    bf1[9]  = -bf0[9] + bf0[6];
4690
0
    bf1[10] = -bf0[10] + bf0[5];
4691
0
    bf1[11] = -bf0[11] + bf0[4];
4692
0
    bf1[12] = -bf0[12] + bf0[3];
4693
0
    bf1[13] = -bf0[13] + bf0[2];
4694
0
    bf1[14] = -bf0[14] + bf0[1];
4695
0
    bf1[15] = -bf0[15] + bf0[0];
4696
0
    bf1[16] = bf0[16];
4697
0
    bf1[17] = bf0[17];
4698
0
    bf1[18] = bf0[18];
4699
0
    bf1[19] = bf0[19];
4700
0
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
4701
0
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
4702
0
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
4703
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
4704
0
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
4705
0
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
4706
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
4707
0
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
4708
0
    bf1[28] = bf0[28];
4709
0
    bf1[29] = bf0[29];
4710
0
    bf1[30] = bf0[30];
4711
0
    bf1[31] = bf0[31];
4712
4713
    // stage 3
4714
0
    cospi   = cospi_arr(cos_bit);
4715
0
    bf0     = step;
4716
0
    bf1     = output;
4717
0
    bf1[0]  = bf0[0] + bf0[7];
4718
0
    bf1[1]  = bf0[1] + bf0[6];
4719
0
    bf1[2]  = bf0[2] + bf0[5];
4720
0
    bf1[3]  = bf0[3] + bf0[4];
4721
0
    bf1[4]  = -bf0[4] + bf0[3];
4722
0
    bf1[5]  = -bf0[5] + bf0[2];
4723
0
    bf1[6]  = -bf0[6] + bf0[1];
4724
0
    bf1[7]  = -bf0[7] + bf0[0];
4725
0
    bf1[8]  = bf0[8];
4726
0
    bf1[9]  = bf0[9];
4727
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
4728
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
4729
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
4730
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
4731
0
    bf1[14] = bf0[14];
4732
0
    bf1[15] = bf0[15];
4733
0
    bf1[16] = bf0[16] + bf0[23];
4734
0
    bf1[17] = bf0[17] + bf0[22];
4735
0
    bf1[18] = bf0[18] + bf0[21];
4736
0
    bf1[19] = bf0[19] + bf0[20];
4737
0
    bf1[20] = -bf0[20] + bf0[19];
4738
0
    bf1[21] = -bf0[21] + bf0[18];
4739
0
    bf1[22] = -bf0[22] + bf0[17];
4740
0
    bf1[23] = -bf0[23] + bf0[16];
4741
0
    bf1[24] = -bf0[24] + bf0[31];
4742
0
    bf1[25] = -bf0[25] + bf0[30];
4743
0
    bf1[26] = -bf0[26] + bf0[29];
4744
0
    bf1[27] = -bf0[27] + bf0[28];
4745
0
    bf1[28] = bf0[28] + bf0[27];
4746
0
    bf1[29] = bf0[29] + bf0[26];
4747
0
    bf1[30] = bf0[30] + bf0[25];
4748
0
    bf1[31] = bf0[31] + bf0[24];
4749
4750
    // stage 4
4751
0
    cospi   = cospi_arr(cos_bit);
4752
0
    bf0     = output;
4753
0
    bf1     = step;
4754
0
    bf1[0]  = bf0[0] + bf0[3];
4755
0
    bf1[1]  = bf0[1] + bf0[2];
4756
0
    bf1[2]  = -bf0[2] + bf0[1];
4757
0
    bf1[3]  = -bf0[3] + bf0[0];
4758
0
    bf1[4]  = bf0[4];
4759
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
4760
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
4761
0
    bf1[7]  = bf0[7];
4762
0
    bf1[8]  = bf0[8] + bf0[11];
4763
0
    bf1[9]  = bf0[9] + bf0[10];
4764
0
    bf1[10] = -bf0[10] + bf0[9];
4765
0
    bf1[11] = -bf0[11] + bf0[8];
4766
0
    bf1[12] = -bf0[12] + bf0[15];
4767
0
    bf1[13] = -bf0[13] + bf0[14];
4768
0
    bf1[14] = bf0[14] + bf0[13];
4769
0
    bf1[15] = bf0[15] + bf0[12];
4770
0
    bf1[16] = bf0[16];
4771
0
    bf1[17] = bf0[17];
4772
0
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
4773
0
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
4774
0
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
4775
0
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
4776
0
    bf1[22] = bf0[22];
4777
0
    bf1[23] = bf0[23];
4778
0
    bf1[24] = bf0[24];
4779
0
    bf1[25] = bf0[25];
4780
0
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
4781
0
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
4782
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
4783
0
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
4784
0
    bf1[30] = bf0[30];
4785
0
    bf1[31] = bf0[31];
4786
4787
    // stage 5
4788
0
    cospi   = cospi_arr(cos_bit);
4789
0
    bf0     = step;
4790
0
    bf1     = output;
4791
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
4792
0
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
4793
0
    bf1[4]  = bf0[4] + bf0[5];
4794
0
    bf1[5]  = -bf0[5] + bf0[4];
4795
0
    bf1[6]  = -bf0[6] + bf0[7];
4796
0
    bf1[7]  = bf0[7] + bf0[6];
4797
0
    bf1[8]  = bf0[8];
4798
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
4799
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
4800
0
    bf1[11] = bf0[11];
4801
0
    bf1[12] = bf0[12];
4802
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
4803
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
4804
0
    bf1[15] = bf0[15];
4805
0
    bf1[16] = bf0[16] + bf0[19];
4806
0
    bf1[17] = bf0[17] + bf0[18];
4807
0
    bf1[18] = -bf0[18] + bf0[17];
4808
0
    bf1[19] = -bf0[19] + bf0[16];
4809
0
    bf1[20] = -bf0[20] + bf0[23];
4810
0
    bf1[21] = -bf0[21] + bf0[22];
4811
0
    bf1[22] = bf0[22] + bf0[21];
4812
0
    bf1[23] = bf0[23] + bf0[20];
4813
0
    bf1[24] = bf0[24] + bf0[27];
4814
0
    bf1[25] = bf0[25] + bf0[26];
4815
0
    bf1[26] = -bf0[26] + bf0[25];
4816
0
    bf1[27] = -bf0[27] + bf0[24];
4817
0
    bf1[28] = -bf0[28] + bf0[31];
4818
0
    bf1[29] = -bf0[29] + bf0[30];
4819
0
    bf1[30] = bf0[30] + bf0[29];
4820
0
    bf1[31] = bf0[31] + bf0[28];
4821
4822
    // stage 6
4823
0
    cospi   = cospi_arr(cos_bit);
4824
0
    bf0     = output;
4825
0
    bf1     = step;
4826
0
    bf1[0]  = bf0[0];
4827
0
    bf1[2]  = bf0[2];
4828
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
4829
0
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
4830
0
    bf1[8]  = bf0[8] + bf0[9];
4831
0
    bf1[9]  = -bf0[9] + bf0[8];
4832
0
    bf1[10] = -bf0[10] + bf0[11];
4833
0
    bf1[11] = bf0[11] + bf0[10];
4834
0
    bf1[12] = bf0[12] + bf0[13];
4835
0
    bf1[13] = -bf0[13] + bf0[12];
4836
0
    bf1[14] = -bf0[14] + bf0[15];
4837
0
    bf1[15] = bf0[15] + bf0[14];
4838
0
    bf1[16] = bf0[16];
4839
0
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
4840
0
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
4841
0
    bf1[19] = bf0[19];
4842
0
    bf1[20] = bf0[20];
4843
0
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
4844
0
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
4845
0
    bf1[23] = bf0[23];
4846
0
    bf1[24] = bf0[24];
4847
0
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
4848
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
4849
0
    bf1[27] = bf0[27];
4850
0
    bf1[28] = bf0[28];
4851
0
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
4852
0
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
4853
0
    bf1[31] = bf0[31];
4854
4855
    // stage 7
4856
0
    cospi   = cospi_arr(cos_bit);
4857
0
    bf0     = step;
4858
0
    bf1     = output;
4859
0
    bf1[0]  = bf0[0];
4860
0
    bf1[2]  = bf0[2];
4861
0
    bf1[4]  = bf0[4];
4862
0
    bf1[6]  = bf0[6];
4863
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
4864
0
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
4865
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
4866
0
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
4867
0
    bf1[16] = bf0[16] + bf0[17];
4868
0
    bf1[17] = -bf0[17] + bf0[16];
4869
0
    bf1[18] = -bf0[18] + bf0[19];
4870
0
    bf1[19] = bf0[19] + bf0[18];
4871
0
    bf1[20] = bf0[20] + bf0[21];
4872
0
    bf1[21] = -bf0[21] + bf0[20];
4873
0
    bf1[22] = -bf0[22] + bf0[23];
4874
0
    bf1[23] = bf0[23] + bf0[22];
4875
0
    bf1[24] = bf0[24] + bf0[25];
4876
0
    bf1[25] = -bf0[25] + bf0[24];
4877
0
    bf1[26] = -bf0[26] + bf0[27];
4878
0
    bf1[27] = bf0[27] + bf0[26];
4879
0
    bf1[28] = bf0[28] + bf0[29];
4880
0
    bf1[29] = -bf0[29] + bf0[28];
4881
0
    bf1[30] = -bf0[30] + bf0[31];
4882
0
    bf1[31] = bf0[31] + bf0[30];
4883
4884
    // stage 8
4885
0
    cospi   = cospi_arr(cos_bit);
4886
0
    bf0     = output;
4887
0
    bf1     = step;
4888
0
    bf1[0]  = bf0[0];
4889
0
    bf1[2]  = bf0[2];
4890
0
    bf1[4]  = bf0[4];
4891
0
    bf1[6]  = bf0[6];
4892
0
    bf1[8]  = bf0[8];
4893
0
    bf1[10] = bf0[10];
4894
0
    bf1[12] = bf0[12];
4895
0
    bf1[14] = bf0[14];
4896
0
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
4897
0
    bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
4898
0
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
4899
0
    bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
4900
0
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
4901
0
    bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
4902
0
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
4903
0
    bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
4904
4905
    // stage 9
4906
0
    bf0     = step;
4907
0
    bf1     = output;
4908
0
    bf1[0]  = bf0[0];
4909
0
    bf1[1]  = bf0[16];
4910
0
    bf1[2]  = bf0[8];
4911
0
    bf1[3]  = bf0[24];
4912
0
    bf1[4]  = bf0[4];
4913
0
    bf1[5]  = bf0[20];
4914
0
    bf1[6]  = bf0[12];
4915
0
    bf1[7]  = bf0[28];
4916
0
    bf1[8]  = bf0[2];
4917
0
    bf1[9]  = bf0[18];
4918
0
    bf1[10] = bf0[10];
4919
0
    bf1[11] = bf0[26];
4920
0
    bf1[12] = bf0[6];
4921
0
    bf1[13] = bf0[22];
4922
0
    bf1[14] = bf0[14];
4923
0
    bf1[15] = bf0[30];
4924
0
}
4925
4926
0
void svt_av1_fidentity32_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4927
0
    (void)stage_range;
4928
0
    (void)cos_bit;
4929
0
    for (int32_t i = 0; i < 16; ++i) {
4930
0
        output[i] = input[i] * 4;
4931
0
    }
4932
0
}
4933
4934
0
void svt_av1_fdct64_new_N2(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
4935
0
    (void)stage_range;
4936
0
    const int32_t* cospi;
4937
4938
0
    int32_t *bf0, *bf1;
4939
0
    int32_t  step[64];
4940
4941
    // stage 0;
4942
4943
    // stage 1;
4944
0
    bf1     = output;
4945
0
    bf1[0]  = input[0] + input[63];
4946
0
    bf1[1]  = input[1] + input[62];
4947
0
    bf1[2]  = input[2] + input[61];
4948
0
    bf1[3]  = input[3] + input[60];
4949
0
    bf1[4]  = input[4] + input[59];
4950
0
    bf1[5]  = input[5] + input[58];
4951
0
    bf1[6]  = input[6] + input[57];
4952
0
    bf1[7]  = input[7] + input[56];
4953
0
    bf1[8]  = input[8] + input[55];
4954
0
    bf1[9]  = input[9] + input[54];
4955
0
    bf1[10] = input[10] + input[53];
4956
0
    bf1[11] = input[11] + input[52];
4957
0
    bf1[12] = input[12] + input[51];
4958
0
    bf1[13] = input[13] + input[50];
4959
0
    bf1[14] = input[14] + input[49];
4960
0
    bf1[15] = input[15] + input[48];
4961
0
    bf1[16] = input[16] + input[47];
4962
0
    bf1[17] = input[17] + input[46];
4963
0
    bf1[18] = input[18] + input[45];
4964
0
    bf1[19] = input[19] + input[44];
4965
0
    bf1[20] = input[20] + input[43];
4966
0
    bf1[21] = input[21] + input[42];
4967
0
    bf1[22] = input[22] + input[41];
4968
0
    bf1[23] = input[23] + input[40];
4969
0
    bf1[24] = input[24] + input[39];
4970
0
    bf1[25] = input[25] + input[38];
4971
0
    bf1[26] = input[26] + input[37];
4972
0
    bf1[27] = input[27] + input[36];
4973
0
    bf1[28] = input[28] + input[35];
4974
0
    bf1[29] = input[29] + input[34];
4975
0
    bf1[30] = input[30] + input[33];
4976
0
    bf1[31] = input[31] + input[32];
4977
0
    bf1[32] = -input[32] + input[31];
4978
0
    bf1[33] = -input[33] + input[30];
4979
0
    bf1[34] = -input[34] + input[29];
4980
0
    bf1[35] = -input[35] + input[28];
4981
0
    bf1[36] = -input[36] + input[27];
4982
0
    bf1[37] = -input[37] + input[26];
4983
0
    bf1[38] = -input[38] + input[25];
4984
0
    bf1[39] = -input[39] + input[24];
4985
0
    bf1[40] = -input[40] + input[23];
4986
0
    bf1[41] = -input[41] + input[22];
4987
0
    bf1[42] = -input[42] + input[21];
4988
0
    bf1[43] = -input[43] + input[20];
4989
0
    bf1[44] = -input[44] + input[19];
4990
0
    bf1[45] = -input[45] + input[18];
4991
0
    bf1[46] = -input[46] + input[17];
4992
0
    bf1[47] = -input[47] + input[16];
4993
0
    bf1[48] = -input[48] + input[15];
4994
0
    bf1[49] = -input[49] + input[14];
4995
0
    bf1[50] = -input[50] + input[13];
4996
0
    bf1[51] = -input[51] + input[12];
4997
0
    bf1[52] = -input[52] + input[11];
4998
0
    bf1[53] = -input[53] + input[10];
4999
0
    bf1[54] = -input[54] + input[9];
5000
0
    bf1[55] = -input[55] + input[8];
5001
0
    bf1[56] = -input[56] + input[7];
5002
0
    bf1[57] = -input[57] + input[6];
5003
0
    bf1[58] = -input[58] + input[5];
5004
0
    bf1[59] = -input[59] + input[4];
5005
0
    bf1[60] = -input[60] + input[3];
5006
0
    bf1[61] = -input[61] + input[2];
5007
0
    bf1[62] = -input[62] + input[1];
5008
0
    bf1[63] = -input[63] + input[0];
5009
5010
    // stage 2
5011
0
    cospi   = cospi_arr(cos_bit);
5012
0
    bf0     = output;
5013
0
    bf1     = step;
5014
0
    bf1[0]  = bf0[0] + bf0[31];
5015
0
    bf1[1]  = bf0[1] + bf0[30];
5016
0
    bf1[2]  = bf0[2] + bf0[29];
5017
0
    bf1[3]  = bf0[3] + bf0[28];
5018
0
    bf1[4]  = bf0[4] + bf0[27];
5019
0
    bf1[5]  = bf0[5] + bf0[26];
5020
0
    bf1[6]  = bf0[6] + bf0[25];
5021
0
    bf1[7]  = bf0[7] + bf0[24];
5022
0
    bf1[8]  = bf0[8] + bf0[23];
5023
0
    bf1[9]  = bf0[9] + bf0[22];
5024
0
    bf1[10] = bf0[10] + bf0[21];
5025
0
    bf1[11] = bf0[11] + bf0[20];
5026
0
    bf1[12] = bf0[12] + bf0[19];
5027
0
    bf1[13] = bf0[13] + bf0[18];
5028
0
    bf1[14] = bf0[14] + bf0[17];
5029
0
    bf1[15] = bf0[15] + bf0[16];
5030
0
    bf1[16] = -bf0[16] + bf0[15];
5031
0
    bf1[17] = -bf0[17] + bf0[14];
5032
0
    bf1[18] = -bf0[18] + bf0[13];
5033
0
    bf1[19] = -bf0[19] + bf0[12];
5034
0
    bf1[20] = -bf0[20] + bf0[11];
5035
0
    bf1[21] = -bf0[21] + bf0[10];
5036
0
    bf1[22] = -bf0[22] + bf0[9];
5037
0
    bf1[23] = -bf0[23] + bf0[8];
5038
0
    bf1[24] = -bf0[24] + bf0[7];
5039
0
    bf1[25] = -bf0[25] + bf0[6];
5040
0
    bf1[26] = -bf0[26] + bf0[5];
5041
0
    bf1[27] = -bf0[27] + bf0[4];
5042
0
    bf1[28] = -bf0[28] + bf0[3];
5043
0
    bf1[29] = -bf0[29] + bf0[2];
5044
0
    bf1[30] = -bf0[30] + bf0[1];
5045
0
    bf1[31] = -bf0[31] + bf0[0];
5046
0
    bf1[32] = bf0[32];
5047
0
    bf1[33] = bf0[33];
5048
0
    bf1[34] = bf0[34];
5049
0
    bf1[35] = bf0[35];
5050
0
    bf1[36] = bf0[36];
5051
0
    bf1[37] = bf0[37];
5052
0
    bf1[38] = bf0[38];
5053
0
    bf1[39] = bf0[39];
5054
0
    bf1[40] = half_btf(-cospi[32], bf0[40], cospi[32], bf0[55], cos_bit);
5055
0
    bf1[41] = half_btf(-cospi[32], bf0[41], cospi[32], bf0[54], cos_bit);
5056
0
    bf1[42] = half_btf(-cospi[32], bf0[42], cospi[32], bf0[53], cos_bit);
5057
0
    bf1[43] = half_btf(-cospi[32], bf0[43], cospi[32], bf0[52], cos_bit);
5058
0
    bf1[44] = half_btf(-cospi[32], bf0[44], cospi[32], bf0[51], cos_bit);
5059
0
    bf1[45] = half_btf(-cospi[32], bf0[45], cospi[32], bf0[50], cos_bit);
5060
0
    bf1[46] = half_btf(-cospi[32], bf0[46], cospi[32], bf0[49], cos_bit);
5061
0
    bf1[47] = half_btf(-cospi[32], bf0[47], cospi[32], bf0[48], cos_bit);
5062
0
    bf1[48] = half_btf(cospi[32], bf0[48], cospi[32], bf0[47], cos_bit);
5063
0
    bf1[49] = half_btf(cospi[32], bf0[49], cospi[32], bf0[46], cos_bit);
5064
0
    bf1[50] = half_btf(cospi[32], bf0[50], cospi[32], bf0[45], cos_bit);
5065
0
    bf1[51] = half_btf(cospi[32], bf0[51], cospi[32], bf0[44], cos_bit);
5066
0
    bf1[52] = half_btf(cospi[32], bf0[52], cospi[32], bf0[43], cos_bit);
5067
0
    bf1[53] = half_btf(cospi[32], bf0[53], cospi[32], bf0[42], cos_bit);
5068
0
    bf1[54] = half_btf(cospi[32], bf0[54], cospi[32], bf0[41], cos_bit);
5069
0
    bf1[55] = half_btf(cospi[32], bf0[55], cospi[32], bf0[40], cos_bit);
5070
0
    bf1[56] = bf0[56];
5071
0
    bf1[57] = bf0[57];
5072
0
    bf1[58] = bf0[58];
5073
0
    bf1[59] = bf0[59];
5074
0
    bf1[60] = bf0[60];
5075
0
    bf1[61] = bf0[61];
5076
0
    bf1[62] = bf0[62];
5077
0
    bf1[63] = bf0[63];
5078
5079
    // stage 3
5080
0
    cospi   = cospi_arr(cos_bit);
5081
0
    bf0     = step;
5082
0
    bf1     = output;
5083
0
    bf1[0]  = bf0[0] + bf0[15];
5084
0
    bf1[1]  = bf0[1] + bf0[14];
5085
0
    bf1[2]  = bf0[2] + bf0[13];
5086
0
    bf1[3]  = bf0[3] + bf0[12];
5087
0
    bf1[4]  = bf0[4] + bf0[11];
5088
0
    bf1[5]  = bf0[5] + bf0[10];
5089
0
    bf1[6]  = bf0[6] + bf0[9];
5090
0
    bf1[7]  = bf0[7] + bf0[8];
5091
0
    bf1[8]  = -bf0[8] + bf0[7];
5092
0
    bf1[9]  = -bf0[9] + bf0[6];
5093
0
    bf1[10] = -bf0[10] + bf0[5];
5094
0
    bf1[11] = -bf0[11] + bf0[4];
5095
0
    bf1[12] = -bf0[12] + bf0[3];
5096
0
    bf1[13] = -bf0[13] + bf0[2];
5097
0
    bf1[14] = -bf0[14] + bf0[1];
5098
0
    bf1[15] = -bf0[15] + bf0[0];
5099
0
    bf1[16] = bf0[16];
5100
0
    bf1[17] = bf0[17];
5101
0
    bf1[18] = bf0[18];
5102
0
    bf1[19] = bf0[19];
5103
0
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
5104
0
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
5105
0
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
5106
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
5107
0
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
5108
0
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
5109
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
5110
0
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
5111
0
    bf1[28] = bf0[28];
5112
0
    bf1[29] = bf0[29];
5113
0
    bf1[30] = bf0[30];
5114
0
    bf1[31] = bf0[31];
5115
0
    bf1[32] = bf0[32] + bf0[47];
5116
0
    bf1[33] = bf0[33] + bf0[46];
5117
0
    bf1[34] = bf0[34] + bf0[45];
5118
0
    bf1[35] = bf0[35] + bf0[44];
5119
0
    bf1[36] = bf0[36] + bf0[43];
5120
0
    bf1[37] = bf0[37] + bf0[42];
5121
0
    bf1[38] = bf0[38] + bf0[41];
5122
0
    bf1[39] = bf0[39] + bf0[40];
5123
0
    bf1[40] = -bf0[40] + bf0[39];
5124
0
    bf1[41] = -bf0[41] + bf0[38];
5125
0
    bf1[42] = -bf0[42] + bf0[37];
5126
0
    bf1[43] = -bf0[43] + bf0[36];
5127
0
    bf1[44] = -bf0[44] + bf0[35];
5128
0
    bf1[45] = -bf0[45] + bf0[34];
5129
0
    bf1[46] = -bf0[46] + bf0[33];
5130
0
    bf1[47] = -bf0[47] + bf0[32];
5131
0
    bf1[48] = -bf0[48] + bf0[63];
5132
0
    bf1[49] = -bf0[49] + bf0[62];
5133
0
    bf1[50] = -bf0[50] + bf0[61];
5134
0
    bf1[51] = -bf0[51] + bf0[60];
5135
0
    bf1[52] = -bf0[52] + bf0[59];
5136
0
    bf1[53] = -bf0[53] + bf0[58];
5137
0
    bf1[54] = -bf0[54] + bf0[57];
5138
0
    bf1[55] = -bf0[55] + bf0[56];
5139
0
    bf1[56] = bf0[56] + bf0[55];
5140
0
    bf1[57] = bf0[57] + bf0[54];
5141
0
    bf1[58] = bf0[58] + bf0[53];
5142
0
    bf1[59] = bf0[59] + bf0[52];
5143
0
    bf1[60] = bf0[60] + bf0[51];
5144
0
    bf1[61] = bf0[61] + bf0[50];
5145
0
    bf1[62] = bf0[62] + bf0[49];
5146
0
    bf1[63] = bf0[63] + bf0[48];
5147
5148
    // stage 4
5149
0
    cospi   = cospi_arr(cos_bit);
5150
0
    bf0     = output;
5151
0
    bf1     = step;
5152
0
    bf1[0]  = bf0[0] + bf0[7];
5153
0
    bf1[1]  = bf0[1] + bf0[6];
5154
0
    bf1[2]  = bf0[2] + bf0[5];
5155
0
    bf1[3]  = bf0[3] + bf0[4];
5156
0
    bf1[4]  = -bf0[4] + bf0[3];
5157
0
    bf1[5]  = -bf0[5] + bf0[2];
5158
0
    bf1[6]  = -bf0[6] + bf0[1];
5159
0
    bf1[7]  = -bf0[7] + bf0[0];
5160
0
    bf1[8]  = bf0[8];
5161
0
    bf1[9]  = bf0[9];
5162
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
5163
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
5164
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
5165
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
5166
0
    bf1[14] = bf0[14];
5167
0
    bf1[15] = bf0[15];
5168
0
    bf1[16] = bf0[16] + bf0[23];
5169
0
    bf1[17] = bf0[17] + bf0[22];
5170
0
    bf1[18] = bf0[18] + bf0[21];
5171
0
    bf1[19] = bf0[19] + bf0[20];
5172
0
    bf1[20] = -bf0[20] + bf0[19];
5173
0
    bf1[21] = -bf0[21] + bf0[18];
5174
0
    bf1[22] = -bf0[22] + bf0[17];
5175
0
    bf1[23] = -bf0[23] + bf0[16];
5176
0
    bf1[24] = -bf0[24] + bf0[31];
5177
0
    bf1[25] = -bf0[25] + bf0[30];
5178
0
    bf1[26] = -bf0[26] + bf0[29];
5179
0
    bf1[27] = -bf0[27] + bf0[28];
5180
0
    bf1[28] = bf0[28] + bf0[27];
5181
0
    bf1[29] = bf0[29] + bf0[26];
5182
0
    bf1[30] = bf0[30] + bf0[25];
5183
0
    bf1[31] = bf0[31] + bf0[24];
5184
0
    bf1[32] = bf0[32];
5185
0
    bf1[33] = bf0[33];
5186
0
    bf1[34] = bf0[34];
5187
0
    bf1[35] = bf0[35];
5188
0
    bf1[36] = half_btf(-cospi[16], bf0[36], cospi[48], bf0[59], cos_bit);
5189
0
    bf1[37] = half_btf(-cospi[16], bf0[37], cospi[48], bf0[58], cos_bit);
5190
0
    bf1[38] = half_btf(-cospi[16], bf0[38], cospi[48], bf0[57], cos_bit);
5191
0
    bf1[39] = half_btf(-cospi[16], bf0[39], cospi[48], bf0[56], cos_bit);
5192
0
    bf1[40] = half_btf(-cospi[48], bf0[40], -cospi[16], bf0[55], cos_bit);
5193
0
    bf1[41] = half_btf(-cospi[48], bf0[41], -cospi[16], bf0[54], cos_bit);
5194
0
    bf1[42] = half_btf(-cospi[48], bf0[42], -cospi[16], bf0[53], cos_bit);
5195
0
    bf1[43] = half_btf(-cospi[48], bf0[43], -cospi[16], bf0[52], cos_bit);
5196
0
    bf1[44] = bf0[44];
5197
0
    bf1[45] = bf0[45];
5198
0
    bf1[46] = bf0[46];
5199
0
    bf1[47] = bf0[47];
5200
0
    bf1[48] = bf0[48];
5201
0
    bf1[49] = bf0[49];
5202
0
    bf1[50] = bf0[50];
5203
0
    bf1[51] = bf0[51];
5204
0
    bf1[52] = half_btf(cospi[48], bf0[52], -cospi[16], bf0[43], cos_bit);
5205
0
    bf1[53] = half_btf(cospi[48], bf0[53], -cospi[16], bf0[42], cos_bit);
5206
0
    bf1[54] = half_btf(cospi[48], bf0[54], -cospi[16], bf0[41], cos_bit);
5207
0
    bf1[55] = half_btf(cospi[48], bf0[55], -cospi[16], bf0[40], cos_bit);
5208
0
    bf1[56] = half_btf(cospi[16], bf0[56], cospi[48], bf0[39], cos_bit);
5209
0
    bf1[57] = half_btf(cospi[16], bf0[57], cospi[48], bf0[38], cos_bit);
5210
0
    bf1[58] = half_btf(cospi[16], bf0[58], cospi[48], bf0[37], cos_bit);
5211
0
    bf1[59] = half_btf(cospi[16], bf0[59], cospi[48], bf0[36], cos_bit);
5212
0
    bf1[60] = bf0[60];
5213
0
    bf1[61] = bf0[61];
5214
0
    bf1[62] = bf0[62];
5215
0
    bf1[63] = bf0[63];
5216
5217
    // stage 5
5218
0
    cospi   = cospi_arr(cos_bit);
5219
0
    bf0     = step;
5220
0
    bf1     = output;
5221
0
    bf1[0]  = bf0[0] + bf0[3];
5222
0
    bf1[1]  = bf0[1] + bf0[2];
5223
0
    bf1[2]  = -bf0[2] + bf0[1];
5224
0
    bf1[3]  = -bf0[3] + bf0[0];
5225
0
    bf1[4]  = bf0[4];
5226
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
5227
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
5228
0
    bf1[7]  = bf0[7];
5229
0
    bf1[8]  = bf0[8] + bf0[11];
5230
0
    bf1[9]  = bf0[9] + bf0[10];
5231
0
    bf1[10] = -bf0[10] + bf0[9];
5232
0
    bf1[11] = -bf0[11] + bf0[8];
5233
0
    bf1[12] = -bf0[12] + bf0[15];
5234
0
    bf1[13] = -bf0[13] + bf0[14];
5235
0
    bf1[14] = bf0[14] + bf0[13];
5236
0
    bf1[15] = bf0[15] + bf0[12];
5237
0
    bf1[16] = bf0[16];
5238
0
    bf1[17] = bf0[17];
5239
0
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
5240
0
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
5241
0
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
5242
0
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
5243
0
    bf1[22] = bf0[22];
5244
0
    bf1[23] = bf0[23];
5245
0
    bf1[24] = bf0[24];
5246
0
    bf1[25] = bf0[25];
5247
0
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
5248
0
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
5249
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
5250
0
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
5251
0
    bf1[30] = bf0[30];
5252
0
    bf1[31] = bf0[31];
5253
0
    bf1[32] = bf0[32] + bf0[39];
5254
0
    bf1[33] = bf0[33] + bf0[38];
5255
0
    bf1[34] = bf0[34] + bf0[37];
5256
0
    bf1[35] = bf0[35] + bf0[36];
5257
0
    bf1[36] = -bf0[36] + bf0[35];
5258
0
    bf1[37] = -bf0[37] + bf0[34];
5259
0
    bf1[38] = -bf0[38] + bf0[33];
5260
0
    bf1[39] = -bf0[39] + bf0[32];
5261
0
    bf1[40] = -bf0[40] + bf0[47];
5262
0
    bf1[41] = -bf0[41] + bf0[46];
5263
0
    bf1[42] = -bf0[42] + bf0[45];
5264
0
    bf1[43] = -bf0[43] + bf0[44];
5265
0
    bf1[44] = bf0[44] + bf0[43];
5266
0
    bf1[45] = bf0[45] + bf0[42];
5267
0
    bf1[46] = bf0[46] + bf0[41];
5268
0
    bf1[47] = bf0[47] + bf0[40];
5269
0
    bf1[48] = bf0[48] + bf0[55];
5270
0
    bf1[49] = bf0[49] + bf0[54];
5271
0
    bf1[50] = bf0[50] + bf0[53];
5272
0
    bf1[51] = bf0[51] + bf0[52];
5273
0
    bf1[52] = -bf0[52] + bf0[51];
5274
0
    bf1[53] = -bf0[53] + bf0[50];
5275
0
    bf1[54] = -bf0[54] + bf0[49];
5276
0
    bf1[55] = -bf0[55] + bf0[48];
5277
0
    bf1[56] = -bf0[56] + bf0[63];
5278
0
    bf1[57] = -bf0[57] + bf0[62];
5279
0
    bf1[58] = -bf0[58] + bf0[61];
5280
0
    bf1[59] = -bf0[59] + bf0[60];
5281
0
    bf1[60] = bf0[60] + bf0[59];
5282
0
    bf1[61] = bf0[61] + bf0[58];
5283
0
    bf1[62] = bf0[62] + bf0[57];
5284
0
    bf1[63] = bf0[63] + bf0[56];
5285
5286
    // stage 6
5287
0
    cospi   = cospi_arr(cos_bit);
5288
0
    bf0     = output;
5289
0
    bf1     = step;
5290
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
5291
0
    bf1[2]  = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
5292
0
    bf1[4]  = bf0[4] + bf0[5];
5293
0
    bf1[5]  = -bf0[5] + bf0[4];
5294
0
    bf1[6]  = -bf0[6] + bf0[7];
5295
0
    bf1[7]  = bf0[7] + bf0[6];
5296
0
    bf1[8]  = bf0[8];
5297
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
5298
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
5299
0
    bf1[11] = bf0[11];
5300
0
    bf1[12] = bf0[12];
5301
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
5302
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
5303
0
    bf1[15] = bf0[15];
5304
0
    bf1[16] = bf0[16] + bf0[19];
5305
0
    bf1[17] = bf0[17] + bf0[18];
5306
0
    bf1[18] = -bf0[18] + bf0[17];
5307
0
    bf1[19] = -bf0[19] + bf0[16];
5308
0
    bf1[20] = -bf0[20] + bf0[23];
5309
0
    bf1[21] = -bf0[21] + bf0[22];
5310
0
    bf1[22] = bf0[22] + bf0[21];
5311
0
    bf1[23] = bf0[23] + bf0[20];
5312
0
    bf1[24] = bf0[24] + bf0[27];
5313
0
    bf1[25] = bf0[25] + bf0[26];
5314
0
    bf1[26] = -bf0[26] + bf0[25];
5315
0
    bf1[27] = -bf0[27] + bf0[24];
5316
0
    bf1[28] = -bf0[28] + bf0[31];
5317
0
    bf1[29] = -bf0[29] + bf0[30];
5318
0
    bf1[30] = bf0[30] + bf0[29];
5319
0
    bf1[31] = bf0[31] + bf0[28];
5320
0
    bf1[32] = bf0[32];
5321
0
    bf1[33] = bf0[33];
5322
0
    bf1[34] = half_btf(-cospi[8], bf0[34], cospi[56], bf0[61], cos_bit);
5323
0
    bf1[35] = half_btf(-cospi[8], bf0[35], cospi[56], bf0[60], cos_bit);
5324
0
    bf1[36] = half_btf(-cospi[56], bf0[36], -cospi[8], bf0[59], cos_bit);
5325
0
    bf1[37] = half_btf(-cospi[56], bf0[37], -cospi[8], bf0[58], cos_bit);
5326
0
    bf1[38] = bf0[38];
5327
0
    bf1[39] = bf0[39];
5328
0
    bf1[40] = bf0[40];
5329
0
    bf1[41] = bf0[41];
5330
0
    bf1[42] = half_btf(-cospi[40], bf0[42], cospi[24], bf0[53], cos_bit);
5331
0
    bf1[43] = half_btf(-cospi[40], bf0[43], cospi[24], bf0[52], cos_bit);
5332
0
    bf1[44] = half_btf(-cospi[24], bf0[44], -cospi[40], bf0[51], cos_bit);
5333
0
    bf1[45] = half_btf(-cospi[24], bf0[45], -cospi[40], bf0[50], cos_bit);
5334
0
    bf1[46] = bf0[46];
5335
0
    bf1[47] = bf0[47];
5336
0
    bf1[48] = bf0[48];
5337
0
    bf1[49] = bf0[49];
5338
0
    bf1[50] = half_btf(cospi[24], bf0[50], -cospi[40], bf0[45], cos_bit);
5339
0
    bf1[51] = half_btf(cospi[24], bf0[51], -cospi[40], bf0[44], cos_bit);
5340
0
    bf1[52] = half_btf(cospi[40], bf0[52], cospi[24], bf0[43], cos_bit);
5341
0
    bf1[53] = half_btf(cospi[40], bf0[53], cospi[24], bf0[42], cos_bit);
5342
0
    bf1[54] = bf0[54];
5343
0
    bf1[55] = bf0[55];
5344
0
    bf1[56] = bf0[56];
5345
0
    bf1[57] = bf0[57];
5346
0
    bf1[58] = half_btf(cospi[56], bf0[58], -cospi[8], bf0[37], cos_bit);
5347
0
    bf1[59] = half_btf(cospi[56], bf0[59], -cospi[8], bf0[36], cos_bit);
5348
0
    bf1[60] = half_btf(cospi[8], bf0[60], cospi[56], bf0[35], cos_bit);
5349
0
    bf1[61] = half_btf(cospi[8], bf0[61], cospi[56], bf0[34], cos_bit);
5350
0
    bf1[62] = bf0[62];
5351
0
    bf1[63] = bf0[63];
5352
5353
    // stage 7
5354
0
    cospi   = cospi_arr(cos_bit);
5355
0
    bf0     = step;
5356
0
    bf1     = output;
5357
0
    bf1[0]  = bf0[0];
5358
0
    bf1[2]  = bf0[2];
5359
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
5360
0
    bf1[6]  = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
5361
0
    bf1[8]  = bf0[8] + bf0[9];
5362
0
    bf1[9]  = -bf0[9] + bf0[8];
5363
0
    bf1[10] = -bf0[10] + bf0[11];
5364
0
    bf1[11] = bf0[11] + bf0[10];
5365
0
    bf1[12] = bf0[12] + bf0[13];
5366
0
    bf1[13] = -bf0[13] + bf0[12];
5367
0
    bf1[14] = -bf0[14] + bf0[15];
5368
0
    bf1[15] = bf0[15] + bf0[14];
5369
0
    bf1[16] = bf0[16];
5370
0
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
5371
0
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
5372
0
    bf1[19] = bf0[19];
5373
0
    bf1[20] = bf0[20];
5374
0
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
5375
0
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
5376
0
    bf1[23] = bf0[23];
5377
0
    bf1[24] = bf0[24];
5378
0
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
5379
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
5380
0
    bf1[27] = bf0[27];
5381
0
    bf1[28] = bf0[28];
5382
0
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
5383
0
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
5384
0
    bf1[31] = bf0[31];
5385
0
    bf1[32] = bf0[32] + bf0[35];
5386
0
    bf1[33] = bf0[33] + bf0[34];
5387
0
    bf1[34] = -bf0[34] + bf0[33];
5388
0
    bf1[35] = -bf0[35] + bf0[32];
5389
0
    bf1[36] = -bf0[36] + bf0[39];
5390
0
    bf1[37] = -bf0[37] + bf0[38];
5391
0
    bf1[38] = bf0[38] + bf0[37];
5392
0
    bf1[39] = bf0[39] + bf0[36];
5393
0
    bf1[40] = bf0[40] + bf0[43];
5394
0
    bf1[41] = bf0[41] + bf0[42];
5395
0
    bf1[42] = -bf0[42] + bf0[41];
5396
0
    bf1[43] = -bf0[43] + bf0[40];
5397
0
    bf1[44] = -bf0[44] + bf0[47];
5398
0
    bf1[45] = -bf0[45] + bf0[46];
5399
0
    bf1[46] = bf0[46] + bf0[45];
5400
0
    bf1[47] = bf0[47] + bf0[44];
5401
0
    bf1[48] = bf0[48] + bf0[51];
5402
0
    bf1[49] = bf0[49] + bf0[50];
5403
0
    bf1[50] = -bf0[50] + bf0[49];
5404
0
    bf1[51] = -bf0[51] + bf0[48];
5405
0
    bf1[52] = -bf0[52] + bf0[55];
5406
0
    bf1[53] = -bf0[53] + bf0[54];
5407
0
    bf1[54] = bf0[54] + bf0[53];
5408
0
    bf1[55] = bf0[55] + bf0[52];
5409
0
    bf1[56] = bf0[56] + bf0[59];
5410
0
    bf1[57] = bf0[57] + bf0[58];
5411
0
    bf1[58] = -bf0[58] + bf0[57];
5412
0
    bf1[59] = -bf0[59] + bf0[56];
5413
0
    bf1[60] = -bf0[60] + bf0[63];
5414
0
    bf1[61] = -bf0[61] + bf0[62];
5415
0
    bf1[62] = bf0[62] + bf0[61];
5416
0
    bf1[63] = bf0[63] + bf0[60];
5417
5418
    // stage 8
5419
0
    cospi   = cospi_arr(cos_bit);
5420
0
    bf0     = output;
5421
0
    bf1     = step;
5422
0
    bf1[0]  = bf0[0];
5423
0
    bf1[2]  = bf0[2];
5424
0
    bf1[4]  = bf0[4];
5425
0
    bf1[6]  = bf0[6];
5426
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
5427
0
    bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
5428
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
5429
0
    bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
5430
0
    bf1[16] = bf0[16] + bf0[17];
5431
0
    bf1[17] = -bf0[17] + bf0[16];
5432
0
    bf1[18] = -bf0[18] + bf0[19];
5433
0
    bf1[19] = bf0[19] + bf0[18];
5434
0
    bf1[20] = bf0[20] + bf0[21];
5435
0
    bf1[21] = -bf0[21] + bf0[20];
5436
0
    bf1[22] = -bf0[22] + bf0[23];
5437
0
    bf1[23] = bf0[23] + bf0[22];
5438
0
    bf1[24] = bf0[24] + bf0[25];
5439
0
    bf1[25] = -bf0[25] + bf0[24];
5440
0
    bf1[26] = -bf0[26] + bf0[27];
5441
0
    bf1[27] = bf0[27] + bf0[26];
5442
0
    bf1[28] = bf0[28] + bf0[29];
5443
0
    bf1[29] = -bf0[29] + bf0[28];
5444
0
    bf1[30] = -bf0[30] + bf0[31];
5445
0
    bf1[31] = bf0[31] + bf0[30];
5446
0
    bf1[32] = bf0[32];
5447
0
    bf1[33] = half_btf(-cospi[4], bf0[33], cospi[60], bf0[62], cos_bit);
5448
0
    bf1[34] = half_btf(-cospi[60], bf0[34], -cospi[4], bf0[61], cos_bit);
5449
0
    bf1[35] = bf0[35];
5450
0
    bf1[36] = bf0[36];
5451
0
    bf1[37] = half_btf(-cospi[36], bf0[37], cospi[28], bf0[58], cos_bit);
5452
0
    bf1[38] = half_btf(-cospi[28], bf0[38], -cospi[36], bf0[57], cos_bit);
5453
0
    bf1[39] = bf0[39];
5454
0
    bf1[40] = bf0[40];
5455
0
    bf1[41] = half_btf(-cospi[20], bf0[41], cospi[44], bf0[54], cos_bit);
5456
0
    bf1[42] = half_btf(-cospi[44], bf0[42], -cospi[20], bf0[53], cos_bit);
5457
0
    bf1[43] = bf0[43];
5458
0
    bf1[44] = bf0[44];
5459
0
    bf1[45] = half_btf(-cospi[52], bf0[45], cospi[12], bf0[50], cos_bit);
5460
0
    bf1[46] = half_btf(-cospi[12], bf0[46], -cospi[52], bf0[49], cos_bit);
5461
0
    bf1[47] = bf0[47];
5462
0
    bf1[48] = bf0[48];
5463
0
    bf1[49] = half_btf(cospi[12], bf0[49], -cospi[52], bf0[46], cos_bit);
5464
0
    bf1[50] = half_btf(cospi[52], bf0[50], cospi[12], bf0[45], cos_bit);
5465
0
    bf1[51] = bf0[51];
5466
0
    bf1[52] = bf0[52];
5467
0
    bf1[53] = half_btf(cospi[44], bf0[53], -cospi[20], bf0[42], cos_bit);
5468
0
    bf1[54] = half_btf(cospi[20], bf0[54], cospi[44], bf0[41], cos_bit);
5469
0
    bf1[55] = bf0[55];
5470
0
    bf1[56] = bf0[56];
5471
0
    bf1[57] = half_btf(cospi[28], bf0[57], -cospi[36], bf0[38], cos_bit);
5472
0
    bf1[58] = half_btf(cospi[36], bf0[58], cospi[28], bf0[37], cos_bit);
5473
0
    bf1[59] = bf0[59];
5474
0
    bf1[60] = bf0[60];
5475
0
    bf1[61] = half_btf(cospi[60], bf0[61], -cospi[4], bf0[34], cos_bit);
5476
0
    bf1[62] = half_btf(cospi[4], bf0[62], cospi[60], bf0[33], cos_bit);
5477
0
    bf1[63] = bf0[63];
5478
5479
    // stage 9
5480
0
    cospi   = cospi_arr(cos_bit);
5481
0
    bf0     = step;
5482
0
    bf1     = output;
5483
0
    bf1[0]  = bf0[0];
5484
0
    bf1[2]  = bf0[2];
5485
0
    bf1[4]  = bf0[4];
5486
0
    bf1[6]  = bf0[6];
5487
0
    bf1[8]  = bf0[8];
5488
0
    bf1[10] = bf0[10];
5489
0
    bf1[12] = bf0[12];
5490
0
    bf1[14] = bf0[14];
5491
0
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
5492
0
    bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
5493
0
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
5494
0
    bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
5495
0
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
5496
0
    bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
5497
0
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
5498
0
    bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
5499
0
    bf1[32] = bf0[32] + bf0[33];
5500
0
    bf1[33] = -bf0[33] + bf0[32];
5501
0
    bf1[34] = -bf0[34] + bf0[35];
5502
0
    bf1[35] = bf0[35] + bf0[34];
5503
0
    bf1[36] = bf0[36] + bf0[37];
5504
0
    bf1[37] = -bf0[37] + bf0[36];
5505
0
    bf1[38] = -bf0[38] + bf0[39];
5506
0
    bf1[39] = bf0[39] + bf0[38];
5507
0
    bf1[40] = bf0[40] + bf0[41];
5508
0
    bf1[41] = -bf0[41] + bf0[40];
5509
0
    bf1[42] = -bf0[42] + bf0[43];
5510
0
    bf1[43] = bf0[43] + bf0[42];
5511
0
    bf1[44] = bf0[44] + bf0[45];
5512
0
    bf1[45] = -bf0[45] + bf0[44];
5513
0
    bf1[46] = -bf0[46] + bf0[47];
5514
0
    bf1[47] = bf0[47] + bf0[46];
5515
0
    bf1[48] = bf0[48] + bf0[49];
5516
0
    bf1[49] = -bf0[49] + bf0[48];
5517
0
    bf1[50] = -bf0[50] + bf0[51];
5518
0
    bf1[51] = bf0[51] + bf0[50];
5519
0
    bf1[52] = bf0[52] + bf0[53];
5520
0
    bf1[53] = -bf0[53] + bf0[52];
5521
0
    bf1[54] = -bf0[54] + bf0[55];
5522
0
    bf1[55] = bf0[55] + bf0[54];
5523
0
    bf1[56] = bf0[56] + bf0[57];
5524
0
    bf1[57] = -bf0[57] + bf0[56];
5525
0
    bf1[58] = -bf0[58] + bf0[59];
5526
0
    bf1[59] = bf0[59] + bf0[58];
5527
0
    bf1[60] = bf0[60] + bf0[61];
5528
0
    bf1[61] = -bf0[61] + bf0[60];
5529
0
    bf1[62] = -bf0[62] + bf0[63];
5530
0
    bf1[63] = bf0[63] + bf0[62];
5531
5532
    // stage 10
5533
0
    cospi   = cospi_arr(cos_bit);
5534
0
    bf0     = output;
5535
0
    bf1     = step;
5536
0
    bf1[0]  = bf0[0];
5537
0
    bf1[2]  = bf0[2];
5538
0
    bf1[4]  = bf0[4];
5539
0
    bf1[6]  = bf0[6];
5540
0
    bf1[8]  = bf0[8];
5541
0
    bf1[10] = bf0[10];
5542
0
    bf1[12] = bf0[12];
5543
0
    bf1[14] = bf0[14];
5544
0
    bf1[16] = bf0[16];
5545
0
    bf1[18] = bf0[18];
5546
0
    bf1[20] = bf0[20];
5547
0
    bf1[22] = bf0[22];
5548
0
    bf1[24] = bf0[24];
5549
0
    bf1[26] = bf0[26];
5550
0
    bf1[28] = bf0[28];
5551
0
    bf1[30] = bf0[30];
5552
0
    bf1[32] = half_btf(cospi[63], bf0[32], cospi[1], bf0[63], cos_bit);
5553
0
    bf1[34] = half_btf(cospi[47], bf0[34], cospi[17], bf0[61], cos_bit);
5554
0
    bf1[36] = half_btf(cospi[55], bf0[36], cospi[9], bf0[59], cos_bit);
5555
0
    bf1[38] = half_btf(cospi[39], bf0[38], cospi[25], bf0[57], cos_bit);
5556
0
    bf1[40] = half_btf(cospi[59], bf0[40], cospi[5], bf0[55], cos_bit);
5557
0
    bf1[42] = half_btf(cospi[43], bf0[42], cospi[21], bf0[53], cos_bit);
5558
0
    bf1[44] = half_btf(cospi[51], bf0[44], cospi[13], bf0[51], cos_bit);
5559
0
    bf1[46] = half_btf(cospi[35], bf0[46], cospi[29], bf0[49], cos_bit);
5560
0
    bf1[48] = half_btf(cospi[3], bf0[48], -cospi[61], bf0[47], cos_bit);
5561
0
    bf1[50] = half_btf(cospi[19], bf0[50], -cospi[45], bf0[45], cos_bit);
5562
0
    bf1[52] = half_btf(cospi[11], bf0[52], -cospi[53], bf0[43], cos_bit);
5563
0
    bf1[54] = half_btf(cospi[27], bf0[54], -cospi[37], bf0[41], cos_bit);
5564
0
    bf1[56] = half_btf(cospi[7], bf0[56], -cospi[57], bf0[39], cos_bit);
5565
0
    bf1[58] = half_btf(cospi[23], bf0[58], -cospi[41], bf0[37], cos_bit);
5566
0
    bf1[60] = half_btf(cospi[15], bf0[60], -cospi[49], bf0[35], cos_bit);
5567
0
    bf1[62] = half_btf(cospi[31], bf0[62], -cospi[33], bf0[33], cos_bit);
5568
5569
    // stage 11
5570
0
    bf0     = step;
5571
0
    bf1     = output;
5572
0
    bf1[0]  = bf0[0];
5573
0
    bf1[1]  = bf0[32];
5574
0
    bf1[2]  = bf0[16];
5575
0
    bf1[3]  = bf0[48];
5576
0
    bf1[4]  = bf0[8];
5577
0
    bf1[5]  = bf0[40];
5578
0
    bf1[6]  = bf0[24];
5579
0
    bf1[7]  = bf0[56];
5580
0
    bf1[8]  = bf0[4];
5581
0
    bf1[9]  = bf0[36];
5582
0
    bf1[10] = bf0[20];
5583
0
    bf1[11] = bf0[52];
5584
0
    bf1[12] = bf0[12];
5585
0
    bf1[13] = bf0[44];
5586
0
    bf1[14] = bf0[28];
5587
0
    bf1[15] = bf0[60];
5588
0
    bf1[16] = bf0[2];
5589
0
    bf1[17] = bf0[34];
5590
0
    bf1[18] = bf0[18];
5591
0
    bf1[19] = bf0[50];
5592
0
    bf1[20] = bf0[10];
5593
0
    bf1[21] = bf0[42];
5594
0
    bf1[22] = bf0[26];
5595
0
    bf1[23] = bf0[58];
5596
0
    bf1[24] = bf0[6];
5597
0
    bf1[25] = bf0[38];
5598
0
    bf1[26] = bf0[22];
5599
0
    bf1[27] = bf0[54];
5600
0
    bf1[28] = bf0[14];
5601
0
    bf1[29] = bf0[46];
5602
0
    bf1[30] = bf0[30];
5603
0
    bf1[31] = bf0[62];
5604
0
}
5605
5606
0
static void av1_fidentity64_N2_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5607
0
    (void)stage_range;
5608
0
    (void)cos_bit;
5609
0
    for (int32_t i = 0; i < 32; ++i) {
5610
0
        output[i] = round_shift((int64_t)input[i] * 4 * new_sqrt2, new_sqrt2_bits);
5611
0
    }
5612
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
5613
0
}
5614
5615
0
static INLINE TxfmFunc fwd_txfm_type_to_func_N2(TxfmType txfmtype) {
5616
0
    switch (txfmtype) {
5617
0
    case TXFM_TYPE_DCT4:
5618
0
        return svt_av1_fdct4_new_N2;
5619
0
    case TXFM_TYPE_DCT8:
5620
0
        return svt_av1_fdct8_new_N2;
5621
0
    case TXFM_TYPE_DCT16:
5622
0
        return svt_av1_fdct16_new_N2;
5623
0
    case TXFM_TYPE_DCT32:
5624
0
        return svt_av1_fdct32_new_N2;
5625
0
    case TXFM_TYPE_DCT64:
5626
0
        return svt_av1_fdct64_new_N2;
5627
0
    case TXFM_TYPE_ADST4:
5628
0
        return svt_av1_fadst4_new_N2;
5629
0
    case TXFM_TYPE_ADST8:
5630
0
        return svt_av1_fadst8_new_N2;
5631
0
    case TXFM_TYPE_ADST16:
5632
0
        return svt_av1_fadst16_new_N2;
5633
0
    case TXFM_TYPE_ADST32:
5634
0
        return av1_fadst32_new;
5635
0
    case TXFM_TYPE_IDENTITY4:
5636
0
        return svt_av1_fidentity4_N2_c;
5637
0
    case TXFM_TYPE_IDENTITY8:
5638
0
        return svt_av1_fidentity8_N2_c;
5639
0
    case TXFM_TYPE_IDENTITY16:
5640
0
        return svt_av1_fidentity16_N2_c;
5641
0
    case TXFM_TYPE_IDENTITY32:
5642
0
        return svt_av1_fidentity32_N2_c;
5643
0
    case TXFM_TYPE_IDENTITY64:
5644
0
        return av1_fidentity64_N2_c;
5645
0
    default:
5646
0
        assert(0);
5647
0
        return NULL;
5648
0
    }
5649
0
}
5650
5651
static INLINE void av1_tranform_two_d_core_N2_c(int16_t* input, uint32_t input_stride, int32_t* output,
5652
0
                                                const Txfm2dFlipCfg* cfg, int32_t* buf, uint8_t bit_depth) {
5653
0
    int32_t c, r;
5654
    // Note when assigning txfm_size_col, we use the txfm_size from the
5655
    // row configuration and vice versa. This is intentionally done to
5656
    // accurately perform rectangular transforms. When the transform is
5657
    // rectangular, the number of columns will be the same as the
5658
    // txfm_size stored in the row cfg struct. It will make no difference
5659
    // for square transforms.
5660
0
    const int32_t txfm_size_col = tx_size_wide[cfg->tx_size];
5661
0
    const int32_t txfm_size_row = tx_size_high[cfg->tx_size];
5662
    // Take the shift from the larger dimension in the rectangular case.
5663
0
    const int8_t* shift     = cfg->shift;
5664
0
    const int32_t rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
5665
0
    int8_t        stage_range_col[MAX_TXFM_STAGE_NUM];
5666
0
    int8_t        stage_range_row[MAX_TXFM_STAGE_NUM];
5667
0
    assert(cfg->stage_num_col <= MAX_TXFM_STAGE_NUM);
5668
0
    assert(cfg->stage_num_row <= MAX_TXFM_STAGE_NUM);
5669
0
    svt_av1_gen_fwd_stage_range(stage_range_col, stage_range_row, cfg, bit_depth);
5670
5671
0
    const int8_t   cos_bit_col   = cfg->cos_bit_col;
5672
0
    const int8_t   cos_bit_row   = cfg->cos_bit_row;
5673
0
    const TxfmFunc txfm_func_col = fwd_txfm_type_to_func_N2(cfg->txfm_type_col);
5674
0
    const TxfmFunc txfm_func_row = fwd_txfm_type_to_func_N2(cfg->txfm_type_row);
5675
0
    ASSERT(txfm_func_col != NULL);
5676
0
    ASSERT(txfm_func_row != NULL);
5677
    // use output buffer as temp buffer
5678
0
    int32_t* temp_in  = output;
5679
0
    int32_t* temp_out = output + txfm_size_row;
5680
5681
    // Columns
5682
0
    for (c = 0; c < txfm_size_col; ++c) {
5683
0
        if (cfg->ud_flip == 0) {
5684
0
            for (r = 0; r < txfm_size_row; ++r) {
5685
0
                temp_in[r] = input[r * input_stride + c];
5686
0
            }
5687
0
        } else {
5688
0
            for (r = 0; r < txfm_size_row; ++r) {
5689
                // flip upside down
5690
0
                temp_in[r] = input[(txfm_size_row - r - 1) * input_stride + c];
5691
0
            }
5692
0
        }
5693
0
        svt_av1_round_shift_array_c(temp_in, txfm_size_row, -shift[0]); // NM svt_av1_round_shift_array_c
5694
0
        txfm_func_col(temp_in, temp_out, cos_bit_col, stage_range_col);
5695
0
        svt_av1_round_shift_array_c(temp_out, txfm_size_row / 2, -shift[1]); // NM svt_av1_round_shift_array_c
5696
0
        if (cfg->lr_flip == 0) {
5697
0
            for (r = 0; r < txfm_size_row; ++r) {
5698
0
                buf[r * txfm_size_col + c] = temp_out[r];
5699
0
            }
5700
0
        } else {
5701
0
            for (r = 0; r < txfm_size_row; ++r) {
5702
                // flip from left to right
5703
0
                buf[r * txfm_size_col + (txfm_size_col - c - 1)] = temp_out[r];
5704
0
            }
5705
0
        }
5706
0
    }
5707
5708
    // Rows
5709
0
    for (r = 0; r < txfm_size_row / 2; ++r) {
5710
0
        txfm_func_row(buf + r * txfm_size_col, output + r * txfm_size_col, cos_bit_row, stage_range_row);
5711
0
        svt_av1_round_shift_array_c(output + r * txfm_size_col, txfm_size_col / 2, -shift[2]);
5712
5713
0
        if (abs(rect_type) == 1) {
5714
            // Multiply everything by Sqrt2 if the transform is rectangular and the
5715
            // size difference is a factor of 2.
5716
0
            for (c = 0; c < txfm_size_col / 2; ++c) {
5717
0
                output[r * txfm_size_col + c] = round_shift((int64_t)output[r * txfm_size_col + c] * new_sqrt2,
5718
0
                                                            new_sqrt2_bits);
5719
0
            }
5720
0
        }
5721
0
    }
5722
5723
0
    for (int i = 0; i < (txfm_size_col * txfm_size_row); i++) {
5724
0
        if (i % txfm_size_col >= (txfm_size_col >> 1) || i / txfm_size_col >= (txfm_size_row >> 1)) {
5725
0
            output[i] = 0;
5726
0
        }
5727
0
    }
5728
0
}
5729
5730
void svt_aom_transform_two_d_64x64_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5731
0
                                        uint8_t bit_depth) {
5732
0
    int32_t       intermediate_transform_buffer[64 * 64];
5733
0
    Txfm2dFlipCfg cfg;
5734
0
    svt_aom_transform_config(transform_type, TX_64X64, &cfg);
5735
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5736
0
}
5737
5738
void svt_aom_transform_two_d_32x32_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5739
0
                                        uint8_t bit_depth) {
5740
0
    int32_t       intermediate_transform_buffer[32 * 32];
5741
0
    Txfm2dFlipCfg cfg;
5742
0
    svt_aom_transform_config(transform_type, TX_32X32, &cfg);
5743
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5744
0
}
5745
5746
void svt_aom_transform_two_d_16x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5747
0
                                        uint8_t bit_depth) {
5748
0
    int32_t       intermediate_transform_buffer[16 * 16];
5749
0
    Txfm2dFlipCfg cfg;
5750
0
    svt_aom_transform_config(transform_type, TX_16X16, &cfg);
5751
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5752
0
}
5753
5754
void svt_aom_transform_two_d_8x8_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5755
0
                                      uint8_t bit_depth) {
5756
0
    int32_t       intermediate_transform_buffer[8 * 8];
5757
0
    Txfm2dFlipCfg cfg;
5758
0
    svt_aom_transform_config(transform_type, TX_8X8, &cfg);
5759
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5760
0
}
5761
5762
void svt_aom_transform_two_d_4x4_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5763
0
                                      uint8_t bit_depth) {
5764
0
    int32_t       intermediate_transform_buffer[4 * 4];
5765
0
    Txfm2dFlipCfg cfg;
5766
0
    svt_aom_transform_config(transform_type, TX_4X4, &cfg);
5767
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5768
0
}
5769
5770
void svt_av1_fwd_txfm2d_64x32_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5771
0
                                   uint8_t bit_depth) {
5772
0
    int32_t       intermediate_transform_buffer[64 * 32];
5773
0
    Txfm2dFlipCfg cfg;
5774
0
    svt_aom_transform_config(transform_type, TX_64X32, &cfg);
5775
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5776
0
}
5777
5778
void svt_av1_fwd_txfm2d_32x64_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5779
0
                                   uint8_t bit_depth) {
5780
0
    int32_t       intermediate_transform_buffer[32 * 64];
5781
0
    Txfm2dFlipCfg cfg;
5782
0
    svt_aom_transform_config(transform_type, TX_32X64, &cfg);
5783
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5784
0
}
5785
5786
void svt_av1_fwd_txfm2d_64x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5787
0
                                   uint8_t bit_depth) {
5788
0
    int32_t       intermediate_transform_buffer[64 * 16];
5789
0
    Txfm2dFlipCfg cfg;
5790
0
    svt_aom_transform_config(transform_type, TX_64X16, &cfg);
5791
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5792
0
}
5793
5794
void svt_av1_fwd_txfm2d_16x64_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5795
0
                                   uint8_t bit_depth) {
5796
0
    int32_t       intermediate_transform_buffer[16 * 64];
5797
0
    Txfm2dFlipCfg cfg;
5798
0
    svt_aom_transform_config(transform_type, TX_16X64, &cfg);
5799
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5800
0
}
5801
5802
void svt_av1_fwd_txfm2d_32x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5803
0
                                   uint8_t bit_depth) {
5804
0
    int32_t       intermediate_transform_buffer[32 * 16];
5805
0
    Txfm2dFlipCfg cfg;
5806
0
    svt_aom_transform_config(transform_type, TX_32X16, &cfg);
5807
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5808
0
}
5809
5810
void svt_av1_fwd_txfm2d_16x32_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5811
0
                                   uint8_t bit_depth) {
5812
0
    int32_t       intermediate_transform_buffer[16 * 32];
5813
0
    Txfm2dFlipCfg cfg;
5814
0
    svt_aom_transform_config(transform_type, TX_16X32, &cfg);
5815
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5816
0
}
5817
5818
void svt_av1_fwd_txfm2d_16x8_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5819
0
                                  uint8_t bit_depth) {
5820
0
    int32_t       intermediate_transform_buffer[16 * 8];
5821
0
    Txfm2dFlipCfg cfg;
5822
0
    svt_aom_transform_config(transform_type, TX_16X8, &cfg);
5823
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5824
0
}
5825
5826
void svt_av1_fwd_txfm2d_8x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5827
0
                                  uint8_t bit_depth) {
5828
0
    int32_t       intermediate_transform_buffer[8 * 16];
5829
0
    Txfm2dFlipCfg cfg;
5830
0
    svt_aom_transform_config(transform_type, TX_8X16, &cfg);
5831
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5832
0
}
5833
5834
void svt_av1_fwd_txfm2d_32x8_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5835
0
                                  uint8_t bit_depth) {
5836
0
    int32_t       intermediate_transform_buffer[32 * 8];
5837
0
    Txfm2dFlipCfg cfg;
5838
0
    svt_aom_transform_config(transform_type, TX_32X8, &cfg);
5839
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5840
0
}
5841
5842
void svt_av1_fwd_txfm2d_8x32_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5843
0
                                  uint8_t bit_depth) {
5844
0
    int32_t       intermediate_transform_buffer[8 * 32];
5845
0
    Txfm2dFlipCfg cfg;
5846
0
    svt_aom_transform_config(transform_type, TX_8X32, &cfg);
5847
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5848
0
}
5849
5850
void svt_av1_fwd_txfm2d_16x4_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5851
0
                                  uint8_t bit_depth) {
5852
0
    int32_t       intermediate_transform_buffer[16 * 4];
5853
0
    Txfm2dFlipCfg cfg;
5854
0
    svt_aom_transform_config(transform_type, TX_16X4, &cfg);
5855
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5856
0
}
5857
5858
void svt_av1_fwd_txfm2d_4x16_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5859
0
                                  uint8_t bit_depth) {
5860
0
    int32_t       intermediate_transform_buffer[4 * 16];
5861
0
    Txfm2dFlipCfg cfg;
5862
0
    svt_aom_transform_config(transform_type, TX_4X16, &cfg);
5863
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5864
0
}
5865
5866
void svt_av1_fwd_txfm2d_8x4_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5867
0
                                 uint8_t bit_depth) {
5868
0
    int32_t       intermediate_transform_buffer[8 * 4];
5869
0
    Txfm2dFlipCfg cfg;
5870
0
    svt_aom_transform_config(transform_type, TX_8X4, &cfg);
5871
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5872
0
}
5873
5874
void svt_av1_fwd_txfm2d_4x8_N2_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
5875
0
                                 uint8_t bit_depth) {
5876
0
    int32_t       intermediate_transform_buffer[4 * 8];
5877
0
    Txfm2dFlipCfg cfg;
5878
0
    svt_aom_transform_config(transform_type, TX_4X8, &cfg);
5879
0
    av1_tranform_two_d_core_N2_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
5880
0
}
5881
5882
0
void svt_av1_fdct4_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5883
0
    (void)stage_range;
5884
0
    const int32_t* cospi = cospi_arr(cos_bit);
5885
0
    int32_t        step[2];
5886
5887
    // stage 1;
5888
0
    step[0] = input[0] + input[3];
5889
0
    step[1] = input[1] + input[2];
5890
5891
0
    output[0] = half_btf(cospi[32], step[0], cospi[32], step[1], cos_bit);
5892
0
}
5893
5894
0
void svt_av1_fadst4_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5895
0
    (void)stage_range;
5896
0
    int32_t        bit   = cos_bit;
5897
0
    const int32_t* sinpi = sinpi_arr(bit);
5898
0
    int32_t        x0, x1, x2, x3;
5899
0
    int32_t        s0, s2, s4, s5;
5900
5901
    // stage 0
5902
0
    x0 = input[0];
5903
0
    x1 = input[1];
5904
0
    x2 = input[2];
5905
0
    x3 = input[3];
5906
5907
0
    if (!(x0 | x1 | x2 | x3)) {
5908
0
        output[0] = output[1] = output[2] = output[3] = 0;
5909
0
        return;
5910
0
    }
5911
5912
    // stage 1
5913
0
    s0 = sinpi[1] * x0;
5914
0
    s2 = sinpi[2] * x1;
5915
0
    s4 = sinpi[3] * x2;
5916
0
    s5 = sinpi[4] * x3;
5917
5918
    // stage 3
5919
0
    x0 = s0 + s2;
5920
5921
    // stage 4
5922
0
    x0 = x0 + s5;
5923
5924
    // stage 5
5925
0
    s0 = x0 + s4;
5926
5927
    // 1-D transform scaling factor is sqrt(2).
5928
0
    output[0] = round_shift(s0, bit);
5929
0
}
5930
5931
0
void svt_av1_fidentity4_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5932
0
    (void)stage_range;
5933
0
    (void)cos_bit;
5934
0
    output[0] = round_shift((int64_t)input[0] * new_sqrt2, new_sqrt2_bits);
5935
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
5936
0
}
5937
5938
0
void svt_av1_fdct8_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5939
0
    (void)stage_range;
5940
0
    const int32_t* cospi;
5941
5942
0
    int32_t *bf0, *bf1;
5943
0
    int32_t  step[8];
5944
5945
    // stage 0;
5946
5947
    // stage 1;
5948
0
    bf1    = output;
5949
0
    bf1[0] = input[0] + input[7];
5950
0
    bf1[1] = input[1] + input[6];
5951
0
    bf1[2] = input[2] + input[5];
5952
0
    bf1[3] = input[3] + input[4];
5953
0
    bf1[4] = -input[4] + input[3];
5954
0
    bf1[5] = -input[5] + input[2];
5955
0
    bf1[6] = -input[6] + input[1];
5956
0
    bf1[7] = -input[7] + input[0];
5957
5958
    // stage 2
5959
0
    cospi  = cospi_arr(cos_bit);
5960
0
    bf0    = output;
5961
0
    bf1    = step;
5962
0
    bf1[0] = bf0[0] + bf0[3];
5963
0
    bf1[1] = bf0[1] + bf0[2];
5964
0
    bf1[4] = bf0[4];
5965
0
    bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
5966
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
5967
0
    bf1[7] = bf0[7];
5968
5969
    // stage 3
5970
0
    bf0    = step;
5971
0
    bf1    = output;
5972
0
    bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
5973
0
    bf1[4] = bf0[4] + bf0[5];
5974
0
    bf1[7] = bf0[7] + bf0[6];
5975
5976
    // stage 4
5977
0
    bf0    = output;
5978
0
    bf1    = step;
5979
0
    bf1[0] = bf0[0];
5980
0
    bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
5981
5982
    // stage 5
5983
0
    bf0    = step;
5984
0
    bf1    = output;
5985
0
    bf1[0] = bf0[0];
5986
0
    bf1[1] = bf0[4];
5987
0
}
5988
5989
0
void svt_av1_fadst8_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
5990
0
    (void)stage_range;
5991
0
    const int32_t* cospi;
5992
5993
0
    int32_t *bf0, *bf1;
5994
0
    int32_t  step[8];
5995
5996
    // stage 0;
5997
5998
    // stage 1;
5999
0
    assert(output != input);
6000
0
    bf1    = output;
6001
0
    bf1[0] = input[0];
6002
0
    bf1[1] = -input[7];
6003
0
    bf1[2] = -input[3];
6004
0
    bf1[3] = input[4];
6005
0
    bf1[4] = -input[1];
6006
0
    bf1[5] = input[6];
6007
0
    bf1[6] = input[2];
6008
0
    bf1[7] = -input[5];
6009
6010
    // stage 2
6011
0
    cospi  = cospi_arr(cos_bit);
6012
0
    bf0    = output;
6013
0
    bf1    = step;
6014
0
    bf1[0] = bf0[0];
6015
0
    bf1[1] = bf0[1];
6016
0
    bf1[2] = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
6017
0
    bf1[3] = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
6018
0
    bf1[4] = bf0[4];
6019
0
    bf1[5] = bf0[5];
6020
0
    bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
6021
0
    bf1[7] = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
6022
6023
    // stage 3
6024
0
    bf0    = step;
6025
0
    bf1    = output;
6026
0
    bf1[0] = bf0[0] + bf0[2];
6027
0
    bf1[1] = bf0[1] + bf0[3];
6028
0
    bf1[2] = bf0[0] - bf0[2];
6029
0
    bf1[3] = bf0[1] - bf0[3];
6030
0
    bf1[4] = bf0[4] + bf0[6];
6031
0
    bf1[5] = bf0[5] + bf0[7];
6032
0
    bf1[6] = bf0[4] - bf0[6];
6033
0
    bf1[7] = bf0[5] - bf0[7];
6034
6035
    // stage 4
6036
0
    bf0    = output;
6037
0
    bf1    = step;
6038
0
    bf1[0] = bf0[0];
6039
0
    bf1[1] = bf0[1];
6040
0
    bf1[2] = bf0[2];
6041
0
    bf1[3] = bf0[3];
6042
0
    bf1[4] = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
6043
0
    bf1[5] = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
6044
0
    bf1[6] = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
6045
0
    bf1[7] = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
6046
6047
    // stage 5
6048
0
    bf0    = step;
6049
0
    bf1    = output;
6050
0
    bf1[0] = bf0[0] + bf0[4];
6051
0
    bf1[1] = bf0[1] + bf0[5];
6052
0
    bf1[6] = bf0[2] - bf0[6];
6053
0
    bf1[7] = bf0[3] - bf0[7];
6054
6055
    // stage 6
6056
0
    bf0    = output;
6057
0
    bf1    = step;
6058
0
    bf1[1] = half_btf(cospi[60], bf0[0], -cospi[4], bf0[1], cos_bit);
6059
0
    bf1[6] = half_btf(cospi[52], bf0[6], cospi[12], bf0[7], cos_bit);
6060
6061
    // stage 7
6062
0
    bf0    = step;
6063
0
    bf1    = output;
6064
0
    bf1[0] = bf0[1];
6065
0
    bf1[1] = bf0[6];
6066
0
}
6067
6068
0
void svt_av1_fidentity8_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6069
0
    (void)stage_range;
6070
0
    (void)cos_bit;
6071
0
    for (int32_t i = 0; i < 2; ++i) {
6072
0
        output[i] = input[i] * 2;
6073
0
    }
6074
0
}
6075
6076
0
void svt_av1_fdct16_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6077
0
    (void)stage_range;
6078
0
    const int32_t* cospi;
6079
6080
0
    int32_t *bf0, *bf1;
6081
0
    int32_t  step[16];
6082
6083
    // stage 0;
6084
6085
    // stage 1;
6086
0
    bf1     = output;
6087
0
    bf1[0]  = input[0] + input[15];
6088
0
    bf1[1]  = input[1] + input[14];
6089
0
    bf1[2]  = input[2] + input[13];
6090
0
    bf1[3]  = input[3] + input[12];
6091
0
    bf1[4]  = input[4] + input[11];
6092
0
    bf1[5]  = input[5] + input[10];
6093
0
    bf1[6]  = input[6] + input[9];
6094
0
    bf1[7]  = input[7] + input[8];
6095
0
    bf1[8]  = -input[8] + input[7];
6096
0
    bf1[9]  = -input[9] + input[6];
6097
0
    bf1[10] = -input[10] + input[5];
6098
0
    bf1[11] = -input[11] + input[4];
6099
0
    bf1[12] = -input[12] + input[3];
6100
0
    bf1[13] = -input[13] + input[2];
6101
0
    bf1[14] = -input[14] + input[1];
6102
0
    bf1[15] = -input[15] + input[0];
6103
6104
    // stage 2
6105
0
    cospi   = cospi_arr(cos_bit);
6106
0
    bf0     = output;
6107
0
    bf1     = step;
6108
0
    bf1[0]  = bf0[0] + bf0[7];
6109
0
    bf1[1]  = bf0[1] + bf0[6];
6110
0
    bf1[2]  = bf0[2] + bf0[5];
6111
0
    bf1[3]  = bf0[3] + bf0[4];
6112
0
    bf1[4]  = -bf0[4] + bf0[3];
6113
0
    bf1[5]  = -bf0[5] + bf0[2];
6114
0
    bf1[6]  = -bf0[6] + bf0[1];
6115
0
    bf1[7]  = -bf0[7] + bf0[0];
6116
0
    bf1[8]  = bf0[8];
6117
0
    bf1[9]  = bf0[9];
6118
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
6119
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
6120
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
6121
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
6122
0
    bf1[14] = bf0[14];
6123
0
    bf1[15] = bf0[15];
6124
6125
    // stage 3
6126
0
    bf0     = step;
6127
0
    bf1     = output;
6128
0
    bf1[0]  = bf0[0] + bf0[3];
6129
0
    bf1[1]  = bf0[1] + bf0[2];
6130
0
    bf1[4]  = bf0[4];
6131
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
6132
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
6133
0
    bf1[7]  = bf0[7];
6134
0
    bf1[8]  = bf0[8] + bf0[11];
6135
0
    bf1[9]  = bf0[9] + bf0[10];
6136
0
    bf1[10] = -bf0[10] + bf0[9];
6137
0
    bf1[11] = -bf0[11] + bf0[8];
6138
0
    bf1[12] = -bf0[12] + bf0[15];
6139
0
    bf1[13] = -bf0[13] + bf0[14];
6140
0
    bf1[14] = bf0[14] + bf0[13];
6141
0
    bf1[15] = bf0[15] + bf0[12];
6142
6143
    // stage 4
6144
0
    bf0     = output;
6145
0
    bf1     = step;
6146
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
6147
0
    bf1[4]  = bf0[4] + bf0[5];
6148
0
    bf1[7]  = bf0[7] + bf0[6];
6149
0
    bf1[8]  = bf0[8];
6150
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
6151
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
6152
0
    bf1[11] = bf0[11];
6153
0
    bf1[12] = bf0[12];
6154
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
6155
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
6156
0
    bf1[15] = bf0[15];
6157
6158
    // stage 5
6159
0
    bf0     = step;
6160
0
    bf1     = output;
6161
0
    bf1[0]  = bf0[0];
6162
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
6163
0
    bf1[8]  = bf0[8] + bf0[9];
6164
0
    bf1[11] = bf0[11] + bf0[10];
6165
0
    bf1[12] = bf0[12] + bf0[13];
6166
0
    bf1[15] = bf0[15] + bf0[14];
6167
6168
    // stage 6
6169
0
    bf0     = output;
6170
0
    bf1     = step;
6171
0
    bf1[0]  = bf0[0];
6172
0
    bf1[4]  = bf0[4];
6173
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
6174
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
6175
6176
    // stage 7
6177
0
    bf0    = step;
6178
0
    bf1    = output;
6179
0
    bf1[0] = bf0[0];
6180
0
    bf1[1] = bf0[8];
6181
0
    bf1[2] = bf0[4];
6182
0
    bf1[3] = bf0[12];
6183
0
}
6184
6185
0
void svt_av1_fadst16_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6186
0
    (void)stage_range;
6187
0
    const int32_t* cospi;
6188
6189
0
    int32_t *bf0, *bf1;
6190
0
    int32_t  step[16];
6191
6192
    // stage 0;
6193
6194
    // stage 1;
6195
0
    assert(output != input);
6196
0
    bf1     = output;
6197
0
    bf1[0]  = input[0];
6198
0
    bf1[1]  = -input[15];
6199
0
    bf1[2]  = -input[7];
6200
0
    bf1[3]  = input[8];
6201
0
    bf1[4]  = -input[3];
6202
0
    bf1[5]  = input[12];
6203
0
    bf1[6]  = input[4];
6204
0
    bf1[7]  = -input[11];
6205
0
    bf1[8]  = -input[1];
6206
0
    bf1[9]  = input[14];
6207
0
    bf1[10] = input[6];
6208
0
    bf1[11] = -input[9];
6209
0
    bf1[12] = input[2];
6210
0
    bf1[13] = -input[13];
6211
0
    bf1[14] = -input[5];
6212
0
    bf1[15] = input[10];
6213
6214
    // stage 2
6215
0
    cospi   = cospi_arr(cos_bit);
6216
0
    bf0     = output;
6217
0
    bf1     = step;
6218
0
    bf1[0]  = bf0[0];
6219
0
    bf1[1]  = bf0[1];
6220
0
    bf1[2]  = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
6221
0
    bf1[3]  = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
6222
0
    bf1[4]  = bf0[4];
6223
0
    bf1[5]  = bf0[5];
6224
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
6225
0
    bf1[7]  = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
6226
0
    bf1[8]  = bf0[8];
6227
0
    bf1[9]  = bf0[9];
6228
0
    bf1[10] = half_btf(cospi[32], bf0[10], cospi[32], bf0[11], cos_bit);
6229
0
    bf1[11] = half_btf(cospi[32], bf0[10], -cospi[32], bf0[11], cos_bit);
6230
0
    bf1[12] = bf0[12];
6231
0
    bf1[13] = bf0[13];
6232
0
    bf1[14] = half_btf(cospi[32], bf0[14], cospi[32], bf0[15], cos_bit);
6233
0
    bf1[15] = half_btf(cospi[32], bf0[14], -cospi[32], bf0[15], cos_bit);
6234
6235
    // stage 3
6236
0
    bf0     = step;
6237
0
    bf1     = output;
6238
0
    bf1[0]  = bf0[0] + bf0[2];
6239
0
    bf1[1]  = bf0[1] + bf0[3];
6240
0
    bf1[2]  = bf0[0] - bf0[2];
6241
0
    bf1[3]  = bf0[1] - bf0[3];
6242
0
    bf1[4]  = bf0[4] + bf0[6];
6243
0
    bf1[5]  = bf0[5] + bf0[7];
6244
0
    bf1[6]  = bf0[4] - bf0[6];
6245
0
    bf1[7]  = bf0[5] - bf0[7];
6246
0
    bf1[8]  = bf0[8] + bf0[10];
6247
0
    bf1[9]  = bf0[9] + bf0[11];
6248
0
    bf1[10] = bf0[8] - bf0[10];
6249
0
    bf1[11] = bf0[9] - bf0[11];
6250
0
    bf1[12] = bf0[12] + bf0[14];
6251
0
    bf1[13] = bf0[13] + bf0[15];
6252
0
    bf1[14] = bf0[12] - bf0[14];
6253
0
    bf1[15] = bf0[13] - bf0[15];
6254
6255
    // stage 4
6256
0
    bf0     = output;
6257
0
    bf1     = step;
6258
0
    bf1[0]  = bf0[0];
6259
0
    bf1[1]  = bf0[1];
6260
0
    bf1[2]  = bf0[2];
6261
0
    bf1[3]  = bf0[3];
6262
0
    bf1[4]  = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
6263
0
    bf1[5]  = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
6264
0
    bf1[6]  = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
6265
0
    bf1[7]  = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
6266
0
    bf1[8]  = bf0[8];
6267
0
    bf1[9]  = bf0[9];
6268
0
    bf1[10] = bf0[10];
6269
0
    bf1[11] = bf0[11];
6270
0
    bf1[12] = half_btf(cospi[16], bf0[12], cospi[48], bf0[13], cos_bit);
6271
0
    bf1[13] = half_btf(cospi[48], bf0[12], -cospi[16], bf0[13], cos_bit);
6272
0
    bf1[14] = half_btf(-cospi[48], bf0[14], cospi[16], bf0[15], cos_bit);
6273
0
    bf1[15] = half_btf(cospi[16], bf0[14], cospi[48], bf0[15], cos_bit);
6274
6275
    // stage 5
6276
0
    bf0     = step;
6277
0
    bf1     = output;
6278
0
    bf1[0]  = bf0[0] + bf0[4];
6279
0
    bf1[1]  = bf0[1] + bf0[5];
6280
0
    bf1[2]  = bf0[2] + bf0[6];
6281
0
    bf1[3]  = bf0[3] + bf0[7];
6282
0
    bf1[4]  = bf0[0] - bf0[4];
6283
0
    bf1[5]  = bf0[1] - bf0[5];
6284
0
    bf1[6]  = bf0[2] - bf0[6];
6285
0
    bf1[7]  = bf0[3] - bf0[7];
6286
0
    bf1[8]  = bf0[8] + bf0[12];
6287
0
    bf1[9]  = bf0[9] + bf0[13];
6288
0
    bf1[10] = bf0[10] + bf0[14];
6289
0
    bf1[11] = bf0[11] + bf0[15];
6290
0
    bf1[12] = bf0[8] - bf0[12];
6291
0
    bf1[13] = bf0[9] - bf0[13];
6292
0
    bf1[14] = bf0[10] - bf0[14];
6293
0
    bf1[15] = bf0[11] - bf0[15];
6294
6295
    // stage 6
6296
0
    bf0     = output;
6297
0
    bf1     = step;
6298
0
    bf1[0]  = bf0[0];
6299
0
    bf1[1]  = bf0[1];
6300
0
    bf1[2]  = bf0[2];
6301
0
    bf1[3]  = bf0[3];
6302
0
    bf1[4]  = bf0[4];
6303
0
    bf1[5]  = bf0[5];
6304
0
    bf1[6]  = bf0[6];
6305
0
    bf1[7]  = bf0[7];
6306
0
    bf1[8]  = half_btf(cospi[8], bf0[8], cospi[56], bf0[9], cos_bit);
6307
0
    bf1[9]  = half_btf(cospi[56], bf0[8], -cospi[8], bf0[9], cos_bit);
6308
0
    bf1[10] = half_btf(cospi[40], bf0[10], cospi[24], bf0[11], cos_bit);
6309
0
    bf1[11] = half_btf(cospi[24], bf0[10], -cospi[40], bf0[11], cos_bit);
6310
0
    bf1[12] = half_btf(-cospi[56], bf0[12], cospi[8], bf0[13], cos_bit);
6311
0
    bf1[13] = half_btf(cospi[8], bf0[12], cospi[56], bf0[13], cos_bit);
6312
0
    bf1[14] = half_btf(-cospi[24], bf0[14], cospi[40], bf0[15], cos_bit);
6313
0
    bf1[15] = half_btf(cospi[40], bf0[14], cospi[24], bf0[15], cos_bit);
6314
6315
    // stage 7
6316
0
    bf0     = step;
6317
0
    bf1     = output;
6318
0
    bf1[0]  = bf0[0] + bf0[8];
6319
0
    bf1[1]  = bf0[1] + bf0[9];
6320
0
    bf1[2]  = bf0[2] + bf0[10];
6321
0
    bf1[3]  = bf0[3] + bf0[11];
6322
0
    bf1[12] = bf0[4] - bf0[12];
6323
0
    bf1[13] = bf0[5] - bf0[13];
6324
0
    bf1[14] = bf0[6] - bf0[14];
6325
0
    bf1[15] = bf0[7] - bf0[15];
6326
6327
    // stage 8
6328
0
    bf0     = output;
6329
0
    bf1     = step;
6330
0
    bf1[1]  = half_btf(cospi[62], bf0[0], -cospi[2], bf0[1], cos_bit);
6331
0
    bf1[3]  = half_btf(cospi[54], bf0[2], -cospi[10], bf0[3], cos_bit);
6332
0
    bf1[12] = half_btf(cospi[50], bf0[12], cospi[14], bf0[13], cos_bit);
6333
0
    bf1[14] = half_btf(cospi[58], bf0[14], cospi[6], bf0[15], cos_bit);
6334
6335
    // stage 9
6336
0
    bf0    = step;
6337
0
    bf1    = output;
6338
0
    bf1[0] = bf0[1];
6339
0
    bf1[1] = bf0[14];
6340
0
    bf1[2] = bf0[3];
6341
0
    bf1[3] = bf0[12];
6342
0
}
6343
6344
0
void svt_av1_fidentity16_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6345
0
    (void)stage_range;
6346
0
    (void)cos_bit;
6347
0
    for (int32_t i = 0; i < 4; ++i) {
6348
0
        output[i] = round_shift((int64_t)input[i] * 2 * new_sqrt2, new_sqrt2_bits);
6349
0
    }
6350
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
6351
0
}
6352
6353
0
void svt_av1_fdct32_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6354
0
    (void)stage_range;
6355
0
    const int32_t* cospi;
6356
6357
0
    int32_t *bf0, *bf1;
6358
0
    int32_t  step[32];
6359
6360
    // stage 0;
6361
6362
    // stage 1;
6363
0
    bf1     = output;
6364
0
    bf1[0]  = input[0] + input[31];
6365
0
    bf1[1]  = input[1] + input[30];
6366
0
    bf1[2]  = input[2] + input[29];
6367
0
    bf1[3]  = input[3] + input[28];
6368
0
    bf1[4]  = input[4] + input[27];
6369
0
    bf1[5]  = input[5] + input[26];
6370
0
    bf1[6]  = input[6] + input[25];
6371
0
    bf1[7]  = input[7] + input[24];
6372
0
    bf1[8]  = input[8] + input[23];
6373
0
    bf1[9]  = input[9] + input[22];
6374
0
    bf1[10] = input[10] + input[21];
6375
0
    bf1[11] = input[11] + input[20];
6376
0
    bf1[12] = input[12] + input[19];
6377
0
    bf1[13] = input[13] + input[18];
6378
0
    bf1[14] = input[14] + input[17];
6379
0
    bf1[15] = input[15] + input[16];
6380
0
    bf1[16] = -input[16] + input[15];
6381
0
    bf1[17] = -input[17] + input[14];
6382
0
    bf1[18] = -input[18] + input[13];
6383
0
    bf1[19] = -input[19] + input[12];
6384
0
    bf1[20] = -input[20] + input[11];
6385
0
    bf1[21] = -input[21] + input[10];
6386
0
    bf1[22] = -input[22] + input[9];
6387
0
    bf1[23] = -input[23] + input[8];
6388
0
    bf1[24] = -input[24] + input[7];
6389
0
    bf1[25] = -input[25] + input[6];
6390
0
    bf1[26] = -input[26] + input[5];
6391
0
    bf1[27] = -input[27] + input[4];
6392
0
    bf1[28] = -input[28] + input[3];
6393
0
    bf1[29] = -input[29] + input[2];
6394
0
    bf1[30] = -input[30] + input[1];
6395
0
    bf1[31] = -input[31] + input[0];
6396
6397
    // stage 2
6398
0
    cospi   = cospi_arr(cos_bit);
6399
0
    bf0     = output;
6400
0
    bf1     = step;
6401
0
    bf1[0]  = bf0[0] + bf0[15];
6402
0
    bf1[1]  = bf0[1] + bf0[14];
6403
0
    bf1[2]  = bf0[2] + bf0[13];
6404
0
    bf1[3]  = bf0[3] + bf0[12];
6405
0
    bf1[4]  = bf0[4] + bf0[11];
6406
0
    bf1[5]  = bf0[5] + bf0[10];
6407
0
    bf1[6]  = bf0[6] + bf0[9];
6408
0
    bf1[7]  = bf0[7] + bf0[8];
6409
0
    bf1[8]  = -bf0[8] + bf0[7];
6410
0
    bf1[9]  = -bf0[9] + bf0[6];
6411
0
    bf1[10] = -bf0[10] + bf0[5];
6412
0
    bf1[11] = -bf0[11] + bf0[4];
6413
0
    bf1[12] = -bf0[12] + bf0[3];
6414
0
    bf1[13] = -bf0[13] + bf0[2];
6415
0
    bf1[14] = -bf0[14] + bf0[1];
6416
0
    bf1[15] = -bf0[15] + bf0[0];
6417
0
    bf1[16] = bf0[16];
6418
0
    bf1[17] = bf0[17];
6419
0
    bf1[18] = bf0[18];
6420
0
    bf1[19] = bf0[19];
6421
0
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
6422
0
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
6423
0
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
6424
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
6425
0
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
6426
0
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
6427
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
6428
0
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
6429
0
    bf1[28] = bf0[28];
6430
0
    bf1[29] = bf0[29];
6431
0
    bf1[30] = bf0[30];
6432
0
    bf1[31] = bf0[31];
6433
6434
    // stage 3
6435
0
    bf0     = step;
6436
0
    bf1     = output;
6437
0
    bf1[0]  = bf0[0] + bf0[7];
6438
0
    bf1[1]  = bf0[1] + bf0[6];
6439
0
    bf1[2]  = bf0[2] + bf0[5];
6440
0
    bf1[3]  = bf0[3] + bf0[4];
6441
0
    bf1[4]  = -bf0[4] + bf0[3];
6442
0
    bf1[5]  = -bf0[5] + bf0[2];
6443
0
    bf1[6]  = -bf0[6] + bf0[1];
6444
0
    bf1[7]  = -bf0[7] + bf0[0];
6445
0
    bf1[8]  = bf0[8];
6446
0
    bf1[9]  = bf0[9];
6447
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
6448
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
6449
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
6450
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
6451
0
    bf1[14] = bf0[14];
6452
0
    bf1[15] = bf0[15];
6453
0
    bf1[16] = bf0[16] + bf0[23];
6454
0
    bf1[17] = bf0[17] + bf0[22];
6455
0
    bf1[18] = bf0[18] + bf0[21];
6456
0
    bf1[19] = bf0[19] + bf0[20];
6457
0
    bf1[20] = -bf0[20] + bf0[19];
6458
0
    bf1[21] = -bf0[21] + bf0[18];
6459
0
    bf1[22] = -bf0[22] + bf0[17];
6460
0
    bf1[23] = -bf0[23] + bf0[16];
6461
0
    bf1[24] = -bf0[24] + bf0[31];
6462
0
    bf1[25] = -bf0[25] + bf0[30];
6463
0
    bf1[26] = -bf0[26] + bf0[29];
6464
0
    bf1[27] = -bf0[27] + bf0[28];
6465
0
    bf1[28] = bf0[28] + bf0[27];
6466
0
    bf1[29] = bf0[29] + bf0[26];
6467
0
    bf1[30] = bf0[30] + bf0[25];
6468
0
    bf1[31] = bf0[31] + bf0[24];
6469
6470
    // stage 4
6471
0
    bf0     = output;
6472
0
    bf1     = step;
6473
0
    bf1[0]  = bf0[0] + bf0[3];
6474
0
    bf1[1]  = bf0[1] + bf0[2];
6475
0
    bf1[4]  = bf0[4];
6476
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
6477
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
6478
0
    bf1[7]  = bf0[7];
6479
0
    bf1[8]  = bf0[8] + bf0[11];
6480
0
    bf1[9]  = bf0[9] + bf0[10];
6481
0
    bf1[10] = -bf0[10] + bf0[9];
6482
0
    bf1[11] = -bf0[11] + bf0[8];
6483
0
    bf1[12] = -bf0[12] + bf0[15];
6484
0
    bf1[13] = -bf0[13] + bf0[14];
6485
0
    bf1[14] = bf0[14] + bf0[13];
6486
0
    bf1[15] = bf0[15] + bf0[12];
6487
0
    bf1[16] = bf0[16];
6488
0
    bf1[17] = bf0[17];
6489
0
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
6490
0
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
6491
0
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
6492
0
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
6493
0
    bf1[22] = bf0[22];
6494
0
    bf1[23] = bf0[23];
6495
0
    bf1[24] = bf0[24];
6496
0
    bf1[25] = bf0[25];
6497
0
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
6498
0
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
6499
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
6500
0
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
6501
0
    bf1[30] = bf0[30];
6502
0
    bf1[31] = bf0[31];
6503
6504
    // stage 5
6505
0
    bf0     = step;
6506
0
    bf1     = output;
6507
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
6508
0
    bf1[4]  = bf0[4] + bf0[5];
6509
0
    bf1[7]  = bf0[7] + bf0[6];
6510
0
    bf1[8]  = bf0[8];
6511
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
6512
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
6513
0
    bf1[11] = bf0[11];
6514
0
    bf1[12] = bf0[12];
6515
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
6516
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
6517
0
    bf1[15] = bf0[15];
6518
0
    bf1[16] = bf0[16] + bf0[19];
6519
0
    bf1[17] = bf0[17] + bf0[18];
6520
0
    bf1[18] = -bf0[18] + bf0[17];
6521
0
    bf1[19] = -bf0[19] + bf0[16];
6522
0
    bf1[20] = -bf0[20] + bf0[23];
6523
0
    bf1[21] = -bf0[21] + bf0[22];
6524
0
    bf1[22] = bf0[22] + bf0[21];
6525
0
    bf1[23] = bf0[23] + bf0[20];
6526
0
    bf1[24] = bf0[24] + bf0[27];
6527
0
    bf1[25] = bf0[25] + bf0[26];
6528
0
    bf1[26] = -bf0[26] + bf0[25];
6529
0
    bf1[27] = -bf0[27] + bf0[24];
6530
0
    bf1[28] = -bf0[28] + bf0[31];
6531
0
    bf1[29] = -bf0[29] + bf0[30];
6532
0
    bf1[30] = bf0[30] + bf0[29];
6533
0
    bf1[31] = bf0[31] + bf0[28];
6534
6535
    // stage 6
6536
0
    bf0     = output;
6537
0
    bf1     = step;
6538
0
    bf1[0]  = bf0[0];
6539
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
6540
0
    bf1[8]  = bf0[8] + bf0[9];
6541
0
    bf1[11] = bf0[11] + bf0[10];
6542
0
    bf1[12] = bf0[12] + bf0[13];
6543
0
    bf1[15] = bf0[15] + bf0[14];
6544
0
    bf1[16] = bf0[16];
6545
0
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
6546
0
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
6547
0
    bf1[19] = bf0[19];
6548
0
    bf1[20] = bf0[20];
6549
0
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
6550
0
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
6551
0
    bf1[23] = bf0[23];
6552
0
    bf1[24] = bf0[24];
6553
0
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
6554
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
6555
0
    bf1[27] = bf0[27];
6556
0
    bf1[28] = bf0[28];
6557
0
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
6558
0
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
6559
0
    bf1[31] = bf0[31];
6560
6561
    // stage 7
6562
0
    bf0     = step;
6563
0
    bf1     = output;
6564
0
    bf1[0]  = bf0[0];
6565
0
    bf1[4]  = bf0[4];
6566
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
6567
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
6568
0
    bf1[16] = bf0[16] + bf0[17];
6569
0
    bf1[19] = bf0[19] + bf0[18];
6570
0
    bf1[20] = bf0[20] + bf0[21];
6571
0
    bf1[23] = bf0[23] + bf0[22];
6572
0
    bf1[24] = bf0[24] + bf0[25];
6573
0
    bf1[27] = bf0[27] + bf0[26];
6574
0
    bf1[28] = bf0[28] + bf0[29];
6575
0
    bf1[31] = bf0[31] + bf0[30];
6576
6577
    // stage 8
6578
0
    bf0     = output;
6579
0
    bf1     = step;
6580
0
    bf1[0]  = bf0[0];
6581
0
    bf1[4]  = bf0[4];
6582
0
    bf1[8]  = bf0[8];
6583
0
    bf1[12] = bf0[12];
6584
0
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
6585
0
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
6586
0
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
6587
0
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
6588
6589
    // stage 9
6590
0
    bf0    = step;
6591
0
    bf1    = output;
6592
0
    bf1[0] = bf0[0];
6593
0
    bf1[1] = bf0[16];
6594
0
    bf1[2] = bf0[8];
6595
0
    bf1[3] = bf0[24];
6596
0
    bf1[4] = bf0[4];
6597
0
    bf1[5] = bf0[20];
6598
0
    bf1[6] = bf0[12];
6599
0
    bf1[7] = bf0[28];
6600
0
}
6601
6602
0
void svt_av1_fidentity32_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6603
0
    (void)stage_range;
6604
0
    (void)cos_bit;
6605
0
    for (int32_t i = 0; i < 8; ++i) {
6606
0
        output[i] = input[i] * 4;
6607
0
    }
6608
0
}
6609
6610
0
void svt_av1_fdct64_new_N4(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
6611
0
    (void)stage_range;
6612
0
    const int32_t* cospi;
6613
6614
0
    int32_t *bf0, *bf1;
6615
0
    int32_t  step[64];
6616
6617
    // stage 0;
6618
6619
    // stage 1;
6620
0
    bf1     = output;
6621
0
    bf1[0]  = input[0] + input[63];
6622
0
    bf1[1]  = input[1] + input[62];
6623
0
    bf1[2]  = input[2] + input[61];
6624
0
    bf1[3]  = input[3] + input[60];
6625
0
    bf1[4]  = input[4] + input[59];
6626
0
    bf1[5]  = input[5] + input[58];
6627
0
    bf1[6]  = input[6] + input[57];
6628
0
    bf1[7]  = input[7] + input[56];
6629
0
    bf1[8]  = input[8] + input[55];
6630
0
    bf1[9]  = input[9] + input[54];
6631
0
    bf1[10] = input[10] + input[53];
6632
0
    bf1[11] = input[11] + input[52];
6633
0
    bf1[12] = input[12] + input[51];
6634
0
    bf1[13] = input[13] + input[50];
6635
0
    bf1[14] = input[14] + input[49];
6636
0
    bf1[15] = input[15] + input[48];
6637
0
    bf1[16] = input[16] + input[47];
6638
0
    bf1[17] = input[17] + input[46];
6639
0
    bf1[18] = input[18] + input[45];
6640
0
    bf1[19] = input[19] + input[44];
6641
0
    bf1[20] = input[20] + input[43];
6642
0
    bf1[21] = input[21] + input[42];
6643
0
    bf1[22] = input[22] + input[41];
6644
0
    bf1[23] = input[23] + input[40];
6645
0
    bf1[24] = input[24] + input[39];
6646
0
    bf1[25] = input[25] + input[38];
6647
0
    bf1[26] = input[26] + input[37];
6648
0
    bf1[27] = input[27] + input[36];
6649
0
    bf1[28] = input[28] + input[35];
6650
0
    bf1[29] = input[29] + input[34];
6651
0
    bf1[30] = input[30] + input[33];
6652
0
    bf1[31] = input[31] + input[32];
6653
0
    bf1[32] = -input[32] + input[31];
6654
0
    bf1[33] = -input[33] + input[30];
6655
0
    bf1[34] = -input[34] + input[29];
6656
0
    bf1[35] = -input[35] + input[28];
6657
0
    bf1[36] = -input[36] + input[27];
6658
0
    bf1[37] = -input[37] + input[26];
6659
0
    bf1[38] = -input[38] + input[25];
6660
0
    bf1[39] = -input[39] + input[24];
6661
0
    bf1[40] = -input[40] + input[23];
6662
0
    bf1[41] = -input[41] + input[22];
6663
0
    bf1[42] = -input[42] + input[21];
6664
0
    bf1[43] = -input[43] + input[20];
6665
0
    bf1[44] = -input[44] + input[19];
6666
0
    bf1[45] = -input[45] + input[18];
6667
0
    bf1[46] = -input[46] + input[17];
6668
0
    bf1[47] = -input[47] + input[16];
6669
0
    bf1[48] = -input[48] + input[15];
6670
0
    bf1[49] = -input[49] + input[14];
6671
0
    bf1[50] = -input[50] + input[13];
6672
0
    bf1[51] = -input[51] + input[12];
6673
0
    bf1[52] = -input[52] + input[11];
6674
0
    bf1[53] = -input[53] + input[10];
6675
0
    bf1[54] = -input[54] + input[9];
6676
0
    bf1[55] = -input[55] + input[8];
6677
0
    bf1[56] = -input[56] + input[7];
6678
0
    bf1[57] = -input[57] + input[6];
6679
0
    bf1[58] = -input[58] + input[5];
6680
0
    bf1[59] = -input[59] + input[4];
6681
0
    bf1[60] = -input[60] + input[3];
6682
0
    bf1[61] = -input[61] + input[2];
6683
0
    bf1[62] = -input[62] + input[1];
6684
0
    bf1[63] = -input[63] + input[0];
6685
6686
    // stage 2
6687
0
    cospi   = cospi_arr(cos_bit);
6688
0
    bf0     = output;
6689
0
    bf1     = step;
6690
0
    bf1[0]  = bf0[0] + bf0[31];
6691
0
    bf1[1]  = bf0[1] + bf0[30];
6692
0
    bf1[2]  = bf0[2] + bf0[29];
6693
0
    bf1[3]  = bf0[3] + bf0[28];
6694
0
    bf1[4]  = bf0[4] + bf0[27];
6695
0
    bf1[5]  = bf0[5] + bf0[26];
6696
0
    bf1[6]  = bf0[6] + bf0[25];
6697
0
    bf1[7]  = bf0[7] + bf0[24];
6698
0
    bf1[8]  = bf0[8] + bf0[23];
6699
0
    bf1[9]  = bf0[9] + bf0[22];
6700
0
    bf1[10] = bf0[10] + bf0[21];
6701
0
    bf1[11] = bf0[11] + bf0[20];
6702
0
    bf1[12] = bf0[12] + bf0[19];
6703
0
    bf1[13] = bf0[13] + bf0[18];
6704
0
    bf1[14] = bf0[14] + bf0[17];
6705
0
    bf1[15] = bf0[15] + bf0[16];
6706
0
    bf1[16] = -bf0[16] + bf0[15];
6707
0
    bf1[17] = -bf0[17] + bf0[14];
6708
0
    bf1[18] = -bf0[18] + bf0[13];
6709
0
    bf1[19] = -bf0[19] + bf0[12];
6710
0
    bf1[20] = -bf0[20] + bf0[11];
6711
0
    bf1[21] = -bf0[21] + bf0[10];
6712
0
    bf1[22] = -bf0[22] + bf0[9];
6713
0
    bf1[23] = -bf0[23] + bf0[8];
6714
0
    bf1[24] = -bf0[24] + bf0[7];
6715
0
    bf1[25] = -bf0[25] + bf0[6];
6716
0
    bf1[26] = -bf0[26] + bf0[5];
6717
0
    bf1[27] = -bf0[27] + bf0[4];
6718
0
    bf1[28] = -bf0[28] + bf0[3];
6719
0
    bf1[29] = -bf0[29] + bf0[2];
6720
0
    bf1[30] = -bf0[30] + bf0[1];
6721
0
    bf1[31] = -bf0[31] + bf0[0];
6722
0
    bf1[32] = bf0[32];
6723
0
    bf1[33] = bf0[33];
6724
0
    bf1[34] = bf0[34];
6725
0
    bf1[35] = bf0[35];
6726
0
    bf1[36] = bf0[36];
6727
0
    bf1[37] = bf0[37];
6728
0
    bf1[38] = bf0[38];
6729
0
    bf1[39] = bf0[39];
6730
0
    bf1[40] = half_btf(-cospi[32], bf0[40], cospi[32], bf0[55], cos_bit);
6731
0
    bf1[41] = half_btf(-cospi[32], bf0[41], cospi[32], bf0[54], cos_bit);
6732
0
    bf1[42] = half_btf(-cospi[32], bf0[42], cospi[32], bf0[53], cos_bit);
6733
0
    bf1[43] = half_btf(-cospi[32], bf0[43], cospi[32], bf0[52], cos_bit);
6734
0
    bf1[44] = half_btf(-cospi[32], bf0[44], cospi[32], bf0[51], cos_bit);
6735
0
    bf1[45] = half_btf(-cospi[32], bf0[45], cospi[32], bf0[50], cos_bit);
6736
0
    bf1[46] = half_btf(-cospi[32], bf0[46], cospi[32], bf0[49], cos_bit);
6737
0
    bf1[47] = half_btf(-cospi[32], bf0[47], cospi[32], bf0[48], cos_bit);
6738
0
    bf1[48] = half_btf(cospi[32], bf0[48], cospi[32], bf0[47], cos_bit);
6739
0
    bf1[49] = half_btf(cospi[32], bf0[49], cospi[32], bf0[46], cos_bit);
6740
0
    bf1[50] = half_btf(cospi[32], bf0[50], cospi[32], bf0[45], cos_bit);
6741
0
    bf1[51] = half_btf(cospi[32], bf0[51], cospi[32], bf0[44], cos_bit);
6742
0
    bf1[52] = half_btf(cospi[32], bf0[52], cospi[32], bf0[43], cos_bit);
6743
0
    bf1[53] = half_btf(cospi[32], bf0[53], cospi[32], bf0[42], cos_bit);
6744
0
    bf1[54] = half_btf(cospi[32], bf0[54], cospi[32], bf0[41], cos_bit);
6745
0
    bf1[55] = half_btf(cospi[32], bf0[55], cospi[32], bf0[40], cos_bit);
6746
0
    bf1[56] = bf0[56];
6747
0
    bf1[57] = bf0[57];
6748
0
    bf1[58] = bf0[58];
6749
0
    bf1[59] = bf0[59];
6750
0
    bf1[60] = bf0[60];
6751
0
    bf1[61] = bf0[61];
6752
0
    bf1[62] = bf0[62];
6753
0
    bf1[63] = bf0[63];
6754
6755
    // stage 3
6756
0
    cospi   = cospi_arr(cos_bit);
6757
0
    bf0     = step;
6758
0
    bf1     = output;
6759
0
    bf1[0]  = bf0[0] + bf0[15];
6760
0
    bf1[1]  = bf0[1] + bf0[14];
6761
0
    bf1[2]  = bf0[2] + bf0[13];
6762
0
    bf1[3]  = bf0[3] + bf0[12];
6763
0
    bf1[4]  = bf0[4] + bf0[11];
6764
0
    bf1[5]  = bf0[5] + bf0[10];
6765
0
    bf1[6]  = bf0[6] + bf0[9];
6766
0
    bf1[7]  = bf0[7] + bf0[8];
6767
0
    bf1[8]  = -bf0[8] + bf0[7];
6768
0
    bf1[9]  = -bf0[9] + bf0[6];
6769
0
    bf1[10] = -bf0[10] + bf0[5];
6770
0
    bf1[11] = -bf0[11] + bf0[4];
6771
0
    bf1[12] = -bf0[12] + bf0[3];
6772
0
    bf1[13] = -bf0[13] + bf0[2];
6773
0
    bf1[14] = -bf0[14] + bf0[1];
6774
0
    bf1[15] = -bf0[15] + bf0[0];
6775
0
    bf1[16] = bf0[16];
6776
0
    bf1[17] = bf0[17];
6777
0
    bf1[18] = bf0[18];
6778
0
    bf1[19] = bf0[19];
6779
0
    bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
6780
0
    bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
6781
0
    bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
6782
0
    bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
6783
0
    bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
6784
0
    bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
6785
0
    bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
6786
0
    bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
6787
0
    bf1[28] = bf0[28];
6788
0
    bf1[29] = bf0[29];
6789
0
    bf1[30] = bf0[30];
6790
0
    bf1[31] = bf0[31];
6791
0
    bf1[32] = bf0[32] + bf0[47];
6792
0
    bf1[33] = bf0[33] + bf0[46];
6793
0
    bf1[34] = bf0[34] + bf0[45];
6794
0
    bf1[35] = bf0[35] + bf0[44];
6795
0
    bf1[36] = bf0[36] + bf0[43];
6796
0
    bf1[37] = bf0[37] + bf0[42];
6797
0
    bf1[38] = bf0[38] + bf0[41];
6798
0
    bf1[39] = bf0[39] + bf0[40];
6799
0
    bf1[40] = -bf0[40] + bf0[39];
6800
0
    bf1[41] = -bf0[41] + bf0[38];
6801
0
    bf1[42] = -bf0[42] + bf0[37];
6802
0
    bf1[43] = -bf0[43] + bf0[36];
6803
0
    bf1[44] = -bf0[44] + bf0[35];
6804
0
    bf1[45] = -bf0[45] + bf0[34];
6805
0
    bf1[46] = -bf0[46] + bf0[33];
6806
0
    bf1[47] = -bf0[47] + bf0[32];
6807
0
    bf1[48] = -bf0[48] + bf0[63];
6808
0
    bf1[49] = -bf0[49] + bf0[62];
6809
0
    bf1[50] = -bf0[50] + bf0[61];
6810
0
    bf1[51] = -bf0[51] + bf0[60];
6811
0
    bf1[52] = -bf0[52] + bf0[59];
6812
0
    bf1[53] = -bf0[53] + bf0[58];
6813
0
    bf1[54] = -bf0[54] + bf0[57];
6814
0
    bf1[55] = -bf0[55] + bf0[56];
6815
0
    bf1[56] = bf0[56] + bf0[55];
6816
0
    bf1[57] = bf0[57] + bf0[54];
6817
0
    bf1[58] = bf0[58] + bf0[53];
6818
0
    bf1[59] = bf0[59] + bf0[52];
6819
0
    bf1[60] = bf0[60] + bf0[51];
6820
0
    bf1[61] = bf0[61] + bf0[50];
6821
0
    bf1[62] = bf0[62] + bf0[49];
6822
0
    bf1[63] = bf0[63] + bf0[48];
6823
6824
    // stage 4
6825
0
    cospi   = cospi_arr(cos_bit);
6826
0
    bf0     = output;
6827
0
    bf1     = step;
6828
0
    bf1[0]  = bf0[0] + bf0[7];
6829
0
    bf1[1]  = bf0[1] + bf0[6];
6830
0
    bf1[2]  = bf0[2] + bf0[5];
6831
0
    bf1[3]  = bf0[3] + bf0[4];
6832
0
    bf1[4]  = -bf0[4] + bf0[3];
6833
0
    bf1[5]  = -bf0[5] + bf0[2];
6834
0
    bf1[6]  = -bf0[6] + bf0[1];
6835
0
    bf1[7]  = -bf0[7] + bf0[0];
6836
0
    bf1[8]  = bf0[8];
6837
0
    bf1[9]  = bf0[9];
6838
0
    bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
6839
0
    bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
6840
0
    bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
6841
0
    bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
6842
0
    bf1[14] = bf0[14];
6843
0
    bf1[15] = bf0[15];
6844
0
    bf1[16] = bf0[16] + bf0[23];
6845
0
    bf1[17] = bf0[17] + bf0[22];
6846
0
    bf1[18] = bf0[18] + bf0[21];
6847
0
    bf1[19] = bf0[19] + bf0[20];
6848
0
    bf1[20] = -bf0[20] + bf0[19];
6849
0
    bf1[21] = -bf0[21] + bf0[18];
6850
0
    bf1[22] = -bf0[22] + bf0[17];
6851
0
    bf1[23] = -bf0[23] + bf0[16];
6852
0
    bf1[24] = -bf0[24] + bf0[31];
6853
0
    bf1[25] = -bf0[25] + bf0[30];
6854
0
    bf1[26] = -bf0[26] + bf0[29];
6855
0
    bf1[27] = -bf0[27] + bf0[28];
6856
0
    bf1[28] = bf0[28] + bf0[27];
6857
0
    bf1[29] = bf0[29] + bf0[26];
6858
0
    bf1[30] = bf0[30] + bf0[25];
6859
0
    bf1[31] = bf0[31] + bf0[24];
6860
0
    bf1[32] = bf0[32];
6861
0
    bf1[33] = bf0[33];
6862
0
    bf1[34] = bf0[34];
6863
0
    bf1[35] = bf0[35];
6864
0
    bf1[36] = half_btf(-cospi[16], bf0[36], cospi[48], bf0[59], cos_bit);
6865
0
    bf1[37] = half_btf(-cospi[16], bf0[37], cospi[48], bf0[58], cos_bit);
6866
0
    bf1[38] = half_btf(-cospi[16], bf0[38], cospi[48], bf0[57], cos_bit);
6867
0
    bf1[39] = half_btf(-cospi[16], bf0[39], cospi[48], bf0[56], cos_bit);
6868
0
    bf1[40] = half_btf(-cospi[48], bf0[40], -cospi[16], bf0[55], cos_bit);
6869
0
    bf1[41] = half_btf(-cospi[48], bf0[41], -cospi[16], bf0[54], cos_bit);
6870
0
    bf1[42] = half_btf(-cospi[48], bf0[42], -cospi[16], bf0[53], cos_bit);
6871
0
    bf1[43] = half_btf(-cospi[48], bf0[43], -cospi[16], bf0[52], cos_bit);
6872
0
    bf1[44] = bf0[44];
6873
0
    bf1[45] = bf0[45];
6874
0
    bf1[46] = bf0[46];
6875
0
    bf1[47] = bf0[47];
6876
0
    bf1[48] = bf0[48];
6877
0
    bf1[49] = bf0[49];
6878
0
    bf1[50] = bf0[50];
6879
0
    bf1[51] = bf0[51];
6880
0
    bf1[52] = half_btf(cospi[48], bf0[52], -cospi[16], bf0[43], cos_bit);
6881
0
    bf1[53] = half_btf(cospi[48], bf0[53], -cospi[16], bf0[42], cos_bit);
6882
0
    bf1[54] = half_btf(cospi[48], bf0[54], -cospi[16], bf0[41], cos_bit);
6883
0
    bf1[55] = half_btf(cospi[48], bf0[55], -cospi[16], bf0[40], cos_bit);
6884
0
    bf1[56] = half_btf(cospi[16], bf0[56], cospi[48], bf0[39], cos_bit);
6885
0
    bf1[57] = half_btf(cospi[16], bf0[57], cospi[48], bf0[38], cos_bit);
6886
0
    bf1[58] = half_btf(cospi[16], bf0[58], cospi[48], bf0[37], cos_bit);
6887
0
    bf1[59] = half_btf(cospi[16], bf0[59], cospi[48], bf0[36], cos_bit);
6888
0
    bf1[60] = bf0[60];
6889
0
    bf1[61] = bf0[61];
6890
0
    bf1[62] = bf0[62];
6891
0
    bf1[63] = bf0[63];
6892
6893
    // stage 5
6894
0
    cospi   = cospi_arr(cos_bit);
6895
0
    bf0     = step;
6896
0
    bf1     = output;
6897
0
    bf1[0]  = bf0[0] + bf0[3];
6898
0
    bf1[1]  = bf0[1] + bf0[2];
6899
0
    bf1[4]  = bf0[4];
6900
0
    bf1[5]  = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
6901
0
    bf1[6]  = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
6902
0
    bf1[7]  = bf0[7];
6903
0
    bf1[8]  = bf0[8] + bf0[11];
6904
0
    bf1[9]  = bf0[9] + bf0[10];
6905
0
    bf1[10] = -bf0[10] + bf0[9];
6906
0
    bf1[11] = -bf0[11] + bf0[8];
6907
0
    bf1[12] = -bf0[12] + bf0[15];
6908
0
    bf1[13] = -bf0[13] + bf0[14];
6909
0
    bf1[14] = bf0[14] + bf0[13];
6910
0
    bf1[15] = bf0[15] + bf0[12];
6911
0
    bf1[16] = bf0[16];
6912
0
    bf1[17] = bf0[17];
6913
0
    bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
6914
0
    bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
6915
0
    bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
6916
0
    bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
6917
0
    bf1[22] = bf0[22];
6918
0
    bf1[23] = bf0[23];
6919
0
    bf1[24] = bf0[24];
6920
0
    bf1[25] = bf0[25];
6921
0
    bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
6922
0
    bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
6923
0
    bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
6924
0
    bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
6925
0
    bf1[30] = bf0[30];
6926
0
    bf1[31] = bf0[31];
6927
0
    bf1[32] = bf0[32] + bf0[39];
6928
0
    bf1[33] = bf0[33] + bf0[38];
6929
0
    bf1[34] = bf0[34] + bf0[37];
6930
0
    bf1[35] = bf0[35] + bf0[36];
6931
0
    bf1[36] = -bf0[36] + bf0[35];
6932
0
    bf1[37] = -bf0[37] + bf0[34];
6933
0
    bf1[38] = -bf0[38] + bf0[33];
6934
0
    bf1[39] = -bf0[39] + bf0[32];
6935
0
    bf1[40] = -bf0[40] + bf0[47];
6936
0
    bf1[41] = -bf0[41] + bf0[46];
6937
0
    bf1[42] = -bf0[42] + bf0[45];
6938
0
    bf1[43] = -bf0[43] + bf0[44];
6939
0
    bf1[44] = bf0[44] + bf0[43];
6940
0
    bf1[45] = bf0[45] + bf0[42];
6941
0
    bf1[46] = bf0[46] + bf0[41];
6942
0
    bf1[47] = bf0[47] + bf0[40];
6943
0
    bf1[48] = bf0[48] + bf0[55];
6944
0
    bf1[49] = bf0[49] + bf0[54];
6945
0
    bf1[50] = bf0[50] + bf0[53];
6946
0
    bf1[51] = bf0[51] + bf0[52];
6947
0
    bf1[52] = -bf0[52] + bf0[51];
6948
0
    bf1[53] = -bf0[53] + bf0[50];
6949
0
    bf1[54] = -bf0[54] + bf0[49];
6950
0
    bf1[55] = -bf0[55] + bf0[48];
6951
0
    bf1[56] = -bf0[56] + bf0[63];
6952
0
    bf1[57] = -bf0[57] + bf0[62];
6953
0
    bf1[58] = -bf0[58] + bf0[61];
6954
0
    bf1[59] = -bf0[59] + bf0[60];
6955
0
    bf1[60] = bf0[60] + bf0[59];
6956
0
    bf1[61] = bf0[61] + bf0[58];
6957
0
    bf1[62] = bf0[62] + bf0[57];
6958
0
    bf1[63] = bf0[63] + bf0[56];
6959
6960
    // stage 6
6961
0
    cospi   = cospi_arr(cos_bit);
6962
0
    bf0     = output;
6963
0
    bf1     = step;
6964
0
    bf1[0]  = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
6965
0
    bf1[4]  = bf0[4] + bf0[5];
6966
0
    bf1[7]  = bf0[7] + bf0[6];
6967
0
    bf1[8]  = bf0[8];
6968
0
    bf1[9]  = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
6969
0
    bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
6970
0
    bf1[11] = bf0[11];
6971
0
    bf1[12] = bf0[12];
6972
0
    bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
6973
0
    bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
6974
0
    bf1[15] = bf0[15];
6975
0
    bf1[16] = bf0[16] + bf0[19];
6976
0
    bf1[17] = bf0[17] + bf0[18];
6977
0
    bf1[18] = -bf0[18] + bf0[17];
6978
0
    bf1[19] = -bf0[19] + bf0[16];
6979
0
    bf1[20] = -bf0[20] + bf0[23];
6980
0
    bf1[21] = -bf0[21] + bf0[22];
6981
0
    bf1[22] = bf0[22] + bf0[21];
6982
0
    bf1[23] = bf0[23] + bf0[20];
6983
0
    bf1[24] = bf0[24] + bf0[27];
6984
0
    bf1[25] = bf0[25] + bf0[26];
6985
0
    bf1[26] = -bf0[26] + bf0[25];
6986
0
    bf1[27] = -bf0[27] + bf0[24];
6987
0
    bf1[28] = -bf0[28] + bf0[31];
6988
0
    bf1[29] = -bf0[29] + bf0[30];
6989
0
    bf1[30] = bf0[30] + bf0[29];
6990
0
    bf1[31] = bf0[31] + bf0[28];
6991
0
    bf1[32] = bf0[32];
6992
0
    bf1[33] = bf0[33];
6993
0
    bf1[34] = half_btf(-cospi[8], bf0[34], cospi[56], bf0[61], cos_bit);
6994
0
    bf1[35] = half_btf(-cospi[8], bf0[35], cospi[56], bf0[60], cos_bit);
6995
0
    bf1[36] = half_btf(-cospi[56], bf0[36], -cospi[8], bf0[59], cos_bit);
6996
0
    bf1[37] = half_btf(-cospi[56], bf0[37], -cospi[8], bf0[58], cos_bit);
6997
0
    bf1[38] = bf0[38];
6998
0
    bf1[39] = bf0[39];
6999
0
    bf1[40] = bf0[40];
7000
0
    bf1[41] = bf0[41];
7001
0
    bf1[42] = half_btf(-cospi[40], bf0[42], cospi[24], bf0[53], cos_bit);
7002
0
    bf1[43] = half_btf(-cospi[40], bf0[43], cospi[24], bf0[52], cos_bit);
7003
0
    bf1[44] = half_btf(-cospi[24], bf0[44], -cospi[40], bf0[51], cos_bit);
7004
0
    bf1[45] = half_btf(-cospi[24], bf0[45], -cospi[40], bf0[50], cos_bit);
7005
0
    bf1[46] = bf0[46];
7006
0
    bf1[47] = bf0[47];
7007
0
    bf1[48] = bf0[48];
7008
0
    bf1[49] = bf0[49];
7009
0
    bf1[50] = half_btf(cospi[24], bf0[50], -cospi[40], bf0[45], cos_bit);
7010
0
    bf1[51] = half_btf(cospi[24], bf0[51], -cospi[40], bf0[44], cos_bit);
7011
0
    bf1[52] = half_btf(cospi[40], bf0[52], cospi[24], bf0[43], cos_bit);
7012
0
    bf1[53] = half_btf(cospi[40], bf0[53], cospi[24], bf0[42], cos_bit);
7013
0
    bf1[54] = bf0[54];
7014
0
    bf1[55] = bf0[55];
7015
0
    bf1[56] = bf0[56];
7016
0
    bf1[57] = bf0[57];
7017
0
    bf1[58] = half_btf(cospi[56], bf0[58], -cospi[8], bf0[37], cos_bit);
7018
0
    bf1[59] = half_btf(cospi[56], bf0[59], -cospi[8], bf0[36], cos_bit);
7019
0
    bf1[60] = half_btf(cospi[8], bf0[60], cospi[56], bf0[35], cos_bit);
7020
0
    bf1[61] = half_btf(cospi[8], bf0[61], cospi[56], bf0[34], cos_bit);
7021
0
    bf1[62] = bf0[62];
7022
0
    bf1[63] = bf0[63];
7023
7024
    // stage 7
7025
0
    cospi   = cospi_arr(cos_bit);
7026
0
    bf0     = step;
7027
0
    bf1     = output;
7028
0
    bf1[0]  = bf0[0];
7029
0
    bf1[4]  = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
7030
0
    bf1[8]  = bf0[8] + bf0[9];
7031
0
    bf1[11] = bf0[11] + bf0[10];
7032
0
    bf1[12] = bf0[12] + bf0[13];
7033
0
    bf1[15] = bf0[15] + bf0[14];
7034
0
    bf1[16] = bf0[16];
7035
0
    bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
7036
0
    bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
7037
0
    bf1[19] = bf0[19];
7038
0
    bf1[20] = bf0[20];
7039
0
    bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
7040
0
    bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
7041
0
    bf1[23] = bf0[23];
7042
0
    bf1[24] = bf0[24];
7043
0
    bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
7044
0
    bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
7045
0
    bf1[27] = bf0[27];
7046
0
    bf1[28] = bf0[28];
7047
0
    bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
7048
0
    bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
7049
0
    bf1[31] = bf0[31];
7050
0
    bf1[32] = bf0[32] + bf0[35];
7051
0
    bf1[33] = bf0[33] + bf0[34];
7052
0
    bf1[34] = -bf0[34] + bf0[33];
7053
0
    bf1[35] = -bf0[35] + bf0[32];
7054
0
    bf1[36] = -bf0[36] + bf0[39];
7055
0
    bf1[37] = -bf0[37] + bf0[38];
7056
0
    bf1[38] = bf0[38] + bf0[37];
7057
0
    bf1[39] = bf0[39] + bf0[36];
7058
0
    bf1[40] = bf0[40] + bf0[43];
7059
0
    bf1[41] = bf0[41] + bf0[42];
7060
0
    bf1[42] = -bf0[42] + bf0[41];
7061
0
    bf1[43] = -bf0[43] + bf0[40];
7062
0
    bf1[44] = -bf0[44] + bf0[47];
7063
0
    bf1[45] = -bf0[45] + bf0[46];
7064
0
    bf1[46] = bf0[46] + bf0[45];
7065
0
    bf1[47] = bf0[47] + bf0[44];
7066
0
    bf1[48] = bf0[48] + bf0[51];
7067
0
    bf1[49] = bf0[49] + bf0[50];
7068
0
    bf1[50] = -bf0[50] + bf0[49];
7069
0
    bf1[51] = -bf0[51] + bf0[48];
7070
0
    bf1[52] = -bf0[52] + bf0[55];
7071
0
    bf1[53] = -bf0[53] + bf0[54];
7072
0
    bf1[54] = bf0[54] + bf0[53];
7073
0
    bf1[55] = bf0[55] + bf0[52];
7074
0
    bf1[56] = bf0[56] + bf0[59];
7075
0
    bf1[57] = bf0[57] + bf0[58];
7076
0
    bf1[58] = -bf0[58] + bf0[57];
7077
0
    bf1[59] = -bf0[59] + bf0[56];
7078
0
    bf1[60] = -bf0[60] + bf0[63];
7079
0
    bf1[61] = -bf0[61] + bf0[62];
7080
0
    bf1[62] = bf0[62] + bf0[61];
7081
0
    bf1[63] = bf0[63] + bf0[60];
7082
7083
    // stage 8
7084
0
    cospi   = cospi_arr(cos_bit);
7085
0
    bf0     = output;
7086
0
    bf1     = step;
7087
0
    bf1[0]  = bf0[0];
7088
0
    bf1[4]  = bf0[4];
7089
0
    bf1[8]  = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
7090
0
    bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
7091
0
    bf1[16] = bf0[16] + bf0[17];
7092
0
    bf1[19] = bf0[19] + bf0[18];
7093
0
    bf1[20] = bf0[20] + bf0[21];
7094
0
    bf1[23] = bf0[23] + bf0[22];
7095
0
    bf1[24] = bf0[24] + bf0[25];
7096
0
    bf1[27] = bf0[27] + bf0[26];
7097
0
    bf1[28] = bf0[28] + bf0[29];
7098
0
    bf1[31] = bf0[31] + bf0[30];
7099
0
    bf1[32] = bf0[32];
7100
0
    bf1[33] = half_btf(-cospi[4], bf0[33], cospi[60], bf0[62], cos_bit);
7101
0
    bf1[34] = half_btf(-cospi[60], bf0[34], -cospi[4], bf0[61], cos_bit);
7102
0
    bf1[35] = bf0[35];
7103
0
    bf1[36] = bf0[36];
7104
0
    bf1[37] = half_btf(-cospi[36], bf0[37], cospi[28], bf0[58], cos_bit);
7105
0
    bf1[38] = half_btf(-cospi[28], bf0[38], -cospi[36], bf0[57], cos_bit);
7106
0
    bf1[39] = bf0[39];
7107
0
    bf1[40] = bf0[40];
7108
0
    bf1[41] = half_btf(-cospi[20], bf0[41], cospi[44], bf0[54], cos_bit);
7109
0
    bf1[42] = half_btf(-cospi[44], bf0[42], -cospi[20], bf0[53], cos_bit);
7110
0
    bf1[43] = bf0[43];
7111
0
    bf1[44] = bf0[44];
7112
0
    bf1[45] = half_btf(-cospi[52], bf0[45], cospi[12], bf0[50], cos_bit);
7113
0
    bf1[46] = half_btf(-cospi[12], bf0[46], -cospi[52], bf0[49], cos_bit);
7114
0
    bf1[47] = bf0[47];
7115
0
    bf1[48] = bf0[48];
7116
0
    bf1[49] = half_btf(cospi[12], bf0[49], -cospi[52], bf0[46], cos_bit);
7117
0
    bf1[50] = half_btf(cospi[52], bf0[50], cospi[12], bf0[45], cos_bit);
7118
0
    bf1[51] = bf0[51];
7119
0
    bf1[52] = bf0[52];
7120
0
    bf1[53] = half_btf(cospi[44], bf0[53], -cospi[20], bf0[42], cos_bit);
7121
0
    bf1[54] = half_btf(cospi[20], bf0[54], cospi[44], bf0[41], cos_bit);
7122
0
    bf1[55] = bf0[55];
7123
0
    bf1[56] = bf0[56];
7124
0
    bf1[57] = half_btf(cospi[28], bf0[57], -cospi[36], bf0[38], cos_bit);
7125
0
    bf1[58] = half_btf(cospi[36], bf0[58], cospi[28], bf0[37], cos_bit);
7126
0
    bf1[59] = bf0[59];
7127
0
    bf1[60] = bf0[60];
7128
0
    bf1[61] = half_btf(cospi[60], bf0[61], -cospi[4], bf0[34], cos_bit);
7129
0
    bf1[62] = half_btf(cospi[4], bf0[62], cospi[60], bf0[33], cos_bit);
7130
0
    bf1[63] = bf0[63];
7131
7132
    // stage 9
7133
0
    cospi   = cospi_arr(cos_bit);
7134
0
    bf0     = step;
7135
0
    bf1     = output;
7136
0
    bf1[0]  = bf0[0];
7137
0
    bf1[4]  = bf0[4];
7138
0
    bf1[8]  = bf0[8];
7139
0
    bf1[12] = bf0[12];
7140
0
    bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
7141
0
    bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
7142
0
    bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
7143
0
    bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
7144
0
    bf1[32] = bf0[32] + bf0[33];
7145
0
    bf1[35] = bf0[35] + bf0[34];
7146
0
    bf1[36] = bf0[36] + bf0[37];
7147
0
    bf1[39] = bf0[39] + bf0[38];
7148
0
    bf1[40] = bf0[40] + bf0[41];
7149
0
    bf1[43] = bf0[43] + bf0[42];
7150
0
    bf1[44] = bf0[44] + bf0[45];
7151
0
    bf1[47] = bf0[47] + bf0[46];
7152
0
    bf1[48] = bf0[48] + bf0[49];
7153
0
    bf1[51] = bf0[51] + bf0[50];
7154
0
    bf1[52] = bf0[52] + bf0[53];
7155
0
    bf1[55] = bf0[55] + bf0[54];
7156
0
    bf1[56] = bf0[56] + bf0[57];
7157
0
    bf1[59] = bf0[59] + bf0[58];
7158
0
    bf1[60] = bf0[60] + bf0[61];
7159
0
    bf1[63] = bf0[63] + bf0[62];
7160
7161
    // stage 10
7162
0
    cospi   = cospi_arr(cos_bit);
7163
0
    bf0     = output;
7164
0
    bf1     = step;
7165
0
    bf1[0]  = bf0[0];
7166
0
    bf1[4]  = bf0[4];
7167
0
    bf1[8]  = bf0[8];
7168
0
    bf1[12] = bf0[12];
7169
0
    bf1[16] = bf0[16];
7170
0
    bf1[20] = bf0[20];
7171
0
    bf1[24] = bf0[24];
7172
0
    bf1[28] = bf0[28];
7173
0
    bf1[32] = half_btf(cospi[63], bf0[32], cospi[1], bf0[63], cos_bit);
7174
0
    bf1[36] = half_btf(cospi[55], bf0[36], cospi[9], bf0[59], cos_bit);
7175
0
    bf1[40] = half_btf(cospi[59], bf0[40], cospi[5], bf0[55], cos_bit);
7176
0
    bf1[44] = half_btf(cospi[51], bf0[44], cospi[13], bf0[51], cos_bit);
7177
0
    bf1[48] = half_btf(cospi[3], bf0[48], -cospi[61], bf0[47], cos_bit);
7178
0
    bf1[52] = half_btf(cospi[11], bf0[52], -cospi[53], bf0[43], cos_bit);
7179
0
    bf1[56] = half_btf(cospi[7], bf0[56], -cospi[57], bf0[39], cos_bit);
7180
0
    bf1[60] = half_btf(cospi[15], bf0[60], -cospi[49], bf0[35], cos_bit);
7181
7182
    // stage 11
7183
0
    bf0     = step;
7184
0
    bf1     = output;
7185
0
    bf1[0]  = bf0[0];
7186
0
    bf1[1]  = bf0[32];
7187
0
    bf1[2]  = bf0[16];
7188
0
    bf1[3]  = bf0[48];
7189
0
    bf1[4]  = bf0[8];
7190
0
    bf1[5]  = bf0[40];
7191
0
    bf1[6]  = bf0[24];
7192
0
    bf1[7]  = bf0[56];
7193
0
    bf1[8]  = bf0[4];
7194
0
    bf1[9]  = bf0[36];
7195
0
    bf1[10] = bf0[20];
7196
0
    bf1[11] = bf0[52];
7197
0
    bf1[12] = bf0[12];
7198
0
    bf1[13] = bf0[44];
7199
0
    bf1[14] = bf0[28];
7200
0
    bf1[15] = bf0[60];
7201
0
}
7202
7203
0
static void av1_fidentity64_N4_c(const int32_t* input, int32_t* output, int8_t cos_bit, const int8_t* stage_range) {
7204
0
    (void)stage_range;
7205
0
    (void)cos_bit;
7206
0
    for (int32_t i = 0; i < 16; ++i) {
7207
0
        output[i] = round_shift((int64_t)input[i] * 4 * new_sqrt2, new_sqrt2_bits);
7208
0
    }
7209
0
    assert(stage_range[0] + new_sqrt2_bits <= 32);
7210
0
}
7211
7212
0
static INLINE TxfmFunc fwd_txfm_type_to_func_N4(TxfmType txfmtype) {
7213
0
    switch (txfmtype) {
7214
0
    case TXFM_TYPE_DCT4:
7215
0
        return svt_av1_fdct4_new_N4;
7216
0
    case TXFM_TYPE_DCT8:
7217
0
        return svt_av1_fdct8_new_N4;
7218
0
    case TXFM_TYPE_DCT16:
7219
0
        return svt_av1_fdct16_new_N4;
7220
0
    case TXFM_TYPE_DCT32:
7221
0
        return svt_av1_fdct32_new_N4;
7222
0
    case TXFM_TYPE_DCT64:
7223
0
        return svt_av1_fdct64_new_N4;
7224
0
    case TXFM_TYPE_ADST4:
7225
0
        return svt_av1_fadst4_new_N4;
7226
0
    case TXFM_TYPE_ADST8:
7227
0
        return svt_av1_fadst8_new_N4;
7228
0
    case TXFM_TYPE_ADST16:
7229
0
        return svt_av1_fadst16_new_N4;
7230
0
    case TXFM_TYPE_ADST32:
7231
0
        return av1_fadst32_new;
7232
0
    case TXFM_TYPE_IDENTITY4:
7233
0
        return svt_av1_fidentity4_N4_c;
7234
0
    case TXFM_TYPE_IDENTITY8:
7235
0
        return svt_av1_fidentity8_N4_c;
7236
0
    case TXFM_TYPE_IDENTITY16:
7237
0
        return svt_av1_fidentity16_N4_c;
7238
0
    case TXFM_TYPE_IDENTITY32:
7239
0
        return svt_av1_fidentity32_N4_c;
7240
0
    case TXFM_TYPE_IDENTITY64:
7241
0
        return av1_fidentity64_N4_c;
7242
0
    default:
7243
0
        assert(0);
7244
0
        return NULL;
7245
0
    }
7246
0
}
7247
7248
static INLINE void av1_tranform_two_d_core_N4_c(int16_t* input, uint32_t input_stride, int32_t* output,
7249
0
                                                const Txfm2dFlipCfg* cfg, int32_t* buf, uint8_t bit_depth) {
7250
0
    int32_t c, r;
7251
    // Note when assigning txfm_size_col, we use the txfm_size from the
7252
    // row configuration and vice versa. This is intentionally done to
7253
    // accurately perform rectangular transforms. When the transform is
7254
    // rectangular, the number of columns will be the same as the
7255
    // txfm_size stored in the row cfg struct. It will make no difference
7256
    // for square transforms.
7257
0
    const int32_t txfm_size_col = tx_size_wide[cfg->tx_size];
7258
0
    const int32_t txfm_size_row = tx_size_high[cfg->tx_size];
7259
    // Take the shift from the larger dimension in the rectangular case.
7260
0
    const int8_t* shift     = cfg->shift;
7261
0
    const int32_t rect_type = get_rect_tx_log_ratio(txfm_size_col, txfm_size_row);
7262
0
    int8_t        stage_range_col[MAX_TXFM_STAGE_NUM];
7263
0
    int8_t        stage_range_row[MAX_TXFM_STAGE_NUM];
7264
0
    assert(cfg->stage_num_col <= MAX_TXFM_STAGE_NUM);
7265
0
    assert(cfg->stage_num_row <= MAX_TXFM_STAGE_NUM);
7266
0
    svt_av1_gen_fwd_stage_range(stage_range_col, stage_range_row, cfg, bit_depth);
7267
7268
0
    const int8_t   cos_bit_col   = cfg->cos_bit_col;
7269
0
    const int8_t   cos_bit_row   = cfg->cos_bit_row;
7270
0
    const TxfmFunc txfm_func_col = fwd_txfm_type_to_func_N4(cfg->txfm_type_col);
7271
0
    const TxfmFunc txfm_func_row = fwd_txfm_type_to_func_N4(cfg->txfm_type_row);
7272
0
    ASSERT(txfm_func_col != NULL);
7273
0
    ASSERT(txfm_func_row != NULL);
7274
    // use output buffer as temp buffer
7275
0
    int32_t* temp_in  = output;
7276
0
    int32_t* temp_out = output + txfm_size_row;
7277
7278
    // Columns
7279
0
    for (c = 0; c < txfm_size_col; ++c) {
7280
0
        if (cfg->ud_flip == 0) {
7281
0
            for (r = 0; r < txfm_size_row; ++r) {
7282
0
                temp_in[r] = input[r * input_stride + c];
7283
0
            }
7284
0
        } else {
7285
0
            for (r = 0; r < txfm_size_row; ++r) {
7286
                // flip upside down
7287
0
                temp_in[r] = input[(txfm_size_row - r - 1) * input_stride + c];
7288
0
            }
7289
0
        }
7290
0
        svt_av1_round_shift_array_c(temp_in, txfm_size_row, -shift[0]); // NM svt_av1_round_shift_array_c
7291
0
        txfm_func_col(temp_in, temp_out, cos_bit_col, stage_range_col);
7292
0
        svt_av1_round_shift_array_c(temp_out, txfm_size_row / 4, -shift[1]); // NM svt_av1_round_shift_array_c
7293
0
        if (cfg->lr_flip == 0) {
7294
0
            for (r = 0; r < txfm_size_row; ++r) {
7295
0
                buf[r * txfm_size_col + c] = temp_out[r];
7296
0
            }
7297
0
        } else {
7298
0
            for (r = 0; r < txfm_size_row; ++r) {
7299
                // flip from left to right
7300
0
                buf[r * txfm_size_col + (txfm_size_col - c - 1)] = temp_out[r];
7301
0
            }
7302
0
        }
7303
0
    }
7304
7305
    // Rows
7306
0
    for (r = 0; r < txfm_size_row / 4; ++r) {
7307
0
        txfm_func_row(buf + r * txfm_size_col, output + r * txfm_size_col, cos_bit_row, stage_range_row);
7308
0
        svt_av1_round_shift_array_c(output + r * txfm_size_col, txfm_size_col / 4, -shift[2]);
7309
7310
0
        if (abs(rect_type) == 1) {
7311
            // Multiply everything by Sqrt2 if the transform is rectangular and the
7312
            // size difference is a factor of 2.
7313
0
            for (c = 0; c < txfm_size_col / 4; ++c) {
7314
0
                output[r * txfm_size_col + c] = round_shift((int64_t)output[r * txfm_size_col + c] * new_sqrt2,
7315
0
                                                            new_sqrt2_bits);
7316
0
            }
7317
0
        }
7318
0
    }
7319
0
    for (int i = 0; i < (txfm_size_col * txfm_size_row); i++) {
7320
0
        if (i % txfm_size_col >= (txfm_size_col >> 2) || i / txfm_size_col >= (txfm_size_row >> 2)) {
7321
0
            output[i] = 0;
7322
0
        }
7323
0
    }
7324
0
}
7325
7326
void svt_aom_transform_two_d_64x64_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7327
0
                                        uint8_t bit_depth) {
7328
0
    int32_t       intermediate_transform_buffer[64 * 64];
7329
0
    Txfm2dFlipCfg cfg;
7330
0
    svt_aom_transform_config(transform_type, TX_64X64, &cfg);
7331
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7332
0
}
7333
7334
void svt_aom_transform_two_d_32x32_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7335
0
                                        uint8_t bit_depth) {
7336
0
    int32_t       intermediate_transform_buffer[32 * 32];
7337
0
    Txfm2dFlipCfg cfg;
7338
0
    svt_aom_transform_config(transform_type, TX_32X32, &cfg);
7339
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7340
0
}
7341
7342
void svt_aom_transform_two_d_16x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7343
0
                                        uint8_t bit_depth) {
7344
0
    int32_t       intermediate_transform_buffer[16 * 16];
7345
0
    Txfm2dFlipCfg cfg;
7346
0
    svt_aom_transform_config(transform_type, TX_16X16, &cfg);
7347
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7348
0
}
7349
7350
void svt_aom_transform_two_d_8x8_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7351
0
                                      uint8_t bit_depth) {
7352
0
    int32_t       intermediate_transform_buffer[8 * 8];
7353
0
    Txfm2dFlipCfg cfg;
7354
0
    svt_aom_transform_config(transform_type, TX_8X8, &cfg);
7355
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7356
0
}
7357
7358
void svt_aom_transform_two_d_4x4_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7359
0
                                      uint8_t bit_depth) {
7360
0
    int32_t       intermediate_transform_buffer[4 * 4];
7361
0
    Txfm2dFlipCfg cfg;
7362
0
    svt_aom_transform_config(transform_type, TX_4X4, &cfg);
7363
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7364
0
}
7365
7366
void svt_av1_fwd_txfm2d_64x32_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7367
0
                                   uint8_t bit_depth) {
7368
0
    int32_t       intermediate_transform_buffer[64 * 32];
7369
0
    Txfm2dFlipCfg cfg;
7370
0
    svt_aom_transform_config(transform_type, TX_64X32, &cfg);
7371
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7372
0
}
7373
7374
void svt_av1_fwd_txfm2d_32x64_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7375
0
                                   uint8_t bit_depth) {
7376
0
    int32_t       intermediate_transform_buffer[32 * 64];
7377
0
    Txfm2dFlipCfg cfg;
7378
0
    svt_aom_transform_config(transform_type, TX_32X64, &cfg);
7379
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7380
0
}
7381
7382
void svt_av1_fwd_txfm2d_64x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7383
0
                                   uint8_t bit_depth) {
7384
0
    int32_t       intermediate_transform_buffer[64 * 16];
7385
0
    Txfm2dFlipCfg cfg;
7386
0
    svt_aom_transform_config(transform_type, TX_64X16, &cfg);
7387
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7388
0
}
7389
7390
void svt_av1_fwd_txfm2d_16x64_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7391
0
                                   uint8_t bit_depth) {
7392
0
    int32_t       intermediate_transform_buffer[16 * 64];
7393
0
    Txfm2dFlipCfg cfg;
7394
0
    svt_aom_transform_config(transform_type, TX_16X64, &cfg);
7395
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7396
0
}
7397
7398
void svt_av1_fwd_txfm2d_32x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7399
0
                                   uint8_t bit_depth) {
7400
0
    int32_t       intermediate_transform_buffer[32 * 16];
7401
0
    Txfm2dFlipCfg cfg;
7402
0
    svt_aom_transform_config(transform_type, TX_32X16, &cfg);
7403
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7404
0
}
7405
7406
void svt_av1_fwd_txfm2d_16x32_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7407
0
                                   uint8_t bit_depth) {
7408
0
    int32_t       intermediate_transform_buffer[16 * 32];
7409
0
    Txfm2dFlipCfg cfg;
7410
0
    svt_aom_transform_config(transform_type, TX_16X32, &cfg);
7411
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7412
0
}
7413
7414
void svt_av1_fwd_txfm2d_16x8_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7415
0
                                  uint8_t bit_depth) {
7416
0
    int32_t       intermediate_transform_buffer[16 * 8];
7417
0
    Txfm2dFlipCfg cfg;
7418
0
    svt_aom_transform_config(transform_type, TX_16X8, &cfg);
7419
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7420
0
}
7421
7422
void svt_av1_fwd_txfm2d_8x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7423
0
                                  uint8_t bit_depth) {
7424
0
    int32_t       intermediate_transform_buffer[8 * 16];
7425
0
    Txfm2dFlipCfg cfg;
7426
0
    svt_aom_transform_config(transform_type, TX_8X16, &cfg);
7427
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7428
0
}
7429
7430
void svt_av1_fwd_txfm2d_32x8_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7431
0
                                  uint8_t bit_depth) {
7432
0
    int32_t       intermediate_transform_buffer[32 * 8];
7433
0
    Txfm2dFlipCfg cfg;
7434
0
    svt_aom_transform_config(transform_type, TX_32X8, &cfg);
7435
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7436
0
}
7437
7438
void svt_av1_fwd_txfm2d_8x32_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7439
0
                                  uint8_t bit_depth) {
7440
0
    int32_t       intermediate_transform_buffer[8 * 32];
7441
0
    Txfm2dFlipCfg cfg;
7442
0
    svt_aom_transform_config(transform_type, TX_8X32, &cfg);
7443
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7444
0
}
7445
7446
void svt_av1_fwd_txfm2d_16x4_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7447
0
                                  uint8_t bit_depth) {
7448
0
    int32_t       intermediate_transform_buffer[16 * 4];
7449
0
    Txfm2dFlipCfg cfg;
7450
0
    svt_aom_transform_config(transform_type, TX_16X4, &cfg);
7451
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7452
0
}
7453
7454
void svt_av1_fwd_txfm2d_4x16_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7455
0
                                  uint8_t bit_depth) {
7456
0
    int32_t       intermediate_transform_buffer[4 * 16];
7457
0
    Txfm2dFlipCfg cfg;
7458
0
    svt_aom_transform_config(transform_type, TX_4X16, &cfg);
7459
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7460
0
}
7461
7462
void svt_av1_fwd_txfm2d_8x4_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7463
0
                                 uint8_t bit_depth) {
7464
0
    int32_t       intermediate_transform_buffer[8 * 4];
7465
0
    Txfm2dFlipCfg cfg;
7466
0
    svt_aom_transform_config(transform_type, TX_8X4, &cfg);
7467
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7468
0
}
7469
7470
void svt_av1_fwd_txfm2d_4x8_N4_c(int16_t* input, int32_t* output, uint32_t input_stride, TxType transform_type,
7471
0
                                 uint8_t bit_depth) {
7472
0
    int32_t       intermediate_transform_buffer[4 * 8];
7473
0
    Txfm2dFlipCfg cfg;
7474
0
    svt_aom_transform_config(transform_type, TX_4X8, &cfg);
7475
0
    av1_tranform_two_d_core_N4_c(input, input_stride, output, &cfg, intermediate_transform_buffer, bit_depth);
7476
0
}