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
14*fb1b10abSAndroid Build Coastguard Worker #define IPRED_SUBS_UH2_UH(in0, in1, out0, out1) \
15*fb1b10abSAndroid Build Coastguard Worker { \
16*fb1b10abSAndroid Build Coastguard Worker out0 = __msa_subs_u_h(out0, in0); \
17*fb1b10abSAndroid Build Coastguard Worker out1 = __msa_subs_u_h(out1, in1); \
18*fb1b10abSAndroid Build Coastguard Worker }
19*fb1b10abSAndroid Build Coastguard Worker
intra_predict_vert_4x4_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)20*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_vert_4x4_msa(const uint8_t *src, uint8_t *dst,
21*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
22*fb1b10abSAndroid Build Coastguard Worker uint32_t src_data;
23*fb1b10abSAndroid Build Coastguard Worker
24*fb1b10abSAndroid Build Coastguard Worker src_data = LW(src);
25*fb1b10abSAndroid Build Coastguard Worker
26*fb1b10abSAndroid Build Coastguard Worker SW4(src_data, src_data, src_data, src_data, dst, dst_stride);
27*fb1b10abSAndroid Build Coastguard Worker }
28*fb1b10abSAndroid Build Coastguard Worker
intra_predict_vert_8x8_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)29*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_vert_8x8_msa(const uint8_t *src, uint8_t *dst,
30*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
31*fb1b10abSAndroid Build Coastguard Worker uint32_t row;
32*fb1b10abSAndroid Build Coastguard Worker uint32_t src_data1, src_data2;
33*fb1b10abSAndroid Build Coastguard Worker
34*fb1b10abSAndroid Build Coastguard Worker src_data1 = LW(src);
35*fb1b10abSAndroid Build Coastguard Worker src_data2 = LW(src + 4);
36*fb1b10abSAndroid Build Coastguard Worker
37*fb1b10abSAndroid Build Coastguard Worker for (row = 8; row--;) {
38*fb1b10abSAndroid Build Coastguard Worker SW(src_data1, dst);
39*fb1b10abSAndroid Build Coastguard Worker SW(src_data2, (dst + 4));
40*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
41*fb1b10abSAndroid Build Coastguard Worker }
42*fb1b10abSAndroid Build Coastguard Worker }
43*fb1b10abSAndroid Build Coastguard Worker
intra_predict_vert_16x16_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)44*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_vert_16x16_msa(const uint8_t *src, uint8_t *dst,
45*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
46*fb1b10abSAndroid Build Coastguard Worker uint32_t row;
47*fb1b10abSAndroid Build Coastguard Worker v16u8 src0;
48*fb1b10abSAndroid Build Coastguard Worker
49*fb1b10abSAndroid Build Coastguard Worker src0 = LD_UB(src);
50*fb1b10abSAndroid Build Coastguard Worker
51*fb1b10abSAndroid Build Coastguard Worker for (row = 16; row--;) {
52*fb1b10abSAndroid Build Coastguard Worker ST_UB(src0, dst);
53*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
54*fb1b10abSAndroid Build Coastguard Worker }
55*fb1b10abSAndroid Build Coastguard Worker }
56*fb1b10abSAndroid Build Coastguard Worker
intra_predict_vert_32x32_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)57*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_vert_32x32_msa(const uint8_t *src, uint8_t *dst,
58*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
59*fb1b10abSAndroid Build Coastguard Worker uint32_t row;
60*fb1b10abSAndroid Build Coastguard Worker v16u8 src1, src2;
61*fb1b10abSAndroid Build Coastguard Worker
62*fb1b10abSAndroid Build Coastguard Worker src1 = LD_UB(src);
63*fb1b10abSAndroid Build Coastguard Worker src2 = LD_UB(src + 16);
64*fb1b10abSAndroid Build Coastguard Worker
65*fb1b10abSAndroid Build Coastguard Worker for (row = 32; row--;) {
66*fb1b10abSAndroid Build Coastguard Worker ST_UB2(src1, src2, dst, 16);
67*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
68*fb1b10abSAndroid Build Coastguard Worker }
69*fb1b10abSAndroid Build Coastguard Worker }
70*fb1b10abSAndroid Build Coastguard Worker
intra_predict_horiz_4x4_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)71*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_horiz_4x4_msa(const uint8_t *src, uint8_t *dst,
72*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
73*fb1b10abSAndroid Build Coastguard Worker uint32_t out0, out1, out2, out3;
74*fb1b10abSAndroid Build Coastguard Worker
75*fb1b10abSAndroid Build Coastguard Worker out0 = src[0] * 0x01010101;
76*fb1b10abSAndroid Build Coastguard Worker out1 = src[1] * 0x01010101;
77*fb1b10abSAndroid Build Coastguard Worker out2 = src[2] * 0x01010101;
78*fb1b10abSAndroid Build Coastguard Worker out3 = src[3] * 0x01010101;
79*fb1b10abSAndroid Build Coastguard Worker
80*fb1b10abSAndroid Build Coastguard Worker SW4(out0, out1, out2, out3, dst, dst_stride);
81*fb1b10abSAndroid Build Coastguard Worker }
82*fb1b10abSAndroid Build Coastguard Worker
intra_predict_horiz_8x8_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)83*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_horiz_8x8_msa(const uint8_t *src, uint8_t *dst,
84*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
85*fb1b10abSAndroid Build Coastguard Worker uint64_t out0, out1, out2, out3, out4, out5, out6, out7;
86*fb1b10abSAndroid Build Coastguard Worker
87*fb1b10abSAndroid Build Coastguard Worker out0 = src[0] * 0x0101010101010101ull;
88*fb1b10abSAndroid Build Coastguard Worker out1 = src[1] * 0x0101010101010101ull;
89*fb1b10abSAndroid Build Coastguard Worker out2 = src[2] * 0x0101010101010101ull;
90*fb1b10abSAndroid Build Coastguard Worker out3 = src[3] * 0x0101010101010101ull;
91*fb1b10abSAndroid Build Coastguard Worker out4 = src[4] * 0x0101010101010101ull;
92*fb1b10abSAndroid Build Coastguard Worker out5 = src[5] * 0x0101010101010101ull;
93*fb1b10abSAndroid Build Coastguard Worker out6 = src[6] * 0x0101010101010101ull;
94*fb1b10abSAndroid Build Coastguard Worker out7 = src[7] * 0x0101010101010101ull;
95*fb1b10abSAndroid Build Coastguard Worker
96*fb1b10abSAndroid Build Coastguard Worker SD4(out0, out1, out2, out3, dst, dst_stride);
97*fb1b10abSAndroid Build Coastguard Worker dst += (4 * dst_stride);
98*fb1b10abSAndroid Build Coastguard Worker SD4(out4, out5, out6, out7, dst, dst_stride);
99*fb1b10abSAndroid Build Coastguard Worker }
100*fb1b10abSAndroid Build Coastguard Worker
intra_predict_horiz_16x16_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)101*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_horiz_16x16_msa(const uint8_t *src, uint8_t *dst,
102*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
103*fb1b10abSAndroid Build Coastguard Worker uint32_t row;
104*fb1b10abSAndroid Build Coastguard Worker uint8_t inp0, inp1, inp2, inp3;
105*fb1b10abSAndroid Build Coastguard Worker v16u8 src0, src1, src2, src3;
106*fb1b10abSAndroid Build Coastguard Worker
107*fb1b10abSAndroid Build Coastguard Worker for (row = 4; row--;) {
108*fb1b10abSAndroid Build Coastguard Worker inp0 = src[0];
109*fb1b10abSAndroid Build Coastguard Worker inp1 = src[1];
110*fb1b10abSAndroid Build Coastguard Worker inp2 = src[2];
111*fb1b10abSAndroid Build Coastguard Worker inp3 = src[3];
112*fb1b10abSAndroid Build Coastguard Worker src += 4;
113*fb1b10abSAndroid Build Coastguard Worker
114*fb1b10abSAndroid Build Coastguard Worker src0 = (v16u8)__msa_fill_b(inp0);
115*fb1b10abSAndroid Build Coastguard Worker src1 = (v16u8)__msa_fill_b(inp1);
116*fb1b10abSAndroid Build Coastguard Worker src2 = (v16u8)__msa_fill_b(inp2);
117*fb1b10abSAndroid Build Coastguard Worker src3 = (v16u8)__msa_fill_b(inp3);
118*fb1b10abSAndroid Build Coastguard Worker
119*fb1b10abSAndroid Build Coastguard Worker ST_UB4(src0, src1, src2, src3, dst, dst_stride);
120*fb1b10abSAndroid Build Coastguard Worker dst += (4 * dst_stride);
121*fb1b10abSAndroid Build Coastguard Worker }
122*fb1b10abSAndroid Build Coastguard Worker }
123*fb1b10abSAndroid Build Coastguard Worker
intra_predict_horiz_32x32_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)124*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_horiz_32x32_msa(const uint8_t *src, uint8_t *dst,
125*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
126*fb1b10abSAndroid Build Coastguard Worker uint32_t row;
127*fb1b10abSAndroid Build Coastguard Worker uint8_t inp0, inp1, inp2, inp3;
128*fb1b10abSAndroid Build Coastguard Worker v16u8 src0, src1, src2, src3;
129*fb1b10abSAndroid Build Coastguard Worker
130*fb1b10abSAndroid Build Coastguard Worker for (row = 8; row--;) {
131*fb1b10abSAndroid Build Coastguard Worker inp0 = src[0];
132*fb1b10abSAndroid Build Coastguard Worker inp1 = src[1];
133*fb1b10abSAndroid Build Coastguard Worker inp2 = src[2];
134*fb1b10abSAndroid Build Coastguard Worker inp3 = src[3];
135*fb1b10abSAndroid Build Coastguard Worker src += 4;
136*fb1b10abSAndroid Build Coastguard Worker
137*fb1b10abSAndroid Build Coastguard Worker src0 = (v16u8)__msa_fill_b(inp0);
138*fb1b10abSAndroid Build Coastguard Worker src1 = (v16u8)__msa_fill_b(inp1);
139*fb1b10abSAndroid Build Coastguard Worker src2 = (v16u8)__msa_fill_b(inp2);
140*fb1b10abSAndroid Build Coastguard Worker src3 = (v16u8)__msa_fill_b(inp3);
141*fb1b10abSAndroid Build Coastguard Worker
142*fb1b10abSAndroid Build Coastguard Worker ST_UB2(src0, src0, dst, 16);
143*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
144*fb1b10abSAndroid Build Coastguard Worker ST_UB2(src1, src1, dst, 16);
145*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
146*fb1b10abSAndroid Build Coastguard Worker ST_UB2(src2, src2, dst, 16);
147*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
148*fb1b10abSAndroid Build Coastguard Worker ST_UB2(src3, src3, dst, 16);
149*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
150*fb1b10abSAndroid Build Coastguard Worker }
151*fb1b10abSAndroid Build Coastguard Worker }
152*fb1b10abSAndroid Build Coastguard Worker
intra_predict_dc_4x4_msa(const uint8_t * src_top,const uint8_t * src_left,uint8_t * dst,int32_t dst_stride)153*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_dc_4x4_msa(const uint8_t *src_top,
154*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_left, uint8_t *dst,
155*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
156*fb1b10abSAndroid Build Coastguard Worker uint32_t val0, val1;
157*fb1b10abSAndroid Build Coastguard Worker v16i8 store, src = { 0 };
158*fb1b10abSAndroid Build Coastguard Worker v8u16 sum_h;
159*fb1b10abSAndroid Build Coastguard Worker v4u32 sum_w;
160*fb1b10abSAndroid Build Coastguard Worker v2u64 sum_d;
161*fb1b10abSAndroid Build Coastguard Worker
162*fb1b10abSAndroid Build Coastguard Worker val0 = LW(src_top);
163*fb1b10abSAndroid Build Coastguard Worker val1 = LW(src_left);
164*fb1b10abSAndroid Build Coastguard Worker INSERT_W2_SB(val0, val1, src);
165*fb1b10abSAndroid Build Coastguard Worker sum_h = __msa_hadd_u_h((v16u8)src, (v16u8)src);
166*fb1b10abSAndroid Build Coastguard Worker sum_w = __msa_hadd_u_w(sum_h, sum_h);
167*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
168*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_srari_w((v4i32)sum_d, 3);
169*fb1b10abSAndroid Build Coastguard Worker store = __msa_splati_b((v16i8)sum_w, 0);
170*fb1b10abSAndroid Build Coastguard Worker val0 = __msa_copy_u_w((v4i32)store, 0);
171*fb1b10abSAndroid Build Coastguard Worker
172*fb1b10abSAndroid Build Coastguard Worker SW4(val0, val0, val0, val0, dst, dst_stride);
173*fb1b10abSAndroid Build Coastguard Worker }
174*fb1b10abSAndroid Build Coastguard Worker
intra_predict_dc_tl_4x4_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)175*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_dc_tl_4x4_msa(const uint8_t *src, uint8_t *dst,
176*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
177*fb1b10abSAndroid Build Coastguard Worker uint32_t val0;
178*fb1b10abSAndroid Build Coastguard Worker v16i8 store, data = { 0 };
179*fb1b10abSAndroid Build Coastguard Worker v8u16 sum_h;
180*fb1b10abSAndroid Build Coastguard Worker v4u32 sum_w;
181*fb1b10abSAndroid Build Coastguard Worker
182*fb1b10abSAndroid Build Coastguard Worker val0 = LW(src);
183*fb1b10abSAndroid Build Coastguard Worker data = (v16i8)__msa_insert_w((v4i32)data, 0, val0);
184*fb1b10abSAndroid Build Coastguard Worker sum_h = __msa_hadd_u_h((v16u8)data, (v16u8)data);
185*fb1b10abSAndroid Build Coastguard Worker sum_w = __msa_hadd_u_w(sum_h, sum_h);
186*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_srari_w((v4i32)sum_w, 2);
187*fb1b10abSAndroid Build Coastguard Worker store = __msa_splati_b((v16i8)sum_w, 0);
188*fb1b10abSAndroid Build Coastguard Worker val0 = __msa_copy_u_w((v4i32)store, 0);
189*fb1b10abSAndroid Build Coastguard Worker
190*fb1b10abSAndroid Build Coastguard Worker SW4(val0, val0, val0, val0, dst, dst_stride);
191*fb1b10abSAndroid Build Coastguard Worker }
192*fb1b10abSAndroid Build Coastguard Worker
intra_predict_128dc_4x4_msa(uint8_t * dst,int32_t dst_stride)193*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_128dc_4x4_msa(uint8_t *dst, int32_t dst_stride) {
194*fb1b10abSAndroid Build Coastguard Worker uint32_t out;
195*fb1b10abSAndroid Build Coastguard Worker const v16i8 store = __msa_ldi_b(128);
196*fb1b10abSAndroid Build Coastguard Worker
197*fb1b10abSAndroid Build Coastguard Worker out = __msa_copy_u_w((v4i32)store, 0);
198*fb1b10abSAndroid Build Coastguard Worker
199*fb1b10abSAndroid Build Coastguard Worker SW4(out, out, out, out, dst, dst_stride);
200*fb1b10abSAndroid Build Coastguard Worker }
201*fb1b10abSAndroid Build Coastguard Worker
intra_predict_dc_8x8_msa(const uint8_t * src_top,const uint8_t * src_left,uint8_t * dst,int32_t dst_stride)202*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_dc_8x8_msa(const uint8_t *src_top,
203*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_left, uint8_t *dst,
204*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
205*fb1b10abSAndroid Build Coastguard Worker uint64_t val0, val1;
206*fb1b10abSAndroid Build Coastguard Worker v16i8 store;
207*fb1b10abSAndroid Build Coastguard Worker v16u8 src = { 0 };
208*fb1b10abSAndroid Build Coastguard Worker v8u16 sum_h;
209*fb1b10abSAndroid Build Coastguard Worker v4u32 sum_w;
210*fb1b10abSAndroid Build Coastguard Worker v2u64 sum_d;
211*fb1b10abSAndroid Build Coastguard Worker
212*fb1b10abSAndroid Build Coastguard Worker val0 = LD(src_top);
213*fb1b10abSAndroid Build Coastguard Worker val1 = LD(src_left);
214*fb1b10abSAndroid Build Coastguard Worker INSERT_D2_UB(val0, val1, src);
215*fb1b10abSAndroid Build Coastguard Worker sum_h = __msa_hadd_u_h(src, src);
216*fb1b10abSAndroid Build Coastguard Worker sum_w = __msa_hadd_u_w(sum_h, sum_h);
217*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
218*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_pckev_w((v4i32)sum_d, (v4i32)sum_d);
219*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
220*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_srari_w((v4i32)sum_d, 4);
221*fb1b10abSAndroid Build Coastguard Worker store = __msa_splati_b((v16i8)sum_w, 0);
222*fb1b10abSAndroid Build Coastguard Worker val0 = __msa_copy_u_d((v2i64)store, 0);
223*fb1b10abSAndroid Build Coastguard Worker
224*fb1b10abSAndroid Build Coastguard Worker SD4(val0, val0, val0, val0, dst, dst_stride);
225*fb1b10abSAndroid Build Coastguard Worker dst += (4 * dst_stride);
226*fb1b10abSAndroid Build Coastguard Worker SD4(val0, val0, val0, val0, dst, dst_stride);
227*fb1b10abSAndroid Build Coastguard Worker }
228*fb1b10abSAndroid Build Coastguard Worker
intra_predict_dc_tl_8x8_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)229*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_dc_tl_8x8_msa(const uint8_t *src, uint8_t *dst,
230*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
231*fb1b10abSAndroid Build Coastguard Worker uint64_t val0;
232*fb1b10abSAndroid Build Coastguard Worker v16i8 store;
233*fb1b10abSAndroid Build Coastguard Worker v16u8 data = { 0 };
234*fb1b10abSAndroid Build Coastguard Worker v8u16 sum_h;
235*fb1b10abSAndroid Build Coastguard Worker v4u32 sum_w;
236*fb1b10abSAndroid Build Coastguard Worker v2u64 sum_d;
237*fb1b10abSAndroid Build Coastguard Worker
238*fb1b10abSAndroid Build Coastguard Worker val0 = LD(src);
239*fb1b10abSAndroid Build Coastguard Worker data = (v16u8)__msa_insert_d((v2i64)data, 0, val0);
240*fb1b10abSAndroid Build Coastguard Worker sum_h = __msa_hadd_u_h(data, data);
241*fb1b10abSAndroid Build Coastguard Worker sum_w = __msa_hadd_u_w(sum_h, sum_h);
242*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
243*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_srari_w((v4i32)sum_d, 3);
244*fb1b10abSAndroid Build Coastguard Worker store = __msa_splati_b((v16i8)sum_w, 0);
245*fb1b10abSAndroid Build Coastguard Worker val0 = __msa_copy_u_d((v2i64)store, 0);
246*fb1b10abSAndroid Build Coastguard Worker
247*fb1b10abSAndroid Build Coastguard Worker SD4(val0, val0, val0, val0, dst, dst_stride);
248*fb1b10abSAndroid Build Coastguard Worker dst += (4 * dst_stride);
249*fb1b10abSAndroid Build Coastguard Worker SD4(val0, val0, val0, val0, dst, dst_stride);
250*fb1b10abSAndroid Build Coastguard Worker }
251*fb1b10abSAndroid Build Coastguard Worker
intra_predict_128dc_8x8_msa(uint8_t * dst,int32_t dst_stride)252*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_128dc_8x8_msa(uint8_t *dst, int32_t dst_stride) {
253*fb1b10abSAndroid Build Coastguard Worker uint64_t out;
254*fb1b10abSAndroid Build Coastguard Worker const v16i8 store = __msa_ldi_b(128);
255*fb1b10abSAndroid Build Coastguard Worker
256*fb1b10abSAndroid Build Coastguard Worker out = __msa_copy_u_d((v2i64)store, 0);
257*fb1b10abSAndroid Build Coastguard Worker
258*fb1b10abSAndroid Build Coastguard Worker SD4(out, out, out, out, dst, dst_stride);
259*fb1b10abSAndroid Build Coastguard Worker dst += (4 * dst_stride);
260*fb1b10abSAndroid Build Coastguard Worker SD4(out, out, out, out, dst, dst_stride);
261*fb1b10abSAndroid Build Coastguard Worker }
262*fb1b10abSAndroid Build Coastguard Worker
intra_predict_dc_16x16_msa(const uint8_t * src_top,const uint8_t * src_left,uint8_t * dst,int32_t dst_stride)263*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_dc_16x16_msa(const uint8_t *src_top,
264*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_left, uint8_t *dst,
265*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
266*fb1b10abSAndroid Build Coastguard Worker v16u8 top, left, out;
267*fb1b10abSAndroid Build Coastguard Worker v8u16 sum_h, sum_top, sum_left;
268*fb1b10abSAndroid Build Coastguard Worker v4u32 sum_w;
269*fb1b10abSAndroid Build Coastguard Worker v2u64 sum_d;
270*fb1b10abSAndroid Build Coastguard Worker
271*fb1b10abSAndroid Build Coastguard Worker top = LD_UB(src_top);
272*fb1b10abSAndroid Build Coastguard Worker left = LD_UB(src_left);
273*fb1b10abSAndroid Build Coastguard Worker HADD_UB2_UH(top, left, sum_top, sum_left);
274*fb1b10abSAndroid Build Coastguard Worker sum_h = sum_top + sum_left;
275*fb1b10abSAndroid Build Coastguard Worker sum_w = __msa_hadd_u_w(sum_h, sum_h);
276*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
277*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_pckev_w((v4i32)sum_d, (v4i32)sum_d);
278*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
279*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_srari_w((v4i32)sum_d, 5);
280*fb1b10abSAndroid Build Coastguard Worker out = (v16u8)__msa_splati_b((v16i8)sum_w, 0);
281*fb1b10abSAndroid Build Coastguard Worker
282*fb1b10abSAndroid Build Coastguard Worker ST_UB8(out, out, out, out, out, out, out, out, dst, dst_stride);
283*fb1b10abSAndroid Build Coastguard Worker dst += (8 * dst_stride);
284*fb1b10abSAndroid Build Coastguard Worker ST_UB8(out, out, out, out, out, out, out, out, dst, dst_stride);
285*fb1b10abSAndroid Build Coastguard Worker }
286*fb1b10abSAndroid Build Coastguard Worker
intra_predict_dc_tl_16x16_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)287*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_dc_tl_16x16_msa(const uint8_t *src, uint8_t *dst,
288*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
289*fb1b10abSAndroid Build Coastguard Worker v16u8 data, out;
290*fb1b10abSAndroid Build Coastguard Worker v8u16 sum_h;
291*fb1b10abSAndroid Build Coastguard Worker v4u32 sum_w;
292*fb1b10abSAndroid Build Coastguard Worker v2u64 sum_d;
293*fb1b10abSAndroid Build Coastguard Worker
294*fb1b10abSAndroid Build Coastguard Worker data = LD_UB(src);
295*fb1b10abSAndroid Build Coastguard Worker sum_h = __msa_hadd_u_h(data, data);
296*fb1b10abSAndroid Build Coastguard Worker sum_w = __msa_hadd_u_w(sum_h, sum_h);
297*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
298*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_pckev_w((v4i32)sum_d, (v4i32)sum_d);
299*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
300*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_srari_w((v4i32)sum_d, 4);
301*fb1b10abSAndroid Build Coastguard Worker out = (v16u8)__msa_splati_b((v16i8)sum_w, 0);
302*fb1b10abSAndroid Build Coastguard Worker
303*fb1b10abSAndroid Build Coastguard Worker ST_UB8(out, out, out, out, out, out, out, out, dst, dst_stride);
304*fb1b10abSAndroid Build Coastguard Worker dst += (8 * dst_stride);
305*fb1b10abSAndroid Build Coastguard Worker ST_UB8(out, out, out, out, out, out, out, out, dst, dst_stride);
306*fb1b10abSAndroid Build Coastguard Worker }
307*fb1b10abSAndroid Build Coastguard Worker
intra_predict_128dc_16x16_msa(uint8_t * dst,int32_t dst_stride)308*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_128dc_16x16_msa(uint8_t *dst, int32_t dst_stride) {
309*fb1b10abSAndroid Build Coastguard Worker const v16u8 out = (v16u8)__msa_ldi_b(128);
310*fb1b10abSAndroid Build Coastguard Worker
311*fb1b10abSAndroid Build Coastguard Worker ST_UB8(out, out, out, out, out, out, out, out, dst, dst_stride);
312*fb1b10abSAndroid Build Coastguard Worker dst += (8 * dst_stride);
313*fb1b10abSAndroid Build Coastguard Worker ST_UB8(out, out, out, out, out, out, out, out, dst, dst_stride);
314*fb1b10abSAndroid Build Coastguard Worker }
315*fb1b10abSAndroid Build Coastguard Worker
intra_predict_dc_32x32_msa(const uint8_t * src_top,const uint8_t * src_left,uint8_t * dst,int32_t dst_stride)316*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_dc_32x32_msa(const uint8_t *src_top,
317*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_left, uint8_t *dst,
318*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
319*fb1b10abSAndroid Build Coastguard Worker uint32_t row;
320*fb1b10abSAndroid Build Coastguard Worker v16u8 top0, top1, left0, left1, out;
321*fb1b10abSAndroid Build Coastguard Worker v8u16 sum_h, sum_top0, sum_top1, sum_left0, sum_left1;
322*fb1b10abSAndroid Build Coastguard Worker v4u32 sum_w;
323*fb1b10abSAndroid Build Coastguard Worker v2u64 sum_d;
324*fb1b10abSAndroid Build Coastguard Worker
325*fb1b10abSAndroid Build Coastguard Worker LD_UB2(src_top, 16, top0, top1);
326*fb1b10abSAndroid Build Coastguard Worker LD_UB2(src_left, 16, left0, left1);
327*fb1b10abSAndroid Build Coastguard Worker HADD_UB2_UH(top0, top1, sum_top0, sum_top1);
328*fb1b10abSAndroid Build Coastguard Worker HADD_UB2_UH(left0, left1, sum_left0, sum_left1);
329*fb1b10abSAndroid Build Coastguard Worker sum_h = sum_top0 + sum_top1;
330*fb1b10abSAndroid Build Coastguard Worker sum_h += sum_left0 + sum_left1;
331*fb1b10abSAndroid Build Coastguard Worker sum_w = __msa_hadd_u_w(sum_h, sum_h);
332*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
333*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_pckev_w((v4i32)sum_d, (v4i32)sum_d);
334*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
335*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_srari_w((v4i32)sum_d, 6);
336*fb1b10abSAndroid Build Coastguard Worker out = (v16u8)__msa_splati_b((v16i8)sum_w, 0);
337*fb1b10abSAndroid Build Coastguard Worker
338*fb1b10abSAndroid Build Coastguard Worker for (row = 16; row--;) {
339*fb1b10abSAndroid Build Coastguard Worker ST_UB2(out, out, dst, 16);
340*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
341*fb1b10abSAndroid Build Coastguard Worker ST_UB2(out, out, dst, 16);
342*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
343*fb1b10abSAndroid Build Coastguard Worker }
344*fb1b10abSAndroid Build Coastguard Worker }
345*fb1b10abSAndroid Build Coastguard Worker
intra_predict_dc_tl_32x32_msa(const uint8_t * src,uint8_t * dst,int32_t dst_stride)346*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_dc_tl_32x32_msa(const uint8_t *src, uint8_t *dst,
347*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
348*fb1b10abSAndroid Build Coastguard Worker uint32_t row;
349*fb1b10abSAndroid Build Coastguard Worker v16u8 data0, data1, out;
350*fb1b10abSAndroid Build Coastguard Worker v8u16 sum_h, sum_data0, sum_data1;
351*fb1b10abSAndroid Build Coastguard Worker v4u32 sum_w;
352*fb1b10abSAndroid Build Coastguard Worker v2u64 sum_d;
353*fb1b10abSAndroid Build Coastguard Worker
354*fb1b10abSAndroid Build Coastguard Worker LD_UB2(src, 16, data0, data1);
355*fb1b10abSAndroid Build Coastguard Worker HADD_UB2_UH(data0, data1, sum_data0, sum_data1);
356*fb1b10abSAndroid Build Coastguard Worker sum_h = sum_data0 + sum_data1;
357*fb1b10abSAndroid Build Coastguard Worker sum_w = __msa_hadd_u_w(sum_h, sum_h);
358*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
359*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_pckev_w((v4i32)sum_d, (v4i32)sum_d);
360*fb1b10abSAndroid Build Coastguard Worker sum_d = __msa_hadd_u_d(sum_w, sum_w);
361*fb1b10abSAndroid Build Coastguard Worker sum_w = (v4u32)__msa_srari_w((v4i32)sum_d, 5);
362*fb1b10abSAndroid Build Coastguard Worker out = (v16u8)__msa_splati_b((v16i8)sum_w, 0);
363*fb1b10abSAndroid Build Coastguard Worker
364*fb1b10abSAndroid Build Coastguard Worker for (row = 16; row--;) {
365*fb1b10abSAndroid Build Coastguard Worker ST_UB2(out, out, dst, 16);
366*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
367*fb1b10abSAndroid Build Coastguard Worker ST_UB2(out, out, dst, 16);
368*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
369*fb1b10abSAndroid Build Coastguard Worker }
370*fb1b10abSAndroid Build Coastguard Worker }
371*fb1b10abSAndroid Build Coastguard Worker
intra_predict_128dc_32x32_msa(uint8_t * dst,int32_t dst_stride)372*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_128dc_32x32_msa(uint8_t *dst, int32_t dst_stride) {
373*fb1b10abSAndroid Build Coastguard Worker uint32_t row;
374*fb1b10abSAndroid Build Coastguard Worker const v16u8 out = (v16u8)__msa_ldi_b(128);
375*fb1b10abSAndroid Build Coastguard Worker
376*fb1b10abSAndroid Build Coastguard Worker for (row = 16; row--;) {
377*fb1b10abSAndroid Build Coastguard Worker ST_UB2(out, out, dst, 16);
378*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
379*fb1b10abSAndroid Build Coastguard Worker ST_UB2(out, out, dst, 16);
380*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
381*fb1b10abSAndroid Build Coastguard Worker }
382*fb1b10abSAndroid Build Coastguard Worker }
383*fb1b10abSAndroid Build Coastguard Worker
intra_predict_tm_4x4_msa(const uint8_t * src_top_ptr,const uint8_t * src_left,uint8_t * dst,int32_t dst_stride)384*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_tm_4x4_msa(const uint8_t *src_top_ptr,
385*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_left, uint8_t *dst,
386*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
387*fb1b10abSAndroid Build Coastguard Worker uint32_t val;
388*fb1b10abSAndroid Build Coastguard Worker uint8_t top_left = src_top_ptr[-1];
389*fb1b10abSAndroid Build Coastguard Worker v16i8 src_left0, src_left1, src_left2, src_left3, tmp0, tmp1, src_top = { 0 };
390*fb1b10abSAndroid Build Coastguard Worker v16u8 src0, src1, src2, src3;
391*fb1b10abSAndroid Build Coastguard Worker v8u16 src_top_left, vec0, vec1, vec2, vec3;
392*fb1b10abSAndroid Build Coastguard Worker
393*fb1b10abSAndroid Build Coastguard Worker src_top_left = (v8u16)__msa_fill_h(top_left);
394*fb1b10abSAndroid Build Coastguard Worker val = LW(src_top_ptr);
395*fb1b10abSAndroid Build Coastguard Worker src_top = (v16i8)__msa_insert_w((v4i32)src_top, 0, val);
396*fb1b10abSAndroid Build Coastguard Worker
397*fb1b10abSAndroid Build Coastguard Worker src_left0 = __msa_fill_b(src_left[0]);
398*fb1b10abSAndroid Build Coastguard Worker src_left1 = __msa_fill_b(src_left[1]);
399*fb1b10abSAndroid Build Coastguard Worker src_left2 = __msa_fill_b(src_left[2]);
400*fb1b10abSAndroid Build Coastguard Worker src_left3 = __msa_fill_b(src_left[3]);
401*fb1b10abSAndroid Build Coastguard Worker
402*fb1b10abSAndroid Build Coastguard Worker ILVR_B4_UB(src_left0, src_top, src_left1, src_top, src_left2, src_top,
403*fb1b10abSAndroid Build Coastguard Worker src_left3, src_top, src0, src1, src2, src3);
404*fb1b10abSAndroid Build Coastguard Worker HADD_UB4_UH(src0, src1, src2, src3, vec0, vec1, vec2, vec3);
405*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, vec0, vec1);
406*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, vec2, vec3);
407*fb1b10abSAndroid Build Coastguard Worker SAT_UH4_UH(vec0, vec1, vec2, vec3, 7);
408*fb1b10abSAndroid Build Coastguard Worker PCKEV_B2_SB(vec1, vec0, vec3, vec2, tmp0, tmp1);
409*fb1b10abSAndroid Build Coastguard Worker ST4x4_UB(tmp0, tmp1, 0, 2, 0, 2, dst, dst_stride);
410*fb1b10abSAndroid Build Coastguard Worker }
411*fb1b10abSAndroid Build Coastguard Worker
intra_predict_tm_8x8_msa(const uint8_t * src_top_ptr,const uint8_t * src_left,uint8_t * dst,int32_t dst_stride)412*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_tm_8x8_msa(const uint8_t *src_top_ptr,
413*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_left, uint8_t *dst,
414*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
415*fb1b10abSAndroid Build Coastguard Worker uint64_t val;
416*fb1b10abSAndroid Build Coastguard Worker uint8_t top_left = src_top_ptr[-1];
417*fb1b10abSAndroid Build Coastguard Worker uint32_t loop_cnt;
418*fb1b10abSAndroid Build Coastguard Worker v16i8 src_left0, src_left1, src_left2, src_left3, tmp0, tmp1, src_top = { 0 };
419*fb1b10abSAndroid Build Coastguard Worker v8u16 src_top_left, vec0, vec1, vec2, vec3;
420*fb1b10abSAndroid Build Coastguard Worker v16u8 src0, src1, src2, src3;
421*fb1b10abSAndroid Build Coastguard Worker
422*fb1b10abSAndroid Build Coastguard Worker val = LD(src_top_ptr);
423*fb1b10abSAndroid Build Coastguard Worker src_top = (v16i8)__msa_insert_d((v2i64)src_top, 0, val);
424*fb1b10abSAndroid Build Coastguard Worker src_top_left = (v8u16)__msa_fill_h(top_left);
425*fb1b10abSAndroid Build Coastguard Worker
426*fb1b10abSAndroid Build Coastguard Worker for (loop_cnt = 2; loop_cnt--;) {
427*fb1b10abSAndroid Build Coastguard Worker src_left0 = __msa_fill_b(src_left[0]);
428*fb1b10abSAndroid Build Coastguard Worker src_left1 = __msa_fill_b(src_left[1]);
429*fb1b10abSAndroid Build Coastguard Worker src_left2 = __msa_fill_b(src_left[2]);
430*fb1b10abSAndroid Build Coastguard Worker src_left3 = __msa_fill_b(src_left[3]);
431*fb1b10abSAndroid Build Coastguard Worker src_left += 4;
432*fb1b10abSAndroid Build Coastguard Worker
433*fb1b10abSAndroid Build Coastguard Worker ILVR_B4_UB(src_left0, src_top, src_left1, src_top, src_left2, src_top,
434*fb1b10abSAndroid Build Coastguard Worker src_left3, src_top, src0, src1, src2, src3);
435*fb1b10abSAndroid Build Coastguard Worker HADD_UB4_UH(src0, src1, src2, src3, vec0, vec1, vec2, vec3);
436*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, vec0, vec1);
437*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, vec2, vec3);
438*fb1b10abSAndroid Build Coastguard Worker SAT_UH4_UH(vec0, vec1, vec2, vec3, 7);
439*fb1b10abSAndroid Build Coastguard Worker PCKEV_B2_SB(vec1, vec0, vec3, vec2, tmp0, tmp1);
440*fb1b10abSAndroid Build Coastguard Worker ST8x4_UB(tmp0, tmp1, dst, dst_stride);
441*fb1b10abSAndroid Build Coastguard Worker dst += (4 * dst_stride);
442*fb1b10abSAndroid Build Coastguard Worker }
443*fb1b10abSAndroid Build Coastguard Worker }
444*fb1b10abSAndroid Build Coastguard Worker
intra_predict_tm_16x16_msa(const uint8_t * src_top_ptr,const uint8_t * src_left,uint8_t * dst,int32_t dst_stride)445*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_tm_16x16_msa(const uint8_t *src_top_ptr,
446*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_left, uint8_t *dst,
447*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
448*fb1b10abSAndroid Build Coastguard Worker uint8_t top_left = src_top_ptr[-1];
449*fb1b10abSAndroid Build Coastguard Worker uint32_t loop_cnt;
450*fb1b10abSAndroid Build Coastguard Worker v16i8 src_top, src_left0, src_left1, src_left2, src_left3;
451*fb1b10abSAndroid Build Coastguard Worker v8u16 src_top_left, res_r, res_l;
452*fb1b10abSAndroid Build Coastguard Worker
453*fb1b10abSAndroid Build Coastguard Worker src_top = LD_SB(src_top_ptr);
454*fb1b10abSAndroid Build Coastguard Worker src_top_left = (v8u16)__msa_fill_h(top_left);
455*fb1b10abSAndroid Build Coastguard Worker
456*fb1b10abSAndroid Build Coastguard Worker for (loop_cnt = 4; loop_cnt--;) {
457*fb1b10abSAndroid Build Coastguard Worker src_left0 = __msa_fill_b(src_left[0]);
458*fb1b10abSAndroid Build Coastguard Worker src_left1 = __msa_fill_b(src_left[1]);
459*fb1b10abSAndroid Build Coastguard Worker src_left2 = __msa_fill_b(src_left[2]);
460*fb1b10abSAndroid Build Coastguard Worker src_left3 = __msa_fill_b(src_left[3]);
461*fb1b10abSAndroid Build Coastguard Worker src_left += 4;
462*fb1b10abSAndroid Build Coastguard Worker
463*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UH(src_left0, src_top, res_r, res_l);
464*fb1b10abSAndroid Build Coastguard Worker HADD_UB2_UH(res_r, res_l, res_r, res_l);
465*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r, res_l);
466*fb1b10abSAndroid Build Coastguard Worker
467*fb1b10abSAndroid Build Coastguard Worker SAT_UH2_UH(res_r, res_l, 7);
468*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r, res_l, dst);
469*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
470*fb1b10abSAndroid Build Coastguard Worker
471*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UH(src_left1, src_top, res_r, res_l);
472*fb1b10abSAndroid Build Coastguard Worker HADD_UB2_UH(res_r, res_l, res_r, res_l);
473*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r, res_l);
474*fb1b10abSAndroid Build Coastguard Worker SAT_UH2_UH(res_r, res_l, 7);
475*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r, res_l, dst);
476*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
477*fb1b10abSAndroid Build Coastguard Worker
478*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UH(src_left2, src_top, res_r, res_l);
479*fb1b10abSAndroid Build Coastguard Worker HADD_UB2_UH(res_r, res_l, res_r, res_l);
480*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r, res_l);
481*fb1b10abSAndroid Build Coastguard Worker SAT_UH2_UH(res_r, res_l, 7);
482*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r, res_l, dst);
483*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
484*fb1b10abSAndroid Build Coastguard Worker
485*fb1b10abSAndroid Build Coastguard Worker ILVRL_B2_UH(src_left3, src_top, res_r, res_l);
486*fb1b10abSAndroid Build Coastguard Worker HADD_UB2_UH(res_r, res_l, res_r, res_l);
487*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r, res_l);
488*fb1b10abSAndroid Build Coastguard Worker SAT_UH2_UH(res_r, res_l, 7);
489*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r, res_l, dst);
490*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
491*fb1b10abSAndroid Build Coastguard Worker }
492*fb1b10abSAndroid Build Coastguard Worker }
493*fb1b10abSAndroid Build Coastguard Worker
intra_predict_tm_32x32_msa(const uint8_t * src_top,const uint8_t * src_left,uint8_t * dst,int32_t dst_stride)494*fb1b10abSAndroid Build Coastguard Worker static void intra_predict_tm_32x32_msa(const uint8_t *src_top,
495*fb1b10abSAndroid Build Coastguard Worker const uint8_t *src_left, uint8_t *dst,
496*fb1b10abSAndroid Build Coastguard Worker int32_t dst_stride) {
497*fb1b10abSAndroid Build Coastguard Worker uint8_t top_left = src_top[-1];
498*fb1b10abSAndroid Build Coastguard Worker uint32_t loop_cnt;
499*fb1b10abSAndroid Build Coastguard Worker v16i8 src_top0, src_top1, src_left0, src_left1, src_left2, src_left3;
500*fb1b10abSAndroid Build Coastguard Worker v8u16 src_top_left, res_r0, res_r1, res_l0, res_l1;
501*fb1b10abSAndroid Build Coastguard Worker
502*fb1b10abSAndroid Build Coastguard Worker LD_SB2(src_top, 16, src_top0, src_top1);
503*fb1b10abSAndroid Build Coastguard Worker src_top_left = (v8u16)__msa_fill_h(top_left);
504*fb1b10abSAndroid Build Coastguard Worker
505*fb1b10abSAndroid Build Coastguard Worker for (loop_cnt = 8; loop_cnt--;) {
506*fb1b10abSAndroid Build Coastguard Worker src_left0 = __msa_fill_b(src_left[0]);
507*fb1b10abSAndroid Build Coastguard Worker src_left1 = __msa_fill_b(src_left[1]);
508*fb1b10abSAndroid Build Coastguard Worker src_left2 = __msa_fill_b(src_left[2]);
509*fb1b10abSAndroid Build Coastguard Worker src_left3 = __msa_fill_b(src_left[3]);
510*fb1b10abSAndroid Build Coastguard Worker src_left += 4;
511*fb1b10abSAndroid Build Coastguard Worker
512*fb1b10abSAndroid Build Coastguard Worker ILVR_B2_UH(src_left0, src_top0, src_left0, src_top1, res_r0, res_r1);
513*fb1b10abSAndroid Build Coastguard Worker ILVL_B2_UH(src_left0, src_top0, src_left0, src_top1, res_l0, res_l1);
514*fb1b10abSAndroid Build Coastguard Worker HADD_UB4_UH(res_r0, res_l0, res_r1, res_l1, res_r0, res_l0, res_r1, res_l1);
515*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r0, res_l0);
516*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r1, res_l1);
517*fb1b10abSAndroid Build Coastguard Worker SAT_UH4_UH(res_r0, res_l0, res_r1, res_l1, 7);
518*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r0, res_l0, dst);
519*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r1, res_l1, dst + 16);
520*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
521*fb1b10abSAndroid Build Coastguard Worker
522*fb1b10abSAndroid Build Coastguard Worker ILVR_B2_UH(src_left1, src_top0, src_left1, src_top1, res_r0, res_r1);
523*fb1b10abSAndroid Build Coastguard Worker ILVL_B2_UH(src_left1, src_top0, src_left1, src_top1, res_l0, res_l1);
524*fb1b10abSAndroid Build Coastguard Worker HADD_UB4_UH(res_r0, res_l0, res_r1, res_l1, res_r0, res_l0, res_r1, res_l1);
525*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r0, res_l0);
526*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r1, res_l1);
527*fb1b10abSAndroid Build Coastguard Worker SAT_UH4_UH(res_r0, res_l0, res_r1, res_l1, 7);
528*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r0, res_l0, dst);
529*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r1, res_l1, dst + 16);
530*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
531*fb1b10abSAndroid Build Coastguard Worker
532*fb1b10abSAndroid Build Coastguard Worker ILVR_B2_UH(src_left2, src_top0, src_left2, src_top1, res_r0, res_r1);
533*fb1b10abSAndroid Build Coastguard Worker ILVL_B2_UH(src_left2, src_top0, src_left2, src_top1, res_l0, res_l1);
534*fb1b10abSAndroid Build Coastguard Worker HADD_UB4_UH(res_r0, res_l0, res_r1, res_l1, res_r0, res_l0, res_r1, res_l1);
535*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r0, res_l0);
536*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r1, res_l1);
537*fb1b10abSAndroid Build Coastguard Worker SAT_UH4_UH(res_r0, res_l0, res_r1, res_l1, 7);
538*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r0, res_l0, dst);
539*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r1, res_l1, dst + 16);
540*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
541*fb1b10abSAndroid Build Coastguard Worker
542*fb1b10abSAndroid Build Coastguard Worker ILVR_B2_UH(src_left3, src_top0, src_left3, src_top1, res_r0, res_r1);
543*fb1b10abSAndroid Build Coastguard Worker ILVL_B2_UH(src_left3, src_top0, src_left3, src_top1, res_l0, res_l1);
544*fb1b10abSAndroid Build Coastguard Worker HADD_UB4_UH(res_r0, res_l0, res_r1, res_l1, res_r0, res_l0, res_r1, res_l1);
545*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r0, res_l0);
546*fb1b10abSAndroid Build Coastguard Worker IPRED_SUBS_UH2_UH(src_top_left, src_top_left, res_r1, res_l1);
547*fb1b10abSAndroid Build Coastguard Worker SAT_UH4_UH(res_r0, res_l0, res_r1, res_l1, 7);
548*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r0, res_l0, dst);
549*fb1b10abSAndroid Build Coastguard Worker PCKEV_ST_SB(res_r1, res_l1, dst + 16);
550*fb1b10abSAndroid Build Coastguard Worker dst += dst_stride;
551*fb1b10abSAndroid Build Coastguard Worker }
552*fb1b10abSAndroid Build Coastguard Worker }
553*fb1b10abSAndroid Build Coastguard Worker
vpx_v_predictor_4x4_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)554*fb1b10abSAndroid Build Coastguard Worker void vpx_v_predictor_4x4_msa(uint8_t *dst, ptrdiff_t y_stride,
555*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
556*fb1b10abSAndroid Build Coastguard Worker (void)left;
557*fb1b10abSAndroid Build Coastguard Worker
558*fb1b10abSAndroid Build Coastguard Worker intra_predict_vert_4x4_msa(above, dst, y_stride);
559*fb1b10abSAndroid Build Coastguard Worker }
560*fb1b10abSAndroid Build Coastguard Worker
vpx_v_predictor_8x8_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)561*fb1b10abSAndroid Build Coastguard Worker void vpx_v_predictor_8x8_msa(uint8_t *dst, ptrdiff_t y_stride,
562*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
563*fb1b10abSAndroid Build Coastguard Worker (void)left;
564*fb1b10abSAndroid Build Coastguard Worker
565*fb1b10abSAndroid Build Coastguard Worker intra_predict_vert_8x8_msa(above, dst, y_stride);
566*fb1b10abSAndroid Build Coastguard Worker }
567*fb1b10abSAndroid Build Coastguard Worker
vpx_v_predictor_16x16_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)568*fb1b10abSAndroid Build Coastguard Worker void vpx_v_predictor_16x16_msa(uint8_t *dst, ptrdiff_t y_stride,
569*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
570*fb1b10abSAndroid Build Coastguard Worker (void)left;
571*fb1b10abSAndroid Build Coastguard Worker
572*fb1b10abSAndroid Build Coastguard Worker intra_predict_vert_16x16_msa(above, dst, y_stride);
573*fb1b10abSAndroid Build Coastguard Worker }
574*fb1b10abSAndroid Build Coastguard Worker
vpx_v_predictor_32x32_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)575*fb1b10abSAndroid Build Coastguard Worker void vpx_v_predictor_32x32_msa(uint8_t *dst, ptrdiff_t y_stride,
576*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
577*fb1b10abSAndroid Build Coastguard Worker (void)left;
578*fb1b10abSAndroid Build Coastguard Worker
579*fb1b10abSAndroid Build Coastguard Worker intra_predict_vert_32x32_msa(above, dst, y_stride);
580*fb1b10abSAndroid Build Coastguard Worker }
581*fb1b10abSAndroid Build Coastguard Worker
vpx_h_predictor_4x4_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)582*fb1b10abSAndroid Build Coastguard Worker void vpx_h_predictor_4x4_msa(uint8_t *dst, ptrdiff_t y_stride,
583*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
584*fb1b10abSAndroid Build Coastguard Worker (void)above;
585*fb1b10abSAndroid Build Coastguard Worker
586*fb1b10abSAndroid Build Coastguard Worker intra_predict_horiz_4x4_msa(left, dst, y_stride);
587*fb1b10abSAndroid Build Coastguard Worker }
588*fb1b10abSAndroid Build Coastguard Worker
vpx_h_predictor_8x8_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)589*fb1b10abSAndroid Build Coastguard Worker void vpx_h_predictor_8x8_msa(uint8_t *dst, ptrdiff_t y_stride,
590*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
591*fb1b10abSAndroid Build Coastguard Worker (void)above;
592*fb1b10abSAndroid Build Coastguard Worker
593*fb1b10abSAndroid Build Coastguard Worker intra_predict_horiz_8x8_msa(left, dst, y_stride);
594*fb1b10abSAndroid Build Coastguard Worker }
595*fb1b10abSAndroid Build Coastguard Worker
vpx_h_predictor_16x16_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)596*fb1b10abSAndroid Build Coastguard Worker void vpx_h_predictor_16x16_msa(uint8_t *dst, ptrdiff_t y_stride,
597*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
598*fb1b10abSAndroid Build Coastguard Worker (void)above;
599*fb1b10abSAndroid Build Coastguard Worker
600*fb1b10abSAndroid Build Coastguard Worker intra_predict_horiz_16x16_msa(left, dst, y_stride);
601*fb1b10abSAndroid Build Coastguard Worker }
602*fb1b10abSAndroid Build Coastguard Worker
vpx_h_predictor_32x32_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)603*fb1b10abSAndroid Build Coastguard Worker void vpx_h_predictor_32x32_msa(uint8_t *dst, ptrdiff_t y_stride,
604*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
605*fb1b10abSAndroid Build Coastguard Worker (void)above;
606*fb1b10abSAndroid Build Coastguard Worker
607*fb1b10abSAndroid Build Coastguard Worker intra_predict_horiz_32x32_msa(left, dst, y_stride);
608*fb1b10abSAndroid Build Coastguard Worker }
609*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_predictor_4x4_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)610*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_predictor_4x4_msa(uint8_t *dst, ptrdiff_t y_stride,
611*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
612*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_4x4_msa(above, left, dst, y_stride);
613*fb1b10abSAndroid Build Coastguard Worker }
614*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_predictor_8x8_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)615*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_predictor_8x8_msa(uint8_t *dst, ptrdiff_t y_stride,
616*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
617*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_8x8_msa(above, left, dst, y_stride);
618*fb1b10abSAndroid Build Coastguard Worker }
619*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_predictor_16x16_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)620*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_predictor_16x16_msa(uint8_t *dst, ptrdiff_t y_stride,
621*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
622*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_16x16_msa(above, left, dst, y_stride);
623*fb1b10abSAndroid Build Coastguard Worker }
624*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_predictor_32x32_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)625*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_predictor_32x32_msa(uint8_t *dst, ptrdiff_t y_stride,
626*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
627*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_32x32_msa(above, left, dst, y_stride);
628*fb1b10abSAndroid Build Coastguard Worker }
629*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_top_predictor_4x4_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)630*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_top_predictor_4x4_msa(uint8_t *dst, ptrdiff_t y_stride,
631*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
632*fb1b10abSAndroid Build Coastguard Worker (void)left;
633*fb1b10abSAndroid Build Coastguard Worker
634*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_tl_4x4_msa(above, dst, y_stride);
635*fb1b10abSAndroid Build Coastguard Worker }
636*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_top_predictor_8x8_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)637*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_top_predictor_8x8_msa(uint8_t *dst, ptrdiff_t y_stride,
638*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
639*fb1b10abSAndroid Build Coastguard Worker (void)left;
640*fb1b10abSAndroid Build Coastguard Worker
641*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_tl_8x8_msa(above, dst, y_stride);
642*fb1b10abSAndroid Build Coastguard Worker }
643*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_top_predictor_16x16_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)644*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_top_predictor_16x16_msa(uint8_t *dst, ptrdiff_t y_stride,
645*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
646*fb1b10abSAndroid Build Coastguard Worker (void)left;
647*fb1b10abSAndroid Build Coastguard Worker
648*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_tl_16x16_msa(above, dst, y_stride);
649*fb1b10abSAndroid Build Coastguard Worker }
650*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_top_predictor_32x32_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)651*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_top_predictor_32x32_msa(uint8_t *dst, ptrdiff_t y_stride,
652*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
653*fb1b10abSAndroid Build Coastguard Worker (void)left;
654*fb1b10abSAndroid Build Coastguard Worker
655*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_tl_32x32_msa(above, dst, y_stride);
656*fb1b10abSAndroid Build Coastguard Worker }
657*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_left_predictor_4x4_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)658*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_left_predictor_4x4_msa(uint8_t *dst, ptrdiff_t y_stride,
659*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
660*fb1b10abSAndroid Build Coastguard Worker (void)above;
661*fb1b10abSAndroid Build Coastguard Worker
662*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_tl_4x4_msa(left, dst, y_stride);
663*fb1b10abSAndroid Build Coastguard Worker }
664*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_left_predictor_8x8_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)665*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_left_predictor_8x8_msa(uint8_t *dst, ptrdiff_t y_stride,
666*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
667*fb1b10abSAndroid Build Coastguard Worker (void)above;
668*fb1b10abSAndroid Build Coastguard Worker
669*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_tl_8x8_msa(left, dst, y_stride);
670*fb1b10abSAndroid Build Coastguard Worker }
671*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_left_predictor_16x16_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)672*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_left_predictor_16x16_msa(uint8_t *dst, ptrdiff_t y_stride,
673*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above,
674*fb1b10abSAndroid Build Coastguard Worker const uint8_t *left) {
675*fb1b10abSAndroid Build Coastguard Worker (void)above;
676*fb1b10abSAndroid Build Coastguard Worker
677*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_tl_16x16_msa(left, dst, y_stride);
678*fb1b10abSAndroid Build Coastguard Worker }
679*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_left_predictor_32x32_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)680*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_left_predictor_32x32_msa(uint8_t *dst, ptrdiff_t y_stride,
681*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above,
682*fb1b10abSAndroid Build Coastguard Worker const uint8_t *left) {
683*fb1b10abSAndroid Build Coastguard Worker (void)above;
684*fb1b10abSAndroid Build Coastguard Worker
685*fb1b10abSAndroid Build Coastguard Worker intra_predict_dc_tl_32x32_msa(left, dst, y_stride);
686*fb1b10abSAndroid Build Coastguard Worker }
687*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_128_predictor_4x4_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)688*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_128_predictor_4x4_msa(uint8_t *dst, ptrdiff_t y_stride,
689*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
690*fb1b10abSAndroid Build Coastguard Worker (void)above;
691*fb1b10abSAndroid Build Coastguard Worker (void)left;
692*fb1b10abSAndroid Build Coastguard Worker
693*fb1b10abSAndroid Build Coastguard Worker intra_predict_128dc_4x4_msa(dst, y_stride);
694*fb1b10abSAndroid Build Coastguard Worker }
695*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_128_predictor_8x8_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)696*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_128_predictor_8x8_msa(uint8_t *dst, ptrdiff_t y_stride,
697*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
698*fb1b10abSAndroid Build Coastguard Worker (void)above;
699*fb1b10abSAndroid Build Coastguard Worker (void)left;
700*fb1b10abSAndroid Build Coastguard Worker
701*fb1b10abSAndroid Build Coastguard Worker intra_predict_128dc_8x8_msa(dst, y_stride);
702*fb1b10abSAndroid Build Coastguard Worker }
703*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_128_predictor_16x16_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)704*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_128_predictor_16x16_msa(uint8_t *dst, ptrdiff_t y_stride,
705*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
706*fb1b10abSAndroid Build Coastguard Worker (void)above;
707*fb1b10abSAndroid Build Coastguard Worker (void)left;
708*fb1b10abSAndroid Build Coastguard Worker
709*fb1b10abSAndroid Build Coastguard Worker intra_predict_128dc_16x16_msa(dst, y_stride);
710*fb1b10abSAndroid Build Coastguard Worker }
711*fb1b10abSAndroid Build Coastguard Worker
vpx_dc_128_predictor_32x32_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)712*fb1b10abSAndroid Build Coastguard Worker void vpx_dc_128_predictor_32x32_msa(uint8_t *dst, ptrdiff_t y_stride,
713*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
714*fb1b10abSAndroid Build Coastguard Worker (void)above;
715*fb1b10abSAndroid Build Coastguard Worker (void)left;
716*fb1b10abSAndroid Build Coastguard Worker
717*fb1b10abSAndroid Build Coastguard Worker intra_predict_128dc_32x32_msa(dst, y_stride);
718*fb1b10abSAndroid Build Coastguard Worker }
719*fb1b10abSAndroid Build Coastguard Worker
vpx_tm_predictor_4x4_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)720*fb1b10abSAndroid Build Coastguard Worker void vpx_tm_predictor_4x4_msa(uint8_t *dst, ptrdiff_t y_stride,
721*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
722*fb1b10abSAndroid Build Coastguard Worker intra_predict_tm_4x4_msa(above, left, dst, y_stride);
723*fb1b10abSAndroid Build Coastguard Worker }
724*fb1b10abSAndroid Build Coastguard Worker
vpx_tm_predictor_8x8_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)725*fb1b10abSAndroid Build Coastguard Worker void vpx_tm_predictor_8x8_msa(uint8_t *dst, ptrdiff_t y_stride,
726*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
727*fb1b10abSAndroid Build Coastguard Worker intra_predict_tm_8x8_msa(above, left, dst, y_stride);
728*fb1b10abSAndroid Build Coastguard Worker }
729*fb1b10abSAndroid Build Coastguard Worker
vpx_tm_predictor_16x16_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)730*fb1b10abSAndroid Build Coastguard Worker void vpx_tm_predictor_16x16_msa(uint8_t *dst, ptrdiff_t y_stride,
731*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
732*fb1b10abSAndroid Build Coastguard Worker intra_predict_tm_16x16_msa(above, left, dst, y_stride);
733*fb1b10abSAndroid Build Coastguard Worker }
734*fb1b10abSAndroid Build Coastguard Worker
vpx_tm_predictor_32x32_msa(uint8_t * dst,ptrdiff_t y_stride,const uint8_t * above,const uint8_t * left)735*fb1b10abSAndroid Build Coastguard Worker void vpx_tm_predictor_32x32_msa(uint8_t *dst, ptrdiff_t y_stride,
736*fb1b10abSAndroid Build Coastguard Worker const uint8_t *above, const uint8_t *left) {
737*fb1b10abSAndroid Build Coastguard Worker intra_predict_tm_32x32_msa(above, left, dst, y_stride);
738*fb1b10abSAndroid Build Coastguard Worker }
739