xref: /aosp_15_r20/external/libvpx/vpx_dsp/mips/itrans16_dspr2.c (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2015 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker 
11*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_config.h"
12*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_dsp_rtcd.h"
13*fb1b10abSAndroid Build Coastguard Worker #include "vpx_dsp/mips/inv_txfm_dspr2.h"
14*fb1b10abSAndroid Build Coastguard Worker #include "vpx_dsp/txfm_common.h"
15*fb1b10abSAndroid Build Coastguard Worker 
16*fb1b10abSAndroid Build Coastguard Worker #if HAVE_DSPR2
idct16_rows_dspr2(const int16_t * input,int16_t * output,uint32_t no_rows)17*fb1b10abSAndroid Build Coastguard Worker void idct16_rows_dspr2(const int16_t *input, int16_t *output,
18*fb1b10abSAndroid Build Coastguard Worker                        uint32_t no_rows) {
19*fb1b10abSAndroid Build Coastguard Worker   int i;
20*fb1b10abSAndroid Build Coastguard Worker   int step1_0, step1_1, step1_2, step1_3, step1_4, step1_5, step1_6, step1_7;
21*fb1b10abSAndroid Build Coastguard Worker   int step1_10, step1_11, step1_12, step1_13;
22*fb1b10abSAndroid Build Coastguard Worker   int step2_0, step2_1, step2_2, step2_3;
23*fb1b10abSAndroid Build Coastguard Worker   int step2_8, step2_9, step2_10, step2_11;
24*fb1b10abSAndroid Build Coastguard Worker   int step2_12, step2_13, step2_14, step2_15;
25*fb1b10abSAndroid Build Coastguard Worker   int load1, load2, load3, load4, load5, load6, load7, load8;
26*fb1b10abSAndroid Build Coastguard Worker   int result1, result2, result3, result4;
27*fb1b10abSAndroid Build Coastguard Worker   const int const_2_power_13 = 8192;
28*fb1b10abSAndroid Build Coastguard Worker 
29*fb1b10abSAndroid Build Coastguard Worker   for (i = no_rows; i--;) {
30*fb1b10abSAndroid Build Coastguard Worker     /* prefetch row */
31*fb1b10abSAndroid Build Coastguard Worker     prefetch_load((const uint8_t *)(input + 16));
32*fb1b10abSAndroid Build Coastguard Worker 
33*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
34*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load1],              0(%[input])                    \n\t"
35*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load2],             16(%[input])                    \n\t"
36*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load3],              8(%[input])                    \n\t"
37*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load4],             24(%[input])                    \n\t"
38*fb1b10abSAndroid Build Coastguard Worker 
39*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
40*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
41*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
42*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
43*fb1b10abSAndroid Build Coastguard Worker         "add      %[result1],           %[load1],       %[load2]        \n\t"
44*fb1b10abSAndroid Build Coastguard Worker         "sub      %[result2],           %[load1],       %[load2]        \n\t"
45*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[result1],     %[cospi_16_64]  \n\t"
46*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[result2],     %[cospi_16_64]  \n\t"
47*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_0],           $ac1,           31              \n\t"
48*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_1],           $ac2,           31              \n\t"
49*fb1b10abSAndroid Build Coastguard Worker 
50*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
51*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
52*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load3],       %[cospi_24_64]  \n\t"
53*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load4],       %[cospi_8_64]   \n\t"
54*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_2],           $ac3,           31              \n\t"
55*fb1b10abSAndroid Build Coastguard Worker 
56*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
57*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
58*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load3],       %[cospi_8_64]   \n\t"
59*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load4],       %[cospi_24_64]  \n\t"
60*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_3],           $ac1,           31              \n\t"
61*fb1b10abSAndroid Build Coastguard Worker 
62*fb1b10abSAndroid Build Coastguard Worker         "add      %[step1_0],           %[step2_0],     %[step2_3]      \n\t"
63*fb1b10abSAndroid Build Coastguard Worker         "add      %[step1_1],           %[step2_1],     %[step2_2]      \n\t"
64*fb1b10abSAndroid Build Coastguard Worker         "sub      %[step1_2],           %[step2_1],     %[step2_2]      \n\t"
65*fb1b10abSAndroid Build Coastguard Worker         "sub      %[step1_3],           %[step2_0],     %[step2_3]      \n\t"
66*fb1b10abSAndroid Build Coastguard Worker 
67*fb1b10abSAndroid Build Coastguard Worker         : [load1] "=&r"(load1), [load2] "=&r"(load2), [load3] "=&r"(load3),
68*fb1b10abSAndroid Build Coastguard Worker           [load4] "=&r"(load4), [result1] "=&r"(result1),
69*fb1b10abSAndroid Build Coastguard Worker           [result2] "=&r"(result2), [step2_0] "=&r"(step2_0),
70*fb1b10abSAndroid Build Coastguard Worker           [step2_1] "=&r"(step2_1), [step2_2] "=&r"(step2_2),
71*fb1b10abSAndroid Build Coastguard Worker           [step2_3] "=&r"(step2_3), [step1_0] "=r"(step1_0),
72*fb1b10abSAndroid Build Coastguard Worker           [step1_1] "=r"(step1_1), [step1_2] "=r"(step1_2),
73*fb1b10abSAndroid Build Coastguard Worker           [step1_3] "=r"(step1_3)
74*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [input] "r"(input),
75*fb1b10abSAndroid Build Coastguard Worker           [cospi_24_64] "r"(cospi_24_64), [cospi_8_64] "r"(cospi_8_64),
76*fb1b10abSAndroid Build Coastguard Worker           [cospi_16_64] "r"(cospi_16_64));
77*fb1b10abSAndroid Build Coastguard Worker 
78*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
79*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load5],             2(%[input])                     \n\t"
80*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load6],             30(%[input])                    \n\t"
81*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load7],             18(%[input])                    \n\t"
82*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load8],             14(%[input])                    \n\t"
83*fb1b10abSAndroid Build Coastguard Worker 
84*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
85*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
86*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
87*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
88*fb1b10abSAndroid Build Coastguard Worker 
89*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load5],       %[cospi_30_64]  \n\t"
90*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load6],       %[cospi_2_64]   \n\t"
91*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result1],           $ac1,           31              \n\t"
92*fb1b10abSAndroid Build Coastguard Worker 
93*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load7],       %[cospi_14_64]  \n\t"
94*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load8],       %[cospi_18_64]  \n\t"
95*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result2],           $ac3,           31              \n\t"
96*fb1b10abSAndroid Build Coastguard Worker 
97*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
98*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
99*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
100*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
101*fb1b10abSAndroid Build Coastguard Worker 
102*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load7],       %[cospi_18_64]  \n\t"
103*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load8],       %[cospi_14_64]  \n\t"
104*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result3],           $ac1,           31              \n\t"
105*fb1b10abSAndroid Build Coastguard Worker 
106*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load5],       %[cospi_2_64]   \n\t"
107*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load6],       %[cospi_30_64]  \n\t"
108*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result4],           $ac2,           31              \n\t"
109*fb1b10abSAndroid Build Coastguard Worker 
110*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[result1],     %[result2]      \n\t"
111*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[result4],     %[result3]      \n\t"
112*fb1b10abSAndroid Build Coastguard Worker 
113*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
114*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
115*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
116*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
117*fb1b10abSAndroid Build Coastguard Worker 
118*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load6],       %[cospi_24_64]  \n\t"
119*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load5],       %[cospi_8_64]   \n\t"
120*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load5],       %[cospi_24_64]  \n\t"
121*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load6],       %[cospi_8_64]   \n\t"
122*fb1b10abSAndroid Build Coastguard Worker 
123*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_9],           $ac1,           31              \n\t"
124*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_14],          $ac3,           31              \n\t"
125*fb1b10abSAndroid Build Coastguard Worker         "add      %[step2_8],           %[result1],     %[result2]      \n\t"
126*fb1b10abSAndroid Build Coastguard Worker         "add      %[step2_15],          %[result4],     %[result3]      \n\t"
127*fb1b10abSAndroid Build Coastguard Worker 
128*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6), [load7] "=&r"(load7),
129*fb1b10abSAndroid Build Coastguard Worker           [load8] "=&r"(load8), [result1] "=&r"(result1),
130*fb1b10abSAndroid Build Coastguard Worker           [result2] "=&r"(result2), [result3] "=&r"(result3),
131*fb1b10abSAndroid Build Coastguard Worker           [result4] "=&r"(result4), [step2_8] "=r"(step2_8),
132*fb1b10abSAndroid Build Coastguard Worker           [step2_15] "=r"(step2_15), [step2_9] "=r"(step2_9),
133*fb1b10abSAndroid Build Coastguard Worker           [step2_14] "=r"(step2_14)
134*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [input] "r"(input),
135*fb1b10abSAndroid Build Coastguard Worker           [cospi_30_64] "r"(cospi_30_64), [cospi_2_64] "r"(cospi_2_64),
136*fb1b10abSAndroid Build Coastguard Worker           [cospi_14_64] "r"(cospi_14_64), [cospi_18_64] "r"(cospi_18_64),
137*fb1b10abSAndroid Build Coastguard Worker           [cospi_24_64] "r"(cospi_24_64), [cospi_8_64] "r"(cospi_8_64));
138*fb1b10abSAndroid Build Coastguard Worker 
139*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
140*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load1],             10(%[input])                    \n\t"
141*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load2],             22(%[input])                    \n\t"
142*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load3],             26(%[input])                    \n\t"
143*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load4],             6(%[input])                     \n\t"
144*fb1b10abSAndroid Build Coastguard Worker 
145*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
146*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
147*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
148*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
149*fb1b10abSAndroid Build Coastguard Worker 
150*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load1],       %[cospi_22_64]  \n\t"
151*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load2],       %[cospi_10_64]  \n\t"
152*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result1],           $ac1,           31              \n\t"
153*fb1b10abSAndroid Build Coastguard Worker 
154*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load3],       %[cospi_6_64]   \n\t"
155*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load4],       %[cospi_26_64]  \n\t"
156*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result2],           $ac3,           31              \n\t"
157*fb1b10abSAndroid Build Coastguard Worker 
158*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
159*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
160*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
161*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
162*fb1b10abSAndroid Build Coastguard Worker 
163*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load1],       %[cospi_10_64]  \n\t"
164*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load2],       %[cospi_22_64]  \n\t"
165*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result3],           $ac1,           31              \n\t"
166*fb1b10abSAndroid Build Coastguard Worker 
167*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load3],       %[cospi_26_64]  \n\t"
168*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load4],       %[cospi_6_64]   \n\t"
169*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result4],           $ac2,           31              \n\t"
170*fb1b10abSAndroid Build Coastguard Worker 
171*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
172*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
173*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
174*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
175*fb1b10abSAndroid Build Coastguard Worker 
176*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load1],             %[result2],     %[result1]      \n\t"
177*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load2],             %[result4],     %[result3]      \n\t"
178*fb1b10abSAndroid Build Coastguard Worker 
179*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load1],       %[cospi_24_64]  \n\t"
180*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load2],       %[cospi_8_64]   \n\t"
181*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load2],       %[cospi_24_64]  \n\t"
182*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load1],       %[cospi_8_64]   \n\t"
183*fb1b10abSAndroid Build Coastguard Worker 
184*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_10],          $ac1,           31              \n\t"
185*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_13],          $ac3,           31              \n\t"
186*fb1b10abSAndroid Build Coastguard Worker         "add      %[step2_11],          %[result1],     %[result2]      \n\t"
187*fb1b10abSAndroid Build Coastguard Worker         "add      %[step2_12],          %[result4],     %[result3]      \n\t"
188*fb1b10abSAndroid Build Coastguard Worker 
189*fb1b10abSAndroid Build Coastguard Worker         : [load1] "=&r"(load1), [load2] "=&r"(load2), [load3] "=&r"(load3),
190*fb1b10abSAndroid Build Coastguard Worker           [load4] "=&r"(load4), [result1] "=&r"(result1),
191*fb1b10abSAndroid Build Coastguard Worker           [result2] "=&r"(result2), [result3] "=&r"(result3),
192*fb1b10abSAndroid Build Coastguard Worker           [result4] "=&r"(result4), [step2_10] "=r"(step2_10),
193*fb1b10abSAndroid Build Coastguard Worker           [step2_11] "=r"(step2_11), [step2_12] "=r"(step2_12),
194*fb1b10abSAndroid Build Coastguard Worker           [step2_13] "=r"(step2_13)
195*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [input] "r"(input),
196*fb1b10abSAndroid Build Coastguard Worker           [cospi_22_64] "r"(cospi_22_64), [cospi_10_64] "r"(cospi_10_64),
197*fb1b10abSAndroid Build Coastguard Worker           [cospi_6_64] "r"(cospi_6_64), [cospi_26_64] "r"(cospi_26_64),
198*fb1b10abSAndroid Build Coastguard Worker           [cospi_24_64] "r"(cospi_24_64), [cospi_8_64] "r"(cospi_8_64));
199*fb1b10abSAndroid Build Coastguard Worker 
200*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
201*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load5],             4(%[input])                     \n\t"
202*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load6],             28(%[input])                    \n\t"
203*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load7],             20(%[input])                    \n\t"
204*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load8],             12(%[input])                    \n\t"
205*fb1b10abSAndroid Build Coastguard Worker 
206*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
207*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
208*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
209*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
210*fb1b10abSAndroid Build Coastguard Worker 
211*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load5],       %[cospi_28_64]  \n\t"
212*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load6],       %[cospi_4_64]   \n\t"
213*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result1],           $ac1,           31              \n\t"
214*fb1b10abSAndroid Build Coastguard Worker 
215*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load7],       %[cospi_12_64]  \n\t"
216*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load8],       %[cospi_20_64]  \n\t"
217*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result2],           $ac3,           31              \n\t"
218*fb1b10abSAndroid Build Coastguard Worker 
219*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
220*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
221*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
222*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
223*fb1b10abSAndroid Build Coastguard Worker 
224*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load7],       %[cospi_20_64]  \n\t"
225*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load8],       %[cospi_12_64]  \n\t"
226*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result3],           $ac1,           31              \n\t"
227*fb1b10abSAndroid Build Coastguard Worker 
228*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load5],       %[cospi_4_64]   \n\t"
229*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load6],       %[cospi_28_64]  \n\t"
230*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result4],           $ac2,           31              \n\t"
231*fb1b10abSAndroid Build Coastguard Worker 
232*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
233*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
234*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
235*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
236*fb1b10abSAndroid Build Coastguard Worker 
237*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[result4],     %[result3]      \n\t"
238*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[result1]      \n\t"
239*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[result2]      \n\t"
240*fb1b10abSAndroid Build Coastguard Worker 
241*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[result1],     %[result2]      \n\t"
242*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[result3]      \n\t"
243*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[result4]      \n\t"
244*fb1b10abSAndroid Build Coastguard Worker 
245*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load5],       %[cospi_16_64]  \n\t"
246*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load6],       %[cospi_16_64]  \n\t"
247*fb1b10abSAndroid Build Coastguard Worker 
248*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_5],           $ac1,           31              \n\t"
249*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_6],           $ac3,           31              \n\t"
250*fb1b10abSAndroid Build Coastguard Worker         "add      %[step1_4],           %[result1],     %[result2]      \n\t"
251*fb1b10abSAndroid Build Coastguard Worker         "add      %[step1_7],           %[result4],     %[result3]      \n\t"
252*fb1b10abSAndroid Build Coastguard Worker 
253*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6), [load7] "=&r"(load7),
254*fb1b10abSAndroid Build Coastguard Worker           [load8] "=&r"(load8), [result1] "=&r"(result1),
255*fb1b10abSAndroid Build Coastguard Worker           [result2] "=&r"(result2), [result3] "=&r"(result3),
256*fb1b10abSAndroid Build Coastguard Worker           [result4] "=&r"(result4), [step1_4] "=r"(step1_4),
257*fb1b10abSAndroid Build Coastguard Worker           [step1_5] "=r"(step1_5), [step1_6] "=r"(step1_6),
258*fb1b10abSAndroid Build Coastguard Worker           [step1_7] "=r"(step1_7)
259*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [input] "r"(input),
260*fb1b10abSAndroid Build Coastguard Worker           [cospi_20_64] "r"(cospi_20_64), [cospi_12_64] "r"(cospi_12_64),
261*fb1b10abSAndroid Build Coastguard Worker           [cospi_4_64] "r"(cospi_4_64), [cospi_28_64] "r"(cospi_28_64),
262*fb1b10abSAndroid Build Coastguard Worker           [cospi_16_64] "r"(cospi_16_64));
263*fb1b10abSAndroid Build Coastguard Worker 
264*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
265*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac0                            \n\t"
266*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac0                            \n\t"
267*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
268*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
269*fb1b10abSAndroid Build Coastguard Worker 
270*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[step2_14],    %[step2_13]     \n\t"
271*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step2_9]      \n\t"
272*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step2_10]     \n\t"
273*fb1b10abSAndroid Build Coastguard Worker 
274*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac0,                 %[load5],       %[cospi_16_64]  \n\t"
275*fb1b10abSAndroid Build Coastguard Worker 
276*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[step2_14],    %[step2_13]     \n\t"
277*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step2_10]     \n\t"
278*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step2_9]      \n\t"
279*fb1b10abSAndroid Build Coastguard Worker 
280*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load6],       %[cospi_16_64]  \n\t"
281*fb1b10abSAndroid Build Coastguard Worker 
282*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
283*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
284*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
285*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
286*fb1b10abSAndroid Build Coastguard Worker 
287*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[step2_15],    %[step2_12]     \n\t"
288*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step2_8]      \n\t"
289*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step2_11]     \n\t"
290*fb1b10abSAndroid Build Coastguard Worker 
291*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load5],       %[cospi_16_64]  \n\t"
292*fb1b10abSAndroid Build Coastguard Worker 
293*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[step2_15],    %[step2_12]     \n\t"
294*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step2_11]     \n\t"
295*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step2_8]      \n\t"
296*fb1b10abSAndroid Build Coastguard Worker 
297*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load6],       %[cospi_16_64]  \n\t"
298*fb1b10abSAndroid Build Coastguard Worker 
299*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_10],          $ac0,           31              \n\t"
300*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_13],          $ac1,           31              \n\t"
301*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_11],          $ac2,           31              \n\t"
302*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_12],          $ac3,           31              \n\t"
303*fb1b10abSAndroid Build Coastguard Worker 
304*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6), [step1_10] "=r"(step1_10),
305*fb1b10abSAndroid Build Coastguard Worker           [step1_11] "=r"(step1_11), [step1_12] "=r"(step1_12),
306*fb1b10abSAndroid Build Coastguard Worker           [step1_13] "=r"(step1_13)
307*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [step2_14] "r"(step2_14),
308*fb1b10abSAndroid Build Coastguard Worker           [step2_13] "r"(step2_13), [step2_9] "r"(step2_9),
309*fb1b10abSAndroid Build Coastguard Worker           [step2_10] "r"(step2_10), [step2_15] "r"(step2_15),
310*fb1b10abSAndroid Build Coastguard Worker           [step2_12] "r"(step2_12), [step2_8] "r"(step2_8),
311*fb1b10abSAndroid Build Coastguard Worker           [step2_11] "r"(step2_11), [cospi_16_64] "r"(cospi_16_64));
312*fb1b10abSAndroid Build Coastguard Worker 
313*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
314*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[step1_0],     %[step1_7]      \n\t"
315*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step2_12]     \n\t"
316*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step2_15]     \n\t"
317*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[step1_1],     %[step1_6]      \n\t"
318*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step2_13]     \n\t"
319*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step2_14]     \n\t"
320*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load5],             0(%[output])                    \n\t"
321*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load6],             32(%[output])                   \n\t"
322*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[step1_1],     %[step1_6]      \n\t"
323*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step2_9]      \n\t"
324*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step2_10]     \n\t"
325*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[step1_0],     %[step1_7]      \n\t"
326*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step2_8]      \n\t"
327*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step2_11]     \n\t"
328*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load5],             192(%[output])                  \n\t"
329*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load6],             224(%[output])                  \n\t"
330*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[step1_0],     %[step1_7]      \n\t"
331*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step2_8]      \n\t"
332*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step2_11]     \n\t"
333*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[step1_1],     %[step1_6]      \n\t"
334*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step2_9]      \n\t"
335*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step2_10]     \n\t"
336*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load5],             256(%[output])                  \n\t"
337*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load6],             288(%[output])                  \n\t"
338*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[step1_1],     %[step1_6]      \n\t"
339*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step2_13]     \n\t"
340*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step2_14]     \n\t"
341*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[step1_0],     %[step1_7]      \n\t"
342*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step2_12]     \n\t"
343*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step2_15]     \n\t"
344*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load5],             448(%[output])                  \n\t"
345*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load6],             480(%[output])                  \n\t"
346*fb1b10abSAndroid Build Coastguard Worker 
347*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6)
348*fb1b10abSAndroid Build Coastguard Worker         : [output] "r"(output), [step1_0] "r"(step1_0), [step1_1] "r"(step1_1),
349*fb1b10abSAndroid Build Coastguard Worker           [step1_6] "r"(step1_6), [step1_7] "r"(step1_7),
350*fb1b10abSAndroid Build Coastguard Worker           [step2_8] "r"(step2_8), [step2_9] "r"(step2_9),
351*fb1b10abSAndroid Build Coastguard Worker           [step2_10] "r"(step2_10), [step2_11] "r"(step2_11),
352*fb1b10abSAndroid Build Coastguard Worker           [step2_12] "r"(step2_12), [step2_13] "r"(step2_13),
353*fb1b10abSAndroid Build Coastguard Worker           [step2_14] "r"(step2_14), [step2_15] "r"(step2_15));
354*fb1b10abSAndroid Build Coastguard Worker 
355*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
356*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[step1_2],     %[step1_5]      \n\t"
357*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step1_13]     \n\t"
358*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[step1_3],     %[step1_4]      \n\t"
359*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step1_12]     \n\t"
360*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load5],             64(%[output])                   \n\t"
361*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load6],             96(%[output])                   \n\t"
362*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[step1_3],     %[step1_4]      \n\t"
363*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step1_11]     \n\t"
364*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[step1_2],     %[step1_5]      \n\t"
365*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step1_10]     \n\t"
366*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load5],             128(%[output])                  \n\t"
367*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load6],             160(%[output])                  \n\t"
368*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[step1_2],     %[step1_5]      \n\t"
369*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step1_10]     \n\t"
370*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[step1_3],     %[step1_4]      \n\t"
371*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step1_11]     \n\t"
372*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load5],             320(%[output])                  \n\t"
373*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load6],             352(%[output])                  \n\t"
374*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[step1_3],     %[step1_4]      \n\t"
375*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step1_12]     \n\t"
376*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[step1_2],     %[step1_5]      \n\t"
377*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step1_13]     \n\t"
378*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load5],             384(%[output])                  \n\t"
379*fb1b10abSAndroid Build Coastguard Worker         "sh       %[load6],             416(%[output])                  \n\t"
380*fb1b10abSAndroid Build Coastguard Worker 
381*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6)
382*fb1b10abSAndroid Build Coastguard Worker         : [output] "r"(output), [step1_2] "r"(step1_2), [step1_3] "r"(step1_3),
383*fb1b10abSAndroid Build Coastguard Worker           [step1_4] "r"(step1_4), [step1_5] "r"(step1_5),
384*fb1b10abSAndroid Build Coastguard Worker           [step1_10] "r"(step1_10), [step1_11] "r"(step1_11),
385*fb1b10abSAndroid Build Coastguard Worker           [step1_12] "r"(step1_12), [step1_13] "r"(step1_13));
386*fb1b10abSAndroid Build Coastguard Worker 
387*fb1b10abSAndroid Build Coastguard Worker     input += 16;
388*fb1b10abSAndroid Build Coastguard Worker     output += 1;
389*fb1b10abSAndroid Build Coastguard Worker   }
390*fb1b10abSAndroid Build Coastguard Worker }
391*fb1b10abSAndroid Build Coastguard Worker 
idct16_cols_add_blk_dspr2(int16_t * input,uint8_t * dest,int stride)392*fb1b10abSAndroid Build Coastguard Worker void idct16_cols_add_blk_dspr2(int16_t *input, uint8_t *dest, int stride) {
393*fb1b10abSAndroid Build Coastguard Worker   int i;
394*fb1b10abSAndroid Build Coastguard Worker   int step1_0, step1_1, step1_2, step1_3, step1_4, step1_5, step1_6, step1_7;
395*fb1b10abSAndroid Build Coastguard Worker   int step1_8, step1_9, step1_10, step1_11;
396*fb1b10abSAndroid Build Coastguard Worker   int step1_12, step1_13, step1_14, step1_15;
397*fb1b10abSAndroid Build Coastguard Worker   int step2_0, step2_1, step2_2, step2_3;
398*fb1b10abSAndroid Build Coastguard Worker   int step2_8, step2_9, step2_10, step2_11;
399*fb1b10abSAndroid Build Coastguard Worker   int step2_12, step2_13, step2_14, step2_15;
400*fb1b10abSAndroid Build Coastguard Worker   int load1, load2, load3, load4, load5, load6, load7, load8;
401*fb1b10abSAndroid Build Coastguard Worker   int result1, result2, result3, result4;
402*fb1b10abSAndroid Build Coastguard Worker   const int const_2_power_13 = 8192;
403*fb1b10abSAndroid Build Coastguard Worker   uint8_t *dest_pix;
404*fb1b10abSAndroid Build Coastguard Worker   uint8_t *cm = vpx_ff_cropTbl;
405*fb1b10abSAndroid Build Coastguard Worker 
406*fb1b10abSAndroid Build Coastguard Worker   /* prefetch vpx_ff_cropTbl */
407*fb1b10abSAndroid Build Coastguard Worker   prefetch_load(vpx_ff_cropTbl);
408*fb1b10abSAndroid Build Coastguard Worker   prefetch_load(vpx_ff_cropTbl + 32);
409*fb1b10abSAndroid Build Coastguard Worker   prefetch_load(vpx_ff_cropTbl + 64);
410*fb1b10abSAndroid Build Coastguard Worker   prefetch_load(vpx_ff_cropTbl + 96);
411*fb1b10abSAndroid Build Coastguard Worker   prefetch_load(vpx_ff_cropTbl + 128);
412*fb1b10abSAndroid Build Coastguard Worker   prefetch_load(vpx_ff_cropTbl + 160);
413*fb1b10abSAndroid Build Coastguard Worker   prefetch_load(vpx_ff_cropTbl + 192);
414*fb1b10abSAndroid Build Coastguard Worker   prefetch_load(vpx_ff_cropTbl + 224);
415*fb1b10abSAndroid Build Coastguard Worker 
416*fb1b10abSAndroid Build Coastguard Worker   for (i = 0; i < 16; ++i) {
417*fb1b10abSAndroid Build Coastguard Worker     dest_pix = (dest + i);
418*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
419*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load1],              0(%[input])                    \n\t"
420*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load2],             16(%[input])                    \n\t"
421*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load3],              8(%[input])                    \n\t"
422*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load4],             24(%[input])                    \n\t"
423*fb1b10abSAndroid Build Coastguard Worker 
424*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
425*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
426*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
427*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
428*fb1b10abSAndroid Build Coastguard Worker         "add      %[result1],           %[load1],       %[load2]        \n\t"
429*fb1b10abSAndroid Build Coastguard Worker         "sub      %[result2],           %[load1],       %[load2]        \n\t"
430*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[result1],     %[cospi_16_64]  \n\t"
431*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[result2],     %[cospi_16_64]  \n\t"
432*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_0],           $ac1,           31              \n\t"
433*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_1],           $ac2,           31              \n\t"
434*fb1b10abSAndroid Build Coastguard Worker 
435*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
436*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
437*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load3],       %[cospi_24_64]  \n\t"
438*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load4],       %[cospi_8_64]   \n\t"
439*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_2],           $ac3,           31              \n\t"
440*fb1b10abSAndroid Build Coastguard Worker 
441*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
442*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
443*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load3],       %[cospi_8_64]   \n\t"
444*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load4],       %[cospi_24_64]  \n\t"
445*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_3],           $ac1,           31              \n\t"
446*fb1b10abSAndroid Build Coastguard Worker 
447*fb1b10abSAndroid Build Coastguard Worker         "add      %[step1_0],           %[step2_0],     %[step2_3]      \n\t"
448*fb1b10abSAndroid Build Coastguard Worker         "add      %[step1_1],           %[step2_1],     %[step2_2]      \n\t"
449*fb1b10abSAndroid Build Coastguard Worker         "sub      %[step1_2],           %[step2_1],     %[step2_2]      \n\t"
450*fb1b10abSAndroid Build Coastguard Worker         "sub      %[step1_3],           %[step2_0],     %[step2_3]      \n\t"
451*fb1b10abSAndroid Build Coastguard Worker 
452*fb1b10abSAndroid Build Coastguard Worker         : [load1] "=&r"(load1), [load2] "=&r"(load2), [load3] "=&r"(load3),
453*fb1b10abSAndroid Build Coastguard Worker           [load4] "=&r"(load4), [result1] "=&r"(result1),
454*fb1b10abSAndroid Build Coastguard Worker           [result2] "=&r"(result2), [step2_0] "=&r"(step2_0),
455*fb1b10abSAndroid Build Coastguard Worker           [step2_1] "=&r"(step2_1), [step2_2] "=&r"(step2_2),
456*fb1b10abSAndroid Build Coastguard Worker           [step2_3] "=&r"(step2_3), [step1_0] "=r"(step1_0),
457*fb1b10abSAndroid Build Coastguard Worker           [step1_1] "=r"(step1_1), [step1_2] "=r"(step1_2),
458*fb1b10abSAndroid Build Coastguard Worker           [step1_3] "=r"(step1_3)
459*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [input] "r"(input),
460*fb1b10abSAndroid Build Coastguard Worker           [cospi_24_64] "r"(cospi_24_64), [cospi_8_64] "r"(cospi_8_64),
461*fb1b10abSAndroid Build Coastguard Worker           [cospi_16_64] "r"(cospi_16_64));
462*fb1b10abSAndroid Build Coastguard Worker 
463*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
464*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load5],             2(%[input])                     \n\t"
465*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load6],             30(%[input])                    \n\t"
466*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load7],             18(%[input])                    \n\t"
467*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load8],             14(%[input])                    \n\t"
468*fb1b10abSAndroid Build Coastguard Worker 
469*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
470*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
471*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
472*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
473*fb1b10abSAndroid Build Coastguard Worker 
474*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load5],       %[cospi_30_64]  \n\t"
475*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load6],       %[cospi_2_64]   \n\t"
476*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result1],           $ac1,           31              \n\t"
477*fb1b10abSAndroid Build Coastguard Worker 
478*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load7],       %[cospi_14_64]  \n\t"
479*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load8],       %[cospi_18_64]  \n\t"
480*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result2],           $ac3,           31              \n\t"
481*fb1b10abSAndroid Build Coastguard Worker 
482*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
483*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
484*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
485*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
486*fb1b10abSAndroid Build Coastguard Worker 
487*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load7],       %[cospi_18_64]  \n\t"
488*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load8],       %[cospi_14_64]  \n\t"
489*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result3],           $ac1,           31              \n\t"
490*fb1b10abSAndroid Build Coastguard Worker 
491*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load5],        %[cospi_2_64]  \n\t"
492*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load6],        %[cospi_30_64] \n\t"
493*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result4],           $ac2,            31             \n\t"
494*fb1b10abSAndroid Build Coastguard Worker 
495*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[result1],     %[result2]      \n\t"
496*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[result4],     %[result3]      \n\t"
497*fb1b10abSAndroid Build Coastguard Worker 
498*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
499*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
500*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
501*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
502*fb1b10abSAndroid Build Coastguard Worker 
503*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load6],       %[cospi_24_64]  \n\t"
504*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load5],       %[cospi_8_64]   \n\t"
505*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load5],       %[cospi_24_64]  \n\t"
506*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load6],       %[cospi_8_64]   \n\t"
507*fb1b10abSAndroid Build Coastguard Worker 
508*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_9],           $ac1,           31              \n\t"
509*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_14],          $ac3,           31              \n\t"
510*fb1b10abSAndroid Build Coastguard Worker         "add      %[step2_8],           %[result1],     %[result2]      \n\t"
511*fb1b10abSAndroid Build Coastguard Worker         "add      %[step2_15],          %[result4],     %[result3]      \n\t"
512*fb1b10abSAndroid Build Coastguard Worker 
513*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6), [load7] "=&r"(load7),
514*fb1b10abSAndroid Build Coastguard Worker           [load8] "=&r"(load8), [result1] "=&r"(result1),
515*fb1b10abSAndroid Build Coastguard Worker           [result2] "=&r"(result2), [result3] "=&r"(result3),
516*fb1b10abSAndroid Build Coastguard Worker           [result4] "=&r"(result4), [step2_8] "=r"(step2_8),
517*fb1b10abSAndroid Build Coastguard Worker           [step2_15] "=r"(step2_15), [step2_9] "=r"(step2_9),
518*fb1b10abSAndroid Build Coastguard Worker           [step2_14] "=r"(step2_14)
519*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [input] "r"(input),
520*fb1b10abSAndroid Build Coastguard Worker           [cospi_30_64] "r"(cospi_30_64), [cospi_2_64] "r"(cospi_2_64),
521*fb1b10abSAndroid Build Coastguard Worker           [cospi_14_64] "r"(cospi_14_64), [cospi_18_64] "r"(cospi_18_64),
522*fb1b10abSAndroid Build Coastguard Worker           [cospi_24_64] "r"(cospi_24_64), [cospi_8_64] "r"(cospi_8_64));
523*fb1b10abSAndroid Build Coastguard Worker 
524*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
525*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load1],             10(%[input])                    \n\t"
526*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load2],             22(%[input])                    \n\t"
527*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load3],             26(%[input])                    \n\t"
528*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load4],             6(%[input])                     \n\t"
529*fb1b10abSAndroid Build Coastguard Worker 
530*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
531*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
532*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
533*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
534*fb1b10abSAndroid Build Coastguard Worker 
535*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load1],    %[cospi_22_64]     \n\t"
536*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load2],    %[cospi_10_64]     \n\t"
537*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result1],           $ac1,        31                 \n\t"
538*fb1b10abSAndroid Build Coastguard Worker 
539*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load3],    %[cospi_6_64]      \n\t"
540*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load4],    %[cospi_26_64]     \n\t"
541*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result2],           $ac3,        31                 \n\t"
542*fb1b10abSAndroid Build Coastguard Worker 
543*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
544*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
545*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
546*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
547*fb1b10abSAndroid Build Coastguard Worker 
548*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load1],    %[cospi_10_64]     \n\t"
549*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load2],    %[cospi_22_64]     \n\t"
550*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result3],           $ac1,        31                 \n\t"
551*fb1b10abSAndroid Build Coastguard Worker 
552*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load3],    %[cospi_26_64]     \n\t"
553*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load4],    %[cospi_6_64]      \n\t"
554*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result4],           $ac2,        31                 \n\t"
555*fb1b10abSAndroid Build Coastguard Worker 
556*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
557*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
558*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
559*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
560*fb1b10abSAndroid Build Coastguard Worker 
561*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load1],             %[result2],     %[result1]      \n\t"
562*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load2],             %[result4],     %[result3]      \n\t"
563*fb1b10abSAndroid Build Coastguard Worker 
564*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load1],       %[cospi_24_64]  \n\t"
565*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load2],       %[cospi_8_64]   \n\t"
566*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load2],       %[cospi_24_64]  \n\t"
567*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load1],       %[cospi_8_64]   \n\t"
568*fb1b10abSAndroid Build Coastguard Worker 
569*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_10],          $ac1,           31              \n\t"
570*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step2_13],          $ac3,           31              \n\t"
571*fb1b10abSAndroid Build Coastguard Worker         "add      %[step2_11],          %[result1],     %[result2]      \n\t"
572*fb1b10abSAndroid Build Coastguard Worker         "add      %[step2_12],          %[result4],     %[result3]      \n\t"
573*fb1b10abSAndroid Build Coastguard Worker 
574*fb1b10abSAndroid Build Coastguard Worker         : [load1] "=&r"(load1), [load2] "=&r"(load2), [load3] "=&r"(load3),
575*fb1b10abSAndroid Build Coastguard Worker           [load4] "=&r"(load4), [result1] "=&r"(result1),
576*fb1b10abSAndroid Build Coastguard Worker           [result2] "=&r"(result2), [result3] "=&r"(result3),
577*fb1b10abSAndroid Build Coastguard Worker           [result4] "=&r"(result4), [step2_10] "=r"(step2_10),
578*fb1b10abSAndroid Build Coastguard Worker           [step2_11] "=r"(step2_11), [step2_12] "=r"(step2_12),
579*fb1b10abSAndroid Build Coastguard Worker           [step2_13] "=r"(step2_13)
580*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [input] "r"(input),
581*fb1b10abSAndroid Build Coastguard Worker           [cospi_22_64] "r"(cospi_22_64), [cospi_10_64] "r"(cospi_10_64),
582*fb1b10abSAndroid Build Coastguard Worker           [cospi_6_64] "r"(cospi_6_64), [cospi_26_64] "r"(cospi_26_64),
583*fb1b10abSAndroid Build Coastguard Worker           [cospi_24_64] "r"(cospi_24_64), [cospi_8_64] "r"(cospi_8_64));
584*fb1b10abSAndroid Build Coastguard Worker 
585*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
586*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load5],             4(%[input])                   \n\t"
587*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load6],             28(%[input])                  \n\t"
588*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load7],             20(%[input])                  \n\t"
589*fb1b10abSAndroid Build Coastguard Worker         "lh       %[load8],             12(%[input])                  \n\t"
590*fb1b10abSAndroid Build Coastguard Worker 
591*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                          \n\t"
592*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                          \n\t"
593*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                          \n\t"
594*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                          \n\t"
595*fb1b10abSAndroid Build Coastguard Worker 
596*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load5],    %[cospi_28_64]   \n\t"
597*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac1,                 %[load6],    %[cospi_4_64]    \n\t"
598*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result1],           $ac1,        31               \n\t"
599*fb1b10abSAndroid Build Coastguard Worker 
600*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load7],    %[cospi_12_64]   \n\t"
601*fb1b10abSAndroid Build Coastguard Worker         "msub     $ac3,                 %[load8],    %[cospi_20_64]   \n\t"
602*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result2],           $ac3,        31               \n\t"
603*fb1b10abSAndroid Build Coastguard Worker 
604*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                          \n\t"
605*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                          \n\t"
606*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                          \n\t"
607*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                          \n\t"
608*fb1b10abSAndroid Build Coastguard Worker 
609*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load7],    %[cospi_20_64]   \n\t"
610*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load8],    %[cospi_12_64]   \n\t"
611*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result3],           $ac1,        31               \n\t"
612*fb1b10abSAndroid Build Coastguard Worker 
613*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load5],    %[cospi_4_64]    \n\t"
614*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load6],    %[cospi_28_64]   \n\t"
615*fb1b10abSAndroid Build Coastguard Worker         "extp     %[result4],           $ac2,        31               \n\t"
616*fb1b10abSAndroid Build Coastguard Worker 
617*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
618*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
619*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
620*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
621*fb1b10abSAndroid Build Coastguard Worker 
622*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[result4],     %[result3]      \n\t"
623*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[result1]      \n\t"
624*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[result2]      \n\t"
625*fb1b10abSAndroid Build Coastguard Worker 
626*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[result1],     %[result2]      \n\t"
627*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[result3]      \n\t"
628*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[result4]      \n\t"
629*fb1b10abSAndroid Build Coastguard Worker 
630*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load5],       %[cospi_16_64]  \n\t"
631*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load6],       %[cospi_16_64]  \n\t"
632*fb1b10abSAndroid Build Coastguard Worker 
633*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_5],           $ac1,           31              \n\t"
634*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_6],           $ac3,           31              \n\t"
635*fb1b10abSAndroid Build Coastguard Worker 
636*fb1b10abSAndroid Build Coastguard Worker         "add      %[step1_4],           %[result1],     %[result2]      \n\t"
637*fb1b10abSAndroid Build Coastguard Worker         "add      %[step1_7],           %[result4],     %[result3]      \n\t"
638*fb1b10abSAndroid Build Coastguard Worker 
639*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6), [load7] "=&r"(load7),
640*fb1b10abSAndroid Build Coastguard Worker           [load8] "=&r"(load8), [result1] "=&r"(result1),
641*fb1b10abSAndroid Build Coastguard Worker           [result2] "=&r"(result2), [result3] "=&r"(result3),
642*fb1b10abSAndroid Build Coastguard Worker           [result4] "=&r"(result4), [step1_4] "=r"(step1_4),
643*fb1b10abSAndroid Build Coastguard Worker           [step1_5] "=r"(step1_5), [step1_6] "=r"(step1_6),
644*fb1b10abSAndroid Build Coastguard Worker           [step1_7] "=r"(step1_7)
645*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [input] "r"(input),
646*fb1b10abSAndroid Build Coastguard Worker           [cospi_20_64] "r"(cospi_20_64), [cospi_12_64] "r"(cospi_12_64),
647*fb1b10abSAndroid Build Coastguard Worker           [cospi_4_64] "r"(cospi_4_64), [cospi_28_64] "r"(cospi_28_64),
648*fb1b10abSAndroid Build Coastguard Worker           [cospi_16_64] "r"(cospi_16_64));
649*fb1b10abSAndroid Build Coastguard Worker 
650*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
651*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac0                            \n\t"
652*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac0                            \n\t"
653*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac1                            \n\t"
654*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac1                            \n\t"
655*fb1b10abSAndroid Build Coastguard Worker 
656*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[step2_14],    %[step2_13]     \n\t"
657*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step2_9]      \n\t"
658*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step2_10]     \n\t"
659*fb1b10abSAndroid Build Coastguard Worker 
660*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac0,                 %[load5],       %[cospi_16_64]  \n\t"
661*fb1b10abSAndroid Build Coastguard Worker 
662*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[step2_14],    %[step2_13]     \n\t"
663*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step2_10]     \n\t"
664*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step2_9]      \n\t"
665*fb1b10abSAndroid Build Coastguard Worker 
666*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac1,                 %[load6],       %[cospi_16_64]  \n\t"
667*fb1b10abSAndroid Build Coastguard Worker 
668*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac2                            \n\t"
669*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac2                            \n\t"
670*fb1b10abSAndroid Build Coastguard Worker         "mtlo     %[const_2_power_13],  $ac3                            \n\t"
671*fb1b10abSAndroid Build Coastguard Worker         "mthi     $zero,                $ac3                            \n\t"
672*fb1b10abSAndroid Build Coastguard Worker 
673*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[step2_15],    %[step2_12]     \n\t"
674*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],             %[load5],       %[step2_8]      \n\t"
675*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],             %[load5],       %[step2_11]     \n\t"
676*fb1b10abSAndroid Build Coastguard Worker 
677*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac2,                 %[load5],       %[cospi_16_64]  \n\t"
678*fb1b10abSAndroid Build Coastguard Worker 
679*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[step2_15],    %[step2_12]     \n\t"
680*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],             %[load6],       %[step2_11]     \n\t"
681*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],             %[load6],       %[step2_8]      \n\t"
682*fb1b10abSAndroid Build Coastguard Worker 
683*fb1b10abSAndroid Build Coastguard Worker         "madd     $ac3,                 %[load6],       %[cospi_16_64]  \n\t"
684*fb1b10abSAndroid Build Coastguard Worker 
685*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_10],          $ac0,           31              \n\t"
686*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_13],          $ac1,           31              \n\t"
687*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_11],          $ac2,           31              \n\t"
688*fb1b10abSAndroid Build Coastguard Worker         "extp     %[step1_12],          $ac3,           31              \n\t"
689*fb1b10abSAndroid Build Coastguard Worker 
690*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6), [step1_10] "=r"(step1_10),
691*fb1b10abSAndroid Build Coastguard Worker           [step1_11] "=r"(step1_11), [step1_12] "=r"(step1_12),
692*fb1b10abSAndroid Build Coastguard Worker           [step1_13] "=r"(step1_13)
693*fb1b10abSAndroid Build Coastguard Worker         : [const_2_power_13] "r"(const_2_power_13), [step2_14] "r"(step2_14),
694*fb1b10abSAndroid Build Coastguard Worker           [step2_13] "r"(step2_13), [step2_9] "r"(step2_9),
695*fb1b10abSAndroid Build Coastguard Worker           [step2_10] "r"(step2_10), [step2_15] "r"(step2_15),
696*fb1b10abSAndroid Build Coastguard Worker           [step2_12] "r"(step2_12), [step2_8] "r"(step2_8),
697*fb1b10abSAndroid Build Coastguard Worker           [step2_11] "r"(step2_11), [cospi_16_64] "r"(cospi_16_64));
698*fb1b10abSAndroid Build Coastguard Worker 
699*fb1b10abSAndroid Build Coastguard Worker     step1_8 = step2_8 + step2_11;
700*fb1b10abSAndroid Build Coastguard Worker     step1_9 = step2_9 + step2_10;
701*fb1b10abSAndroid Build Coastguard Worker     step1_14 = step2_13 + step2_14;
702*fb1b10abSAndroid Build Coastguard Worker     step1_15 = step2_12 + step2_15;
703*fb1b10abSAndroid Build Coastguard Worker 
704*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
705*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load7],         0(%[dest_pix])                      \n\t"
706*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],         %[step1_0],         %[step1_7]      \n\t"
707*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],         %[load5],           %[step1_15]     \n\t"
708*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load5],         %[load5],           32              \n\t"
709*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load5],         %[load5],           6               \n\t"
710*fb1b10abSAndroid Build Coastguard Worker         "add      %[load7],         %[load7],           %[load5]        \n\t"
711*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load5],         %[load7](%[cm])                     \n\t"
712*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],         %[step1_1],         %[step1_6]      \n\t"
713*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],         %[load6],           %[step1_14]     \n\t"
714*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load5],         0(%[dest_pix])                      \n\t"
715*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
716*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load8],         0(%[dest_pix])                      \n\t"
717*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load6],         %[load6],           32              \n\t"
718*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load6],         %[load6],           6               \n\t"
719*fb1b10abSAndroid Build Coastguard Worker         "add      %[load8],         %[load8],           %[load6]        \n\t"
720*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load6],         %[load8](%[cm])                     \n\t"
721*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load6],         0(%[dest_pix])                      \n\t"
722*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
723*fb1b10abSAndroid Build Coastguard Worker 
724*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load7],         0(%[dest_pix])                      \n\t"
725*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],         %[step1_2],         %[step1_5]      \n\t"
726*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],         %[load5],           %[step1_13]     \n\t"
727*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load5],         %[load5],           32              \n\t"
728*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load5],         %[load5],           6               \n\t"
729*fb1b10abSAndroid Build Coastguard Worker         "add      %[load7],         %[load7],           %[load5]        \n\t"
730*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load5],         %[load7](%[cm])                     \n\t"
731*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],         %[step1_3],         %[step1_4]      \n\t"
732*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],         %[load6],           %[step1_12]     \n\t"
733*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load5],         0(%[dest_pix])                      \n\t"
734*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
735*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load8],         0(%[dest_pix])                      \n\t"
736*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load6],         %[load6],           32              \n\t"
737*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load6],         %[load6],           6               \n\t"
738*fb1b10abSAndroid Build Coastguard Worker         "add      %[load8],         %[load8],           %[load6]        \n\t"
739*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load6],         %[load8](%[cm])                     \n\t"
740*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load6],         0(%[dest_pix])                      \n\t"
741*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
742*fb1b10abSAndroid Build Coastguard Worker 
743*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load7],         0(%[dest_pix])                      \n\t"
744*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],         %[step1_3],         %[step1_4]      \n\t"
745*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],         %[load5],           %[step1_11]     \n\t"
746*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load5],         %[load5],           32              \n\t"
747*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load5],         %[load5],           6               \n\t"
748*fb1b10abSAndroid Build Coastguard Worker         "add      %[load7],         %[load7],           %[load5]        \n\t"
749*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load5],         %[load7](%[cm])                     \n\t"
750*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],         %[step1_2],         %[step1_5]      \n\t"
751*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],         %[load6],           %[step1_10]     \n\t"
752*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load5],         0(%[dest_pix])                      \n\t"
753*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
754*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load8],         0(%[dest_pix])                      \n\t"
755*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load6],         %[load6],           32              \n\t"
756*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load6],         %[load6],           6               \n\t"
757*fb1b10abSAndroid Build Coastguard Worker         "add      %[load8],         %[load8],           %[load6]        \n\t"
758*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load6],         %[load8](%[cm])                     \n\t"
759*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load6],         0(%[dest_pix])                      \n\t"
760*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
761*fb1b10abSAndroid Build Coastguard Worker 
762*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],         %[step1_1],         %[step1_6]      \n\t"
763*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load7],         0(%[dest_pix])                      \n\t"
764*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],         %[load5],           %[step1_9]      \n\t"
765*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load5],         %[load5],           32              \n\t"
766*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load5],         %[load5],           6               \n\t"
767*fb1b10abSAndroid Build Coastguard Worker         "add      %[load7],         %[load7],           %[load5]        \n\t"
768*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load5],         %[load7](%[cm])                     \n\t"
769*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],         %[step1_0],         %[step1_7]      \n\t"
770*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],         %[load6],           %[step1_8]      \n\t"
771*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load5],         0(%[dest_pix])                      \n\t"
772*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
773*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load8],         0(%[dest_pix])                      \n\t"
774*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load6],         %[load6],           32              \n\t"
775*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load6],         %[load6],           6               \n\t"
776*fb1b10abSAndroid Build Coastguard Worker         "add      %[load8],         %[load8],           %[load6]        \n\t"
777*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load6],         %[load8](%[cm])                     \n\t"
778*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load6],         0(%[dest_pix])                      \n\t"
779*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
780*fb1b10abSAndroid Build Coastguard Worker 
781*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load7],         0(%[dest_pix])                      \n\t"
782*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],         %[step1_0],         %[step1_7]      \n\t"
783*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],         %[load5],           %[step1_8]      \n\t"
784*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load5],         %[load5],           32              \n\t"
785*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load5],         %[load5],           6               \n\t"
786*fb1b10abSAndroid Build Coastguard Worker         "add      %[load7],         %[load7],           %[load5]        \n\t"
787*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load5],         %[load7](%[cm])                     \n\t"
788*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],         %[step1_1],         %[step1_6]      \n\t"
789*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],         %[load6],           %[step1_9]      \n\t"
790*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load5],         0(%[dest_pix])                      \n\t"
791*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
792*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load8],         0(%[dest_pix])                      \n\t"
793*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load6],         %[load6],           32              \n\t"
794*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load6],         %[load6],           6               \n\t"
795*fb1b10abSAndroid Build Coastguard Worker         "add      %[load8],         %[load8],           %[load6]        \n\t"
796*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load6],         %[load8](%[cm])                     \n\t"
797*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load6],         0(%[dest_pix])                      \n\t"
798*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
799*fb1b10abSAndroid Build Coastguard Worker 
800*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load7],         0(%[dest_pix])                      \n\t"
801*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],         %[step1_2],         %[step1_5]      \n\t"
802*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],         %[load5],           %[step1_10]     \n\t"
803*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load5],         %[load5],           32              \n\t"
804*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load5],         %[load5],           6               \n\t"
805*fb1b10abSAndroid Build Coastguard Worker         "add      %[load7],         %[load7],           %[load5]        \n\t"
806*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load5],         %[load7](%[cm])                     \n\t"
807*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],         %[step1_3],         %[step1_4]      \n\t"
808*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],         %[load6],           %[step1_11]     \n\t"
809*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load5],         0(%[dest_pix])                      \n\t"
810*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
811*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load8],         0(%[dest_pix])                      \n\t"
812*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load6],         %[load6],           32              \n\t"
813*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load6],         %[load6],           6               \n\t"
814*fb1b10abSAndroid Build Coastguard Worker         "add      %[load8],         %[load8],           %[load6]        \n\t"
815*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load6],         %[load8](%[cm])                     \n\t"
816*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load6],         0(%[dest_pix])                      \n\t"
817*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
818*fb1b10abSAndroid Build Coastguard Worker 
819*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load7],         0(%[dest_pix])                      \n\t"
820*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],         %[step1_3],         %[step1_4]      \n\t"
821*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],         %[load5],           %[step1_12]     \n\t"
822*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load5],         %[load5],           32              \n\t"
823*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load5],         %[load5],           6               \n\t"
824*fb1b10abSAndroid Build Coastguard Worker         "add      %[load7],         %[load7],           %[load5]        \n\t"
825*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load5],         %[load7](%[cm])                     \n\t"
826*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],         %[step1_2],         %[step1_5]      \n\t"
827*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],         %[load6],           %[step1_13]     \n\t"
828*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load5],         0(%[dest_pix])                      \n\t"
829*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
830*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load8],         0(%[dest_pix])                      \n\t"
831*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load6],         %[load6],           32              \n\t"
832*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load6],         %[load6],           6               \n\t"
833*fb1b10abSAndroid Build Coastguard Worker         "add      %[load8],         %[load8],           %[load6]        \n\t"
834*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load6],         %[load8](%[cm])                     \n\t"
835*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load6],         0(%[dest_pix])                      \n\t"
836*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
837*fb1b10abSAndroid Build Coastguard Worker 
838*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load7],         0(%[dest_pix])                      \n\t"
839*fb1b10abSAndroid Build Coastguard Worker         "add      %[load5],         %[step1_1],         %[step1_6]      \n\t"
840*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load5],         %[load5],           %[step1_14]     \n\t"
841*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load5],         %[load5],           32              \n\t"
842*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load5],         %[load5],           6               \n\t"
843*fb1b10abSAndroid Build Coastguard Worker         "add      %[load7],         %[load7],           %[load5]        \n\t"
844*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load5],         %[load7](%[cm])                     \n\t"
845*fb1b10abSAndroid Build Coastguard Worker         "add      %[load6],         %[step1_0],         %[step1_7]      \n\t"
846*fb1b10abSAndroid Build Coastguard Worker         "sub      %[load6],         %[load6],           %[step1_15]     \n\t"
847*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load5],         0(%[dest_pix])                      \n\t"
848*fb1b10abSAndroid Build Coastguard Worker         "addu     %[dest_pix],      %[dest_pix],        %[stride]       \n\t"
849*fb1b10abSAndroid Build Coastguard Worker         "lbu      %[load8],         0(%[dest_pix])                      \n\t"
850*fb1b10abSAndroid Build Coastguard Worker         "addi     %[load6],         %[load6],           32              \n\t"
851*fb1b10abSAndroid Build Coastguard Worker         "sra      %[load6],         %[load6],           6               \n\t"
852*fb1b10abSAndroid Build Coastguard Worker         "add      %[load8],         %[load8],           %[load6]        \n\t"
853*fb1b10abSAndroid Build Coastguard Worker         "lbux     %[load6],         %[load8](%[cm])                     \n\t"
854*fb1b10abSAndroid Build Coastguard Worker         "sb       %[load6],         0(%[dest_pix])                      \n\t"
855*fb1b10abSAndroid Build Coastguard Worker 
856*fb1b10abSAndroid Build Coastguard Worker         : [load5] "=&r"(load5), [load6] "=&r"(load6), [load7] "=&r"(load7),
857*fb1b10abSAndroid Build Coastguard Worker           [load8] "=&r"(load8), [dest_pix] "+r"(dest_pix)
858*fb1b10abSAndroid Build Coastguard Worker         :
859*fb1b10abSAndroid Build Coastguard Worker         [cm] "r"(cm), [stride] "r"(stride), [step1_0] "r"(step1_0),
860*fb1b10abSAndroid Build Coastguard Worker         [step1_1] "r"(step1_1), [step1_2] "r"(step1_2), [step1_3] "r"(step1_3),
861*fb1b10abSAndroid Build Coastguard Worker         [step1_4] "r"(step1_4), [step1_5] "r"(step1_5), [step1_6] "r"(step1_6),
862*fb1b10abSAndroid Build Coastguard Worker         [step1_7] "r"(step1_7), [step1_8] "r"(step1_8), [step1_9] "r"(step1_9),
863*fb1b10abSAndroid Build Coastguard Worker         [step1_10] "r"(step1_10), [step1_11] "r"(step1_11),
864*fb1b10abSAndroid Build Coastguard Worker         [step1_12] "r"(step1_12), [step1_13] "r"(step1_13),
865*fb1b10abSAndroid Build Coastguard Worker         [step1_14] "r"(step1_14), [step1_15] "r"(step1_15));
866*fb1b10abSAndroid Build Coastguard Worker 
867*fb1b10abSAndroid Build Coastguard Worker     input += 16;
868*fb1b10abSAndroid Build Coastguard Worker   }
869*fb1b10abSAndroid Build Coastguard Worker }
870*fb1b10abSAndroid Build Coastguard Worker 
vpx_idct16x16_256_add_dspr2(const int16_t * input,uint8_t * dest,int stride)871*fb1b10abSAndroid Build Coastguard Worker void vpx_idct16x16_256_add_dspr2(const int16_t *input, uint8_t *dest,
872*fb1b10abSAndroid Build Coastguard Worker                                  int stride) {
873*fb1b10abSAndroid Build Coastguard Worker   DECLARE_ALIGNED(32, int16_t, out[16 * 16]);
874*fb1b10abSAndroid Build Coastguard Worker   uint32_t pos = 45;
875*fb1b10abSAndroid Build Coastguard Worker 
876*fb1b10abSAndroid Build Coastguard Worker   /* bit positon for extract from acc */
877*fb1b10abSAndroid Build Coastguard Worker   __asm__ __volatile__("wrdsp    %[pos],    1    \n\t" : : [pos] "r"(pos));
878*fb1b10abSAndroid Build Coastguard Worker 
879*fb1b10abSAndroid Build Coastguard Worker   // First transform rows
880*fb1b10abSAndroid Build Coastguard Worker   idct16_rows_dspr2(input, out, 16);
881*fb1b10abSAndroid Build Coastguard Worker 
882*fb1b10abSAndroid Build Coastguard Worker   // Then transform columns and add to dest
883*fb1b10abSAndroid Build Coastguard Worker   idct16_cols_add_blk_dspr2(out, dest, stride);
884*fb1b10abSAndroid Build Coastguard Worker }
885*fb1b10abSAndroid Build Coastguard Worker 
vpx_idct16x16_10_add_dspr2(const int16_t * input,uint8_t * dest,int stride)886*fb1b10abSAndroid Build Coastguard Worker void vpx_idct16x16_10_add_dspr2(const int16_t *input, uint8_t *dest,
887*fb1b10abSAndroid Build Coastguard Worker                                 int stride) {
888*fb1b10abSAndroid Build Coastguard Worker   DECLARE_ALIGNED(32, int16_t, out[16 * 16]);
889*fb1b10abSAndroid Build Coastguard Worker   int16_t *outptr = out;
890*fb1b10abSAndroid Build Coastguard Worker   uint32_t i;
891*fb1b10abSAndroid Build Coastguard Worker   uint32_t pos = 45;
892*fb1b10abSAndroid Build Coastguard Worker 
893*fb1b10abSAndroid Build Coastguard Worker   /* bit positon for extract from acc */
894*fb1b10abSAndroid Build Coastguard Worker   __asm__ __volatile__("wrdsp    %[pos],    1    \n\t" : : [pos] "r"(pos));
895*fb1b10abSAndroid Build Coastguard Worker 
896*fb1b10abSAndroid Build Coastguard Worker   // First transform rows. Since all non-zero dct coefficients are in
897*fb1b10abSAndroid Build Coastguard Worker   // upper-left 4x4 area, we only need to calculate first 4 rows here.
898*fb1b10abSAndroid Build Coastguard Worker   idct16_rows_dspr2(input, outptr, 4);
899*fb1b10abSAndroid Build Coastguard Worker 
900*fb1b10abSAndroid Build Coastguard Worker   outptr += 4;
901*fb1b10abSAndroid Build Coastguard Worker   for (i = 0; i < 6; ++i) {
902*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
903*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,    0(%[outptr])     \n\t"
904*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,   32(%[outptr])     \n\t"
905*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,   64(%[outptr])     \n\t"
906*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,   96(%[outptr])     \n\t"
907*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  128(%[outptr])     \n\t"
908*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  160(%[outptr])     \n\t"
909*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  192(%[outptr])     \n\t"
910*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  224(%[outptr])     \n\t"
911*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  256(%[outptr])     \n\t"
912*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  288(%[outptr])     \n\t"
913*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  320(%[outptr])     \n\t"
914*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  352(%[outptr])     \n\t"
915*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  384(%[outptr])     \n\t"
916*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  416(%[outptr])     \n\t"
917*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  448(%[outptr])     \n\t"
918*fb1b10abSAndroid Build Coastguard Worker         "sw     $zero,  480(%[outptr])     \n\t"
919*fb1b10abSAndroid Build Coastguard Worker 
920*fb1b10abSAndroid Build Coastguard Worker         :
921*fb1b10abSAndroid Build Coastguard Worker         : [outptr] "r"(outptr));
922*fb1b10abSAndroid Build Coastguard Worker 
923*fb1b10abSAndroid Build Coastguard Worker     outptr += 2;
924*fb1b10abSAndroid Build Coastguard Worker   }
925*fb1b10abSAndroid Build Coastguard Worker 
926*fb1b10abSAndroid Build Coastguard Worker   // Then transform columns
927*fb1b10abSAndroid Build Coastguard Worker   idct16_cols_add_blk_dspr2(out, dest, stride);
928*fb1b10abSAndroid Build Coastguard Worker }
929*fb1b10abSAndroid Build Coastguard Worker 
vpx_idct16x16_1_add_dspr2(const int16_t * input,uint8_t * dest,int stride)930*fb1b10abSAndroid Build Coastguard Worker void vpx_idct16x16_1_add_dspr2(const int16_t *input, uint8_t *dest,
931*fb1b10abSAndroid Build Coastguard Worker                                int stride) {
932*fb1b10abSAndroid Build Coastguard Worker   uint32_t pos = 45;
933*fb1b10abSAndroid Build Coastguard Worker   int32_t out;
934*fb1b10abSAndroid Build Coastguard Worker   int32_t r;
935*fb1b10abSAndroid Build Coastguard Worker   int32_t a1, absa1;
936*fb1b10abSAndroid Build Coastguard Worker   int32_t vector_a1;
937*fb1b10abSAndroid Build Coastguard Worker   int32_t t1, t2, t3, t4;
938*fb1b10abSAndroid Build Coastguard Worker   int32_t vector_1, vector_2, vector_3, vector_4;
939*fb1b10abSAndroid Build Coastguard Worker 
940*fb1b10abSAndroid Build Coastguard Worker   /* bit positon for extract from acc */
941*fb1b10abSAndroid Build Coastguard Worker   __asm__ __volatile__("wrdsp      %[pos],     1           \n\t"
942*fb1b10abSAndroid Build Coastguard Worker 
943*fb1b10abSAndroid Build Coastguard Worker                        :
944*fb1b10abSAndroid Build Coastguard Worker                        : [pos] "r"(pos));
945*fb1b10abSAndroid Build Coastguard Worker 
946*fb1b10abSAndroid Build Coastguard Worker   out = DCT_CONST_ROUND_SHIFT_TWICE_COSPI_16_64(input[0]);
947*fb1b10abSAndroid Build Coastguard Worker   __asm__ __volatile__(
948*fb1b10abSAndroid Build Coastguard Worker       "addi     %[out],     %[out],     32      \n\t"
949*fb1b10abSAndroid Build Coastguard Worker       "sra      %[a1],      %[out],     6       \n\t"
950*fb1b10abSAndroid Build Coastguard Worker 
951*fb1b10abSAndroid Build Coastguard Worker       : [out] "+r"(out), [a1] "=r"(a1)
952*fb1b10abSAndroid Build Coastguard Worker       :);
953*fb1b10abSAndroid Build Coastguard Worker 
954*fb1b10abSAndroid Build Coastguard Worker   if (a1 < 0) {
955*fb1b10abSAndroid Build Coastguard Worker     /* use quad-byte
956*fb1b10abSAndroid Build Coastguard Worker      * input and output memory are four byte aligned */
957*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
958*fb1b10abSAndroid Build Coastguard Worker         "abs        %[absa1],       %[a1]       \n\t"
959*fb1b10abSAndroid Build Coastguard Worker         "replv.qb   %[vector_a1],   %[absa1]    \n\t"
960*fb1b10abSAndroid Build Coastguard Worker 
961*fb1b10abSAndroid Build Coastguard Worker         : [absa1] "=r"(absa1), [vector_a1] "=r"(vector_a1)
962*fb1b10abSAndroid Build Coastguard Worker         : [a1] "r"(a1));
963*fb1b10abSAndroid Build Coastguard Worker 
964*fb1b10abSAndroid Build Coastguard Worker     for (r = 16; r--;) {
965*fb1b10abSAndroid Build Coastguard Worker       __asm__ __volatile__(
966*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t1],          0(%[dest])                      \n\t"
967*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t2],          4(%[dest])                      \n\t"
968*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t3],          8(%[dest])                      \n\t"
969*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t4],          12(%[dest])                     \n\t"
970*fb1b10abSAndroid Build Coastguard Worker           "subu_s.qb      %[vector_1],    %[t1],          %[vector_a1]    \n\t"
971*fb1b10abSAndroid Build Coastguard Worker           "subu_s.qb      %[vector_2],    %[t2],          %[vector_a1]    \n\t"
972*fb1b10abSAndroid Build Coastguard Worker           "subu_s.qb      %[vector_3],    %[t3],          %[vector_a1]    \n\t"
973*fb1b10abSAndroid Build Coastguard Worker           "subu_s.qb      %[vector_4],    %[t4],          %[vector_a1]    \n\t"
974*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_1],    0(%[dest])                      \n\t"
975*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_2],    4(%[dest])                      \n\t"
976*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_3],    8(%[dest])                      \n\t"
977*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_4],    12(%[dest])                     \n\t"
978*fb1b10abSAndroid Build Coastguard Worker           "add            %[dest],        %[dest],        %[stride]       \n\t"
979*fb1b10abSAndroid Build Coastguard Worker 
980*fb1b10abSAndroid Build Coastguard Worker           : [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), [t4] "=&r"(t4),
981*fb1b10abSAndroid Build Coastguard Worker             [vector_1] "=&r"(vector_1), [vector_2] "=&r"(vector_2),
982*fb1b10abSAndroid Build Coastguard Worker             [vector_3] "=&r"(vector_3), [vector_4] "=&r"(vector_4),
983*fb1b10abSAndroid Build Coastguard Worker             [dest] "+&r"(dest)
984*fb1b10abSAndroid Build Coastguard Worker           : [stride] "r"(stride), [vector_a1] "r"(vector_a1));
985*fb1b10abSAndroid Build Coastguard Worker     }
986*fb1b10abSAndroid Build Coastguard Worker   } else if (a1 > 255) {
987*fb1b10abSAndroid Build Coastguard Worker     int32_t a11, a12, vector_a11, vector_a12;
988*fb1b10abSAndroid Build Coastguard Worker 
989*fb1b10abSAndroid Build Coastguard Worker     /* use quad-byte
990*fb1b10abSAndroid Build Coastguard Worker      * input and output memory are four byte aligned */
991*fb1b10abSAndroid Build Coastguard Worker     a11 = a1 >> 1;
992*fb1b10abSAndroid Build Coastguard Worker     a12 = a1 - a11;
993*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__(
994*fb1b10abSAndroid Build Coastguard Worker         "replv.qb       %[vector_a11],  %[a11]     \n\t"
995*fb1b10abSAndroid Build Coastguard Worker         "replv.qb       %[vector_a12],  %[a12]     \n\t"
996*fb1b10abSAndroid Build Coastguard Worker 
997*fb1b10abSAndroid Build Coastguard Worker         : [vector_a11] "=&r"(vector_a11), [vector_a12] "=&r"(vector_a12)
998*fb1b10abSAndroid Build Coastguard Worker         : [a11] "r"(a11), [a12] "r"(a12));
999*fb1b10abSAndroid Build Coastguard Worker 
1000*fb1b10abSAndroid Build Coastguard Worker     for (r = 16; r--;) {
1001*fb1b10abSAndroid Build Coastguard Worker       __asm__ __volatile__(
1002*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t1],          0(%[dest])                      \n\t"
1003*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t2],          4(%[dest])                      \n\t"
1004*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t3],          8(%[dest])                      \n\t"
1005*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t4],          12(%[dest])                     \n\t"
1006*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_1],    %[t1],          %[vector_a11]   \n\t"
1007*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_2],    %[t2],          %[vector_a11]   \n\t"
1008*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_3],    %[t3],          %[vector_a11]   \n\t"
1009*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_4],    %[t4],          %[vector_a11]   \n\t"
1010*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_1],    %[vector_1],    %[vector_a12]   \n\t"
1011*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_2],    %[vector_2],    %[vector_a12]   \n\t"
1012*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_3],    %[vector_3],    %[vector_a12]   \n\t"
1013*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_4],    %[vector_4],    %[vector_a12]   \n\t"
1014*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_1],    0(%[dest])                      \n\t"
1015*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_2],    4(%[dest])                      \n\t"
1016*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_3],    8(%[dest])                      \n\t"
1017*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_4],    12(%[dest])                     \n\t"
1018*fb1b10abSAndroid Build Coastguard Worker           "add            %[dest],        %[dest],        %[stride]       \n\t"
1019*fb1b10abSAndroid Build Coastguard Worker 
1020*fb1b10abSAndroid Build Coastguard Worker           : [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), [t4] "=&r"(t4),
1021*fb1b10abSAndroid Build Coastguard Worker             [vector_1] "=&r"(vector_1), [vector_2] "=&r"(vector_2),
1022*fb1b10abSAndroid Build Coastguard Worker             [vector_3] "=&r"(vector_3), [vector_4] "=&r"(vector_4),
1023*fb1b10abSAndroid Build Coastguard Worker             [dest] "+&r"(dest)
1024*fb1b10abSAndroid Build Coastguard Worker           : [stride] "r"(stride), [vector_a11] "r"(vector_a11),
1025*fb1b10abSAndroid Build Coastguard Worker             [vector_a12] "r"(vector_a12));
1026*fb1b10abSAndroid Build Coastguard Worker     }
1027*fb1b10abSAndroid Build Coastguard Worker   } else {
1028*fb1b10abSAndroid Build Coastguard Worker     /* use quad-byte
1029*fb1b10abSAndroid Build Coastguard Worker      * input and output memory are four byte aligned */
1030*fb1b10abSAndroid Build Coastguard Worker     __asm__ __volatile__("replv.qb   %[vector_a1],   %[a1]   \n\t"
1031*fb1b10abSAndroid Build Coastguard Worker 
1032*fb1b10abSAndroid Build Coastguard Worker                          : [vector_a1] "=r"(vector_a1)
1033*fb1b10abSAndroid Build Coastguard Worker                          : [a1] "r"(a1));
1034*fb1b10abSAndroid Build Coastguard Worker 
1035*fb1b10abSAndroid Build Coastguard Worker     for (r = 16; r--;) {
1036*fb1b10abSAndroid Build Coastguard Worker       __asm__ __volatile__(
1037*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t1],          0(%[dest])                      \n\t"
1038*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t2],          4(%[dest])                      \n\t"
1039*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t3],          8(%[dest])                      \n\t"
1040*fb1b10abSAndroid Build Coastguard Worker           "lw             %[t4],          12(%[dest])                     \n\t"
1041*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_1],    %[t1],          %[vector_a1]    \n\t"
1042*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_2],    %[t2],          %[vector_a1]    \n\t"
1043*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_3],    %[t3],          %[vector_a1]    \n\t"
1044*fb1b10abSAndroid Build Coastguard Worker           "addu_s.qb      %[vector_4],    %[t4],          %[vector_a1]    \n\t"
1045*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_1],    0(%[dest])                      \n\t"
1046*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_2],    4(%[dest])                      \n\t"
1047*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_3],    8(%[dest])                      \n\t"
1048*fb1b10abSAndroid Build Coastguard Worker           "sw             %[vector_4],    12(%[dest])                     \n\t"
1049*fb1b10abSAndroid Build Coastguard Worker           "add            %[dest],        %[dest],        %[stride]       \n\t"
1050*fb1b10abSAndroid Build Coastguard Worker 
1051*fb1b10abSAndroid Build Coastguard Worker           : [t1] "=&r"(t1), [t2] "=&r"(t2), [t3] "=&r"(t3), [t4] "=&r"(t4),
1052*fb1b10abSAndroid Build Coastguard Worker             [vector_1] "=&r"(vector_1), [vector_2] "=&r"(vector_2),
1053*fb1b10abSAndroid Build Coastguard Worker             [vector_3] "=&r"(vector_3), [vector_4] "=&r"(vector_4),
1054*fb1b10abSAndroid Build Coastguard Worker             [dest] "+&r"(dest)
1055*fb1b10abSAndroid Build Coastguard Worker           : [stride] "r"(stride), [vector_a1] "r"(vector_a1));
1056*fb1b10abSAndroid Build Coastguard Worker     }
1057*fb1b10abSAndroid Build Coastguard Worker   }
1058*fb1b10abSAndroid Build Coastguard Worker }
1059*fb1b10abSAndroid Build Coastguard Worker 
iadst16_dspr2(const int16_t * input,int16_t * output)1060*fb1b10abSAndroid Build Coastguard Worker void iadst16_dspr2(const int16_t *input, int16_t *output) {
1061*fb1b10abSAndroid Build Coastguard Worker   int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15;
1062*fb1b10abSAndroid Build Coastguard Worker 
1063*fb1b10abSAndroid Build Coastguard Worker   int x0 = input[15];
1064*fb1b10abSAndroid Build Coastguard Worker   int x1 = input[0];
1065*fb1b10abSAndroid Build Coastguard Worker   int x2 = input[13];
1066*fb1b10abSAndroid Build Coastguard Worker   int x3 = input[2];
1067*fb1b10abSAndroid Build Coastguard Worker   int x4 = input[11];
1068*fb1b10abSAndroid Build Coastguard Worker   int x5 = input[4];
1069*fb1b10abSAndroid Build Coastguard Worker   int x6 = input[9];
1070*fb1b10abSAndroid Build Coastguard Worker   int x7 = input[6];
1071*fb1b10abSAndroid Build Coastguard Worker   int x8 = input[7];
1072*fb1b10abSAndroid Build Coastguard Worker   int x9 = input[8];
1073*fb1b10abSAndroid Build Coastguard Worker   int x10 = input[5];
1074*fb1b10abSAndroid Build Coastguard Worker   int x11 = input[10];
1075*fb1b10abSAndroid Build Coastguard Worker   int x12 = input[3];
1076*fb1b10abSAndroid Build Coastguard Worker   int x13 = input[12];
1077*fb1b10abSAndroid Build Coastguard Worker   int x14 = input[1];
1078*fb1b10abSAndroid Build Coastguard Worker   int x15 = input[14];
1079*fb1b10abSAndroid Build Coastguard Worker 
1080*fb1b10abSAndroid Build Coastguard Worker   if (!(x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | x10 | x11 | x12 |
1081*fb1b10abSAndroid Build Coastguard Worker         x13 | x14 | x15)) {
1082*fb1b10abSAndroid Build Coastguard Worker     output[0] = output[1] = output[2] = output[3] = output[4] = output[5] =
1083*fb1b10abSAndroid Build Coastguard Worker         output[6] = output[7] = output[8] = output[9] = output[10] =
1084*fb1b10abSAndroid Build Coastguard Worker             output[11] = output[12] = output[13] = output[14] = output[15] = 0;
1085*fb1b10abSAndroid Build Coastguard Worker     return;
1086*fb1b10abSAndroid Build Coastguard Worker   }
1087*fb1b10abSAndroid Build Coastguard Worker 
1088*fb1b10abSAndroid Build Coastguard Worker   // stage 1
1089*fb1b10abSAndroid Build Coastguard Worker   s0 = x0 * cospi_1_64 + x1 * cospi_31_64;
1090*fb1b10abSAndroid Build Coastguard Worker   s1 = x0 * cospi_31_64 - x1 * cospi_1_64;
1091*fb1b10abSAndroid Build Coastguard Worker   s2 = x2 * cospi_5_64 + x3 * cospi_27_64;
1092*fb1b10abSAndroid Build Coastguard Worker   s3 = x2 * cospi_27_64 - x3 * cospi_5_64;
1093*fb1b10abSAndroid Build Coastguard Worker   s4 = x4 * cospi_9_64 + x5 * cospi_23_64;
1094*fb1b10abSAndroid Build Coastguard Worker   s5 = x4 * cospi_23_64 - x5 * cospi_9_64;
1095*fb1b10abSAndroid Build Coastguard Worker   s6 = x6 * cospi_13_64 + x7 * cospi_19_64;
1096*fb1b10abSAndroid Build Coastguard Worker   s7 = x6 * cospi_19_64 - x7 * cospi_13_64;
1097*fb1b10abSAndroid Build Coastguard Worker   s8 = x8 * cospi_17_64 + x9 * cospi_15_64;
1098*fb1b10abSAndroid Build Coastguard Worker   s9 = x8 * cospi_15_64 - x9 * cospi_17_64;
1099*fb1b10abSAndroid Build Coastguard Worker   s10 = x10 * cospi_21_64 + x11 * cospi_11_64;
1100*fb1b10abSAndroid Build Coastguard Worker   s11 = x10 * cospi_11_64 - x11 * cospi_21_64;
1101*fb1b10abSAndroid Build Coastguard Worker   s12 = x12 * cospi_25_64 + x13 * cospi_7_64;
1102*fb1b10abSAndroid Build Coastguard Worker   s13 = x12 * cospi_7_64 - x13 * cospi_25_64;
1103*fb1b10abSAndroid Build Coastguard Worker   s14 = x14 * cospi_29_64 + x15 * cospi_3_64;
1104*fb1b10abSAndroid Build Coastguard Worker   s15 = x14 * cospi_3_64 - x15 * cospi_29_64;
1105*fb1b10abSAndroid Build Coastguard Worker 
1106*fb1b10abSAndroid Build Coastguard Worker   x0 = dct_const_round_shift(s0 + s8);
1107*fb1b10abSAndroid Build Coastguard Worker   x1 = dct_const_round_shift(s1 + s9);
1108*fb1b10abSAndroid Build Coastguard Worker   x2 = dct_const_round_shift(s2 + s10);
1109*fb1b10abSAndroid Build Coastguard Worker   x3 = dct_const_round_shift(s3 + s11);
1110*fb1b10abSAndroid Build Coastguard Worker   x4 = dct_const_round_shift(s4 + s12);
1111*fb1b10abSAndroid Build Coastguard Worker   x5 = dct_const_round_shift(s5 + s13);
1112*fb1b10abSAndroid Build Coastguard Worker   x6 = dct_const_round_shift(s6 + s14);
1113*fb1b10abSAndroid Build Coastguard Worker   x7 = dct_const_round_shift(s7 + s15);
1114*fb1b10abSAndroid Build Coastguard Worker   x8 = dct_const_round_shift(s0 - s8);
1115*fb1b10abSAndroid Build Coastguard Worker   x9 = dct_const_round_shift(s1 - s9);
1116*fb1b10abSAndroid Build Coastguard Worker   x10 = dct_const_round_shift(s2 - s10);
1117*fb1b10abSAndroid Build Coastguard Worker   x11 = dct_const_round_shift(s3 - s11);
1118*fb1b10abSAndroid Build Coastguard Worker   x12 = dct_const_round_shift(s4 - s12);
1119*fb1b10abSAndroid Build Coastguard Worker   x13 = dct_const_round_shift(s5 - s13);
1120*fb1b10abSAndroid Build Coastguard Worker   x14 = dct_const_round_shift(s6 - s14);
1121*fb1b10abSAndroid Build Coastguard Worker   x15 = dct_const_round_shift(s7 - s15);
1122*fb1b10abSAndroid Build Coastguard Worker 
1123*fb1b10abSAndroid Build Coastguard Worker   // stage 2
1124*fb1b10abSAndroid Build Coastguard Worker   s0 = x0;
1125*fb1b10abSAndroid Build Coastguard Worker   s1 = x1;
1126*fb1b10abSAndroid Build Coastguard Worker   s2 = x2;
1127*fb1b10abSAndroid Build Coastguard Worker   s3 = x3;
1128*fb1b10abSAndroid Build Coastguard Worker   s4 = x4;
1129*fb1b10abSAndroid Build Coastguard Worker   s5 = x5;
1130*fb1b10abSAndroid Build Coastguard Worker   s6 = x6;
1131*fb1b10abSAndroid Build Coastguard Worker   s7 = x7;
1132*fb1b10abSAndroid Build Coastguard Worker   s8 = x8 * cospi_4_64 + x9 * cospi_28_64;
1133*fb1b10abSAndroid Build Coastguard Worker   s9 = x8 * cospi_28_64 - x9 * cospi_4_64;
1134*fb1b10abSAndroid Build Coastguard Worker   s10 = x10 * cospi_20_64 + x11 * cospi_12_64;
1135*fb1b10abSAndroid Build Coastguard Worker   s11 = x10 * cospi_12_64 - x11 * cospi_20_64;
1136*fb1b10abSAndroid Build Coastguard Worker   s12 = -x12 * cospi_28_64 + x13 * cospi_4_64;
1137*fb1b10abSAndroid Build Coastguard Worker   s13 = x12 * cospi_4_64 + x13 * cospi_28_64;
1138*fb1b10abSAndroid Build Coastguard Worker   s14 = -x14 * cospi_12_64 + x15 * cospi_20_64;
1139*fb1b10abSAndroid Build Coastguard Worker   s15 = x14 * cospi_20_64 + x15 * cospi_12_64;
1140*fb1b10abSAndroid Build Coastguard Worker 
1141*fb1b10abSAndroid Build Coastguard Worker   x0 = s0 + s4;
1142*fb1b10abSAndroid Build Coastguard Worker   x1 = s1 + s5;
1143*fb1b10abSAndroid Build Coastguard Worker   x2 = s2 + s6;
1144*fb1b10abSAndroid Build Coastguard Worker   x3 = s3 + s7;
1145*fb1b10abSAndroid Build Coastguard Worker   x4 = s0 - s4;
1146*fb1b10abSAndroid Build Coastguard Worker   x5 = s1 - s5;
1147*fb1b10abSAndroid Build Coastguard Worker   x6 = s2 - s6;
1148*fb1b10abSAndroid Build Coastguard Worker   x7 = s3 - s7;
1149*fb1b10abSAndroid Build Coastguard Worker   x8 = dct_const_round_shift(s8 + s12);
1150*fb1b10abSAndroid Build Coastguard Worker   x9 = dct_const_round_shift(s9 + s13);
1151*fb1b10abSAndroid Build Coastguard Worker   x10 = dct_const_round_shift(s10 + s14);
1152*fb1b10abSAndroid Build Coastguard Worker   x11 = dct_const_round_shift(s11 + s15);
1153*fb1b10abSAndroid Build Coastguard Worker   x12 = dct_const_round_shift(s8 - s12);
1154*fb1b10abSAndroid Build Coastguard Worker   x13 = dct_const_round_shift(s9 - s13);
1155*fb1b10abSAndroid Build Coastguard Worker   x14 = dct_const_round_shift(s10 - s14);
1156*fb1b10abSAndroid Build Coastguard Worker   x15 = dct_const_round_shift(s11 - s15);
1157*fb1b10abSAndroid Build Coastguard Worker 
1158*fb1b10abSAndroid Build Coastguard Worker   // stage 3
1159*fb1b10abSAndroid Build Coastguard Worker   s0 = x0;
1160*fb1b10abSAndroid Build Coastguard Worker   s1 = x1;
1161*fb1b10abSAndroid Build Coastguard Worker   s2 = x2;
1162*fb1b10abSAndroid Build Coastguard Worker   s3 = x3;
1163*fb1b10abSAndroid Build Coastguard Worker   s4 = x4 * cospi_8_64 + x5 * cospi_24_64;
1164*fb1b10abSAndroid Build Coastguard Worker   s5 = x4 * cospi_24_64 - x5 * cospi_8_64;
1165*fb1b10abSAndroid Build Coastguard Worker   s6 = -x6 * cospi_24_64 + x7 * cospi_8_64;
1166*fb1b10abSAndroid Build Coastguard Worker   s7 = x6 * cospi_8_64 + x7 * cospi_24_64;
1167*fb1b10abSAndroid Build Coastguard Worker   s8 = x8;
1168*fb1b10abSAndroid Build Coastguard Worker   s9 = x9;
1169*fb1b10abSAndroid Build Coastguard Worker   s10 = x10;
1170*fb1b10abSAndroid Build Coastguard Worker   s11 = x11;
1171*fb1b10abSAndroid Build Coastguard Worker   s12 = x12 * cospi_8_64 + x13 * cospi_24_64;
1172*fb1b10abSAndroid Build Coastguard Worker   s13 = x12 * cospi_24_64 - x13 * cospi_8_64;
1173*fb1b10abSAndroid Build Coastguard Worker   s14 = -x14 * cospi_24_64 + x15 * cospi_8_64;
1174*fb1b10abSAndroid Build Coastguard Worker   s15 = x14 * cospi_8_64 + x15 * cospi_24_64;
1175*fb1b10abSAndroid Build Coastguard Worker 
1176*fb1b10abSAndroid Build Coastguard Worker   x0 = s0 + s2;
1177*fb1b10abSAndroid Build Coastguard Worker   x1 = s1 + s3;
1178*fb1b10abSAndroid Build Coastguard Worker   x2 = s0 - s2;
1179*fb1b10abSAndroid Build Coastguard Worker   x3 = s1 - s3;
1180*fb1b10abSAndroid Build Coastguard Worker   x4 = dct_const_round_shift(s4 + s6);
1181*fb1b10abSAndroid Build Coastguard Worker   x5 = dct_const_round_shift(s5 + s7);
1182*fb1b10abSAndroid Build Coastguard Worker   x6 = dct_const_round_shift(s4 - s6);
1183*fb1b10abSAndroid Build Coastguard Worker   x7 = dct_const_round_shift(s5 - s7);
1184*fb1b10abSAndroid Build Coastguard Worker   x8 = s8 + s10;
1185*fb1b10abSAndroid Build Coastguard Worker   x9 = s9 + s11;
1186*fb1b10abSAndroid Build Coastguard Worker   x10 = s8 - s10;
1187*fb1b10abSAndroid Build Coastguard Worker   x11 = s9 - s11;
1188*fb1b10abSAndroid Build Coastguard Worker   x12 = dct_const_round_shift(s12 + s14);
1189*fb1b10abSAndroid Build Coastguard Worker   x13 = dct_const_round_shift(s13 + s15);
1190*fb1b10abSAndroid Build Coastguard Worker   x14 = dct_const_round_shift(s12 - s14);
1191*fb1b10abSAndroid Build Coastguard Worker   x15 = dct_const_round_shift(s13 - s15);
1192*fb1b10abSAndroid Build Coastguard Worker 
1193*fb1b10abSAndroid Build Coastguard Worker   // stage 4
1194*fb1b10abSAndroid Build Coastguard Worker   s2 = (-cospi_16_64) * (x2 + x3);
1195*fb1b10abSAndroid Build Coastguard Worker   s3 = cospi_16_64 * (x2 - x3);
1196*fb1b10abSAndroid Build Coastguard Worker   s6 = cospi_16_64 * (x6 + x7);
1197*fb1b10abSAndroid Build Coastguard Worker   s7 = cospi_16_64 * (-x6 + x7);
1198*fb1b10abSAndroid Build Coastguard Worker   s10 = cospi_16_64 * (x10 + x11);
1199*fb1b10abSAndroid Build Coastguard Worker   s11 = cospi_16_64 * (-x10 + x11);
1200*fb1b10abSAndroid Build Coastguard Worker   s14 = (-cospi_16_64) * (x14 + x15);
1201*fb1b10abSAndroid Build Coastguard Worker   s15 = cospi_16_64 * (x14 - x15);
1202*fb1b10abSAndroid Build Coastguard Worker 
1203*fb1b10abSAndroid Build Coastguard Worker   x2 = dct_const_round_shift(s2);
1204*fb1b10abSAndroid Build Coastguard Worker   x3 = dct_const_round_shift(s3);
1205*fb1b10abSAndroid Build Coastguard Worker   x6 = dct_const_round_shift(s6);
1206*fb1b10abSAndroid Build Coastguard Worker   x7 = dct_const_round_shift(s7);
1207*fb1b10abSAndroid Build Coastguard Worker   x10 = dct_const_round_shift(s10);
1208*fb1b10abSAndroid Build Coastguard Worker   x11 = dct_const_round_shift(s11);
1209*fb1b10abSAndroid Build Coastguard Worker   x14 = dct_const_round_shift(s14);
1210*fb1b10abSAndroid Build Coastguard Worker   x15 = dct_const_round_shift(s15);
1211*fb1b10abSAndroid Build Coastguard Worker 
1212*fb1b10abSAndroid Build Coastguard Worker   output[0] = x0;
1213*fb1b10abSAndroid Build Coastguard Worker   output[1] = -x8;
1214*fb1b10abSAndroid Build Coastguard Worker   output[2] = x12;
1215*fb1b10abSAndroid Build Coastguard Worker   output[3] = -x4;
1216*fb1b10abSAndroid Build Coastguard Worker   output[4] = x6;
1217*fb1b10abSAndroid Build Coastguard Worker   output[5] = x14;
1218*fb1b10abSAndroid Build Coastguard Worker   output[6] = x10;
1219*fb1b10abSAndroid Build Coastguard Worker   output[7] = x2;
1220*fb1b10abSAndroid Build Coastguard Worker   output[8] = x3;
1221*fb1b10abSAndroid Build Coastguard Worker   output[9] = x11;
1222*fb1b10abSAndroid Build Coastguard Worker   output[10] = x15;
1223*fb1b10abSAndroid Build Coastguard Worker   output[11] = x7;
1224*fb1b10abSAndroid Build Coastguard Worker   output[12] = x5;
1225*fb1b10abSAndroid Build Coastguard Worker   output[13] = -x13;
1226*fb1b10abSAndroid Build Coastguard Worker   output[14] = x9;
1227*fb1b10abSAndroid Build Coastguard Worker   output[15] = -x1;
1228*fb1b10abSAndroid Build Coastguard Worker }
1229*fb1b10abSAndroid Build Coastguard Worker 
1230*fb1b10abSAndroid Build Coastguard Worker #endif  // HAVE_DSPR2
1231