xref: /aosp_15_r20/external/libvpx/vpx_dsp/mips/intrapred16_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_dsp/mips/common_dspr2.h"
12*fb1b10abSAndroid Build Coastguard Worker 
13*fb1b10abSAndroid Build Coastguard Worker #if HAVE_DSPR2
vpx_h_predictor_16x16_dspr2(uint8_t * dst,ptrdiff_t stride,const uint8_t * above,const uint8_t * left)14*fb1b10abSAndroid Build Coastguard Worker void vpx_h_predictor_16x16_dspr2(uint8_t *dst, ptrdiff_t stride,
15*fb1b10abSAndroid Build Coastguard Worker                                  const uint8_t *above, const uint8_t *left) {
16*fb1b10abSAndroid Build Coastguard Worker   int32_t tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8;
17*fb1b10abSAndroid Build Coastguard Worker   int32_t tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
18*fb1b10abSAndroid Build Coastguard Worker   (void)above;
19*fb1b10abSAndroid Build Coastguard Worker 
20*fb1b10abSAndroid Build Coastguard Worker   __asm__ __volatile__(
21*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp1],      (%[left])                    \n\t"
22*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp2],      1(%[left])                   \n\t"
23*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp3],      2(%[left])                   \n\t"
24*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp4],      3(%[left])                   \n\t"
25*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp5],      4(%[left])                   \n\t"
26*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp6],      5(%[left])                   \n\t"
27*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp7],      6(%[left])                   \n\t"
28*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp8],      7(%[left])                   \n\t"
29*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp9],      8(%[left])                   \n\t"
30*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp10],     9(%[left])                   \n\t"
31*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp11],     10(%[left])                  \n\t"
32*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp12],     11(%[left])                  \n\t"
33*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp13],     12(%[left])                  \n\t"
34*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp14],     13(%[left])                  \n\t"
35*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp15],     14(%[left])                  \n\t"
36*fb1b10abSAndroid Build Coastguard Worker       "lb         %[tmp16],     15(%[left])                  \n\t"
37*fb1b10abSAndroid Build Coastguard Worker 
38*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp1],      %[tmp1]                      \n\t"
39*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp2],      %[tmp2]                      \n\t"
40*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp3],      %[tmp3]                      \n\t"
41*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp4],      %[tmp4]                      \n\t"
42*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp5],      %[tmp5]                      \n\t"
43*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp6],      %[tmp6]                      \n\t"
44*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp7],      %[tmp7]                      \n\t"
45*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp8],      %[tmp8]                      \n\t"
46*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp9],      %[tmp9]                      \n\t"
47*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp10],     %[tmp10]                     \n\t"
48*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp11],     %[tmp11]                     \n\t"
49*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp12],     %[tmp12]                     \n\t"
50*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp13],     %[tmp13]                     \n\t"
51*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp14],     %[tmp14]                     \n\t"
52*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp15],     %[tmp15]                     \n\t"
53*fb1b10abSAndroid Build Coastguard Worker       "replv.qb   %[tmp16],     %[tmp16]                     \n\t"
54*fb1b10abSAndroid Build Coastguard Worker 
55*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp1],      (%[dst])                     \n\t"
56*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp1],      4(%[dst])                    \n\t"
57*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp1],      8(%[dst])                    \n\t"
58*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp1],      12(%[dst])                   \n\t"
59*fb1b10abSAndroid Build Coastguard Worker 
60*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
61*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp2],      (%[dst])                     \n\t"
62*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp2],      4(%[dst])                    \n\t"
63*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp2],      8(%[dst])                    \n\t"
64*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp2],      12(%[dst])                   \n\t"
65*fb1b10abSAndroid Build Coastguard Worker 
66*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
67*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp3],      (%[dst])                     \n\t"
68*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp3],      4(%[dst])                    \n\t"
69*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp3],      8(%[dst])                    \n\t"
70*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp3],      12(%[dst])                   \n\t"
71*fb1b10abSAndroid Build Coastguard Worker 
72*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
73*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp4],      (%[dst])                     \n\t"
74*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp4],      4(%[dst])                    \n\t"
75*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp4],      8(%[dst])                    \n\t"
76*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp4],      12(%[dst])                   \n\t"
77*fb1b10abSAndroid Build Coastguard Worker 
78*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
79*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp5],      (%[dst])                     \n\t"
80*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp5],      4(%[dst])                    \n\t"
81*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp5],      8(%[dst])                    \n\t"
82*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp5],      12(%[dst])                   \n\t"
83*fb1b10abSAndroid Build Coastguard Worker 
84*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
85*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp6],      (%[dst])                     \n\t"
86*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp6],      4(%[dst])                    \n\t"
87*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp6],      8(%[dst])                    \n\t"
88*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp6],      12(%[dst])                   \n\t"
89*fb1b10abSAndroid Build Coastguard Worker 
90*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
91*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp7],      (%[dst])                     \n\t"
92*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp7],      4(%[dst])                    \n\t"
93*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp7],      8(%[dst])                    \n\t"
94*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp7],      12(%[dst])                   \n\t"
95*fb1b10abSAndroid Build Coastguard Worker 
96*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
97*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp8],      (%[dst])                     \n\t"
98*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp8],      4(%[dst])                    \n\t"
99*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp8],      8(%[dst])                    \n\t"
100*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp8],      12(%[dst])                   \n\t"
101*fb1b10abSAndroid Build Coastguard Worker 
102*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
103*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp9],      (%[dst])                     \n\t"
104*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp9],      4(%[dst])                    \n\t"
105*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp9],      8(%[dst])                    \n\t"
106*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp9],      12(%[dst])                   \n\t"
107*fb1b10abSAndroid Build Coastguard Worker 
108*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
109*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp10],     (%[dst])                     \n\t"
110*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp10],     4(%[dst])                    \n\t"
111*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp10],     8(%[dst])                    \n\t"
112*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp10],     12(%[dst])                   \n\t"
113*fb1b10abSAndroid Build Coastguard Worker 
114*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
115*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp11],     (%[dst])                     \n\t"
116*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp11],     4(%[dst])                    \n\t"
117*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp11],     8(%[dst])                    \n\t"
118*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp11],     12(%[dst])                   \n\t"
119*fb1b10abSAndroid Build Coastguard Worker 
120*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
121*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp12],     (%[dst])                     \n\t"
122*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp12],     4(%[dst])                    \n\t"
123*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp12],     8(%[dst])                    \n\t"
124*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp12],     12(%[dst])                   \n\t"
125*fb1b10abSAndroid Build Coastguard Worker 
126*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
127*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp13],     (%[dst])                     \n\t"
128*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp13],     4(%[dst])                    \n\t"
129*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp13],     8(%[dst])                    \n\t"
130*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp13],     12(%[dst])                   \n\t"
131*fb1b10abSAndroid Build Coastguard Worker 
132*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
133*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp14],     (%[dst])                     \n\t"
134*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp14],     4(%[dst])                    \n\t"
135*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp14],     8(%[dst])                    \n\t"
136*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp14],     12(%[dst])                   \n\t"
137*fb1b10abSAndroid Build Coastguard Worker 
138*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
139*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp15],     (%[dst])                     \n\t"
140*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp15],     4(%[dst])                    \n\t"
141*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp15],     8(%[dst])                    \n\t"
142*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp15],     12(%[dst])                   \n\t"
143*fb1b10abSAndroid Build Coastguard Worker 
144*fb1b10abSAndroid Build Coastguard Worker       "add        %[dst],       %[dst],         %[stride]    \n\t"
145*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp16],     (%[dst])                     \n\t"
146*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp16],     4(%[dst])                    \n\t"
147*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp16],     8(%[dst])                    \n\t"
148*fb1b10abSAndroid Build Coastguard Worker       "sw         %[tmp16],     12(%[dst])                   \n\t"
149*fb1b10abSAndroid Build Coastguard Worker 
150*fb1b10abSAndroid Build Coastguard Worker       : [tmp1] "=&r"(tmp1), [tmp2] "=&r"(tmp2), [tmp3] "=&r"(tmp3),
151*fb1b10abSAndroid Build Coastguard Worker         [tmp4] "=&r"(tmp4), [tmp5] "=&r"(tmp5), [tmp7] "=&r"(tmp7),
152*fb1b10abSAndroid Build Coastguard Worker         [tmp6] "=&r"(tmp6), [tmp8] "=&r"(tmp8), [tmp9] "=&r"(tmp9),
153*fb1b10abSAndroid Build Coastguard Worker         [tmp10] "=&r"(tmp10), [tmp11] "=&r"(tmp11), [tmp12] "=&r"(tmp12),
154*fb1b10abSAndroid Build Coastguard Worker         [tmp13] "=&r"(tmp13), [tmp14] "=&r"(tmp14), [tmp15] "=&r"(tmp15),
155*fb1b10abSAndroid Build Coastguard Worker         [tmp16] "=&r"(tmp16)
156*fb1b10abSAndroid Build Coastguard Worker       : [left] "r"(left), [dst] "r"(dst), [stride] "r"(stride));
157*fb1b10abSAndroid Build Coastguard Worker }
158*fb1b10abSAndroid Build Coastguard Worker 
vpx_dc_predictor_16x16_dspr2(uint8_t * dst,ptrdiff_t stride,const uint8_t * above,const uint8_t * left)159*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_predictor_16x16_dspr2(uint8_t *dst, ptrdiff_t stride,
160*fb1b10abSAndroid Build Coastguard Worker                                   const uint8_t *above, const uint8_t *left) {
161*fb1b10abSAndroid Build Coastguard Worker   int32_t expected_dc;
162*fb1b10abSAndroid Build Coastguard Worker   int32_t average;
163*fb1b10abSAndroid Build Coastguard Worker   int32_t tmp, above1, above_l1, above_r1, left1, left_r1, left_l1;
164*fb1b10abSAndroid Build Coastguard Worker   int32_t above2, left2;
165*fb1b10abSAndroid Build Coastguard Worker 
166*fb1b10abSAndroid Build Coastguard Worker   __asm__ __volatile__(
167*fb1b10abSAndroid Build Coastguard Worker       "lw              %[above1],           (%[above])                    \n\t"
168*fb1b10abSAndroid Build Coastguard Worker       "lw              %[above2],           4(%[above])                   \n\t"
169*fb1b10abSAndroid Build Coastguard Worker       "lw              %[left1],            (%[left])                     \n\t"
170*fb1b10abSAndroid Build Coastguard Worker       "lw              %[left2],            4(%[left])                    \n\t"
171*fb1b10abSAndroid Build Coastguard Worker 
172*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbl   %[above_l1],         %[above1]                     \n\t"
173*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbr   %[above_r1],         %[above1]                     \n\t"
174*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbl   %[left_l1],          %[left1]                      \n\t"
175*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbr   %[left_r1],          %[left1]                      \n\t"
176*fb1b10abSAndroid Build Coastguard Worker 
177*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[above_r1],     %[above_l1]  \n\t"
178*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[left_l1]   \n\t"
179*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[left_r1]   \n\t"
180*fb1b10abSAndroid Build Coastguard Worker 
181*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbl   %[above_l1],         %[above2]                     \n\t"
182*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbr   %[above_r1],         %[above2]                     \n\t"
183*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbl   %[left_l1],          %[left2]                      \n\t"
184*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbr   %[left_r1],          %[left2]                      \n\t"
185*fb1b10abSAndroid Build Coastguard Worker 
186*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[above_l1]  \n\t"
187*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[above_r1]  \n\t"
188*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[left_l1]   \n\t"
189*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[left_r1]   \n\t"
190*fb1b10abSAndroid Build Coastguard Worker 
191*fb1b10abSAndroid Build Coastguard Worker       "lw              %[above1],           8(%[above])                   \n\t"
192*fb1b10abSAndroid Build Coastguard Worker       "lw              %[above2],           12(%[above])                  \n\t"
193*fb1b10abSAndroid Build Coastguard Worker       "lw              %[left1],            8(%[left])                    \n\t"
194*fb1b10abSAndroid Build Coastguard Worker       "lw              %[left2],            12(%[left])                   \n\t"
195*fb1b10abSAndroid Build Coastguard Worker 
196*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbl   %[above_l1],         %[above1]                     \n\t"
197*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbr   %[above_r1],         %[above1]                     \n\t"
198*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbl   %[left_l1],          %[left1]                      \n\t"
199*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbr   %[left_r1],          %[left1]                      \n\t"
200*fb1b10abSAndroid Build Coastguard Worker 
201*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[above_l1]  \n\t"
202*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[above_r1]  \n\t"
203*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[left_l1]   \n\t"
204*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[left_r1]   \n\t"
205*fb1b10abSAndroid Build Coastguard Worker 
206*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbl   %[above_l1],         %[above2]                     \n\t"
207*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbr   %[above_r1],         %[above2]                     \n\t"
208*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbl   %[left_l1],          %[left2]                      \n\t"
209*fb1b10abSAndroid Build Coastguard Worker       "preceu.ph.qbr   %[left_r1],          %[left2]                      \n\t"
210*fb1b10abSAndroid Build Coastguard Worker 
211*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[above_l1]  \n\t"
212*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[above_r1]  \n\t"
213*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[left_l1]   \n\t"
214*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[average],      %[left_r1]   \n\t"
215*fb1b10abSAndroid Build Coastguard Worker 
216*fb1b10abSAndroid Build Coastguard Worker       "addiu           %[average],          %[average],      16           \n\t"
217*fb1b10abSAndroid Build Coastguard Worker       "srl             %[tmp],              %[average],      16           \n\t"
218*fb1b10abSAndroid Build Coastguard Worker       "addu.ph         %[average],          %[tmp],          %[average]   \n\t"
219*fb1b10abSAndroid Build Coastguard Worker       "srl             %[expected_dc],      %[average],      5            \n\t"
220*fb1b10abSAndroid Build Coastguard Worker       "replv.qb        %[expected_dc],      %[expected_dc]                \n\t"
221*fb1b10abSAndroid Build Coastguard Worker 
222*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
223*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
224*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
225*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
226*fb1b10abSAndroid Build Coastguard Worker 
227*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
228*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
229*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
230*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
231*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
232*fb1b10abSAndroid Build Coastguard Worker 
233*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
234*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
235*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
236*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
237*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
238*fb1b10abSAndroid Build Coastguard Worker 
239*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
240*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
241*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
242*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
243*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
244*fb1b10abSAndroid Build Coastguard Worker 
245*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
246*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
247*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
248*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
249*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
250*fb1b10abSAndroid Build Coastguard Worker 
251*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
252*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
253*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
254*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
255*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
256*fb1b10abSAndroid Build Coastguard Worker 
257*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
258*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
259*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
260*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
261*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
262*fb1b10abSAndroid Build Coastguard Worker 
263*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
264*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
265*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
266*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
267*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
268*fb1b10abSAndroid Build Coastguard Worker 
269*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
270*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
271*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
272*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
273*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
274*fb1b10abSAndroid Build Coastguard Worker 
275*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
276*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
277*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
278*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
279*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
280*fb1b10abSAndroid Build Coastguard Worker 
281*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
282*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
283*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
284*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
285*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
286*fb1b10abSAndroid Build Coastguard Worker 
287*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
288*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
289*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
290*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
291*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
292*fb1b10abSAndroid Build Coastguard Worker 
293*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
294*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
295*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
296*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
297*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
298*fb1b10abSAndroid Build Coastguard Worker 
299*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
300*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
301*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
302*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
303*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
304*fb1b10abSAndroid Build Coastguard Worker 
305*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
306*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
307*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
308*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
309*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
310*fb1b10abSAndroid Build Coastguard Worker 
311*fb1b10abSAndroid Build Coastguard Worker       "add             %[dst],              %[dst],          %[stride]    \n\t"
312*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      (%[dst])                      \n\t"
313*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      4(%[dst])                     \n\t"
314*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      8(%[dst])                     \n\t"
315*fb1b10abSAndroid Build Coastguard Worker       "sw              %[expected_dc],      12(%[dst])                    \n\t"
316*fb1b10abSAndroid Build Coastguard Worker 
317*fb1b10abSAndroid Build Coastguard Worker       : [left1] "=&r"(left1), [above1] "=&r"(above1), [left_l1] "=&r"(left_l1),
318*fb1b10abSAndroid Build Coastguard Worker         [above_l1] "=&r"(above_l1), [left_r1] "=&r"(left_r1),
319*fb1b10abSAndroid Build Coastguard Worker         [above_r1] "=&r"(above_r1), [above2] "=&r"(above2),
320*fb1b10abSAndroid Build Coastguard Worker         [left2] "=&r"(left2), [average] "=&r"(average), [tmp] "=&r"(tmp),
321*fb1b10abSAndroid Build Coastguard Worker         [expected_dc] "=&r"(expected_dc)
322*fb1b10abSAndroid Build Coastguard Worker       : [above] "r"(above), [left] "r"(left), [dst] "r"(dst),
323*fb1b10abSAndroid Build Coastguard Worker         [stride] "r"(stride));
324*fb1b10abSAndroid Build Coastguard Worker }
325*fb1b10abSAndroid Build Coastguard Worker #endif  // #if HAVE_DSPR2
326