xref: /aosp_15_r20/external/libaom/av1/encoder/av1_fwd_txfm1d.c (revision 77c1e3ccc04c968bd2bc212e87364f250e820521)
1*77c1e3ccSAndroid Build Coastguard Worker /*
2*77c1e3ccSAndroid Build Coastguard Worker  * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3*77c1e3ccSAndroid Build Coastguard Worker  *
4*77c1e3ccSAndroid Build Coastguard Worker  * This source code is subject to the terms of the BSD 2 Clause License and
5*77c1e3ccSAndroid Build Coastguard Worker  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6*77c1e3ccSAndroid Build Coastguard Worker  * was not distributed with this source code in the LICENSE file, you can
7*77c1e3ccSAndroid Build Coastguard Worker  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8*77c1e3ccSAndroid Build Coastguard Worker  * Media Patent License 1.0 was not distributed with this source code in the
9*77c1e3ccSAndroid Build Coastguard Worker  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*77c1e3ccSAndroid Build Coastguard Worker  */
11*77c1e3ccSAndroid Build Coastguard Worker 
12*77c1e3ccSAndroid Build Coastguard Worker #include <stdlib.h>
13*77c1e3ccSAndroid Build Coastguard Worker #include "av1/encoder/av1_fwd_txfm1d.h"
14*77c1e3ccSAndroid Build Coastguard Worker #include "av1/common/av1_txfm.h"
15*77c1e3ccSAndroid Build Coastguard Worker 
av1_fdct4(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)16*77c1e3ccSAndroid Build Coastguard Worker void av1_fdct4(const int32_t *input, int32_t *output, int8_t cos_bit,
17*77c1e3ccSAndroid Build Coastguard Worker                const int8_t *stage_range) {
18*77c1e3ccSAndroid Build Coastguard Worker   const int32_t size = 4;
19*77c1e3ccSAndroid Build Coastguard Worker   const int32_t *cospi;
20*77c1e3ccSAndroid Build Coastguard Worker 
21*77c1e3ccSAndroid Build Coastguard Worker   int32_t stage = 0;
22*77c1e3ccSAndroid Build Coastguard Worker   int32_t *bf0, *bf1;
23*77c1e3ccSAndroid Build Coastguard Worker   int32_t step[4];
24*77c1e3ccSAndroid Build Coastguard Worker 
25*77c1e3ccSAndroid Build Coastguard Worker   // stage 0;
26*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, input, size, stage_range[stage]);
27*77c1e3ccSAndroid Build Coastguard Worker 
28*77c1e3ccSAndroid Build Coastguard Worker   // stage 1;
29*77c1e3ccSAndroid Build Coastguard Worker   stage++;
30*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
31*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = input[0] + input[3];
32*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = input[1] + input[2];
33*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = -input[2] + input[1];
34*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = -input[3] + input[0];
35*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
36*77c1e3ccSAndroid Build Coastguard Worker 
37*77c1e3ccSAndroid Build Coastguard Worker   // stage 2
38*77c1e3ccSAndroid Build Coastguard Worker   stage++;
39*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
40*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
41*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
42*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
43*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
44*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
45*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
46*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
47*77c1e3ccSAndroid Build Coastguard Worker 
48*77c1e3ccSAndroid Build Coastguard Worker   // stage 3
49*77c1e3ccSAndroid Build Coastguard Worker   stage++;
50*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
51*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
52*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
53*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[2];
54*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[1];
55*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
56*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
57*77c1e3ccSAndroid Build Coastguard Worker }
58*77c1e3ccSAndroid Build Coastguard Worker 
av1_fdct8(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)59*77c1e3ccSAndroid Build Coastguard Worker void av1_fdct8(const int32_t *input, int32_t *output, int8_t cos_bit,
60*77c1e3ccSAndroid Build Coastguard Worker                const int8_t *stage_range) {
61*77c1e3ccSAndroid Build Coastguard Worker   const int32_t size = 8;
62*77c1e3ccSAndroid Build Coastguard Worker   const int32_t *cospi;
63*77c1e3ccSAndroid Build Coastguard Worker 
64*77c1e3ccSAndroid Build Coastguard Worker   int32_t stage = 0;
65*77c1e3ccSAndroid Build Coastguard Worker   int32_t *bf0, *bf1;
66*77c1e3ccSAndroid Build Coastguard Worker   int32_t step[8];
67*77c1e3ccSAndroid Build Coastguard Worker 
68*77c1e3ccSAndroid Build Coastguard Worker   // stage 0;
69*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, input, size, stage_range[stage]);
70*77c1e3ccSAndroid Build Coastguard Worker 
71*77c1e3ccSAndroid Build Coastguard Worker   // stage 1;
72*77c1e3ccSAndroid Build Coastguard Worker   stage++;
73*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
74*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = input[0] + input[7];
75*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = input[1] + input[6];
76*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = input[2] + input[5];
77*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = input[3] + input[4];
78*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = -input[4] + input[3];
79*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = -input[5] + input[2];
80*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = -input[6] + input[1];
81*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = -input[7] + input[0];
82*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
83*77c1e3ccSAndroid Build Coastguard Worker 
84*77c1e3ccSAndroid Build Coastguard Worker   // stage 2
85*77c1e3ccSAndroid Build Coastguard Worker   stage++;
86*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
87*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
88*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
89*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[3];
90*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[2];
91*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = -bf0[2] + bf0[1];
92*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = -bf0[3] + bf0[0];
93*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
94*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
95*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
96*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
97*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
98*77c1e3ccSAndroid Build Coastguard Worker 
99*77c1e3ccSAndroid Build Coastguard Worker   // stage 3
100*77c1e3ccSAndroid Build Coastguard Worker   stage++;
101*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
102*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
103*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
104*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
105*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
106*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
107*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
108*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[5];
109*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = -bf0[5] + bf0[4];
110*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = -bf0[6] + bf0[7];
111*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7] + bf0[6];
112*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
113*77c1e3ccSAndroid Build Coastguard Worker 
114*77c1e3ccSAndroid Build Coastguard Worker   // stage 4
115*77c1e3ccSAndroid Build Coastguard Worker   stage++;
116*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
117*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
118*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
119*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
120*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
121*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
122*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
123*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
124*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
125*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
126*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
127*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
128*77c1e3ccSAndroid Build Coastguard Worker 
129*77c1e3ccSAndroid Build Coastguard Worker   // stage 5
130*77c1e3ccSAndroid Build Coastguard Worker   stage++;
131*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
132*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
133*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
134*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[4];
135*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
136*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[6];
137*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[1];
138*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
139*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[3];
140*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
141*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
142*77c1e3ccSAndroid Build Coastguard Worker }
143*77c1e3ccSAndroid Build Coastguard Worker 
av1_fdct16(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)144*77c1e3ccSAndroid Build Coastguard Worker void av1_fdct16(const int32_t *input, int32_t *output, int8_t cos_bit,
145*77c1e3ccSAndroid Build Coastguard Worker                 const int8_t *stage_range) {
146*77c1e3ccSAndroid Build Coastguard Worker   const int32_t size = 16;
147*77c1e3ccSAndroid Build Coastguard Worker   const int32_t *cospi;
148*77c1e3ccSAndroid Build Coastguard Worker 
149*77c1e3ccSAndroid Build Coastguard Worker   int32_t stage = 0;
150*77c1e3ccSAndroid Build Coastguard Worker   int32_t *bf0, *bf1;
151*77c1e3ccSAndroid Build Coastguard Worker   int32_t step[16];
152*77c1e3ccSAndroid Build Coastguard Worker 
153*77c1e3ccSAndroid Build Coastguard Worker   // stage 0;
154*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, input, size, stage_range[stage]);
155*77c1e3ccSAndroid Build Coastguard Worker 
156*77c1e3ccSAndroid Build Coastguard Worker   // stage 1;
157*77c1e3ccSAndroid Build Coastguard Worker   stage++;
158*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
159*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = input[0] + input[15];
160*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = input[1] + input[14];
161*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = input[2] + input[13];
162*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = input[3] + input[12];
163*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = input[4] + input[11];
164*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = input[5] + input[10];
165*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = input[6] + input[9];
166*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = input[7] + input[8];
167*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = -input[8] + input[7];
168*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = -input[9] + input[6];
169*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -input[10] + input[5];
170*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = -input[11] + input[4];
171*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = -input[12] + input[3];
172*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -input[13] + input[2];
173*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = -input[14] + input[1];
174*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = -input[15] + input[0];
175*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
176*77c1e3ccSAndroid Build Coastguard Worker 
177*77c1e3ccSAndroid Build Coastguard Worker   // stage 2
178*77c1e3ccSAndroid Build Coastguard Worker   stage++;
179*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
180*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
181*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
182*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[7];
183*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[6];
184*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[5];
185*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[4];
186*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = -bf0[4] + bf0[3];
187*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = -bf0[5] + bf0[2];
188*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = -bf0[6] + bf0[1];
189*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = -bf0[7] + bf0[0];
190*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
191*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
192*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
193*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
194*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
195*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
196*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14];
197*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
198*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
199*77c1e3ccSAndroid Build Coastguard Worker 
200*77c1e3ccSAndroid Build Coastguard Worker   // stage 3
201*77c1e3ccSAndroid Build Coastguard Worker   stage++;
202*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
203*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
204*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
205*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[3];
206*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[2];
207*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = -bf0[2] + bf0[1];
208*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = -bf0[3] + bf0[0];
209*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
210*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
211*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
212*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
213*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[11];
214*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9] + bf0[10];
215*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -bf0[10] + bf0[9];
216*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = -bf0[11] + bf0[8];
217*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = -bf0[12] + bf0[15];
218*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -bf0[13] + bf0[14];
219*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14] + bf0[13];
220*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15] + bf0[12];
221*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
222*77c1e3ccSAndroid Build Coastguard Worker 
223*77c1e3ccSAndroid Build Coastguard Worker   // stage 4
224*77c1e3ccSAndroid Build Coastguard Worker   stage++;
225*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
226*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
227*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
228*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
229*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
230*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
231*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
232*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[5];
233*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = -bf0[5] + bf0[4];
234*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = -bf0[6] + bf0[7];
235*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7] + bf0[6];
236*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
237*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
238*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
239*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11];
240*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12];
241*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
242*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
243*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
244*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
245*77c1e3ccSAndroid Build Coastguard Worker 
246*77c1e3ccSAndroid Build Coastguard Worker   // stage 5
247*77c1e3ccSAndroid Build Coastguard Worker   stage++;
248*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
249*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
250*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
251*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
252*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
253*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
254*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
255*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
256*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
257*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
258*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
259*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[9];
260*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = -bf0[9] + bf0[8];
261*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -bf0[10] + bf0[11];
262*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11] + bf0[10];
263*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12] + bf0[13];
264*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -bf0[13] + bf0[12];
265*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = -bf0[14] + bf0[15];
266*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15] + bf0[14];
267*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
268*77c1e3ccSAndroid Build Coastguard Worker 
269*77c1e3ccSAndroid Build Coastguard Worker   // stage 6
270*77c1e3ccSAndroid Build Coastguard Worker   stage++;
271*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
272*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
273*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
274*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
275*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
276*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
277*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
278*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
279*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
280*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6];
281*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
282*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
283*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
284*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
285*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
286*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
287*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
288*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
289*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
290*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
291*77c1e3ccSAndroid Build Coastguard Worker 
292*77c1e3ccSAndroid Build Coastguard Worker   // stage 7
293*77c1e3ccSAndroid Build Coastguard Worker   stage++;
294*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
295*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
296*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
297*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[8];
298*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[4];
299*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[12];
300*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[2];
301*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[10];
302*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6];
303*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[14];
304*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[1];
305*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
306*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[5];
307*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[13];
308*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[3];
309*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[11];
310*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[7];
311*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
312*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
313*77c1e3ccSAndroid Build Coastguard Worker }
314*77c1e3ccSAndroid Build Coastguard Worker 
av1_fdct32(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)315*77c1e3ccSAndroid Build Coastguard Worker void av1_fdct32(const int32_t *input, int32_t *output, int8_t cos_bit,
316*77c1e3ccSAndroid Build Coastguard Worker                 const int8_t *stage_range) {
317*77c1e3ccSAndroid Build Coastguard Worker   const int32_t size = 32;
318*77c1e3ccSAndroid Build Coastguard Worker   const int32_t *cospi;
319*77c1e3ccSAndroid Build Coastguard Worker 
320*77c1e3ccSAndroid Build Coastguard Worker   int32_t stage = 0;
321*77c1e3ccSAndroid Build Coastguard Worker   int32_t *bf0, *bf1;
322*77c1e3ccSAndroid Build Coastguard Worker   int32_t step[32];
323*77c1e3ccSAndroid Build Coastguard Worker 
324*77c1e3ccSAndroid Build Coastguard Worker   // stage 0;
325*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, input, size, stage_range[stage]);
326*77c1e3ccSAndroid Build Coastguard Worker 
327*77c1e3ccSAndroid Build Coastguard Worker   // stage 1;
328*77c1e3ccSAndroid Build Coastguard Worker   stage++;
329*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
330*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = input[0] + input[31];
331*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = input[1] + input[30];
332*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = input[2] + input[29];
333*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = input[3] + input[28];
334*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = input[4] + input[27];
335*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = input[5] + input[26];
336*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = input[6] + input[25];
337*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = input[7] + input[24];
338*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = input[8] + input[23];
339*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = input[9] + input[22];
340*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = input[10] + input[21];
341*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = input[11] + input[20];
342*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = input[12] + input[19];
343*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = input[13] + input[18];
344*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = input[14] + input[17];
345*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = input[15] + input[16];
346*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = -input[16] + input[15];
347*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = -input[17] + input[14];
348*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = -input[18] + input[13];
349*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = -input[19] + input[12];
350*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = -input[20] + input[11];
351*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = -input[21] + input[10];
352*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = -input[22] + input[9];
353*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = -input[23] + input[8];
354*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = -input[24] + input[7];
355*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = -input[25] + input[6];
356*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = -input[26] + input[5];
357*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = -input[27] + input[4];
358*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = -input[28] + input[3];
359*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = -input[29] + input[2];
360*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = -input[30] + input[1];
361*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = -input[31] + input[0];
362*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
363*77c1e3ccSAndroid Build Coastguard Worker 
364*77c1e3ccSAndroid Build Coastguard Worker   // stage 2
365*77c1e3ccSAndroid Build Coastguard Worker   stage++;
366*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
367*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
368*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
369*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[15];
370*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[14];
371*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[13];
372*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[12];
373*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[11];
374*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5] + bf0[10];
375*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6] + bf0[9];
376*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7] + bf0[8];
377*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = -bf0[8] + bf0[7];
378*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = -bf0[9] + bf0[6];
379*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -bf0[10] + bf0[5];
380*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = -bf0[11] + bf0[4];
381*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = -bf0[12] + bf0[3];
382*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -bf0[13] + bf0[2];
383*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = -bf0[14] + bf0[1];
384*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = -bf0[15] + bf0[0];
385*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16];
386*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17];
387*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = bf0[18];
388*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19];
389*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
390*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
391*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
392*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
393*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
394*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
395*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
396*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
397*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28];
398*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = bf0[29];
399*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30];
400*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31];
401*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
402*77c1e3ccSAndroid Build Coastguard Worker 
403*77c1e3ccSAndroid Build Coastguard Worker   // stage 3
404*77c1e3ccSAndroid Build Coastguard Worker   stage++;
405*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
406*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
407*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
408*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[7];
409*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[6];
410*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[5];
411*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[4];
412*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = -bf0[4] + bf0[3];
413*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = -bf0[5] + bf0[2];
414*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = -bf0[6] + bf0[1];
415*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = -bf0[7] + bf0[0];
416*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
417*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
418*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
419*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
420*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
421*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
422*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14];
423*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
424*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16] + bf0[23];
425*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17] + bf0[22];
426*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = bf0[18] + bf0[21];
427*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19] + bf0[20];
428*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = -bf0[20] + bf0[19];
429*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = -bf0[21] + bf0[18];
430*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = -bf0[22] + bf0[17];
431*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = -bf0[23] + bf0[16];
432*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = -bf0[24] + bf0[31];
433*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = -bf0[25] + bf0[30];
434*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = -bf0[26] + bf0[29];
435*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = -bf0[27] + bf0[28];
436*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28] + bf0[27];
437*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = bf0[29] + bf0[26];
438*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30] + bf0[25];
439*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31] + bf0[24];
440*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
441*77c1e3ccSAndroid Build Coastguard Worker 
442*77c1e3ccSAndroid Build Coastguard Worker   // stage 4
443*77c1e3ccSAndroid Build Coastguard Worker   stage++;
444*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
445*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
446*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
447*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[3];
448*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[2];
449*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = -bf0[2] + bf0[1];
450*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = -bf0[3] + bf0[0];
451*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
452*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
453*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
454*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
455*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[11];
456*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9] + bf0[10];
457*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -bf0[10] + bf0[9];
458*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = -bf0[11] + bf0[8];
459*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = -bf0[12] + bf0[15];
460*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -bf0[13] + bf0[14];
461*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14] + bf0[13];
462*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15] + bf0[12];
463*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16];
464*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17];
465*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
466*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
467*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
468*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
469*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = bf0[22];
470*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23];
471*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24];
472*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = bf0[25];
473*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
474*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
475*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
476*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
477*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30];
478*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31];
479*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
480*77c1e3ccSAndroid Build Coastguard Worker 
481*77c1e3ccSAndroid Build Coastguard Worker   // stage 5
482*77c1e3ccSAndroid Build Coastguard Worker   stage++;
483*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
484*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
485*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
486*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
487*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
488*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
489*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
490*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[5];
491*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = -bf0[5] + bf0[4];
492*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = -bf0[6] + bf0[7];
493*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7] + bf0[6];
494*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
495*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
496*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
497*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11];
498*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12];
499*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
500*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
501*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
502*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16] + bf0[19];
503*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17] + bf0[18];
504*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = -bf0[18] + bf0[17];
505*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = -bf0[19] + bf0[16];
506*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = -bf0[20] + bf0[23];
507*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = -bf0[21] + bf0[22];
508*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = bf0[22] + bf0[21];
509*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23] + bf0[20];
510*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24] + bf0[27];
511*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = bf0[25] + bf0[26];
512*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = -bf0[26] + bf0[25];
513*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = -bf0[27] + bf0[24];
514*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = -bf0[28] + bf0[31];
515*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = -bf0[29] + bf0[30];
516*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30] + bf0[29];
517*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31] + bf0[28];
518*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
519*77c1e3ccSAndroid Build Coastguard Worker 
520*77c1e3ccSAndroid Build Coastguard Worker   // stage 6
521*77c1e3ccSAndroid Build Coastguard Worker   stage++;
522*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
523*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
524*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
525*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
526*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
527*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
528*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
529*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
530*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
531*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
532*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
533*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[9];
534*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = -bf0[9] + bf0[8];
535*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -bf0[10] + bf0[11];
536*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11] + bf0[10];
537*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12] + bf0[13];
538*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -bf0[13] + bf0[12];
539*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = -bf0[14] + bf0[15];
540*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15] + bf0[14];
541*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16];
542*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
543*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
544*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19];
545*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = bf0[20];
546*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
547*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
548*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23];
549*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24];
550*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
551*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
552*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = bf0[27];
553*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28];
554*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
555*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
556*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31];
557*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
558*77c1e3ccSAndroid Build Coastguard Worker 
559*77c1e3ccSAndroid Build Coastguard Worker   // stage 7
560*77c1e3ccSAndroid Build Coastguard Worker   stage++;
561*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
562*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
563*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
564*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
565*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
566*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
567*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
568*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
569*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
570*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6];
571*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
572*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
573*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
574*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
575*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
576*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
577*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
578*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
579*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
580*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16] + bf0[17];
581*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = -bf0[17] + bf0[16];
582*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = -bf0[18] + bf0[19];
583*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19] + bf0[18];
584*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = bf0[20] + bf0[21];
585*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = -bf0[21] + bf0[20];
586*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = -bf0[22] + bf0[23];
587*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23] + bf0[22];
588*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24] + bf0[25];
589*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = -bf0[25] + bf0[24];
590*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = -bf0[26] + bf0[27];
591*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = bf0[27] + bf0[26];
592*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28] + bf0[29];
593*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = -bf0[29] + bf0[28];
594*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = -bf0[30] + bf0[31];
595*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31] + bf0[30];
596*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
597*77c1e3ccSAndroid Build Coastguard Worker 
598*77c1e3ccSAndroid Build Coastguard Worker   // stage 8
599*77c1e3ccSAndroid Build Coastguard Worker   stage++;
600*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
601*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
602*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
603*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
604*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
605*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
606*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
607*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
608*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
609*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6];
610*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
611*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
612*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
613*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[10];
614*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11];
615*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12];
616*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[13];
617*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14];
618*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
619*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
620*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = half_btf(cospi[30], bf0[17], cospi[34], bf0[30], cos_bit);
621*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
622*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = half_btf(cospi[14], bf0[19], cospi[50], bf0[28], cos_bit);
623*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
624*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = half_btf(cospi[22], bf0[21], cospi[42], bf0[26], cos_bit);
625*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
626*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = half_btf(cospi[6], bf0[23], cospi[58], bf0[24], cos_bit);
627*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
628*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = half_btf(cospi[38], bf0[25], -cospi[26], bf0[22], cos_bit);
629*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
630*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = half_btf(cospi[54], bf0[27], -cospi[10], bf0[20], cos_bit);
631*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
632*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = half_btf(cospi[46], bf0[29], -cospi[18], bf0[18], cos_bit);
633*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
634*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = half_btf(cospi[62], bf0[31], -cospi[2], bf0[16], cos_bit);
635*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
636*77c1e3ccSAndroid Build Coastguard Worker 
637*77c1e3ccSAndroid Build Coastguard Worker   // stage 9
638*77c1e3ccSAndroid Build Coastguard Worker   stage++;
639*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
640*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
641*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
642*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[16];
643*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[8];
644*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[24];
645*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
646*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[20];
647*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[12];
648*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[28];
649*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[2];
650*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[18];
651*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[10];
652*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[26];
653*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[6];
654*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[22];
655*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14];
656*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[30];
657*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[1];
658*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17];
659*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = bf0[9];
660*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[25];
661*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = bf0[5];
662*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = bf0[21];
663*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = bf0[13];
664*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[29];
665*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[3];
666*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = bf0[19];
667*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = bf0[11];
668*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = bf0[27];
669*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[7];
670*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = bf0[23];
671*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[15];
672*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31];
673*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
674*77c1e3ccSAndroid Build Coastguard Worker }
675*77c1e3ccSAndroid Build Coastguard Worker 
av1_fadst4(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)676*77c1e3ccSAndroid Build Coastguard Worker void av1_fadst4(const int32_t *input, int32_t *output, int8_t cos_bit,
677*77c1e3ccSAndroid Build Coastguard Worker                 const int8_t *stage_range) {
678*77c1e3ccSAndroid Build Coastguard Worker   int bit = cos_bit;
679*77c1e3ccSAndroid Build Coastguard Worker   const int32_t *sinpi = sinpi_arr(bit);
680*77c1e3ccSAndroid Build Coastguard Worker   int32_t x0, x1, x2, x3;
681*77c1e3ccSAndroid Build Coastguard Worker   int32_t s0, s1, s2, s3, s4, s5, s6, s7;
682*77c1e3ccSAndroid Build Coastguard Worker 
683*77c1e3ccSAndroid Build Coastguard Worker   // stage 0
684*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(0, input, input, 4, stage_range[0]);
685*77c1e3ccSAndroid Build Coastguard Worker   x0 = input[0];
686*77c1e3ccSAndroid Build Coastguard Worker   x1 = input[1];
687*77c1e3ccSAndroid Build Coastguard Worker   x2 = input[2];
688*77c1e3ccSAndroid Build Coastguard Worker   x3 = input[3];
689*77c1e3ccSAndroid Build Coastguard Worker 
690*77c1e3ccSAndroid Build Coastguard Worker   if (!(x0 | x1 | x2 | x3)) {
691*77c1e3ccSAndroid Build Coastguard Worker     output[0] = output[1] = output[2] = output[3] = 0;
692*77c1e3ccSAndroid Build Coastguard Worker     return;
693*77c1e3ccSAndroid Build Coastguard Worker   }
694*77c1e3ccSAndroid Build Coastguard Worker 
695*77c1e3ccSAndroid Build Coastguard Worker   // stage 1
696*77c1e3ccSAndroid Build Coastguard Worker   s0 = range_check_value(sinpi[1] * x0, bit + stage_range[1]);
697*77c1e3ccSAndroid Build Coastguard Worker   s1 = range_check_value(sinpi[4] * x0, bit + stage_range[1]);
698*77c1e3ccSAndroid Build Coastguard Worker   s2 = range_check_value(sinpi[2] * x1, bit + stage_range[1]);
699*77c1e3ccSAndroid Build Coastguard Worker   s3 = range_check_value(sinpi[1] * x1, bit + stage_range[1]);
700*77c1e3ccSAndroid Build Coastguard Worker   s4 = range_check_value(sinpi[3] * x2, bit + stage_range[1]);
701*77c1e3ccSAndroid Build Coastguard Worker   s5 = range_check_value(sinpi[4] * x3, bit + stage_range[1]);
702*77c1e3ccSAndroid Build Coastguard Worker   s6 = range_check_value(sinpi[2] * x3, bit + stage_range[1]);
703*77c1e3ccSAndroid Build Coastguard Worker   s7 = range_check_value(x0 + x1, stage_range[1]);
704*77c1e3ccSAndroid Build Coastguard Worker 
705*77c1e3ccSAndroid Build Coastguard Worker   // stage 2
706*77c1e3ccSAndroid Build Coastguard Worker   s7 = range_check_value(s7 - x3, stage_range[2]);
707*77c1e3ccSAndroid Build Coastguard Worker 
708*77c1e3ccSAndroid Build Coastguard Worker   // stage 3
709*77c1e3ccSAndroid Build Coastguard Worker   x0 = range_check_value(s0 + s2, bit + stage_range[3]);
710*77c1e3ccSAndroid Build Coastguard Worker   x1 = range_check_value(sinpi[3] * s7, bit + stage_range[3]);
711*77c1e3ccSAndroid Build Coastguard Worker   x2 = range_check_value(s1 - s3, bit + stage_range[3]);
712*77c1e3ccSAndroid Build Coastguard Worker   x3 = range_check_value(s4, bit + stage_range[3]);
713*77c1e3ccSAndroid Build Coastguard Worker 
714*77c1e3ccSAndroid Build Coastguard Worker   // stage 4
715*77c1e3ccSAndroid Build Coastguard Worker   x0 = range_check_value(x0 + s5, bit + stage_range[4]);
716*77c1e3ccSAndroid Build Coastguard Worker   x2 = range_check_value(x2 + s6, bit + stage_range[4]);
717*77c1e3ccSAndroid Build Coastguard Worker 
718*77c1e3ccSAndroid Build Coastguard Worker   // stage 5
719*77c1e3ccSAndroid Build Coastguard Worker   s0 = range_check_value(x0 + x3, bit + stage_range[5]);
720*77c1e3ccSAndroid Build Coastguard Worker   s1 = range_check_value(x1, bit + stage_range[5]);
721*77c1e3ccSAndroid Build Coastguard Worker   s2 = range_check_value(x2 - x3, bit + stage_range[5]);
722*77c1e3ccSAndroid Build Coastguard Worker   s3 = range_check_value(x2 - x0, bit + stage_range[5]);
723*77c1e3ccSAndroid Build Coastguard Worker 
724*77c1e3ccSAndroid Build Coastguard Worker   // stage 6
725*77c1e3ccSAndroid Build Coastguard Worker   s3 = range_check_value(s3 + x3, bit + stage_range[6]);
726*77c1e3ccSAndroid Build Coastguard Worker 
727*77c1e3ccSAndroid Build Coastguard Worker   // 1-D transform scaling factor is sqrt(2).
728*77c1e3ccSAndroid Build Coastguard Worker   output[0] = round_shift(s0, bit);
729*77c1e3ccSAndroid Build Coastguard Worker   output[1] = round_shift(s1, bit);
730*77c1e3ccSAndroid Build Coastguard Worker   output[2] = round_shift(s2, bit);
731*77c1e3ccSAndroid Build Coastguard Worker   output[3] = round_shift(s3, bit);
732*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(6, input, output, 4, stage_range[6]);
733*77c1e3ccSAndroid Build Coastguard Worker }
734*77c1e3ccSAndroid Build Coastguard Worker 
av1_fadst8(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)735*77c1e3ccSAndroid Build Coastguard Worker void av1_fadst8(const int32_t *input, int32_t *output, int8_t cos_bit,
736*77c1e3ccSAndroid Build Coastguard Worker                 const int8_t *stage_range) {
737*77c1e3ccSAndroid Build Coastguard Worker   const int32_t size = 8;
738*77c1e3ccSAndroid Build Coastguard Worker   const int32_t *cospi;
739*77c1e3ccSAndroid Build Coastguard Worker 
740*77c1e3ccSAndroid Build Coastguard Worker   int32_t stage = 0;
741*77c1e3ccSAndroid Build Coastguard Worker   int32_t *bf0, *bf1;
742*77c1e3ccSAndroid Build Coastguard Worker   int32_t step[8];
743*77c1e3ccSAndroid Build Coastguard Worker 
744*77c1e3ccSAndroid Build Coastguard Worker   // stage 0;
745*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, input, size, stage_range[stage]);
746*77c1e3ccSAndroid Build Coastguard Worker 
747*77c1e3ccSAndroid Build Coastguard Worker   // stage 1;
748*77c1e3ccSAndroid Build Coastguard Worker   stage++;
749*77c1e3ccSAndroid Build Coastguard Worker   assert(output != input);
750*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
751*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = input[0];
752*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = -input[7];
753*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = -input[3];
754*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = input[4];
755*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = -input[1];
756*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = input[6];
757*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = input[2];
758*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = -input[5];
759*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
760*77c1e3ccSAndroid Build Coastguard Worker 
761*77c1e3ccSAndroid Build Coastguard Worker   // stage 2
762*77c1e3ccSAndroid Build Coastguard Worker   stage++;
763*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
764*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
765*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
766*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
767*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
768*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
769*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
770*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
771*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
772*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
773*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
774*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
775*77c1e3ccSAndroid Build Coastguard Worker 
776*77c1e3ccSAndroid Build Coastguard Worker   // stage 3
777*77c1e3ccSAndroid Build Coastguard Worker   stage++;
778*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
779*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
780*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[2];
781*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[3];
782*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[0] - bf0[2];
783*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[1] - bf0[3];
784*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[6];
785*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5] + bf0[7];
786*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[4] - bf0[6];
787*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[5] - bf0[7];
788*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
789*77c1e3ccSAndroid Build Coastguard Worker 
790*77c1e3ccSAndroid Build Coastguard Worker   // stage 4
791*77c1e3ccSAndroid Build Coastguard Worker   stage++;
792*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
793*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
794*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
795*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
796*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
797*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
798*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
799*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
800*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
801*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
802*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
803*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
804*77c1e3ccSAndroid Build Coastguard Worker 
805*77c1e3ccSAndroid Build Coastguard Worker   // stage 5
806*77c1e3ccSAndroid Build Coastguard Worker   stage++;
807*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
808*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
809*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[4];
810*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[5];
811*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[6];
812*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[7];
813*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[0] - bf0[4];
814*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[1] - bf0[5];
815*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[2] - bf0[6];
816*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[3] - bf0[7];
817*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
818*77c1e3ccSAndroid Build Coastguard Worker 
819*77c1e3ccSAndroid Build Coastguard Worker   // stage 6
820*77c1e3ccSAndroid Build Coastguard Worker   stage++;
821*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
822*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
823*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
824*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = half_btf(cospi[4], bf0[0], cospi[60], bf0[1], cos_bit);
825*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = half_btf(cospi[60], bf0[0], -cospi[4], bf0[1], cos_bit);
826*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[20], bf0[2], cospi[44], bf0[3], cos_bit);
827*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[44], bf0[2], -cospi[20], bf0[3], cos_bit);
828*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = half_btf(cospi[36], bf0[4], cospi[28], bf0[5], cos_bit);
829*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(cospi[28], bf0[4], -cospi[36], bf0[5], cos_bit);
830*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[52], bf0[6], cospi[12], bf0[7], cos_bit);
831*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[12], bf0[6], -cospi[52], bf0[7], cos_bit);
832*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
833*77c1e3ccSAndroid Build Coastguard Worker 
834*77c1e3ccSAndroid Build Coastguard Worker   // stage 7
835*77c1e3ccSAndroid Build Coastguard Worker   stage++;
836*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
837*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
838*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[1];
839*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[6];
840*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[3];
841*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[4];
842*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[5];
843*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[2];
844*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[7];
845*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[0];
846*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
847*77c1e3ccSAndroid Build Coastguard Worker }
848*77c1e3ccSAndroid Build Coastguard Worker 
av1_fadst16(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)849*77c1e3ccSAndroid Build Coastguard Worker void av1_fadst16(const int32_t *input, int32_t *output, int8_t cos_bit,
850*77c1e3ccSAndroid Build Coastguard Worker                  const int8_t *stage_range) {
851*77c1e3ccSAndroid Build Coastguard Worker   const int32_t size = 16;
852*77c1e3ccSAndroid Build Coastguard Worker   const int32_t *cospi;
853*77c1e3ccSAndroid Build Coastguard Worker 
854*77c1e3ccSAndroid Build Coastguard Worker   int32_t stage = 0;
855*77c1e3ccSAndroid Build Coastguard Worker   int32_t *bf0, *bf1;
856*77c1e3ccSAndroid Build Coastguard Worker   int32_t step[16];
857*77c1e3ccSAndroid Build Coastguard Worker 
858*77c1e3ccSAndroid Build Coastguard Worker   // stage 0;
859*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, input, size, stage_range[stage]);
860*77c1e3ccSAndroid Build Coastguard Worker 
861*77c1e3ccSAndroid Build Coastguard Worker   // stage 1;
862*77c1e3ccSAndroid Build Coastguard Worker   stage++;
863*77c1e3ccSAndroid Build Coastguard Worker   assert(output != input);
864*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
865*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = input[0];
866*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = -input[15];
867*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = -input[7];
868*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = input[8];
869*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = -input[3];
870*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = input[12];
871*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = input[4];
872*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = -input[11];
873*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = -input[1];
874*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = input[14];
875*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = input[6];
876*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = -input[9];
877*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = input[2];
878*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -input[13];
879*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = -input[5];
880*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = input[10];
881*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
882*77c1e3ccSAndroid Build Coastguard Worker 
883*77c1e3ccSAndroid Build Coastguard Worker   // stage 2
884*77c1e3ccSAndroid Build Coastguard Worker   stage++;
885*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
886*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
887*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
888*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
889*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
890*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[32], bf0[2], cospi[32], bf0[3], cos_bit);
891*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[32], bf0[2], -cospi[32], bf0[3], cos_bit);
892*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
893*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
894*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[7], cos_bit);
895*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[32], bf0[6], -cospi[32], bf0[7], cos_bit);
896*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
897*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
898*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(cospi[32], bf0[10], cospi[32], bf0[11], cos_bit);
899*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(cospi[32], bf0[10], -cospi[32], bf0[11], cos_bit);
900*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12];
901*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[13];
902*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(cospi[32], bf0[14], cospi[32], bf0[15], cos_bit);
903*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = half_btf(cospi[32], bf0[14], -cospi[32], bf0[15], cos_bit);
904*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
905*77c1e3ccSAndroid Build Coastguard Worker 
906*77c1e3ccSAndroid Build Coastguard Worker   // stage 3
907*77c1e3ccSAndroid Build Coastguard Worker   stage++;
908*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
909*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
910*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[2];
911*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[3];
912*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[0] - bf0[2];
913*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[1] - bf0[3];
914*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[6];
915*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5] + bf0[7];
916*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[4] - bf0[6];
917*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[5] - bf0[7];
918*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[10];
919*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9] + bf0[11];
920*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[8] - bf0[10];
921*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[9] - bf0[11];
922*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12] + bf0[14];
923*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[13] + bf0[15];
924*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[12] - bf0[14];
925*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[13] - bf0[15];
926*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
927*77c1e3ccSAndroid Build Coastguard Worker 
928*77c1e3ccSAndroid Build Coastguard Worker   // stage 4
929*77c1e3ccSAndroid Build Coastguard Worker   stage++;
930*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
931*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
932*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
933*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
934*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
935*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
936*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
937*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = half_btf(cospi[16], bf0[4], cospi[48], bf0[5], cos_bit);
938*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(cospi[48], bf0[4], -cospi[16], bf0[5], cos_bit);
939*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(-cospi[48], bf0[6], cospi[16], bf0[7], cos_bit);
940*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[16], bf0[6], cospi[48], bf0[7], cos_bit);
941*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
942*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
943*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[10];
944*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11];
945*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(cospi[16], bf0[12], cospi[48], bf0[13], cos_bit);
946*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[48], bf0[12], -cospi[16], bf0[13], cos_bit);
947*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(-cospi[48], bf0[14], cospi[16], bf0[15], cos_bit);
948*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = half_btf(cospi[16], bf0[14], cospi[48], bf0[15], cos_bit);
949*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
950*77c1e3ccSAndroid Build Coastguard Worker 
951*77c1e3ccSAndroid Build Coastguard Worker   // stage 5
952*77c1e3ccSAndroid Build Coastguard Worker   stage++;
953*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
954*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
955*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[4];
956*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[5];
957*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[6];
958*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[7];
959*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[0] - bf0[4];
960*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[1] - bf0[5];
961*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[2] - bf0[6];
962*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[3] - bf0[7];
963*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[12];
964*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9] + bf0[13];
965*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[10] + bf0[14];
966*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11] + bf0[15];
967*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[8] - bf0[12];
968*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[9] - bf0[13];
969*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[10] - bf0[14];
970*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[11] - bf0[15];
971*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
972*77c1e3ccSAndroid Build Coastguard Worker 
973*77c1e3ccSAndroid Build Coastguard Worker   // stage 6
974*77c1e3ccSAndroid Build Coastguard Worker   stage++;
975*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
976*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
977*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
978*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
979*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
980*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
981*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
982*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
983*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
984*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6];
985*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
986*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = half_btf(cospi[8], bf0[8], cospi[56], bf0[9], cos_bit);
987*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = half_btf(cospi[56], bf0[8], -cospi[8], bf0[9], cos_bit);
988*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(cospi[40], bf0[10], cospi[24], bf0[11], cos_bit);
989*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(cospi[24], bf0[10], -cospi[40], bf0[11], cos_bit);
990*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(-cospi[56], bf0[12], cospi[8], bf0[13], cos_bit);
991*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[8], bf0[12], cospi[56], bf0[13], cos_bit);
992*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(-cospi[24], bf0[14], cospi[40], bf0[15], cos_bit);
993*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = half_btf(cospi[40], bf0[14], cospi[24], bf0[15], cos_bit);
994*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
995*77c1e3ccSAndroid Build Coastguard Worker 
996*77c1e3ccSAndroid Build Coastguard Worker   // stage 7
997*77c1e3ccSAndroid Build Coastguard Worker   stage++;
998*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
999*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
1000*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[8];
1001*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[9];
1002*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[10];
1003*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[11];
1004*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[12];
1005*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5] + bf0[13];
1006*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6] + bf0[14];
1007*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7] + bf0[15];
1008*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[0] - bf0[8];
1009*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[1] - bf0[9];
1010*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[2] - bf0[10];
1011*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[3] - bf0[11];
1012*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[4] - bf0[12];
1013*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[5] - bf0[13];
1014*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[6] - bf0[14];
1015*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[7] - bf0[15];
1016*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1017*77c1e3ccSAndroid Build Coastguard Worker 
1018*77c1e3ccSAndroid Build Coastguard Worker   // stage 8
1019*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1020*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1021*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
1022*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
1023*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = half_btf(cospi[2], bf0[0], cospi[62], bf0[1], cos_bit);
1024*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = half_btf(cospi[62], bf0[0], -cospi[2], bf0[1], cos_bit);
1025*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[10], bf0[2], cospi[54], bf0[3], cos_bit);
1026*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[54], bf0[2], -cospi[10], bf0[3], cos_bit);
1027*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = half_btf(cospi[18], bf0[4], cospi[46], bf0[5], cos_bit);
1028*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(cospi[46], bf0[4], -cospi[18], bf0[5], cos_bit);
1029*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[26], bf0[6], cospi[38], bf0[7], cos_bit);
1030*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[38], bf0[6], -cospi[26], bf0[7], cos_bit);
1031*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = half_btf(cospi[34], bf0[8], cospi[30], bf0[9], cos_bit);
1032*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = half_btf(cospi[30], bf0[8], -cospi[34], bf0[9], cos_bit);
1033*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(cospi[42], bf0[10], cospi[22], bf0[11], cos_bit);
1034*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(cospi[22], bf0[10], -cospi[42], bf0[11], cos_bit);
1035*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(cospi[50], bf0[12], cospi[14], bf0[13], cos_bit);
1036*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[14], bf0[12], -cospi[50], bf0[13], cos_bit);
1037*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(cospi[58], bf0[14], cospi[6], bf0[15], cos_bit);
1038*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = half_btf(cospi[6], bf0[14], -cospi[58], bf0[15], cos_bit);
1039*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1040*77c1e3ccSAndroid Build Coastguard Worker 
1041*77c1e3ccSAndroid Build Coastguard Worker   // stage 9
1042*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1043*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
1044*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
1045*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[1];
1046*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[14];
1047*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[3];
1048*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[12];
1049*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[5];
1050*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[10];
1051*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[7];
1052*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[8];
1053*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[9];
1054*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[6];
1055*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[11];
1056*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[4];
1057*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[13];
1058*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[2];
1059*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[15];
1060*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[0];
1061*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1062*77c1e3ccSAndroid Build Coastguard Worker }
1063*77c1e3ccSAndroid Build Coastguard Worker 
av1_fidentity4_c(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)1064*77c1e3ccSAndroid Build Coastguard Worker void av1_fidentity4_c(const int32_t *input, int32_t *output, int8_t cos_bit,
1065*77c1e3ccSAndroid Build Coastguard Worker                       const int8_t *stage_range) {
1066*77c1e3ccSAndroid Build Coastguard Worker   (void)cos_bit;
1067*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 4; ++i)
1068*77c1e3ccSAndroid Build Coastguard Worker     output[i] = round_shift((int64_t)input[i] * NewSqrt2, NewSqrt2Bits);
1069*77c1e3ccSAndroid Build Coastguard Worker   assert(stage_range[0] + NewSqrt2Bits <= 32);
1070*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(0, input, output, 4, stage_range[0]);
1071*77c1e3ccSAndroid Build Coastguard Worker }
1072*77c1e3ccSAndroid Build Coastguard Worker 
av1_fidentity8_c(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)1073*77c1e3ccSAndroid Build Coastguard Worker void av1_fidentity8_c(const int32_t *input, int32_t *output, int8_t cos_bit,
1074*77c1e3ccSAndroid Build Coastguard Worker                       const int8_t *stage_range) {
1075*77c1e3ccSAndroid Build Coastguard Worker   (void)cos_bit;
1076*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 8; ++i) output[i] = input[i] * 2;
1077*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(0, input, output, 8, stage_range[0]);
1078*77c1e3ccSAndroid Build Coastguard Worker }
1079*77c1e3ccSAndroid Build Coastguard Worker 
av1_fidentity16_c(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)1080*77c1e3ccSAndroid Build Coastguard Worker void av1_fidentity16_c(const int32_t *input, int32_t *output, int8_t cos_bit,
1081*77c1e3ccSAndroid Build Coastguard Worker                        const int8_t *stage_range) {
1082*77c1e3ccSAndroid Build Coastguard Worker   (void)cos_bit;
1083*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 16; ++i)
1084*77c1e3ccSAndroid Build Coastguard Worker     output[i] = round_shift((int64_t)input[i] * 2 * NewSqrt2, NewSqrt2Bits);
1085*77c1e3ccSAndroid Build Coastguard Worker   assert(stage_range[0] + NewSqrt2Bits <= 32);
1086*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(0, input, output, 16, stage_range[0]);
1087*77c1e3ccSAndroid Build Coastguard Worker }
1088*77c1e3ccSAndroid Build Coastguard Worker 
av1_fidentity32_c(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)1089*77c1e3ccSAndroid Build Coastguard Worker void av1_fidentity32_c(const int32_t *input, int32_t *output, int8_t cos_bit,
1090*77c1e3ccSAndroid Build Coastguard Worker                        const int8_t *stage_range) {
1091*77c1e3ccSAndroid Build Coastguard Worker   (void)cos_bit;
1092*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 32; ++i) output[i] = input[i] * 4;
1093*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(0, input, output, 32, stage_range[0]);
1094*77c1e3ccSAndroid Build Coastguard Worker }
1095*77c1e3ccSAndroid Build Coastguard Worker 
av1_fdct64(const int32_t * input,int32_t * output,int8_t cos_bit,const int8_t * stage_range)1096*77c1e3ccSAndroid Build Coastguard Worker void av1_fdct64(const int32_t *input, int32_t *output, int8_t cos_bit,
1097*77c1e3ccSAndroid Build Coastguard Worker                 const int8_t *stage_range) {
1098*77c1e3ccSAndroid Build Coastguard Worker   const int32_t size = 64;
1099*77c1e3ccSAndroid Build Coastguard Worker   const int32_t *cospi;
1100*77c1e3ccSAndroid Build Coastguard Worker 
1101*77c1e3ccSAndroid Build Coastguard Worker   int32_t stage = 0;
1102*77c1e3ccSAndroid Build Coastguard Worker   int32_t *bf0, *bf1;
1103*77c1e3ccSAndroid Build Coastguard Worker   int32_t step[64];
1104*77c1e3ccSAndroid Build Coastguard Worker 
1105*77c1e3ccSAndroid Build Coastguard Worker   // stage 0;
1106*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, input, size, stage_range[stage]);
1107*77c1e3ccSAndroid Build Coastguard Worker 
1108*77c1e3ccSAndroid Build Coastguard Worker   // stage 1;
1109*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1110*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
1111*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = input[0] + input[63];
1112*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = input[1] + input[62];
1113*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = input[2] + input[61];
1114*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = input[3] + input[60];
1115*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = input[4] + input[59];
1116*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = input[5] + input[58];
1117*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = input[6] + input[57];
1118*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = input[7] + input[56];
1119*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = input[8] + input[55];
1120*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = input[9] + input[54];
1121*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = input[10] + input[53];
1122*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = input[11] + input[52];
1123*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = input[12] + input[51];
1124*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = input[13] + input[50];
1125*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = input[14] + input[49];
1126*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = input[15] + input[48];
1127*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = input[16] + input[47];
1128*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = input[17] + input[46];
1129*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = input[18] + input[45];
1130*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = input[19] + input[44];
1131*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = input[20] + input[43];
1132*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = input[21] + input[42];
1133*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = input[22] + input[41];
1134*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = input[23] + input[40];
1135*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = input[24] + input[39];
1136*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = input[25] + input[38];
1137*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = input[26] + input[37];
1138*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = input[27] + input[36];
1139*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = input[28] + input[35];
1140*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = input[29] + input[34];
1141*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = input[30] + input[33];
1142*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = input[31] + input[32];
1143*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = -input[32] + input[31];
1144*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = -input[33] + input[30];
1145*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = -input[34] + input[29];
1146*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = -input[35] + input[28];
1147*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = -input[36] + input[27];
1148*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = -input[37] + input[26];
1149*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = -input[38] + input[25];
1150*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = -input[39] + input[24];
1151*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = -input[40] + input[23];
1152*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = -input[41] + input[22];
1153*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = -input[42] + input[21];
1154*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = -input[43] + input[20];
1155*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = -input[44] + input[19];
1156*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = -input[45] + input[18];
1157*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = -input[46] + input[17];
1158*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = -input[47] + input[16];
1159*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = -input[48] + input[15];
1160*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = -input[49] + input[14];
1161*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = -input[50] + input[13];
1162*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = -input[51] + input[12];
1163*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = -input[52] + input[11];
1164*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = -input[53] + input[10];
1165*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = -input[54] + input[9];
1166*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = -input[55] + input[8];
1167*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = -input[56] + input[7];
1168*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = -input[57] + input[6];
1169*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = -input[58] + input[5];
1170*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = -input[59] + input[4];
1171*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = -input[60] + input[3];
1172*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = -input[61] + input[2];
1173*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = -input[62] + input[1];
1174*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = -input[63] + input[0];
1175*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1176*77c1e3ccSAndroid Build Coastguard Worker 
1177*77c1e3ccSAndroid Build Coastguard Worker   // stage 2
1178*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1179*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1180*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
1181*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
1182*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[31];
1183*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[30];
1184*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[29];
1185*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[28];
1186*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[27];
1187*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5] + bf0[26];
1188*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6] + bf0[25];
1189*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7] + bf0[24];
1190*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[23];
1191*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9] + bf0[22];
1192*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[10] + bf0[21];
1193*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11] + bf0[20];
1194*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12] + bf0[19];
1195*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[13] + bf0[18];
1196*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14] + bf0[17];
1197*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15] + bf0[16];
1198*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = -bf0[16] + bf0[15];
1199*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = -bf0[17] + bf0[14];
1200*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = -bf0[18] + bf0[13];
1201*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = -bf0[19] + bf0[12];
1202*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = -bf0[20] + bf0[11];
1203*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = -bf0[21] + bf0[10];
1204*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = -bf0[22] + bf0[9];
1205*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = -bf0[23] + bf0[8];
1206*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = -bf0[24] + bf0[7];
1207*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = -bf0[25] + bf0[6];
1208*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = -bf0[26] + bf0[5];
1209*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = -bf0[27] + bf0[4];
1210*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = -bf0[28] + bf0[3];
1211*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = -bf0[29] + bf0[2];
1212*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = -bf0[30] + bf0[1];
1213*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = -bf0[31] + bf0[0];
1214*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[32];
1215*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = bf0[33];
1216*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = bf0[34];
1217*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = bf0[35];
1218*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = bf0[36];
1219*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = bf0[37];
1220*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = bf0[38];
1221*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = bf0[39];
1222*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = half_btf(-cospi[32], bf0[40], cospi[32], bf0[55], cos_bit);
1223*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = half_btf(-cospi[32], bf0[41], cospi[32], bf0[54], cos_bit);
1224*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = half_btf(-cospi[32], bf0[42], cospi[32], bf0[53], cos_bit);
1225*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = half_btf(-cospi[32], bf0[43], cospi[32], bf0[52], cos_bit);
1226*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = half_btf(-cospi[32], bf0[44], cospi[32], bf0[51], cos_bit);
1227*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = half_btf(-cospi[32], bf0[45], cospi[32], bf0[50], cos_bit);
1228*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = half_btf(-cospi[32], bf0[46], cospi[32], bf0[49], cos_bit);
1229*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = half_btf(-cospi[32], bf0[47], cospi[32], bf0[48], cos_bit);
1230*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = half_btf(cospi[32], bf0[48], cospi[32], bf0[47], cos_bit);
1231*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = half_btf(cospi[32], bf0[49], cospi[32], bf0[46], cos_bit);
1232*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = half_btf(cospi[32], bf0[50], cospi[32], bf0[45], cos_bit);
1233*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = half_btf(cospi[32], bf0[51], cospi[32], bf0[44], cos_bit);
1234*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = half_btf(cospi[32], bf0[52], cospi[32], bf0[43], cos_bit);
1235*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = half_btf(cospi[32], bf0[53], cospi[32], bf0[42], cos_bit);
1236*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = half_btf(cospi[32], bf0[54], cospi[32], bf0[41], cos_bit);
1237*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = half_btf(cospi[32], bf0[55], cospi[32], bf0[40], cos_bit);
1238*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = bf0[56];
1239*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = bf0[57];
1240*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = bf0[58];
1241*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = bf0[59];
1242*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = bf0[60];
1243*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = bf0[61];
1244*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = bf0[62];
1245*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63];
1246*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1247*77c1e3ccSAndroid Build Coastguard Worker 
1248*77c1e3ccSAndroid Build Coastguard Worker   // stage 3
1249*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1250*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1251*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
1252*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
1253*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[15];
1254*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[14];
1255*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[13];
1256*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[12];
1257*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[11];
1258*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5] + bf0[10];
1259*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6] + bf0[9];
1260*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7] + bf0[8];
1261*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = -bf0[8] + bf0[7];
1262*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = -bf0[9] + bf0[6];
1263*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -bf0[10] + bf0[5];
1264*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = -bf0[11] + bf0[4];
1265*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = -bf0[12] + bf0[3];
1266*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -bf0[13] + bf0[2];
1267*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = -bf0[14] + bf0[1];
1268*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = -bf0[15] + bf0[0];
1269*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16];
1270*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17];
1271*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = bf0[18];
1272*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19];
1273*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = half_btf(-cospi[32], bf0[20], cospi[32], bf0[27], cos_bit);
1274*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = half_btf(-cospi[32], bf0[21], cospi[32], bf0[26], cos_bit);
1275*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = half_btf(-cospi[32], bf0[22], cospi[32], bf0[25], cos_bit);
1276*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = half_btf(-cospi[32], bf0[23], cospi[32], bf0[24], cos_bit);
1277*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = half_btf(cospi[32], bf0[24], cospi[32], bf0[23], cos_bit);
1278*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = half_btf(cospi[32], bf0[25], cospi[32], bf0[22], cos_bit);
1279*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = half_btf(cospi[32], bf0[26], cospi[32], bf0[21], cos_bit);
1280*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = half_btf(cospi[32], bf0[27], cospi[32], bf0[20], cos_bit);
1281*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28];
1282*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = bf0[29];
1283*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30];
1284*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31];
1285*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[32] + bf0[47];
1286*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = bf0[33] + bf0[46];
1287*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = bf0[34] + bf0[45];
1288*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = bf0[35] + bf0[44];
1289*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = bf0[36] + bf0[43];
1290*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = bf0[37] + bf0[42];
1291*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = bf0[38] + bf0[41];
1292*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = bf0[39] + bf0[40];
1293*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = -bf0[40] + bf0[39];
1294*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = -bf0[41] + bf0[38];
1295*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = -bf0[42] + bf0[37];
1296*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = -bf0[43] + bf0[36];
1297*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = -bf0[44] + bf0[35];
1298*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = -bf0[45] + bf0[34];
1299*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = -bf0[46] + bf0[33];
1300*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = -bf0[47] + bf0[32];
1301*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = -bf0[48] + bf0[63];
1302*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = -bf0[49] + bf0[62];
1303*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = -bf0[50] + bf0[61];
1304*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = -bf0[51] + bf0[60];
1305*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = -bf0[52] + bf0[59];
1306*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = -bf0[53] + bf0[58];
1307*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = -bf0[54] + bf0[57];
1308*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = -bf0[55] + bf0[56];
1309*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = bf0[56] + bf0[55];
1310*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = bf0[57] + bf0[54];
1311*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = bf0[58] + bf0[53];
1312*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = bf0[59] + bf0[52];
1313*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = bf0[60] + bf0[51];
1314*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = bf0[61] + bf0[50];
1315*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = bf0[62] + bf0[49];
1316*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63] + bf0[48];
1317*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1318*77c1e3ccSAndroid Build Coastguard Worker 
1319*77c1e3ccSAndroid Build Coastguard Worker   // stage 4
1320*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1321*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1322*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
1323*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
1324*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[7];
1325*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[6];
1326*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2] + bf0[5];
1327*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3] + bf0[4];
1328*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = -bf0[4] + bf0[3];
1329*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = -bf0[5] + bf0[2];
1330*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = -bf0[6] + bf0[1];
1331*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = -bf0[7] + bf0[0];
1332*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
1333*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
1334*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(-cospi[32], bf0[10], cospi[32], bf0[13], cos_bit);
1335*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(-cospi[32], bf0[11], cospi[32], bf0[12], cos_bit);
1336*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(cospi[32], bf0[12], cospi[32], bf0[11], cos_bit);
1337*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[32], bf0[13], cospi[32], bf0[10], cos_bit);
1338*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14];
1339*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
1340*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16] + bf0[23];
1341*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17] + bf0[22];
1342*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = bf0[18] + bf0[21];
1343*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19] + bf0[20];
1344*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = -bf0[20] + bf0[19];
1345*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = -bf0[21] + bf0[18];
1346*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = -bf0[22] + bf0[17];
1347*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = -bf0[23] + bf0[16];
1348*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = -bf0[24] + bf0[31];
1349*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = -bf0[25] + bf0[30];
1350*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = -bf0[26] + bf0[29];
1351*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = -bf0[27] + bf0[28];
1352*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28] + bf0[27];
1353*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = bf0[29] + bf0[26];
1354*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30] + bf0[25];
1355*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31] + bf0[24];
1356*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[32];
1357*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = bf0[33];
1358*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = bf0[34];
1359*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = bf0[35];
1360*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = half_btf(-cospi[16], bf0[36], cospi[48], bf0[59], cos_bit);
1361*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = half_btf(-cospi[16], bf0[37], cospi[48], bf0[58], cos_bit);
1362*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = half_btf(-cospi[16], bf0[38], cospi[48], bf0[57], cos_bit);
1363*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = half_btf(-cospi[16], bf0[39], cospi[48], bf0[56], cos_bit);
1364*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = half_btf(-cospi[48], bf0[40], -cospi[16], bf0[55], cos_bit);
1365*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = half_btf(-cospi[48], bf0[41], -cospi[16], bf0[54], cos_bit);
1366*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = half_btf(-cospi[48], bf0[42], -cospi[16], bf0[53], cos_bit);
1367*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = half_btf(-cospi[48], bf0[43], -cospi[16], bf0[52], cos_bit);
1368*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = bf0[44];
1369*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = bf0[45];
1370*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = bf0[46];
1371*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = bf0[47];
1372*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = bf0[48];
1373*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = bf0[49];
1374*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = bf0[50];
1375*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = bf0[51];
1376*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = half_btf(cospi[48], bf0[52], -cospi[16], bf0[43], cos_bit);
1377*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = half_btf(cospi[48], bf0[53], -cospi[16], bf0[42], cos_bit);
1378*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = half_btf(cospi[48], bf0[54], -cospi[16], bf0[41], cos_bit);
1379*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = half_btf(cospi[48], bf0[55], -cospi[16], bf0[40], cos_bit);
1380*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = half_btf(cospi[16], bf0[56], cospi[48], bf0[39], cos_bit);
1381*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = half_btf(cospi[16], bf0[57], cospi[48], bf0[38], cos_bit);
1382*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = half_btf(cospi[16], bf0[58], cospi[48], bf0[37], cos_bit);
1383*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = half_btf(cospi[16], bf0[59], cospi[48], bf0[36], cos_bit);
1384*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = bf0[60];
1385*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = bf0[61];
1386*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = bf0[62];
1387*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63];
1388*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1389*77c1e3ccSAndroid Build Coastguard Worker 
1390*77c1e3ccSAndroid Build Coastguard Worker   // stage 5
1391*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1392*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1393*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
1394*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
1395*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0] + bf0[3];
1396*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1] + bf0[2];
1397*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = -bf0[2] + bf0[1];
1398*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = -bf0[3] + bf0[0];
1399*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
1400*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(-cospi[32], bf0[5], cospi[32], bf0[6], cos_bit);
1401*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[32], bf0[6], cospi[32], bf0[5], cos_bit);
1402*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
1403*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[11];
1404*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9] + bf0[10];
1405*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -bf0[10] + bf0[9];
1406*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = -bf0[11] + bf0[8];
1407*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = -bf0[12] + bf0[15];
1408*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -bf0[13] + bf0[14];
1409*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14] + bf0[13];
1410*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15] + bf0[12];
1411*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16];
1412*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17];
1413*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = half_btf(-cospi[16], bf0[18], cospi[48], bf0[29], cos_bit);
1414*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = half_btf(-cospi[16], bf0[19], cospi[48], bf0[28], cos_bit);
1415*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = half_btf(-cospi[48], bf0[20], -cospi[16], bf0[27], cos_bit);
1416*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = half_btf(-cospi[48], bf0[21], -cospi[16], bf0[26], cos_bit);
1417*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = bf0[22];
1418*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23];
1419*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24];
1420*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = bf0[25];
1421*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = half_btf(cospi[48], bf0[26], -cospi[16], bf0[21], cos_bit);
1422*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = half_btf(cospi[48], bf0[27], -cospi[16], bf0[20], cos_bit);
1423*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = half_btf(cospi[16], bf0[28], cospi[48], bf0[19], cos_bit);
1424*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = half_btf(cospi[16], bf0[29], cospi[48], bf0[18], cos_bit);
1425*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30];
1426*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31];
1427*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[32] + bf0[39];
1428*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = bf0[33] + bf0[38];
1429*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = bf0[34] + bf0[37];
1430*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = bf0[35] + bf0[36];
1431*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = -bf0[36] + bf0[35];
1432*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = -bf0[37] + bf0[34];
1433*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = -bf0[38] + bf0[33];
1434*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = -bf0[39] + bf0[32];
1435*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = -bf0[40] + bf0[47];
1436*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = -bf0[41] + bf0[46];
1437*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = -bf0[42] + bf0[45];
1438*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = -bf0[43] + bf0[44];
1439*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = bf0[44] + bf0[43];
1440*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = bf0[45] + bf0[42];
1441*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = bf0[46] + bf0[41];
1442*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = bf0[47] + bf0[40];
1443*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = bf0[48] + bf0[55];
1444*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = bf0[49] + bf0[54];
1445*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = bf0[50] + bf0[53];
1446*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = bf0[51] + bf0[52];
1447*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = -bf0[52] + bf0[51];
1448*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = -bf0[53] + bf0[50];
1449*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = -bf0[54] + bf0[49];
1450*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = -bf0[55] + bf0[48];
1451*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = -bf0[56] + bf0[63];
1452*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = -bf0[57] + bf0[62];
1453*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = -bf0[58] + bf0[61];
1454*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = -bf0[59] + bf0[60];
1455*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = bf0[60] + bf0[59];
1456*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = bf0[61] + bf0[58];
1457*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = bf0[62] + bf0[57];
1458*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63] + bf0[56];
1459*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1460*77c1e3ccSAndroid Build Coastguard Worker 
1461*77c1e3ccSAndroid Build Coastguard Worker   // stage 6
1462*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1463*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1464*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
1465*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
1466*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = half_btf(cospi[32], bf0[0], cospi[32], bf0[1], cos_bit);
1467*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = half_btf(-cospi[32], bf0[1], cospi[32], bf0[0], cos_bit);
1468*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = half_btf(cospi[48], bf0[2], cospi[16], bf0[3], cos_bit);
1469*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = half_btf(cospi[48], bf0[3], -cospi[16], bf0[2], cos_bit);
1470*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4] + bf0[5];
1471*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = -bf0[5] + bf0[4];
1472*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = -bf0[6] + bf0[7];
1473*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7] + bf0[6];
1474*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
1475*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = half_btf(-cospi[16], bf0[9], cospi[48], bf0[14], cos_bit);
1476*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(-cospi[48], bf0[10], -cospi[16], bf0[13], cos_bit);
1477*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11];
1478*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12];
1479*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[48], bf0[13], -cospi[16], bf0[10], cos_bit);
1480*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(cospi[16], bf0[14], cospi[48], bf0[9], cos_bit);
1481*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
1482*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16] + bf0[19];
1483*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17] + bf0[18];
1484*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = -bf0[18] + bf0[17];
1485*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = -bf0[19] + bf0[16];
1486*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = -bf0[20] + bf0[23];
1487*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = -bf0[21] + bf0[22];
1488*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = bf0[22] + bf0[21];
1489*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23] + bf0[20];
1490*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24] + bf0[27];
1491*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = bf0[25] + bf0[26];
1492*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = -bf0[26] + bf0[25];
1493*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = -bf0[27] + bf0[24];
1494*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = -bf0[28] + bf0[31];
1495*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = -bf0[29] + bf0[30];
1496*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30] + bf0[29];
1497*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31] + bf0[28];
1498*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[32];
1499*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = bf0[33];
1500*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = half_btf(-cospi[8], bf0[34], cospi[56], bf0[61], cos_bit);
1501*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = half_btf(-cospi[8], bf0[35], cospi[56], bf0[60], cos_bit);
1502*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = half_btf(-cospi[56], bf0[36], -cospi[8], bf0[59], cos_bit);
1503*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = half_btf(-cospi[56], bf0[37], -cospi[8], bf0[58], cos_bit);
1504*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = bf0[38];
1505*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = bf0[39];
1506*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = bf0[40];
1507*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = bf0[41];
1508*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = half_btf(-cospi[40], bf0[42], cospi[24], bf0[53], cos_bit);
1509*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = half_btf(-cospi[40], bf0[43], cospi[24], bf0[52], cos_bit);
1510*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = half_btf(-cospi[24], bf0[44], -cospi[40], bf0[51], cos_bit);
1511*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = half_btf(-cospi[24], bf0[45], -cospi[40], bf0[50], cos_bit);
1512*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = bf0[46];
1513*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = bf0[47];
1514*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = bf0[48];
1515*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = bf0[49];
1516*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = half_btf(cospi[24], bf0[50], -cospi[40], bf0[45], cos_bit);
1517*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = half_btf(cospi[24], bf0[51], -cospi[40], bf0[44], cos_bit);
1518*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = half_btf(cospi[40], bf0[52], cospi[24], bf0[43], cos_bit);
1519*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = half_btf(cospi[40], bf0[53], cospi[24], bf0[42], cos_bit);
1520*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = bf0[54];
1521*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = bf0[55];
1522*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = bf0[56];
1523*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = bf0[57];
1524*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = half_btf(cospi[56], bf0[58], -cospi[8], bf0[37], cos_bit);
1525*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = half_btf(cospi[56], bf0[59], -cospi[8], bf0[36], cos_bit);
1526*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = half_btf(cospi[8], bf0[60], cospi[56], bf0[35], cos_bit);
1527*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = half_btf(cospi[8], bf0[61], cospi[56], bf0[34], cos_bit);
1528*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = bf0[62];
1529*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63];
1530*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1531*77c1e3ccSAndroid Build Coastguard Worker 
1532*77c1e3ccSAndroid Build Coastguard Worker   // stage 7
1533*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1534*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1535*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
1536*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
1537*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
1538*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
1539*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
1540*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
1541*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = half_btf(cospi[56], bf0[4], cospi[8], bf0[7], cos_bit);
1542*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = half_btf(cospi[24], bf0[5], cospi[40], bf0[6], cos_bit);
1543*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = half_btf(cospi[24], bf0[6], -cospi[40], bf0[5], cos_bit);
1544*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = half_btf(cospi[56], bf0[7], -cospi[8], bf0[4], cos_bit);
1545*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8] + bf0[9];
1546*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = -bf0[9] + bf0[8];
1547*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = -bf0[10] + bf0[11];
1548*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11] + bf0[10];
1549*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12] + bf0[13];
1550*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = -bf0[13] + bf0[12];
1551*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = -bf0[14] + bf0[15];
1552*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15] + bf0[14];
1553*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16];
1554*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = half_btf(-cospi[8], bf0[17], cospi[56], bf0[30], cos_bit);
1555*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = half_btf(-cospi[56], bf0[18], -cospi[8], bf0[29], cos_bit);
1556*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19];
1557*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = bf0[20];
1558*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = half_btf(-cospi[40], bf0[21], cospi[24], bf0[26], cos_bit);
1559*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = half_btf(-cospi[24], bf0[22], -cospi[40], bf0[25], cos_bit);
1560*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23];
1561*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24];
1562*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = half_btf(cospi[24], bf0[25], -cospi[40], bf0[22], cos_bit);
1563*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = half_btf(cospi[40], bf0[26], cospi[24], bf0[21], cos_bit);
1564*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = bf0[27];
1565*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28];
1566*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = half_btf(cospi[56], bf0[29], -cospi[8], bf0[18], cos_bit);
1567*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = half_btf(cospi[8], bf0[30], cospi[56], bf0[17], cos_bit);
1568*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31];
1569*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[32] + bf0[35];
1570*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = bf0[33] + bf0[34];
1571*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = -bf0[34] + bf0[33];
1572*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = -bf0[35] + bf0[32];
1573*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = -bf0[36] + bf0[39];
1574*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = -bf0[37] + bf0[38];
1575*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = bf0[38] + bf0[37];
1576*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = bf0[39] + bf0[36];
1577*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = bf0[40] + bf0[43];
1578*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = bf0[41] + bf0[42];
1579*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = -bf0[42] + bf0[41];
1580*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = -bf0[43] + bf0[40];
1581*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = -bf0[44] + bf0[47];
1582*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = -bf0[45] + bf0[46];
1583*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = bf0[46] + bf0[45];
1584*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = bf0[47] + bf0[44];
1585*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = bf0[48] + bf0[51];
1586*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = bf0[49] + bf0[50];
1587*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = -bf0[50] + bf0[49];
1588*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = -bf0[51] + bf0[48];
1589*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = -bf0[52] + bf0[55];
1590*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = -bf0[53] + bf0[54];
1591*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = bf0[54] + bf0[53];
1592*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = bf0[55] + bf0[52];
1593*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = bf0[56] + bf0[59];
1594*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = bf0[57] + bf0[58];
1595*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = -bf0[58] + bf0[57];
1596*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = -bf0[59] + bf0[56];
1597*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = -bf0[60] + bf0[63];
1598*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = -bf0[61] + bf0[62];
1599*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = bf0[62] + bf0[61];
1600*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63] + bf0[60];
1601*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1602*77c1e3ccSAndroid Build Coastguard Worker 
1603*77c1e3ccSAndroid Build Coastguard Worker   // stage 8
1604*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1605*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1606*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
1607*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
1608*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
1609*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
1610*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
1611*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
1612*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
1613*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
1614*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6];
1615*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
1616*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = half_btf(cospi[60], bf0[8], cospi[4], bf0[15], cos_bit);
1617*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = half_btf(cospi[28], bf0[9], cospi[36], bf0[14], cos_bit);
1618*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = half_btf(cospi[44], bf0[10], cospi[20], bf0[13], cos_bit);
1619*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = half_btf(cospi[12], bf0[11], cospi[52], bf0[12], cos_bit);
1620*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = half_btf(cospi[12], bf0[12], -cospi[52], bf0[11], cos_bit);
1621*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = half_btf(cospi[44], bf0[13], -cospi[20], bf0[10], cos_bit);
1622*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = half_btf(cospi[28], bf0[14], -cospi[36], bf0[9], cos_bit);
1623*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = half_btf(cospi[60], bf0[15], -cospi[4], bf0[8], cos_bit);
1624*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16] + bf0[17];
1625*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = -bf0[17] + bf0[16];
1626*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = -bf0[18] + bf0[19];
1627*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19] + bf0[18];
1628*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = bf0[20] + bf0[21];
1629*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = -bf0[21] + bf0[20];
1630*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = -bf0[22] + bf0[23];
1631*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23] + bf0[22];
1632*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24] + bf0[25];
1633*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = -bf0[25] + bf0[24];
1634*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = -bf0[26] + bf0[27];
1635*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = bf0[27] + bf0[26];
1636*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28] + bf0[29];
1637*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = -bf0[29] + bf0[28];
1638*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = -bf0[30] + bf0[31];
1639*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31] + bf0[30];
1640*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[32];
1641*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = half_btf(-cospi[4], bf0[33], cospi[60], bf0[62], cos_bit);
1642*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = half_btf(-cospi[60], bf0[34], -cospi[4], bf0[61], cos_bit);
1643*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = bf0[35];
1644*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = bf0[36];
1645*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = half_btf(-cospi[36], bf0[37], cospi[28], bf0[58], cos_bit);
1646*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = half_btf(-cospi[28], bf0[38], -cospi[36], bf0[57], cos_bit);
1647*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = bf0[39];
1648*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = bf0[40];
1649*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = half_btf(-cospi[20], bf0[41], cospi[44], bf0[54], cos_bit);
1650*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = half_btf(-cospi[44], bf0[42], -cospi[20], bf0[53], cos_bit);
1651*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = bf0[43];
1652*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = bf0[44];
1653*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = half_btf(-cospi[52], bf0[45], cospi[12], bf0[50], cos_bit);
1654*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = half_btf(-cospi[12], bf0[46], -cospi[52], bf0[49], cos_bit);
1655*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = bf0[47];
1656*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = bf0[48];
1657*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = half_btf(cospi[12], bf0[49], -cospi[52], bf0[46], cos_bit);
1658*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = half_btf(cospi[52], bf0[50], cospi[12], bf0[45], cos_bit);
1659*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = bf0[51];
1660*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = bf0[52];
1661*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = half_btf(cospi[44], bf0[53], -cospi[20], bf0[42], cos_bit);
1662*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = half_btf(cospi[20], bf0[54], cospi[44], bf0[41], cos_bit);
1663*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = bf0[55];
1664*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = bf0[56];
1665*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = half_btf(cospi[28], bf0[57], -cospi[36], bf0[38], cos_bit);
1666*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = half_btf(cospi[36], bf0[58], cospi[28], bf0[37], cos_bit);
1667*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = bf0[59];
1668*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = bf0[60];
1669*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = half_btf(cospi[60], bf0[61], -cospi[4], bf0[34], cos_bit);
1670*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = half_btf(cospi[4], bf0[62], cospi[60], bf0[33], cos_bit);
1671*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63];
1672*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1673*77c1e3ccSAndroid Build Coastguard Worker 
1674*77c1e3ccSAndroid Build Coastguard Worker   // stage 9
1675*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1676*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1677*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
1678*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
1679*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
1680*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
1681*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
1682*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
1683*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
1684*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
1685*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6];
1686*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
1687*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
1688*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
1689*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[10];
1690*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11];
1691*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12];
1692*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[13];
1693*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14];
1694*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
1695*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = half_btf(cospi[62], bf0[16], cospi[2], bf0[31], cos_bit);
1696*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = half_btf(cospi[30], bf0[17], cospi[34], bf0[30], cos_bit);
1697*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = half_btf(cospi[46], bf0[18], cospi[18], bf0[29], cos_bit);
1698*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = half_btf(cospi[14], bf0[19], cospi[50], bf0[28], cos_bit);
1699*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = half_btf(cospi[54], bf0[20], cospi[10], bf0[27], cos_bit);
1700*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = half_btf(cospi[22], bf0[21], cospi[42], bf0[26], cos_bit);
1701*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = half_btf(cospi[38], bf0[22], cospi[26], bf0[25], cos_bit);
1702*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = half_btf(cospi[6], bf0[23], cospi[58], bf0[24], cos_bit);
1703*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = half_btf(cospi[6], bf0[24], -cospi[58], bf0[23], cos_bit);
1704*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = half_btf(cospi[38], bf0[25], -cospi[26], bf0[22], cos_bit);
1705*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = half_btf(cospi[22], bf0[26], -cospi[42], bf0[21], cos_bit);
1706*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = half_btf(cospi[54], bf0[27], -cospi[10], bf0[20], cos_bit);
1707*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = half_btf(cospi[14], bf0[28], -cospi[50], bf0[19], cos_bit);
1708*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = half_btf(cospi[46], bf0[29], -cospi[18], bf0[18], cos_bit);
1709*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = half_btf(cospi[30], bf0[30], -cospi[34], bf0[17], cos_bit);
1710*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = half_btf(cospi[62], bf0[31], -cospi[2], bf0[16], cos_bit);
1711*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[32] + bf0[33];
1712*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = -bf0[33] + bf0[32];
1713*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = -bf0[34] + bf0[35];
1714*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = bf0[35] + bf0[34];
1715*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = bf0[36] + bf0[37];
1716*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = -bf0[37] + bf0[36];
1717*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = -bf0[38] + bf0[39];
1718*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = bf0[39] + bf0[38];
1719*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = bf0[40] + bf0[41];
1720*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = -bf0[41] + bf0[40];
1721*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = -bf0[42] + bf0[43];
1722*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = bf0[43] + bf0[42];
1723*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = bf0[44] + bf0[45];
1724*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = -bf0[45] + bf0[44];
1725*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = -bf0[46] + bf0[47];
1726*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = bf0[47] + bf0[46];
1727*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = bf0[48] + bf0[49];
1728*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = -bf0[49] + bf0[48];
1729*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = -bf0[50] + bf0[51];
1730*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = bf0[51] + bf0[50];
1731*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = bf0[52] + bf0[53];
1732*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = -bf0[53] + bf0[52];
1733*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = -bf0[54] + bf0[55];
1734*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = bf0[55] + bf0[54];
1735*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = bf0[56] + bf0[57];
1736*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = -bf0[57] + bf0[56];
1737*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = -bf0[58] + bf0[59];
1738*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = bf0[59] + bf0[58];
1739*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = bf0[60] + bf0[61];
1740*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = -bf0[61] + bf0[60];
1741*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = -bf0[62] + bf0[63];
1742*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63] + bf0[62];
1743*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1744*77c1e3ccSAndroid Build Coastguard Worker 
1745*77c1e3ccSAndroid Build Coastguard Worker   // stage 10
1746*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1747*77c1e3ccSAndroid Build Coastguard Worker   cospi = cospi_arr(cos_bit);
1748*77c1e3ccSAndroid Build Coastguard Worker   bf0 = output;
1749*77c1e3ccSAndroid Build Coastguard Worker   bf1 = step;
1750*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
1751*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[1];
1752*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[2];
1753*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[3];
1754*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[4];
1755*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[5];
1756*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[6];
1757*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[7];
1758*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[8];
1759*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[9];
1760*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[10];
1761*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[11];
1762*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12];
1763*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[13];
1764*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[14];
1765*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[15];
1766*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[16];
1767*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[17];
1768*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = bf0[18];
1769*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[19];
1770*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = bf0[20];
1771*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = bf0[21];
1772*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = bf0[22];
1773*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[23];
1774*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[24];
1775*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = bf0[25];
1776*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = bf0[26];
1777*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = bf0[27];
1778*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[28];
1779*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = bf0[29];
1780*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30];
1781*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[31];
1782*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = half_btf(cospi[63], bf0[32], cospi[1], bf0[63], cos_bit);
1783*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = half_btf(cospi[31], bf0[33], cospi[33], bf0[62], cos_bit);
1784*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = half_btf(cospi[47], bf0[34], cospi[17], bf0[61], cos_bit);
1785*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = half_btf(cospi[15], bf0[35], cospi[49], bf0[60], cos_bit);
1786*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = half_btf(cospi[55], bf0[36], cospi[9], bf0[59], cos_bit);
1787*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = half_btf(cospi[23], bf0[37], cospi[41], bf0[58], cos_bit);
1788*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = half_btf(cospi[39], bf0[38], cospi[25], bf0[57], cos_bit);
1789*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = half_btf(cospi[7], bf0[39], cospi[57], bf0[56], cos_bit);
1790*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = half_btf(cospi[59], bf0[40], cospi[5], bf0[55], cos_bit);
1791*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = half_btf(cospi[27], bf0[41], cospi[37], bf0[54], cos_bit);
1792*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = half_btf(cospi[43], bf0[42], cospi[21], bf0[53], cos_bit);
1793*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = half_btf(cospi[11], bf0[43], cospi[53], bf0[52], cos_bit);
1794*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = half_btf(cospi[51], bf0[44], cospi[13], bf0[51], cos_bit);
1795*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = half_btf(cospi[19], bf0[45], cospi[45], bf0[50], cos_bit);
1796*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = half_btf(cospi[35], bf0[46], cospi[29], bf0[49], cos_bit);
1797*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = half_btf(cospi[3], bf0[47], cospi[61], bf0[48], cos_bit);
1798*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = half_btf(cospi[3], bf0[48], -cospi[61], bf0[47], cos_bit);
1799*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = half_btf(cospi[35], bf0[49], -cospi[29], bf0[46], cos_bit);
1800*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = half_btf(cospi[19], bf0[50], -cospi[45], bf0[45], cos_bit);
1801*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = half_btf(cospi[51], bf0[51], -cospi[13], bf0[44], cos_bit);
1802*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = half_btf(cospi[11], bf0[52], -cospi[53], bf0[43], cos_bit);
1803*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = half_btf(cospi[43], bf0[53], -cospi[21], bf0[42], cos_bit);
1804*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = half_btf(cospi[27], bf0[54], -cospi[37], bf0[41], cos_bit);
1805*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = half_btf(cospi[59], bf0[55], -cospi[5], bf0[40], cos_bit);
1806*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = half_btf(cospi[7], bf0[56], -cospi[57], bf0[39], cos_bit);
1807*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = half_btf(cospi[39], bf0[57], -cospi[25], bf0[38], cos_bit);
1808*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = half_btf(cospi[23], bf0[58], -cospi[41], bf0[37], cos_bit);
1809*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = half_btf(cospi[55], bf0[59], -cospi[9], bf0[36], cos_bit);
1810*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = half_btf(cospi[15], bf0[60], -cospi[49], bf0[35], cos_bit);
1811*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = half_btf(cospi[47], bf0[61], -cospi[17], bf0[34], cos_bit);
1812*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = half_btf(cospi[31], bf0[62], -cospi[33], bf0[33], cos_bit);
1813*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = half_btf(cospi[63], bf0[63], -cospi[1], bf0[32], cos_bit);
1814*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1815*77c1e3ccSAndroid Build Coastguard Worker 
1816*77c1e3ccSAndroid Build Coastguard Worker   // stage 11
1817*77c1e3ccSAndroid Build Coastguard Worker   stage++;
1818*77c1e3ccSAndroid Build Coastguard Worker   bf0 = step;
1819*77c1e3ccSAndroid Build Coastguard Worker   bf1 = output;
1820*77c1e3ccSAndroid Build Coastguard Worker   bf1[0] = bf0[0];
1821*77c1e3ccSAndroid Build Coastguard Worker   bf1[1] = bf0[32];
1822*77c1e3ccSAndroid Build Coastguard Worker   bf1[2] = bf0[16];
1823*77c1e3ccSAndroid Build Coastguard Worker   bf1[3] = bf0[48];
1824*77c1e3ccSAndroid Build Coastguard Worker   bf1[4] = bf0[8];
1825*77c1e3ccSAndroid Build Coastguard Worker   bf1[5] = bf0[40];
1826*77c1e3ccSAndroid Build Coastguard Worker   bf1[6] = bf0[24];
1827*77c1e3ccSAndroid Build Coastguard Worker   bf1[7] = bf0[56];
1828*77c1e3ccSAndroid Build Coastguard Worker   bf1[8] = bf0[4];
1829*77c1e3ccSAndroid Build Coastguard Worker   bf1[9] = bf0[36];
1830*77c1e3ccSAndroid Build Coastguard Worker   bf1[10] = bf0[20];
1831*77c1e3ccSAndroid Build Coastguard Worker   bf1[11] = bf0[52];
1832*77c1e3ccSAndroid Build Coastguard Worker   bf1[12] = bf0[12];
1833*77c1e3ccSAndroid Build Coastguard Worker   bf1[13] = bf0[44];
1834*77c1e3ccSAndroid Build Coastguard Worker   bf1[14] = bf0[28];
1835*77c1e3ccSAndroid Build Coastguard Worker   bf1[15] = bf0[60];
1836*77c1e3ccSAndroid Build Coastguard Worker   bf1[16] = bf0[2];
1837*77c1e3ccSAndroid Build Coastguard Worker   bf1[17] = bf0[34];
1838*77c1e3ccSAndroid Build Coastguard Worker   bf1[18] = bf0[18];
1839*77c1e3ccSAndroid Build Coastguard Worker   bf1[19] = bf0[50];
1840*77c1e3ccSAndroid Build Coastguard Worker   bf1[20] = bf0[10];
1841*77c1e3ccSAndroid Build Coastguard Worker   bf1[21] = bf0[42];
1842*77c1e3ccSAndroid Build Coastguard Worker   bf1[22] = bf0[26];
1843*77c1e3ccSAndroid Build Coastguard Worker   bf1[23] = bf0[58];
1844*77c1e3ccSAndroid Build Coastguard Worker   bf1[24] = bf0[6];
1845*77c1e3ccSAndroid Build Coastguard Worker   bf1[25] = bf0[38];
1846*77c1e3ccSAndroid Build Coastguard Worker   bf1[26] = bf0[22];
1847*77c1e3ccSAndroid Build Coastguard Worker   bf1[27] = bf0[54];
1848*77c1e3ccSAndroid Build Coastguard Worker   bf1[28] = bf0[14];
1849*77c1e3ccSAndroid Build Coastguard Worker   bf1[29] = bf0[46];
1850*77c1e3ccSAndroid Build Coastguard Worker   bf1[30] = bf0[30];
1851*77c1e3ccSAndroid Build Coastguard Worker   bf1[31] = bf0[62];
1852*77c1e3ccSAndroid Build Coastguard Worker   bf1[32] = bf0[1];
1853*77c1e3ccSAndroid Build Coastguard Worker   bf1[33] = bf0[33];
1854*77c1e3ccSAndroid Build Coastguard Worker   bf1[34] = bf0[17];
1855*77c1e3ccSAndroid Build Coastguard Worker   bf1[35] = bf0[49];
1856*77c1e3ccSAndroid Build Coastguard Worker   bf1[36] = bf0[9];
1857*77c1e3ccSAndroid Build Coastguard Worker   bf1[37] = bf0[41];
1858*77c1e3ccSAndroid Build Coastguard Worker   bf1[38] = bf0[25];
1859*77c1e3ccSAndroid Build Coastguard Worker   bf1[39] = bf0[57];
1860*77c1e3ccSAndroid Build Coastguard Worker   bf1[40] = bf0[5];
1861*77c1e3ccSAndroid Build Coastguard Worker   bf1[41] = bf0[37];
1862*77c1e3ccSAndroid Build Coastguard Worker   bf1[42] = bf0[21];
1863*77c1e3ccSAndroid Build Coastguard Worker   bf1[43] = bf0[53];
1864*77c1e3ccSAndroid Build Coastguard Worker   bf1[44] = bf0[13];
1865*77c1e3ccSAndroid Build Coastguard Worker   bf1[45] = bf0[45];
1866*77c1e3ccSAndroid Build Coastguard Worker   bf1[46] = bf0[29];
1867*77c1e3ccSAndroid Build Coastguard Worker   bf1[47] = bf0[61];
1868*77c1e3ccSAndroid Build Coastguard Worker   bf1[48] = bf0[3];
1869*77c1e3ccSAndroid Build Coastguard Worker   bf1[49] = bf0[35];
1870*77c1e3ccSAndroid Build Coastguard Worker   bf1[50] = bf0[19];
1871*77c1e3ccSAndroid Build Coastguard Worker   bf1[51] = bf0[51];
1872*77c1e3ccSAndroid Build Coastguard Worker   bf1[52] = bf0[11];
1873*77c1e3ccSAndroid Build Coastguard Worker   bf1[53] = bf0[43];
1874*77c1e3ccSAndroid Build Coastguard Worker   bf1[54] = bf0[27];
1875*77c1e3ccSAndroid Build Coastguard Worker   bf1[55] = bf0[59];
1876*77c1e3ccSAndroid Build Coastguard Worker   bf1[56] = bf0[7];
1877*77c1e3ccSAndroid Build Coastguard Worker   bf1[57] = bf0[39];
1878*77c1e3ccSAndroid Build Coastguard Worker   bf1[58] = bf0[23];
1879*77c1e3ccSAndroid Build Coastguard Worker   bf1[59] = bf0[55];
1880*77c1e3ccSAndroid Build Coastguard Worker   bf1[60] = bf0[15];
1881*77c1e3ccSAndroid Build Coastguard Worker   bf1[61] = bf0[47];
1882*77c1e3ccSAndroid Build Coastguard Worker   bf1[62] = bf0[31];
1883*77c1e3ccSAndroid Build Coastguard Worker   bf1[63] = bf0[63];
1884*77c1e3ccSAndroid Build Coastguard Worker   av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
1885*77c1e3ccSAndroid Build Coastguard Worker }
1886