1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2017 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 <assert.h>
12*fb1b10abSAndroid Build Coastguard Worker
13*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_config.h"
14*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_dsp_rtcd.h"
15*fb1b10abSAndroid Build Coastguard Worker #include "vpx_dsp/ppc/types_vsx.h"
16*fb1b10abSAndroid Build Coastguard Worker
vpx_get4x4sse_cs_vsx(const uint8_t * src_ptr,int src_stride,const uint8_t * ref_ptr,int ref_stride)17*fb1b10abSAndroid Build Coastguard Worker uint32_t vpx_get4x4sse_cs_vsx(const uint8_t *src_ptr, int src_stride,
18*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride) {
19*fb1b10abSAndroid Build Coastguard Worker int distortion;
20*fb1b10abSAndroid Build Coastguard Worker
21*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a0 = unpack_to_s16_h(read4x2(src_ptr, src_stride));
22*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a1 =
23*fb1b10abSAndroid Build Coastguard Worker unpack_to_s16_h(read4x2(src_ptr + src_stride * 2, src_stride));
24*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b0 = unpack_to_s16_h(read4x2(ref_ptr, ref_stride));
25*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b1 =
26*fb1b10abSAndroid Build Coastguard Worker unpack_to_s16_h(read4x2(ref_ptr + ref_stride * 2, ref_stride));
27*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d0 = vec_sub(a0, b0);
28*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d1 = vec_sub(a1, b1);
29*fb1b10abSAndroid Build Coastguard Worker const int32x4_t ds = vec_msum(d1, d1, vec_msum(d0, d0, vec_splat_s32(0)));
30*fb1b10abSAndroid Build Coastguard Worker const int32x4_t d = vec_splat(vec_sums(ds, vec_splat_s32(0)), 3);
31*fb1b10abSAndroid Build Coastguard Worker
32*fb1b10abSAndroid Build Coastguard Worker vec_ste(d, 0, &distortion);
33*fb1b10abSAndroid Build Coastguard Worker
34*fb1b10abSAndroid Build Coastguard Worker return distortion;
35*fb1b10abSAndroid Build Coastguard Worker }
36*fb1b10abSAndroid Build Coastguard Worker
37*fb1b10abSAndroid Build Coastguard Worker // TODO(lu_zero): Unroll
vpx_get_mb_ss_vsx(const int16_t * src_ptr)38*fb1b10abSAndroid Build Coastguard Worker uint32_t vpx_get_mb_ss_vsx(const int16_t *src_ptr) {
39*fb1b10abSAndroid Build Coastguard Worker unsigned int i, sum = 0;
40*fb1b10abSAndroid Build Coastguard Worker int32x4_t s = vec_splat_s32(0);
41*fb1b10abSAndroid Build Coastguard Worker
42*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 256; i += 8) {
43*fb1b10abSAndroid Build Coastguard Worker const int16x8_t v = vec_vsx_ld(0, src_ptr + i);
44*fb1b10abSAndroid Build Coastguard Worker s = vec_msum(v, v, s);
45*fb1b10abSAndroid Build Coastguard Worker }
46*fb1b10abSAndroid Build Coastguard Worker
47*fb1b10abSAndroid Build Coastguard Worker s = vec_splat(vec_sums(s, vec_splat_s32(0)), 3);
48*fb1b10abSAndroid Build Coastguard Worker
49*fb1b10abSAndroid Build Coastguard Worker vec_ste((uint32x4_t)s, 0, &sum);
50*fb1b10abSAndroid Build Coastguard Worker
51*fb1b10abSAndroid Build Coastguard Worker return sum;
52*fb1b10abSAndroid Build Coastguard Worker }
53*fb1b10abSAndroid Build Coastguard Worker
vpx_comp_avg_pred_vsx(uint8_t * comp_pred,const uint8_t * pred,int width,int height,const uint8_t * ref,int ref_stride)54*fb1b10abSAndroid Build Coastguard Worker void vpx_comp_avg_pred_vsx(uint8_t *comp_pred, const uint8_t *pred, int width,
55*fb1b10abSAndroid Build Coastguard Worker int height, const uint8_t *ref, int ref_stride) {
56*fb1b10abSAndroid Build Coastguard Worker int i, j;
57*fb1b10abSAndroid Build Coastguard Worker /* comp_pred and pred must be 16 byte aligned. */
58*fb1b10abSAndroid Build Coastguard Worker assert(((intptr_t)comp_pred & 0xf) == 0);
59*fb1b10abSAndroid Build Coastguard Worker assert(((intptr_t)pred & 0xf) == 0);
60*fb1b10abSAndroid Build Coastguard Worker if (width >= 16) {
61*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < height; ++i) {
62*fb1b10abSAndroid Build Coastguard Worker for (j = 0; j < width; j += 16) {
63*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t v = vec_avg(vec_vsx_ld(j, pred), vec_vsx_ld(j, ref));
64*fb1b10abSAndroid Build Coastguard Worker vec_vsx_st(v, j, comp_pred);
65*fb1b10abSAndroid Build Coastguard Worker }
66*fb1b10abSAndroid Build Coastguard Worker comp_pred += width;
67*fb1b10abSAndroid Build Coastguard Worker pred += width;
68*fb1b10abSAndroid Build Coastguard Worker ref += ref_stride;
69*fb1b10abSAndroid Build Coastguard Worker }
70*fb1b10abSAndroid Build Coastguard Worker } else if (width == 8) {
71*fb1b10abSAndroid Build Coastguard Worker // Process 2 lines at time
72*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < height / 2; ++i) {
73*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t r0 = vec_vsx_ld(0, ref);
74*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t r1 = vec_vsx_ld(0, ref + ref_stride);
75*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t r = xxpermdi(r0, r1, 0);
76*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t v = vec_avg(vec_vsx_ld(0, pred), r);
77*fb1b10abSAndroid Build Coastguard Worker vec_vsx_st(v, 0, comp_pred);
78*fb1b10abSAndroid Build Coastguard Worker comp_pred += 16; // width * 2;
79*fb1b10abSAndroid Build Coastguard Worker pred += 16; // width * 2;
80*fb1b10abSAndroid Build Coastguard Worker ref += ref_stride * 2;
81*fb1b10abSAndroid Build Coastguard Worker }
82*fb1b10abSAndroid Build Coastguard Worker } else {
83*fb1b10abSAndroid Build Coastguard Worker assert(width == 4);
84*fb1b10abSAndroid Build Coastguard Worker // process 4 lines at time
85*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < height / 4; ++i) {
86*fb1b10abSAndroid Build Coastguard Worker const uint32x4_t r0 = (uint32x4_t)vec_vsx_ld(0, ref);
87*fb1b10abSAndroid Build Coastguard Worker const uint32x4_t r1 = (uint32x4_t)vec_vsx_ld(0, ref + ref_stride);
88*fb1b10abSAndroid Build Coastguard Worker const uint32x4_t r2 = (uint32x4_t)vec_vsx_ld(0, ref + ref_stride * 2);
89*fb1b10abSAndroid Build Coastguard Worker const uint32x4_t r3 = (uint32x4_t)vec_vsx_ld(0, ref + ref_stride * 3);
90*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t r =
91*fb1b10abSAndroid Build Coastguard Worker (uint8x16_t)xxpermdi(vec_mergeh(r0, r1), vec_mergeh(r2, r3), 0);
92*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t v = vec_avg(vec_vsx_ld(0, pred), r);
93*fb1b10abSAndroid Build Coastguard Worker vec_vsx_st(v, 0, comp_pred);
94*fb1b10abSAndroid Build Coastguard Worker comp_pred += 16; // width * 4;
95*fb1b10abSAndroid Build Coastguard Worker pred += 16; // width * 4;
96*fb1b10abSAndroid Build Coastguard Worker ref += ref_stride * 4;
97*fb1b10abSAndroid Build Coastguard Worker }
98*fb1b10abSAndroid Build Coastguard Worker }
99*fb1b10abSAndroid Build Coastguard Worker }
100*fb1b10abSAndroid Build Coastguard Worker
variance_inner_32(const uint8_t * src_ptr,const uint8_t * ref_ptr,int32x4_t * sum_squared,int32x4_t * sum)101*fb1b10abSAndroid Build Coastguard Worker static INLINE void variance_inner_32(const uint8_t *src_ptr,
102*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr,
103*fb1b10abSAndroid Build Coastguard Worker int32x4_t *sum_squared, int32x4_t *sum) {
104*fb1b10abSAndroid Build Coastguard Worker int32x4_t s = *sum;
105*fb1b10abSAndroid Build Coastguard Worker int32x4_t ss = *sum_squared;
106*fb1b10abSAndroid Build Coastguard Worker
107*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t va0 = vec_vsx_ld(0, src_ptr);
108*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t vb0 = vec_vsx_ld(0, ref_ptr);
109*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t va1 = vec_vsx_ld(16, src_ptr);
110*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t vb1 = vec_vsx_ld(16, ref_ptr);
111*fb1b10abSAndroid Build Coastguard Worker
112*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a0 = unpack_to_s16_h(va0);
113*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b0 = unpack_to_s16_h(vb0);
114*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a1 = unpack_to_s16_l(va0);
115*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b1 = unpack_to_s16_l(vb0);
116*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a2 = unpack_to_s16_h(va1);
117*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b2 = unpack_to_s16_h(vb1);
118*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a3 = unpack_to_s16_l(va1);
119*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b3 = unpack_to_s16_l(vb1);
120*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d0 = vec_sub(a0, b0);
121*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d1 = vec_sub(a1, b1);
122*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d2 = vec_sub(a2, b2);
123*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d3 = vec_sub(a3, b3);
124*fb1b10abSAndroid Build Coastguard Worker
125*fb1b10abSAndroid Build Coastguard Worker s = vec_sum4s(d0, s);
126*fb1b10abSAndroid Build Coastguard Worker ss = vec_msum(d0, d0, ss);
127*fb1b10abSAndroid Build Coastguard Worker s = vec_sum4s(d1, s);
128*fb1b10abSAndroid Build Coastguard Worker ss = vec_msum(d1, d1, ss);
129*fb1b10abSAndroid Build Coastguard Worker s = vec_sum4s(d2, s);
130*fb1b10abSAndroid Build Coastguard Worker ss = vec_msum(d2, d2, ss);
131*fb1b10abSAndroid Build Coastguard Worker s = vec_sum4s(d3, s);
132*fb1b10abSAndroid Build Coastguard Worker ss = vec_msum(d3, d3, ss);
133*fb1b10abSAndroid Build Coastguard Worker *sum = s;
134*fb1b10abSAndroid Build Coastguard Worker *sum_squared = ss;
135*fb1b10abSAndroid Build Coastguard Worker }
136*fb1b10abSAndroid Build Coastguard Worker
variance(const uint8_t * src_ptr,int src_stride,const uint8_t * ref_ptr,int ref_stride,int w,int h,uint32_t * sse,int * sum)137*fb1b10abSAndroid Build Coastguard Worker static INLINE void variance(const uint8_t *src_ptr, int src_stride,
138*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride, int w,
139*fb1b10abSAndroid Build Coastguard Worker int h, uint32_t *sse, int *sum) {
140*fb1b10abSAndroid Build Coastguard Worker int i;
141*fb1b10abSAndroid Build Coastguard Worker
142*fb1b10abSAndroid Build Coastguard Worker int32x4_t s = vec_splat_s32(0);
143*fb1b10abSAndroid Build Coastguard Worker int32x4_t ss = vec_splat_s32(0);
144*fb1b10abSAndroid Build Coastguard Worker
145*fb1b10abSAndroid Build Coastguard Worker switch (w) {
146*fb1b10abSAndroid Build Coastguard Worker case 4:
147*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < h / 2; ++i) {
148*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a0 = unpack_to_s16_h(read4x2(src_ptr, src_stride));
149*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b0 = unpack_to_s16_h(read4x2(ref_ptr, ref_stride));
150*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d = vec_sub(a0, b0);
151*fb1b10abSAndroid Build Coastguard Worker s = vec_sum4s(d, s);
152*fb1b10abSAndroid Build Coastguard Worker ss = vec_msum(d, d, ss);
153*fb1b10abSAndroid Build Coastguard Worker src_ptr += src_stride * 2;
154*fb1b10abSAndroid Build Coastguard Worker ref_ptr += ref_stride * 2;
155*fb1b10abSAndroid Build Coastguard Worker }
156*fb1b10abSAndroid Build Coastguard Worker break;
157*fb1b10abSAndroid Build Coastguard Worker case 8:
158*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < h; ++i) {
159*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a0 = unpack_to_s16_h(vec_vsx_ld(0, src_ptr));
160*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b0 = unpack_to_s16_h(vec_vsx_ld(0, ref_ptr));
161*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d = vec_sub(a0, b0);
162*fb1b10abSAndroid Build Coastguard Worker
163*fb1b10abSAndroid Build Coastguard Worker s = vec_sum4s(d, s);
164*fb1b10abSAndroid Build Coastguard Worker ss = vec_msum(d, d, ss);
165*fb1b10abSAndroid Build Coastguard Worker src_ptr += src_stride;
166*fb1b10abSAndroid Build Coastguard Worker ref_ptr += ref_stride;
167*fb1b10abSAndroid Build Coastguard Worker }
168*fb1b10abSAndroid Build Coastguard Worker break;
169*fb1b10abSAndroid Build Coastguard Worker case 16:
170*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < h; ++i) {
171*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t va = vec_vsx_ld(0, src_ptr);
172*fb1b10abSAndroid Build Coastguard Worker const uint8x16_t vb = vec_vsx_ld(0, ref_ptr);
173*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a0 = unpack_to_s16_h(va);
174*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b0 = unpack_to_s16_h(vb);
175*fb1b10abSAndroid Build Coastguard Worker const int16x8_t a1 = unpack_to_s16_l(va);
176*fb1b10abSAndroid Build Coastguard Worker const int16x8_t b1 = unpack_to_s16_l(vb);
177*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d0 = vec_sub(a0, b0);
178*fb1b10abSAndroid Build Coastguard Worker const int16x8_t d1 = vec_sub(a1, b1);
179*fb1b10abSAndroid Build Coastguard Worker
180*fb1b10abSAndroid Build Coastguard Worker s = vec_sum4s(d0, s);
181*fb1b10abSAndroid Build Coastguard Worker ss = vec_msum(d0, d0, ss);
182*fb1b10abSAndroid Build Coastguard Worker s = vec_sum4s(d1, s);
183*fb1b10abSAndroid Build Coastguard Worker ss = vec_msum(d1, d1, ss);
184*fb1b10abSAndroid Build Coastguard Worker
185*fb1b10abSAndroid Build Coastguard Worker src_ptr += src_stride;
186*fb1b10abSAndroid Build Coastguard Worker ref_ptr += ref_stride;
187*fb1b10abSAndroid Build Coastguard Worker }
188*fb1b10abSAndroid Build Coastguard Worker break;
189*fb1b10abSAndroid Build Coastguard Worker case 32:
190*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < h; ++i) {
191*fb1b10abSAndroid Build Coastguard Worker variance_inner_32(src_ptr, ref_ptr, &ss, &s);
192*fb1b10abSAndroid Build Coastguard Worker src_ptr += src_stride;
193*fb1b10abSAndroid Build Coastguard Worker ref_ptr += ref_stride;
194*fb1b10abSAndroid Build Coastguard Worker }
195*fb1b10abSAndroid Build Coastguard Worker break;
196*fb1b10abSAndroid Build Coastguard Worker case 64:
197*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < h; ++i) {
198*fb1b10abSAndroid Build Coastguard Worker variance_inner_32(src_ptr, ref_ptr, &ss, &s);
199*fb1b10abSAndroid Build Coastguard Worker variance_inner_32(src_ptr + 32, ref_ptr + 32, &ss, &s);
200*fb1b10abSAndroid Build Coastguard Worker
201*fb1b10abSAndroid Build Coastguard Worker src_ptr += src_stride;
202*fb1b10abSAndroid Build Coastguard Worker ref_ptr += ref_stride;
203*fb1b10abSAndroid Build Coastguard Worker }
204*fb1b10abSAndroid Build Coastguard Worker break;
205*fb1b10abSAndroid Build Coastguard Worker }
206*fb1b10abSAndroid Build Coastguard Worker
207*fb1b10abSAndroid Build Coastguard Worker s = vec_splat(vec_sums(s, vec_splat_s32(0)), 3);
208*fb1b10abSAndroid Build Coastguard Worker
209*fb1b10abSAndroid Build Coastguard Worker vec_ste(s, 0, sum);
210*fb1b10abSAndroid Build Coastguard Worker
211*fb1b10abSAndroid Build Coastguard Worker ss = vec_splat(vec_sums(ss, vec_splat_s32(0)), 3);
212*fb1b10abSAndroid Build Coastguard Worker
213*fb1b10abSAndroid Build Coastguard Worker vec_ste((uint32x4_t)ss, 0, sse);
214*fb1b10abSAndroid Build Coastguard Worker }
215*fb1b10abSAndroid Build Coastguard Worker
216*fb1b10abSAndroid Build Coastguard Worker /* Identical to the variance call except it takes an additional parameter, sum,
217*fb1b10abSAndroid Build Coastguard Worker * and returns that value using pass-by-reference instead of returning
218*fb1b10abSAndroid Build Coastguard Worker * sse - sum^2 / w*h
219*fb1b10abSAndroid Build Coastguard Worker */
220*fb1b10abSAndroid Build Coastguard Worker #define GET_VAR(W, H) \
221*fb1b10abSAndroid Build Coastguard Worker void vpx_get##W##x##H##var_vsx(const uint8_t *src_ptr, int src_stride, \
222*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride, \
223*fb1b10abSAndroid Build Coastguard Worker uint32_t *sse, int *sum) { \
224*fb1b10abSAndroid Build Coastguard Worker variance(src_ptr, src_stride, ref_ptr, ref_stride, W, H, sse, sum); \
225*fb1b10abSAndroid Build Coastguard Worker }
226*fb1b10abSAndroid Build Coastguard Worker
227*fb1b10abSAndroid Build Coastguard Worker /* Identical to the variance call except it does not calculate the
228*fb1b10abSAndroid Build Coastguard Worker * sse - sum^2 / w*h and returns sse in addition to modifying the passed in
229*fb1b10abSAndroid Build Coastguard Worker * variable.
230*fb1b10abSAndroid Build Coastguard Worker */
231*fb1b10abSAndroid Build Coastguard Worker #define MSE(W, H) \
232*fb1b10abSAndroid Build Coastguard Worker uint32_t vpx_mse##W##x##H##_vsx(const uint8_t *src_ptr, int src_stride, \
233*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride, \
234*fb1b10abSAndroid Build Coastguard Worker uint32_t *sse) { \
235*fb1b10abSAndroid Build Coastguard Worker int sum; \
236*fb1b10abSAndroid Build Coastguard Worker variance(src_ptr, src_stride, ref_ptr, ref_stride, W, H, sse, &sum); \
237*fb1b10abSAndroid Build Coastguard Worker return *sse; \
238*fb1b10abSAndroid Build Coastguard Worker }
239*fb1b10abSAndroid Build Coastguard Worker
240*fb1b10abSAndroid Build Coastguard Worker #define VAR(W, H) \
241*fb1b10abSAndroid Build Coastguard Worker uint32_t vpx_variance##W##x##H##_vsx(const uint8_t *src_ptr, int src_stride, \
242*fb1b10abSAndroid Build Coastguard Worker const uint8_t *ref_ptr, int ref_stride, \
243*fb1b10abSAndroid Build Coastguard Worker uint32_t *sse) { \
244*fb1b10abSAndroid Build Coastguard Worker int sum; \
245*fb1b10abSAndroid Build Coastguard Worker variance(src_ptr, src_stride, ref_ptr, ref_stride, W, H, sse, &sum); \
246*fb1b10abSAndroid Build Coastguard Worker return *sse - (uint32_t)(((int64_t)sum * sum) / ((W) * (H))); \
247*fb1b10abSAndroid Build Coastguard Worker }
248*fb1b10abSAndroid Build Coastguard Worker
249*fb1b10abSAndroid Build Coastguard Worker #define VARIANCES(W, H) VAR(W, H)
250*fb1b10abSAndroid Build Coastguard Worker
251*fb1b10abSAndroid Build Coastguard Worker VARIANCES(64, 64)
252*fb1b10abSAndroid Build Coastguard Worker VARIANCES(64, 32)
253*fb1b10abSAndroid Build Coastguard Worker VARIANCES(32, 64)
254*fb1b10abSAndroid Build Coastguard Worker VARIANCES(32, 32)
255*fb1b10abSAndroid Build Coastguard Worker VARIANCES(32, 16)
256*fb1b10abSAndroid Build Coastguard Worker VARIANCES(16, 32)
257*fb1b10abSAndroid Build Coastguard Worker VARIANCES(16, 16)
258*fb1b10abSAndroid Build Coastguard Worker VARIANCES(16, 8)
259*fb1b10abSAndroid Build Coastguard Worker VARIANCES(8, 16)
260*fb1b10abSAndroid Build Coastguard Worker VARIANCES(8, 8)
261*fb1b10abSAndroid Build Coastguard Worker VARIANCES(8, 4)
262*fb1b10abSAndroid Build Coastguard Worker VARIANCES(4, 8)
263*fb1b10abSAndroid Build Coastguard Worker VARIANCES(4, 4)
264*fb1b10abSAndroid Build Coastguard Worker
265*fb1b10abSAndroid Build Coastguard Worker GET_VAR(16, 16)
266*fb1b10abSAndroid Build Coastguard Worker GET_VAR(8, 8)
267*fb1b10abSAndroid Build Coastguard Worker
268*fb1b10abSAndroid Build Coastguard Worker MSE(16, 16)
269*fb1b10abSAndroid Build Coastguard Worker MSE(16, 8)
270*fb1b10abSAndroid Build Coastguard Worker MSE(8, 16)
271*fb1b10abSAndroid Build Coastguard Worker MSE(8, 8)
272