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