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_rtcd.h"
12*fb1b10abSAndroid Build Coastguard Worker #include "vpx_dsp/mips/macros_msa.h"
13*fb1b10abSAndroid Build Coastguard Worker
sub_blk_4x4_msa(const uint8_t * src_ptr,int32_t src_stride,const uint8_t * pred_ptr,int32_t pred_stride,int16_t * diff_ptr,int32_t diff_stride)14*fb1b10abSAndroid Build Coastguard Worker static void sub_blk_4x4_msa(const uint8_t *src_ptr, int32_t src_stride,
15*fb1b10abSAndroid Build Coastguard Worker const uint8_t *pred_ptr, int32_t pred_stride,
16*fb1b10abSAndroid Build Coastguard Worker int16_t *diff_ptr, int32_t diff_stride) {
17*fb1b10abSAndroid Build Coastguard Worker uint32_t src0, src1, src2, src3;
18*fb1b10abSAndroid Build Coastguard Worker uint32_t pred0, pred1, pred2, pred3;
19*fb1b10abSAndroid Build Coastguard Worker v16i8 src = { 0 };
20*fb1b10abSAndroid Build Coastguard Worker v16i8 pred = { 0 };
21*fb1b10abSAndroid Build Coastguard Worker v16u8 src_l0, src_l1;
22*fb1b10abSAndroid Build Coastguard Worker v8i16 diff0, diff1;
23*fb1b10abSAndroid Build Coastguard Worker
24*fb1b10abSAndroid Build Coastguard Worker LW4(src_ptr, src_stride, src0, src1, src2, src3);
25*fb1b10abSAndroid Build Coastguard Worker LW4(pred_ptr, pred_stride, pred0, pred1, pred2, pred3);
26*fb1b10abSAndroid Build Coastguard Worker INSERT_W4_SB(src0, src1, src2, src3, src);
27*fb1b10abSAndroid Build Coastguard Worker INSERT_W4_SB(pred0, pred1, pred2, pred3, pred);
28*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src, pred, src_l0, src_l1);
29*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
30*fb1b10abSAndroid Build Coastguard Worker ST8x4_UB(diff0, diff1, diff_ptr, (2 * diff_stride));
31*fb1b10abSAndroid Build Coastguard Worker }
32*fb1b10abSAndroid Build Coastguard Worker
sub_blk_8x8_msa(const uint8_t * src_ptr,int32_t src_stride,const uint8_t * pred_ptr,int32_t pred_stride,int16_t * diff_ptr,int32_t diff_stride)33*fb1b10abSAndroid Build Coastguard Worker static void sub_blk_8x8_msa(const uint8_t *src_ptr, int32_t src_stride,
34*fb1b10abSAndroid Build Coastguard Worker const uint8_t *pred_ptr, int32_t pred_stride,
35*fb1b10abSAndroid Build Coastguard Worker int16_t *diff_ptr, int32_t diff_stride) {
36*fb1b10abSAndroid Build Coastguard Worker uint32_t loop_cnt;
37*fb1b10abSAndroid Build Coastguard Worker uint64_t src0, src1, pred0, pred1;
38*fb1b10abSAndroid Build Coastguard Worker v16i8 src = { 0 };
39*fb1b10abSAndroid Build Coastguard Worker v16i8 pred = { 0 };
40*fb1b10abSAndroid Build Coastguard Worker v16u8 src_l0, src_l1;
41*fb1b10abSAndroid Build Coastguard Worker v8i16 diff0, diff1;
42*fb1b10abSAndroid Build Coastguard Worker
43*fb1b10abSAndroid Build Coastguard Worker for (loop_cnt = 4; loop_cnt--;) {
44*fb1b10abSAndroid Build Coastguard Worker LD2(src_ptr, src_stride, src0, src1);
45*fb1b10abSAndroid Build Coastguard Worker src_ptr += (2 * src_stride);
46*fb1b10abSAndroid Build Coastguard Worker LD2(pred_ptr, pred_stride, pred0, pred1);
47*fb1b10abSAndroid Build Coastguard Worker pred_ptr += (2 * pred_stride);
48*fb1b10abSAndroid Build Coastguard Worker
49*fb1b10abSAndroid Build Coastguard Worker INSERT_D2_SB(src0, src1, src);
50*fb1b10abSAndroid Build Coastguard Worker INSERT_D2_SB(pred0, pred1, pred);
51*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src, pred, src_l0, src_l1);
52*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
53*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff_ptr, diff_stride);
54*fb1b10abSAndroid Build Coastguard Worker diff_ptr += (2 * diff_stride);
55*fb1b10abSAndroid Build Coastguard Worker }
56*fb1b10abSAndroid Build Coastguard Worker }
57*fb1b10abSAndroid Build Coastguard Worker
sub_blk_16x16_msa(const uint8_t * src,int32_t src_stride,const uint8_t * pred,int32_t pred_stride,int16_t * diff,int32_t diff_stride)58*fb1b10abSAndroid Build Coastguard Worker static void sub_blk_16x16_msa(const uint8_t *src, int32_t src_stride,
59*fb1b10abSAndroid Build Coastguard Worker const uint8_t *pred, int32_t pred_stride,
60*fb1b10abSAndroid Build Coastguard Worker int16_t *diff, int32_t diff_stride) {
61*fb1b10abSAndroid Build Coastguard Worker int8_t count;
62*fb1b10abSAndroid Build Coastguard Worker v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
63*fb1b10abSAndroid Build Coastguard Worker v16i8 pred0, pred1, pred2, pred3, pred4, pred5, pred6, pred7;
64*fb1b10abSAndroid Build Coastguard Worker v16u8 src_l0, src_l1;
65*fb1b10abSAndroid Build Coastguard Worker v8i16 diff0, diff1;
66*fb1b10abSAndroid Build Coastguard Worker
67*fb1b10abSAndroid Build Coastguard Worker for (count = 2; count--;) {
68*fb1b10abSAndroid Build Coastguard Worker LD_SB8(src, src_stride, src0, src1, src2, src3, src4, src5, src6, src7);
69*fb1b10abSAndroid Build Coastguard Worker src += (8 * src_stride);
70*fb1b10abSAndroid Build Coastguard Worker
71*fb1b10abSAndroid Build Coastguard Worker LD_SB8(pred, pred_stride, pred0, pred1, pred2, pred3, pred4, pred5, pred6,
72*fb1b10abSAndroid Build Coastguard Worker pred7);
73*fb1b10abSAndroid Build Coastguard Worker pred += (8 * pred_stride);
74*fb1b10abSAndroid Build Coastguard Worker
75*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src0, pred0, src_l0, src_l1);
76*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
77*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
78*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
79*fb1b10abSAndroid Build Coastguard Worker
80*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src1, pred1, src_l0, src_l1);
81*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
82*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
83*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
84*fb1b10abSAndroid Build Coastguard Worker
85*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src2, pred2, src_l0, src_l1);
86*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
87*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
88*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
89*fb1b10abSAndroid Build Coastguard Worker
90*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src3, pred3, src_l0, src_l1);
91*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
92*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
93*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
94*fb1b10abSAndroid Build Coastguard Worker
95*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src4, pred4, src_l0, src_l1);
96*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
97*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
98*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
99*fb1b10abSAndroid Build Coastguard Worker
100*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src5, pred5, src_l0, src_l1);
101*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
102*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
103*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
104*fb1b10abSAndroid Build Coastguard Worker
105*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src6, pred6, src_l0, src_l1);
106*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
107*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
108*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
109*fb1b10abSAndroid Build Coastguard Worker
110*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src7, pred7, src_l0, src_l1);
111*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
112*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
113*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
114*fb1b10abSAndroid Build Coastguard Worker }
115*fb1b10abSAndroid Build Coastguard Worker }
116*fb1b10abSAndroid Build Coastguard Worker
sub_blk_32x32_msa(const uint8_t * src,int32_t src_stride,const uint8_t * pred,int32_t pred_stride,int16_t * diff,int32_t diff_stride)117*fb1b10abSAndroid Build Coastguard Worker static void sub_blk_32x32_msa(const uint8_t *src, int32_t src_stride,
118*fb1b10abSAndroid Build Coastguard Worker const uint8_t *pred, int32_t pred_stride,
119*fb1b10abSAndroid Build Coastguard Worker int16_t *diff, int32_t diff_stride) {
120*fb1b10abSAndroid Build Coastguard Worker uint32_t loop_cnt;
121*fb1b10abSAndroid Build Coastguard Worker v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
122*fb1b10abSAndroid Build Coastguard Worker v16i8 pred0, pred1, pred2, pred3, pred4, pred5, pred6, pred7;
123*fb1b10abSAndroid Build Coastguard Worker v16u8 src_l0, src_l1;
124*fb1b10abSAndroid Build Coastguard Worker v8i16 diff0, diff1;
125*fb1b10abSAndroid Build Coastguard Worker
126*fb1b10abSAndroid Build Coastguard Worker for (loop_cnt = 8; loop_cnt--;) {
127*fb1b10abSAndroid Build Coastguard Worker LD_SB2(src, 16, src0, src1);
128*fb1b10abSAndroid Build Coastguard Worker src += src_stride;
129*fb1b10abSAndroid Build Coastguard Worker LD_SB2(src, 16, src2, src3);
130*fb1b10abSAndroid Build Coastguard Worker src += src_stride;
131*fb1b10abSAndroid Build Coastguard Worker LD_SB2(src, 16, src4, src5);
132*fb1b10abSAndroid Build Coastguard Worker src += src_stride;
133*fb1b10abSAndroid Build Coastguard Worker LD_SB2(src, 16, src6, src7);
134*fb1b10abSAndroid Build Coastguard Worker src += src_stride;
135*fb1b10abSAndroid Build Coastguard Worker
136*fb1b10abSAndroid Build Coastguard Worker LD_SB2(pred, 16, pred0, pred1);
137*fb1b10abSAndroid Build Coastguard Worker pred += pred_stride;
138*fb1b10abSAndroid Build Coastguard Worker LD_SB2(pred, 16, pred2, pred3);
139*fb1b10abSAndroid Build Coastguard Worker pred += pred_stride;
140*fb1b10abSAndroid Build Coastguard Worker LD_SB2(pred, 16, pred4, pred5);
141*fb1b10abSAndroid Build Coastguard Worker pred += pred_stride;
142*fb1b10abSAndroid Build Coastguard Worker LD_SB2(pred, 16, pred6, pred7);
143*fb1b10abSAndroid Build Coastguard Worker pred += pred_stride;
144*fb1b10abSAndroid Build Coastguard Worker
145*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src0, pred0, src_l0, src_l1);
146*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
147*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
148*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src1, pred1, src_l0, src_l1);
149*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
150*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 16, 8);
151*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
152*fb1b10abSAndroid Build Coastguard Worker
153*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src2, pred2, src_l0, src_l1);
154*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
155*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
156*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src3, pred3, src_l0, src_l1);
157*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
158*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 16, 8);
159*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
160*fb1b10abSAndroid Build Coastguard Worker
161*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src4, pred4, src_l0, src_l1);
162*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
163*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
164*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src5, pred5, src_l0, src_l1);
165*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
166*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 16, 8);
167*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
168*fb1b10abSAndroid Build Coastguard Worker
169*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src6, pred6, src_l0, src_l1);
170*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
171*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
172*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src7, pred7, src_l0, src_l1);
173*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
174*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 16, 8);
175*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
176*fb1b10abSAndroid Build Coastguard Worker }
177*fb1b10abSAndroid Build Coastguard Worker }
178*fb1b10abSAndroid Build Coastguard Worker
sub_blk_64x64_msa(const uint8_t * src,int32_t src_stride,const uint8_t * pred,int32_t pred_stride,int16_t * diff,int32_t diff_stride)179*fb1b10abSAndroid Build Coastguard Worker static void sub_blk_64x64_msa(const uint8_t *src, int32_t src_stride,
180*fb1b10abSAndroid Build Coastguard Worker const uint8_t *pred, int32_t pred_stride,
181*fb1b10abSAndroid Build Coastguard Worker int16_t *diff, int32_t diff_stride) {
182*fb1b10abSAndroid Build Coastguard Worker uint32_t loop_cnt;
183*fb1b10abSAndroid Build Coastguard Worker v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
184*fb1b10abSAndroid Build Coastguard Worker v16i8 pred0, pred1, pred2, pred3, pred4, pred5, pred6, pred7;
185*fb1b10abSAndroid Build Coastguard Worker v16u8 src_l0, src_l1;
186*fb1b10abSAndroid Build Coastguard Worker v8i16 diff0, diff1;
187*fb1b10abSAndroid Build Coastguard Worker
188*fb1b10abSAndroid Build Coastguard Worker for (loop_cnt = 32; loop_cnt--;) {
189*fb1b10abSAndroid Build Coastguard Worker LD_SB4(src, 16, src0, src1, src2, src3);
190*fb1b10abSAndroid Build Coastguard Worker src += src_stride;
191*fb1b10abSAndroid Build Coastguard Worker LD_SB4(src, 16, src4, src5, src6, src7);
192*fb1b10abSAndroid Build Coastguard Worker src += src_stride;
193*fb1b10abSAndroid Build Coastguard Worker
194*fb1b10abSAndroid Build Coastguard Worker LD_SB4(pred, 16, pred0, pred1, pred2, pred3);
195*fb1b10abSAndroid Build Coastguard Worker pred += pred_stride;
196*fb1b10abSAndroid Build Coastguard Worker LD_SB4(pred, 16, pred4, pred5, pred6, pred7);
197*fb1b10abSAndroid Build Coastguard Worker pred += pred_stride;
198*fb1b10abSAndroid Build Coastguard Worker
199*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src0, pred0, src_l0, src_l1);
200*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
201*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
202*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src1, pred1, src_l0, src_l1);
203*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
204*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 16, 8);
205*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src2, pred2, src_l0, src_l1);
206*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
207*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 32, 8);
208*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src3, pred3, src_l0, src_l1);
209*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
210*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 48, 8);
211*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
212*fb1b10abSAndroid Build Coastguard Worker
213*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src4, pred4, src_l0, src_l1);
214*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
215*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff, 8);
216*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src5, pred5, src_l0, src_l1);
217*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
218*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 16, 8);
219*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src6, pred6, src_l0, src_l1);
220*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
221*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 32, 8);
222*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UB(src7, pred7, src_l0, src_l1);
223*fb1b10abSAndroid Build Coastguard Worker HSUB_UB2_SH(src_l0, src_l1, diff0, diff1);
224*fb1b10abSAndroid Build Coastguard Worker ST_SH2(diff0, diff1, diff + 48, 8);
225*fb1b10abSAndroid Build Coastguard Worker diff += diff_stride;
226*fb1b10abSAndroid Build Coastguard Worker }
227*fb1b10abSAndroid Build Coastguard Worker }
228*fb1b10abSAndroid Build Coastguard Worker
vpx_subtract_block_msa(int32_t rows,int32_t cols,int16_t * diff_ptr,ptrdiff_t diff_stride,const uint8_t * src_ptr,ptrdiff_t src_stride,const uint8_t * pred_ptr,ptrdiff_t pred_stride)229*fb1b10abSAndroid Build Coastguard Worker void vpx_subtract_block_msa(int32_t rows, int32_t cols, int16_t *diff_ptr,
230*fb1b10abSAndroid Build Coastguard Worker ptrdiff_t diff_stride, const uint8_t *src_ptr,
231*fb1b10abSAndroid Build Coastguard Worker ptrdiff_t src_stride, const uint8_t *pred_ptr,
232*fb1b10abSAndroid Build Coastguard Worker ptrdiff_t pred_stride) {
233*fb1b10abSAndroid Build Coastguard Worker if (rows == cols) {
234*fb1b10abSAndroid Build Coastguard Worker switch (rows) {
235*fb1b10abSAndroid Build Coastguard Worker case 4:
236*fb1b10abSAndroid Build Coastguard Worker sub_blk_4x4_msa(src_ptr, src_stride, pred_ptr, pred_stride, diff_ptr,
237*fb1b10abSAndroid Build Coastguard Worker diff_stride);
238*fb1b10abSAndroid Build Coastguard Worker break;
239*fb1b10abSAndroid Build Coastguard Worker case 8:
240*fb1b10abSAndroid Build Coastguard Worker sub_blk_8x8_msa(src_ptr, src_stride, pred_ptr, pred_stride, diff_ptr,
241*fb1b10abSAndroid Build Coastguard Worker diff_stride);
242*fb1b10abSAndroid Build Coastguard Worker break;
243*fb1b10abSAndroid Build Coastguard Worker case 16:
244*fb1b10abSAndroid Build Coastguard Worker sub_blk_16x16_msa(src_ptr, src_stride, pred_ptr, pred_stride, diff_ptr,
245*fb1b10abSAndroid Build Coastguard Worker diff_stride);
246*fb1b10abSAndroid Build Coastguard Worker break;
247*fb1b10abSAndroid Build Coastguard Worker case 32:
248*fb1b10abSAndroid Build Coastguard Worker sub_blk_32x32_msa(src_ptr, src_stride, pred_ptr, pred_stride, diff_ptr,
249*fb1b10abSAndroid Build Coastguard Worker diff_stride);
250*fb1b10abSAndroid Build Coastguard Worker break;
251*fb1b10abSAndroid Build Coastguard Worker case 64:
252*fb1b10abSAndroid Build Coastguard Worker sub_blk_64x64_msa(src_ptr, src_stride, pred_ptr, pred_stride, diff_ptr,
253*fb1b10abSAndroid Build Coastguard Worker diff_stride);
254*fb1b10abSAndroid Build Coastguard Worker break;
255*fb1b10abSAndroid Build Coastguard Worker default:
256*fb1b10abSAndroid Build Coastguard Worker vpx_subtract_block_c(rows, cols, diff_ptr, diff_stride, src_ptr,
257*fb1b10abSAndroid Build Coastguard Worker src_stride, pred_ptr, pred_stride);
258*fb1b10abSAndroid Build Coastguard Worker break;
259*fb1b10abSAndroid Build Coastguard Worker }
260*fb1b10abSAndroid Build Coastguard Worker } else {
261*fb1b10abSAndroid Build Coastguard Worker vpx_subtract_block_c(rows, cols, diff_ptr, diff_stride, src_ptr, src_stride,
262*fb1b10abSAndroid Build Coastguard Worker pred_ptr, pred_stride);
263*fb1b10abSAndroid Build Coastguard Worker }
264*fb1b10abSAndroid Build Coastguard Worker }
265