xref: /aosp_15_r20/external/libaom/test/variance_test.cc (revision 77c1e3ccc04c968bd2bc212e87364f250e820521)
1*77c1e3ccSAndroid Build Coastguard Worker /*
2*77c1e3ccSAndroid Build Coastguard Worker  * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3*77c1e3ccSAndroid Build Coastguard Worker  *
4*77c1e3ccSAndroid Build Coastguard Worker  * This source code is subject to the terms of the BSD 2 Clause License and
5*77c1e3ccSAndroid Build Coastguard Worker  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6*77c1e3ccSAndroid Build Coastguard Worker  * was not distributed with this source code in the LICENSE file, you can
7*77c1e3ccSAndroid Build Coastguard Worker  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8*77c1e3ccSAndroid Build Coastguard Worker  * Media Patent License 1.0 was not distributed with this source code in the
9*77c1e3ccSAndroid Build Coastguard Worker  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*77c1e3ccSAndroid Build Coastguard Worker  */
11*77c1e3ccSAndroid Build Coastguard Worker 
12*77c1e3ccSAndroid Build Coastguard Worker #include <cstdlib>
13*77c1e3ccSAndroid Build Coastguard Worker #include <new>
14*77c1e3ccSAndroid Build Coastguard Worker #include <ostream>
15*77c1e3ccSAndroid Build Coastguard Worker #include <tuple>
16*77c1e3ccSAndroid Build Coastguard Worker 
17*77c1e3ccSAndroid Build Coastguard Worker #include "gtest/gtest.h"
18*77c1e3ccSAndroid Build Coastguard Worker 
19*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_config.h"
20*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_dsp_rtcd.h"
21*77c1e3ccSAndroid Build Coastguard Worker 
22*77c1e3ccSAndroid Build Coastguard Worker #include "test/acm_random.h"
23*77c1e3ccSAndroid Build Coastguard Worker #include "test/register_state_check.h"
24*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_codec.h"
25*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_integer.h"
26*77c1e3ccSAndroid Build Coastguard Worker #include "aom_mem/aom_mem.h"
27*77c1e3ccSAndroid Build Coastguard Worker #include "aom_ports/aom_timer.h"
28*77c1e3ccSAndroid Build Coastguard Worker #include "aom_ports/mem.h"
29*77c1e3ccSAndroid Build Coastguard Worker #include "av1/common/cdef_block.h"
30*77c1e3ccSAndroid Build Coastguard Worker 
31*77c1e3ccSAndroid Build Coastguard Worker namespace {
32*77c1e3ccSAndroid Build Coastguard Worker 
33*77c1e3ccSAndroid Build Coastguard Worker typedef uint64_t (*MseWxH16bitFunc)(uint8_t *dst, int dstride, uint16_t *src,
34*77c1e3ccSAndroid Build Coastguard Worker                                     int sstride, int w, int h);
35*77c1e3ccSAndroid Build Coastguard Worker typedef uint64_t (*Mse16xH16bitFunc)(uint8_t *dst, int dstride, uint16_t *src,
36*77c1e3ccSAndroid Build Coastguard Worker                                      int w, int h);
37*77c1e3ccSAndroid Build Coastguard Worker typedef unsigned int (*VarianceMxNFunc)(const uint8_t *a, int a_stride,
38*77c1e3ccSAndroid Build Coastguard Worker                                         const uint8_t *b, int b_stride,
39*77c1e3ccSAndroid Build Coastguard Worker                                         unsigned int *sse);
40*77c1e3ccSAndroid Build Coastguard Worker typedef void (*GetSseSum8x8QuadFunc)(const uint8_t *a, int a_stride,
41*77c1e3ccSAndroid Build Coastguard Worker                                      const uint8_t *b, int b_stride,
42*77c1e3ccSAndroid Build Coastguard Worker                                      uint32_t *sse8x8, int *sum8x8,
43*77c1e3ccSAndroid Build Coastguard Worker                                      unsigned int *tot_sse, int *tot_sum,
44*77c1e3ccSAndroid Build Coastguard Worker                                      uint32_t *var8x8);
45*77c1e3ccSAndroid Build Coastguard Worker typedef void (*GetSseSum16x16DualFunc)(const uint8_t *a, int a_stride,
46*77c1e3ccSAndroid Build Coastguard Worker                                        const uint8_t *b, int b_stride,
47*77c1e3ccSAndroid Build Coastguard Worker                                        uint32_t *sse16x16,
48*77c1e3ccSAndroid Build Coastguard Worker                                        unsigned int *tot_sse, int *tot_sum,
49*77c1e3ccSAndroid Build Coastguard Worker                                        uint32_t *var16x16);
50*77c1e3ccSAndroid Build Coastguard Worker typedef unsigned int (*SubpixVarMxNFunc)(const uint8_t *a, int a_stride,
51*77c1e3ccSAndroid Build Coastguard Worker                                          int xoffset, int yoffset,
52*77c1e3ccSAndroid Build Coastguard Worker                                          const uint8_t *b, int b_stride,
53*77c1e3ccSAndroid Build Coastguard Worker                                          unsigned int *sse);
54*77c1e3ccSAndroid Build Coastguard Worker typedef unsigned int (*SubpixAvgVarMxNFunc)(const uint8_t *a, int a_stride,
55*77c1e3ccSAndroid Build Coastguard Worker                                             int xoffset, int yoffset,
56*77c1e3ccSAndroid Build Coastguard Worker                                             const uint8_t *b, int b_stride,
57*77c1e3ccSAndroid Build Coastguard Worker                                             uint32_t *sse,
58*77c1e3ccSAndroid Build Coastguard Worker                                             const uint8_t *second_pred);
59*77c1e3ccSAndroid Build Coastguard Worker typedef unsigned int (*SumOfSquaresFunction)(const int16_t *src);
60*77c1e3ccSAndroid Build Coastguard Worker typedef unsigned int (*DistWtdSubpixAvgVarMxNFunc)(
61*77c1e3ccSAndroid Build Coastguard Worker     const uint8_t *a, int a_stride, int xoffset, int yoffset, const uint8_t *b,
62*77c1e3ccSAndroid Build Coastguard Worker     int b_stride, uint32_t *sse, const uint8_t *second_pred,
63*77c1e3ccSAndroid Build Coastguard Worker     const DIST_WTD_COMP_PARAMS *jcp_param);
64*77c1e3ccSAndroid Build Coastguard Worker 
65*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
66*77c1e3ccSAndroid Build Coastguard Worker typedef uint32_t (*ObmcSubpelVarFunc)(const uint8_t *pre, int pre_stride,
67*77c1e3ccSAndroid Build Coastguard Worker                                       int xoffset, int yoffset,
68*77c1e3ccSAndroid Build Coastguard Worker                                       const int32_t *wsrc, const int32_t *mask,
69*77c1e3ccSAndroid Build Coastguard Worker                                       unsigned int *sse);
70*77c1e3ccSAndroid Build Coastguard Worker #endif
71*77c1e3ccSAndroid Build Coastguard Worker 
72*77c1e3ccSAndroid Build Coastguard Worker using libaom_test::ACMRandom;
73*77c1e3ccSAndroid Build Coastguard Worker 
74*77c1e3ccSAndroid Build Coastguard Worker // Truncate high bit depth results by downshifting (with rounding) by:
75*77c1e3ccSAndroid Build Coastguard Worker // 2 * (bit_depth - 8) for sse
76*77c1e3ccSAndroid Build Coastguard Worker // (bit_depth - 8) for se
RoundHighBitDepth(int bit_depth,int64_t * se,uint64_t * sse)77*77c1e3ccSAndroid Build Coastguard Worker static void RoundHighBitDepth(int bit_depth, int64_t *se, uint64_t *sse) {
78*77c1e3ccSAndroid Build Coastguard Worker   switch (bit_depth) {
79*77c1e3ccSAndroid Build Coastguard Worker     case AOM_BITS_12:
80*77c1e3ccSAndroid Build Coastguard Worker       *sse = (*sse + 128) >> 8;
81*77c1e3ccSAndroid Build Coastguard Worker       *se = (*se + 8) >> 4;
82*77c1e3ccSAndroid Build Coastguard Worker       break;
83*77c1e3ccSAndroid Build Coastguard Worker     case AOM_BITS_10:
84*77c1e3ccSAndroid Build Coastguard Worker       *sse = (*sse + 8) >> 4;
85*77c1e3ccSAndroid Build Coastguard Worker       *se = (*se + 2) >> 2;
86*77c1e3ccSAndroid Build Coastguard Worker       break;
87*77c1e3ccSAndroid Build Coastguard Worker     case AOM_BITS_8:
88*77c1e3ccSAndroid Build Coastguard Worker     default: break;
89*77c1e3ccSAndroid Build Coastguard Worker   }
90*77c1e3ccSAndroid Build Coastguard Worker }
91*77c1e3ccSAndroid Build Coastguard Worker 
92*77c1e3ccSAndroid Build Coastguard Worker /* Note:
93*77c1e3ccSAndroid Build Coastguard Worker  *  Our codebase calculates the "diff" value in the variance algorithm by
94*77c1e3ccSAndroid Build Coastguard Worker  *  (src - ref).
95*77c1e3ccSAndroid Build Coastguard Worker  */
variance_ref(const uint8_t * src,const uint8_t * ref,int l2w,int l2h,int src_stride,int ref_stride,uint32_t * sse_ptr,bool use_high_bit_depth_,aom_bit_depth_t bit_depth)96*77c1e3ccSAndroid Build Coastguard Worker static uint32_t variance_ref(const uint8_t *src, const uint8_t *ref, int l2w,
97*77c1e3ccSAndroid Build Coastguard Worker                              int l2h, int src_stride, int ref_stride,
98*77c1e3ccSAndroid Build Coastguard Worker                              uint32_t *sse_ptr, bool use_high_bit_depth_,
99*77c1e3ccSAndroid Build Coastguard Worker                              aom_bit_depth_t bit_depth) {
100*77c1e3ccSAndroid Build Coastguard Worker   int64_t se = 0;
101*77c1e3ccSAndroid Build Coastguard Worker   uint64_t sse = 0;
102*77c1e3ccSAndroid Build Coastguard Worker   const int w = 1 << l2w;
103*77c1e3ccSAndroid Build Coastguard Worker   const int h = 1 << l2h;
104*77c1e3ccSAndroid Build Coastguard Worker   for (int y = 0; y < h; y++) {
105*77c1e3ccSAndroid Build Coastguard Worker     for (int x = 0; x < w; x++) {
106*77c1e3ccSAndroid Build Coastguard Worker       int diff;
107*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth_) {
108*77c1e3ccSAndroid Build Coastguard Worker         diff = src[y * src_stride + x] - ref[y * ref_stride + x];
109*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
110*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
111*77c1e3ccSAndroid Build Coastguard Worker       } else {
112*77c1e3ccSAndroid Build Coastguard Worker         diff = CONVERT_TO_SHORTPTR(src)[y * src_stride + x] -
113*77c1e3ccSAndroid Build Coastguard Worker                CONVERT_TO_SHORTPTR(ref)[y * ref_stride + x];
114*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
115*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
116*77c1e3ccSAndroid Build Coastguard Worker       }
117*77c1e3ccSAndroid Build Coastguard Worker     }
118*77c1e3ccSAndroid Build Coastguard Worker   }
119*77c1e3ccSAndroid Build Coastguard Worker   RoundHighBitDepth(bit_depth, &se, &sse);
120*77c1e3ccSAndroid Build Coastguard Worker   *sse_ptr = static_cast<uint32_t>(sse);
121*77c1e3ccSAndroid Build Coastguard Worker   return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
122*77c1e3ccSAndroid Build Coastguard Worker }
123*77c1e3ccSAndroid Build Coastguard Worker 
124*77c1e3ccSAndroid Build Coastguard Worker /* The subpel reference functions differ from the codec version in one aspect:
125*77c1e3ccSAndroid Build Coastguard Worker  * they calculate the bilinear factors directly instead of using a lookup table
126*77c1e3ccSAndroid Build Coastguard Worker  * and therefore upshift xoff and yoff by 1. Only every other calculated value
127*77c1e3ccSAndroid Build Coastguard Worker  * is used so the codec version shrinks the table to save space.
128*77c1e3ccSAndroid Build Coastguard Worker  */
subpel_variance_ref(const uint8_t * ref,const uint8_t * src,int l2w,int l2h,int xoff,int yoff,uint32_t * sse_ptr,bool use_high_bit_depth_,aom_bit_depth_t bit_depth)129*77c1e3ccSAndroid Build Coastguard Worker static uint32_t subpel_variance_ref(const uint8_t *ref, const uint8_t *src,
130*77c1e3ccSAndroid Build Coastguard Worker                                     int l2w, int l2h, int xoff, int yoff,
131*77c1e3ccSAndroid Build Coastguard Worker                                     uint32_t *sse_ptr, bool use_high_bit_depth_,
132*77c1e3ccSAndroid Build Coastguard Worker                                     aom_bit_depth_t bit_depth) {
133*77c1e3ccSAndroid Build Coastguard Worker   int64_t se = 0;
134*77c1e3ccSAndroid Build Coastguard Worker   uint64_t sse = 0;
135*77c1e3ccSAndroid Build Coastguard Worker   const int w = 1 << l2w;
136*77c1e3ccSAndroid Build Coastguard Worker   const int h = 1 << l2h;
137*77c1e3ccSAndroid Build Coastguard Worker 
138*77c1e3ccSAndroid Build Coastguard Worker   xoff <<= 1;
139*77c1e3ccSAndroid Build Coastguard Worker   yoff <<= 1;
140*77c1e3ccSAndroid Build Coastguard Worker 
141*77c1e3ccSAndroid Build Coastguard Worker   for (int y = 0; y < h; y++) {
142*77c1e3ccSAndroid Build Coastguard Worker     for (int x = 0; x < w; x++) {
143*77c1e3ccSAndroid Build Coastguard Worker       // Bilinear interpolation at a 16th pel step.
144*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth_) {
145*77c1e3ccSAndroid Build Coastguard Worker         const int a1 = ref[(w + 1) * (y + 0) + x + 0];
146*77c1e3ccSAndroid Build Coastguard Worker         const int a2 = ref[(w + 1) * (y + 0) + x + 1];
147*77c1e3ccSAndroid Build Coastguard Worker         const int b1 = ref[(w + 1) * (y + 1) + x + 0];
148*77c1e3ccSAndroid Build Coastguard Worker         const int b2 = ref[(w + 1) * (y + 1) + x + 1];
149*77c1e3ccSAndroid Build Coastguard Worker         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
150*77c1e3ccSAndroid Build Coastguard Worker         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
151*77c1e3ccSAndroid Build Coastguard Worker         const int r = a + (((b - a) * yoff + 8) >> 4);
152*77c1e3ccSAndroid Build Coastguard Worker         const int diff = r - src[w * y + x];
153*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
154*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
155*77c1e3ccSAndroid Build Coastguard Worker       } else {
156*77c1e3ccSAndroid Build Coastguard Worker         uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
157*77c1e3ccSAndroid Build Coastguard Worker         uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
158*77c1e3ccSAndroid Build Coastguard Worker         const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
159*77c1e3ccSAndroid Build Coastguard Worker         const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
160*77c1e3ccSAndroid Build Coastguard Worker         const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
161*77c1e3ccSAndroid Build Coastguard Worker         const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
162*77c1e3ccSAndroid Build Coastguard Worker         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
163*77c1e3ccSAndroid Build Coastguard Worker         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
164*77c1e3ccSAndroid Build Coastguard Worker         const int r = a + (((b - a) * yoff + 8) >> 4);
165*77c1e3ccSAndroid Build Coastguard Worker         const int diff = r - src16[w * y + x];
166*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
167*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
168*77c1e3ccSAndroid Build Coastguard Worker       }
169*77c1e3ccSAndroid Build Coastguard Worker     }
170*77c1e3ccSAndroid Build Coastguard Worker   }
171*77c1e3ccSAndroid Build Coastguard Worker   RoundHighBitDepth(bit_depth, &se, &sse);
172*77c1e3ccSAndroid Build Coastguard Worker   *sse_ptr = static_cast<uint32_t>(sse);
173*77c1e3ccSAndroid Build Coastguard Worker   return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
174*77c1e3ccSAndroid Build Coastguard Worker }
175*77c1e3ccSAndroid Build Coastguard Worker 
subpel_avg_variance_ref(const uint8_t * ref,const uint8_t * src,const uint8_t * second_pred,int l2w,int l2h,int xoff,int yoff,uint32_t * sse_ptr,bool use_high_bit_depth,aom_bit_depth_t bit_depth)176*77c1e3ccSAndroid Build Coastguard Worker static uint32_t subpel_avg_variance_ref(const uint8_t *ref, const uint8_t *src,
177*77c1e3ccSAndroid Build Coastguard Worker                                         const uint8_t *second_pred, int l2w,
178*77c1e3ccSAndroid Build Coastguard Worker                                         int l2h, int xoff, int yoff,
179*77c1e3ccSAndroid Build Coastguard Worker                                         uint32_t *sse_ptr,
180*77c1e3ccSAndroid Build Coastguard Worker                                         bool use_high_bit_depth,
181*77c1e3ccSAndroid Build Coastguard Worker                                         aom_bit_depth_t bit_depth) {
182*77c1e3ccSAndroid Build Coastguard Worker   int64_t se = 0;
183*77c1e3ccSAndroid Build Coastguard Worker   uint64_t sse = 0;
184*77c1e3ccSAndroid Build Coastguard Worker   const int w = 1 << l2w;
185*77c1e3ccSAndroid Build Coastguard Worker   const int h = 1 << l2h;
186*77c1e3ccSAndroid Build Coastguard Worker 
187*77c1e3ccSAndroid Build Coastguard Worker   xoff <<= 1;
188*77c1e3ccSAndroid Build Coastguard Worker   yoff <<= 1;
189*77c1e3ccSAndroid Build Coastguard Worker 
190*77c1e3ccSAndroid Build Coastguard Worker   for (int y = 0; y < h; y++) {
191*77c1e3ccSAndroid Build Coastguard Worker     for (int x = 0; x < w; x++) {
192*77c1e3ccSAndroid Build Coastguard Worker       // bilinear interpolation at a 16th pel step
193*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth) {
194*77c1e3ccSAndroid Build Coastguard Worker         const int a1 = ref[(w + 1) * (y + 0) + x + 0];
195*77c1e3ccSAndroid Build Coastguard Worker         const int a2 = ref[(w + 1) * (y + 0) + x + 1];
196*77c1e3ccSAndroid Build Coastguard Worker         const int b1 = ref[(w + 1) * (y + 1) + x + 0];
197*77c1e3ccSAndroid Build Coastguard Worker         const int b2 = ref[(w + 1) * (y + 1) + x + 1];
198*77c1e3ccSAndroid Build Coastguard Worker         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
199*77c1e3ccSAndroid Build Coastguard Worker         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
200*77c1e3ccSAndroid Build Coastguard Worker         const int r = a + (((b - a) * yoff + 8) >> 4);
201*77c1e3ccSAndroid Build Coastguard Worker         const int diff =
202*77c1e3ccSAndroid Build Coastguard Worker             ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x];
203*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
204*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
205*77c1e3ccSAndroid Build Coastguard Worker       } else {
206*77c1e3ccSAndroid Build Coastguard Worker         const uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
207*77c1e3ccSAndroid Build Coastguard Worker         const uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
208*77c1e3ccSAndroid Build Coastguard Worker         const uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred);
209*77c1e3ccSAndroid Build Coastguard Worker         const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
210*77c1e3ccSAndroid Build Coastguard Worker         const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
211*77c1e3ccSAndroid Build Coastguard Worker         const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
212*77c1e3ccSAndroid Build Coastguard Worker         const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
213*77c1e3ccSAndroid Build Coastguard Worker         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
214*77c1e3ccSAndroid Build Coastguard Worker         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
215*77c1e3ccSAndroid Build Coastguard Worker         const int r = a + (((b - a) * yoff + 8) >> 4);
216*77c1e3ccSAndroid Build Coastguard Worker         const int diff = ((r + sec16[w * y + x] + 1) >> 1) - src16[w * y + x];
217*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
218*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
219*77c1e3ccSAndroid Build Coastguard Worker       }
220*77c1e3ccSAndroid Build Coastguard Worker     }
221*77c1e3ccSAndroid Build Coastguard Worker   }
222*77c1e3ccSAndroid Build Coastguard Worker   RoundHighBitDepth(bit_depth, &se, &sse);
223*77c1e3ccSAndroid Build Coastguard Worker   *sse_ptr = static_cast<uint32_t>(sse);
224*77c1e3ccSAndroid Build Coastguard Worker   return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
225*77c1e3ccSAndroid Build Coastguard Worker }
226*77c1e3ccSAndroid Build Coastguard Worker 
dist_wtd_subpel_avg_variance_ref(const uint8_t * ref,const uint8_t * src,const uint8_t * second_pred,int l2w,int l2h,int xoff,int yoff,uint32_t * sse_ptr,bool use_high_bit_depth,aom_bit_depth_t bit_depth,DIST_WTD_COMP_PARAMS * jcp_param)227*77c1e3ccSAndroid Build Coastguard Worker static uint32_t dist_wtd_subpel_avg_variance_ref(
228*77c1e3ccSAndroid Build Coastguard Worker     const uint8_t *ref, const uint8_t *src, const uint8_t *second_pred, int l2w,
229*77c1e3ccSAndroid Build Coastguard Worker     int l2h, int xoff, int yoff, uint32_t *sse_ptr, bool use_high_bit_depth,
230*77c1e3ccSAndroid Build Coastguard Worker     aom_bit_depth_t bit_depth, DIST_WTD_COMP_PARAMS *jcp_param) {
231*77c1e3ccSAndroid Build Coastguard Worker   int64_t se = 0;
232*77c1e3ccSAndroid Build Coastguard Worker   uint64_t sse = 0;
233*77c1e3ccSAndroid Build Coastguard Worker   const int w = 1 << l2w;
234*77c1e3ccSAndroid Build Coastguard Worker   const int h = 1 << l2h;
235*77c1e3ccSAndroid Build Coastguard Worker 
236*77c1e3ccSAndroid Build Coastguard Worker   xoff <<= 1;
237*77c1e3ccSAndroid Build Coastguard Worker   yoff <<= 1;
238*77c1e3ccSAndroid Build Coastguard Worker 
239*77c1e3ccSAndroid Build Coastguard Worker   for (int y = 0; y < h; y++) {
240*77c1e3ccSAndroid Build Coastguard Worker     for (int x = 0; x < w; x++) {
241*77c1e3ccSAndroid Build Coastguard Worker       // bilinear interpolation at a 16th pel step
242*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth) {
243*77c1e3ccSAndroid Build Coastguard Worker         const int a1 = ref[(w + 0) * (y + 0) + x + 0];
244*77c1e3ccSAndroid Build Coastguard Worker         const int a2 = ref[(w + 0) * (y + 0) + x + 1];
245*77c1e3ccSAndroid Build Coastguard Worker         const int b1 = ref[(w + 0) * (y + 1) + x + 0];
246*77c1e3ccSAndroid Build Coastguard Worker         const int b2 = ref[(w + 0) * (y + 1) + x + 1];
247*77c1e3ccSAndroid Build Coastguard Worker         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
248*77c1e3ccSAndroid Build Coastguard Worker         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
249*77c1e3ccSAndroid Build Coastguard Worker         const int r = a + (((b - a) * yoff + 8) >> 4);
250*77c1e3ccSAndroid Build Coastguard Worker         const int avg = ROUND_POWER_OF_TWO(
251*77c1e3ccSAndroid Build Coastguard Worker             r * jcp_param->fwd_offset +
252*77c1e3ccSAndroid Build Coastguard Worker                 second_pred[w * y + x] * jcp_param->bck_offset,
253*77c1e3ccSAndroid Build Coastguard Worker             DIST_PRECISION_BITS);
254*77c1e3ccSAndroid Build Coastguard Worker         const int diff = avg - src[w * y + x];
255*77c1e3ccSAndroid Build Coastguard Worker 
256*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
257*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
258*77c1e3ccSAndroid Build Coastguard Worker       } else {
259*77c1e3ccSAndroid Build Coastguard Worker         const uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
260*77c1e3ccSAndroid Build Coastguard Worker         const uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
261*77c1e3ccSAndroid Build Coastguard Worker         const uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred);
262*77c1e3ccSAndroid Build Coastguard Worker         const int a1 = ref16[(w + 0) * (y + 0) + x + 0];
263*77c1e3ccSAndroid Build Coastguard Worker         const int a2 = ref16[(w + 0) * (y + 0) + x + 1];
264*77c1e3ccSAndroid Build Coastguard Worker         const int b1 = ref16[(w + 0) * (y + 1) + x + 0];
265*77c1e3ccSAndroid Build Coastguard Worker         const int b2 = ref16[(w + 0) * (y + 1) + x + 1];
266*77c1e3ccSAndroid Build Coastguard Worker         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
267*77c1e3ccSAndroid Build Coastguard Worker         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
268*77c1e3ccSAndroid Build Coastguard Worker         const int r = a + (((b - a) * yoff + 8) >> 4);
269*77c1e3ccSAndroid Build Coastguard Worker         const int avg =
270*77c1e3ccSAndroid Build Coastguard Worker             ROUND_POWER_OF_TWO(r * jcp_param->fwd_offset +
271*77c1e3ccSAndroid Build Coastguard Worker                                    sec16[w * y + x] * jcp_param->bck_offset,
272*77c1e3ccSAndroid Build Coastguard Worker                                DIST_PRECISION_BITS);
273*77c1e3ccSAndroid Build Coastguard Worker         const int diff = avg - src16[w * y + x];
274*77c1e3ccSAndroid Build Coastguard Worker 
275*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
276*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
277*77c1e3ccSAndroid Build Coastguard Worker       }
278*77c1e3ccSAndroid Build Coastguard Worker     }
279*77c1e3ccSAndroid Build Coastguard Worker   }
280*77c1e3ccSAndroid Build Coastguard Worker   RoundHighBitDepth(bit_depth, &se, &sse);
281*77c1e3ccSAndroid Build Coastguard Worker   *sse_ptr = static_cast<uint32_t>(sse);
282*77c1e3ccSAndroid Build Coastguard Worker   return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
283*77c1e3ccSAndroid Build Coastguard Worker }
284*77c1e3ccSAndroid Build Coastguard Worker 
285*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
obmc_subpel_variance_ref(const uint8_t * pre,int l2w,int l2h,int xoff,int yoff,const int32_t * wsrc,const int32_t * mask,uint32_t * sse_ptr,bool use_high_bit_depth_,aom_bit_depth_t bit_depth)286*77c1e3ccSAndroid Build Coastguard Worker static uint32_t obmc_subpel_variance_ref(const uint8_t *pre, int l2w, int l2h,
287*77c1e3ccSAndroid Build Coastguard Worker                                          int xoff, int yoff,
288*77c1e3ccSAndroid Build Coastguard Worker                                          const int32_t *wsrc,
289*77c1e3ccSAndroid Build Coastguard Worker                                          const int32_t *mask, uint32_t *sse_ptr,
290*77c1e3ccSAndroid Build Coastguard Worker                                          bool use_high_bit_depth_,
291*77c1e3ccSAndroid Build Coastguard Worker                                          aom_bit_depth_t bit_depth) {
292*77c1e3ccSAndroid Build Coastguard Worker   int64_t se = 0;
293*77c1e3ccSAndroid Build Coastguard Worker   uint64_t sse = 0;
294*77c1e3ccSAndroid Build Coastguard Worker   const int w = 1 << l2w;
295*77c1e3ccSAndroid Build Coastguard Worker   const int h = 1 << l2h;
296*77c1e3ccSAndroid Build Coastguard Worker 
297*77c1e3ccSAndroid Build Coastguard Worker   xoff <<= 1;
298*77c1e3ccSAndroid Build Coastguard Worker   yoff <<= 1;
299*77c1e3ccSAndroid Build Coastguard Worker 
300*77c1e3ccSAndroid Build Coastguard Worker   for (int y = 0; y < h; y++) {
301*77c1e3ccSAndroid Build Coastguard Worker     for (int x = 0; x < w; x++) {
302*77c1e3ccSAndroid Build Coastguard Worker       // Bilinear interpolation at a 16th pel step.
303*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth_) {
304*77c1e3ccSAndroid Build Coastguard Worker         const int a1 = pre[(w + 1) * (y + 0) + x + 0];
305*77c1e3ccSAndroid Build Coastguard Worker         const int a2 = pre[(w + 1) * (y + 0) + x + 1];
306*77c1e3ccSAndroid Build Coastguard Worker         const int b1 = pre[(w + 1) * (y + 1) + x + 0];
307*77c1e3ccSAndroid Build Coastguard Worker         const int b2 = pre[(w + 1) * (y + 1) + x + 1];
308*77c1e3ccSAndroid Build Coastguard Worker         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
309*77c1e3ccSAndroid Build Coastguard Worker         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
310*77c1e3ccSAndroid Build Coastguard Worker         const int r = a + (((b - a) * yoff + 8) >> 4);
311*77c1e3ccSAndroid Build Coastguard Worker         const int diff = ROUND_POWER_OF_TWO_SIGNED(
312*77c1e3ccSAndroid Build Coastguard Worker             wsrc[w * y + x] - r * mask[w * y + x], 12);
313*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
314*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
315*77c1e3ccSAndroid Build Coastguard Worker       } else {
316*77c1e3ccSAndroid Build Coastguard Worker         uint16_t *pre16 = CONVERT_TO_SHORTPTR(pre);
317*77c1e3ccSAndroid Build Coastguard Worker         const int a1 = pre16[(w + 1) * (y + 0) + x + 0];
318*77c1e3ccSAndroid Build Coastguard Worker         const int a2 = pre16[(w + 1) * (y + 0) + x + 1];
319*77c1e3ccSAndroid Build Coastguard Worker         const int b1 = pre16[(w + 1) * (y + 1) + x + 0];
320*77c1e3ccSAndroid Build Coastguard Worker         const int b2 = pre16[(w + 1) * (y + 1) + x + 1];
321*77c1e3ccSAndroid Build Coastguard Worker         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
322*77c1e3ccSAndroid Build Coastguard Worker         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
323*77c1e3ccSAndroid Build Coastguard Worker         const int r = a + (((b - a) * yoff + 8) >> 4);
324*77c1e3ccSAndroid Build Coastguard Worker         const int diff = ROUND_POWER_OF_TWO_SIGNED(
325*77c1e3ccSAndroid Build Coastguard Worker             wsrc[w * y + x] - r * mask[w * y + x], 12);
326*77c1e3ccSAndroid Build Coastguard Worker         se += diff;
327*77c1e3ccSAndroid Build Coastguard Worker         sse += diff * diff;
328*77c1e3ccSAndroid Build Coastguard Worker       }
329*77c1e3ccSAndroid Build Coastguard Worker     }
330*77c1e3ccSAndroid Build Coastguard Worker   }
331*77c1e3ccSAndroid Build Coastguard Worker   RoundHighBitDepth(bit_depth, &se, &sse);
332*77c1e3ccSAndroid Build Coastguard Worker   *sse_ptr = static_cast<uint32_t>(sse);
333*77c1e3ccSAndroid Build Coastguard Worker   return static_cast<uint32_t>(sse - ((se * se) >> (l2w + l2h)));
334*77c1e3ccSAndroid Build Coastguard Worker }
335*77c1e3ccSAndroid Build Coastguard Worker #endif
336*77c1e3ccSAndroid Build Coastguard Worker 
337*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
338*77c1e3ccSAndroid Build Coastguard Worker 
339*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
340*77c1e3ccSAndroid Build Coastguard Worker class SumOfSquaresTest : public ::testing::TestWithParam<SumOfSquaresFunction> {
341*77c1e3ccSAndroid Build Coastguard Worker  public:
SumOfSquaresTest()342*77c1e3ccSAndroid Build Coastguard Worker   SumOfSquaresTest() : func_(GetParam()) {}
343*77c1e3ccSAndroid Build Coastguard Worker 
344*77c1e3ccSAndroid Build Coastguard Worker   ~SumOfSquaresTest() override = default;
345*77c1e3ccSAndroid Build Coastguard Worker 
346*77c1e3ccSAndroid Build Coastguard Worker  protected:
347*77c1e3ccSAndroid Build Coastguard Worker   void ConstTest();
348*77c1e3ccSAndroid Build Coastguard Worker   void RefTest();
349*77c1e3ccSAndroid Build Coastguard Worker 
350*77c1e3ccSAndroid Build Coastguard Worker   SumOfSquaresFunction func_;
351*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd_;
352*77c1e3ccSAndroid Build Coastguard Worker };
353*77c1e3ccSAndroid Build Coastguard Worker 
ConstTest()354*77c1e3ccSAndroid Build Coastguard Worker void SumOfSquaresTest::ConstTest() {
355*77c1e3ccSAndroid Build Coastguard Worker   int16_t mem[256];
356*77c1e3ccSAndroid Build Coastguard Worker   unsigned int res;
357*77c1e3ccSAndroid Build Coastguard Worker   for (int v = 0; v < 256; ++v) {
358*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < 256; ++i) {
359*77c1e3ccSAndroid Build Coastguard Worker       mem[i] = v;
360*77c1e3ccSAndroid Build Coastguard Worker     }
361*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(res = func_(mem));
362*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(256u * (v * v), res);
363*77c1e3ccSAndroid Build Coastguard Worker   }
364*77c1e3ccSAndroid Build Coastguard Worker }
365*77c1e3ccSAndroid Build Coastguard Worker 
mb_ss_ref(const int16_t * src)366*77c1e3ccSAndroid Build Coastguard Worker unsigned int mb_ss_ref(const int16_t *src) {
367*77c1e3ccSAndroid Build Coastguard Worker   unsigned int res = 0;
368*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 256; ++i) {
369*77c1e3ccSAndroid Build Coastguard Worker     res += src[i] * src[i];
370*77c1e3ccSAndroid Build Coastguard Worker   }
371*77c1e3ccSAndroid Build Coastguard Worker   return res;
372*77c1e3ccSAndroid Build Coastguard Worker }
373*77c1e3ccSAndroid Build Coastguard Worker 
RefTest()374*77c1e3ccSAndroid Build Coastguard Worker void SumOfSquaresTest::RefTest() {
375*77c1e3ccSAndroid Build Coastguard Worker   int16_t mem[256];
376*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 100; ++i) {
377*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < 256; ++j) {
378*77c1e3ccSAndroid Build Coastguard Worker       mem[j] = rnd_.Rand8() - rnd_.Rand8();
379*77c1e3ccSAndroid Build Coastguard Worker     }
380*77c1e3ccSAndroid Build Coastguard Worker 
381*77c1e3ccSAndroid Build Coastguard Worker     const unsigned int expected = mb_ss_ref(mem);
382*77c1e3ccSAndroid Build Coastguard Worker     unsigned int res;
383*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(res = func_(mem));
384*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(expected, res);
385*77c1e3ccSAndroid Build Coastguard Worker   }
386*77c1e3ccSAndroid Build Coastguard Worker }
387*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
388*77c1e3ccSAndroid Build Coastguard Worker 
389*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
390*77c1e3ccSAndroid Build Coastguard Worker // Encapsulating struct to store the function to test along with
391*77c1e3ccSAndroid Build Coastguard Worker // some testing context.
392*77c1e3ccSAndroid Build Coastguard Worker // Can be used for MSE, SSE, Variance, etc.
393*77c1e3ccSAndroid Build Coastguard Worker 
394*77c1e3ccSAndroid Build Coastguard Worker template <typename Func>
395*77c1e3ccSAndroid Build Coastguard Worker struct TestParams {
TestParams__anone33b19b50111::TestParams396*77c1e3ccSAndroid Build Coastguard Worker   TestParams(int log2w = 0, int log2h = 0, Func function = nullptr,
397*77c1e3ccSAndroid Build Coastguard Worker              int bit_depth_value = 0)
398*77c1e3ccSAndroid Build Coastguard Worker       : log2width(log2w), log2height(log2h), func(function) {
399*77c1e3ccSAndroid Build Coastguard Worker     use_high_bit_depth = (bit_depth_value > 0);
400*77c1e3ccSAndroid Build Coastguard Worker     if (use_high_bit_depth) {
401*77c1e3ccSAndroid Build Coastguard Worker       bit_depth = static_cast<aom_bit_depth_t>(bit_depth_value);
402*77c1e3ccSAndroid Build Coastguard Worker     } else {
403*77c1e3ccSAndroid Build Coastguard Worker       bit_depth = AOM_BITS_8;
404*77c1e3ccSAndroid Build Coastguard Worker     }
405*77c1e3ccSAndroid Build Coastguard Worker     width = 1 << log2width;
406*77c1e3ccSAndroid Build Coastguard Worker     height = 1 << log2height;
407*77c1e3ccSAndroid Build Coastguard Worker     block_size = width * height;
408*77c1e3ccSAndroid Build Coastguard Worker     mask = (1u << bit_depth) - 1;
409*77c1e3ccSAndroid Build Coastguard Worker   }
410*77c1e3ccSAndroid Build Coastguard Worker 
411*77c1e3ccSAndroid Build Coastguard Worker   int log2width, log2height;
412*77c1e3ccSAndroid Build Coastguard Worker   int width, height;
413*77c1e3ccSAndroid Build Coastguard Worker   int block_size;
414*77c1e3ccSAndroid Build Coastguard Worker   Func func;
415*77c1e3ccSAndroid Build Coastguard Worker   aom_bit_depth_t bit_depth;
416*77c1e3ccSAndroid Build Coastguard Worker   bool use_high_bit_depth;
417*77c1e3ccSAndroid Build Coastguard Worker   uint32_t mask;
418*77c1e3ccSAndroid Build Coastguard Worker };
419*77c1e3ccSAndroid Build Coastguard Worker 
420*77c1e3ccSAndroid Build Coastguard Worker template <typename Func>
operator <<(std::ostream & os,const TestParams<Func> & p)421*77c1e3ccSAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &os, const TestParams<Func> &p) {
422*77c1e3ccSAndroid Build Coastguard Worker   return os << "width/height:" << p.width << "/" << p.height
423*77c1e3ccSAndroid Build Coastguard Worker             << " function:" << reinterpret_cast<const void *>(p.func)
424*77c1e3ccSAndroid Build Coastguard Worker             << " bit-depth:" << p.bit_depth;
425*77c1e3ccSAndroid Build Coastguard Worker }
426*77c1e3ccSAndroid Build Coastguard Worker 
427*77c1e3ccSAndroid Build Coastguard Worker // Main class for testing a function type
428*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
429*77c1e3ccSAndroid Build Coastguard Worker class MseWxHTestClass
430*77c1e3ccSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<TestParams<FunctionType> > {
431*77c1e3ccSAndroid Build Coastguard Worker  public:
SetUp()432*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
433*77c1e3ccSAndroid Build Coastguard Worker     params_ = this->GetParam();
434*77c1e3ccSAndroid Build Coastguard Worker 
435*77c1e3ccSAndroid Build Coastguard Worker     rnd_.Reset(ACMRandom::DeterministicSeed());
436*77c1e3ccSAndroid Build Coastguard Worker     src_ = reinterpret_cast<uint16_t *>(
437*77c1e3ccSAndroid Build Coastguard Worker         aom_memalign(16, block_size() * sizeof(src_)));
438*77c1e3ccSAndroid Build Coastguard Worker     dst_ = reinterpret_cast<uint8_t *>(
439*77c1e3ccSAndroid Build Coastguard Worker         aom_memalign(16, block_size() * sizeof(dst_)));
440*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(src_, nullptr);
441*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(dst_, nullptr);
442*77c1e3ccSAndroid Build Coastguard Worker   }
443*77c1e3ccSAndroid Build Coastguard Worker 
TearDown()444*77c1e3ccSAndroid Build Coastguard Worker   void TearDown() override {
445*77c1e3ccSAndroid Build Coastguard Worker     aom_free(src_);
446*77c1e3ccSAndroid Build Coastguard Worker     aom_free(dst_);
447*77c1e3ccSAndroid Build Coastguard Worker     src_ = nullptr;
448*77c1e3ccSAndroid Build Coastguard Worker     dst_ = nullptr;
449*77c1e3ccSAndroid Build Coastguard Worker   }
450*77c1e3ccSAndroid Build Coastguard Worker 
451*77c1e3ccSAndroid Build Coastguard Worker  protected:
452*77c1e3ccSAndroid Build Coastguard Worker   void RefMatchTestMse();
453*77c1e3ccSAndroid Build Coastguard Worker   void SpeedTest();
454*77c1e3ccSAndroid Build Coastguard Worker 
455*77c1e3ccSAndroid Build Coastguard Worker  protected:
456*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd_;
457*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *dst_;
458*77c1e3ccSAndroid Build Coastguard Worker   uint16_t *src_;
459*77c1e3ccSAndroid Build Coastguard Worker   TestParams<FunctionType> params_;
460*77c1e3ccSAndroid Build Coastguard Worker 
461*77c1e3ccSAndroid Build Coastguard Worker   // some relay helpers
block_size() const462*77c1e3ccSAndroid Build Coastguard Worker   int block_size() const { return params_.block_size; }
width() const463*77c1e3ccSAndroid Build Coastguard Worker   int width() const { return params_.width; }
height() const464*77c1e3ccSAndroid Build Coastguard Worker   int height() const { return params_.height; }
d_stride() const465*77c1e3ccSAndroid Build Coastguard Worker   int d_stride() const { return params_.width; }  // stride is same as width
s_stride() const466*77c1e3ccSAndroid Build Coastguard Worker   int s_stride() const { return params_.width; }  // stride is same as width
467*77c1e3ccSAndroid Build Coastguard Worker };
468*77c1e3ccSAndroid Build Coastguard Worker 
469*77c1e3ccSAndroid Build Coastguard Worker template <typename MseWxHFunctionType>
SpeedTest()470*77c1e3ccSAndroid Build Coastguard Worker void MseWxHTestClass<MseWxHFunctionType>::SpeedTest() {
471*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer ref_timer, test_timer;
472*77c1e3ccSAndroid Build Coastguard Worker   double elapsed_time_c = 0;
473*77c1e3ccSAndroid Build Coastguard Worker   double elapsed_time_simd = 0;
474*77c1e3ccSAndroid Build Coastguard Worker   int run_time = 10000000;
475*77c1e3ccSAndroid Build Coastguard Worker   int w = width();
476*77c1e3ccSAndroid Build Coastguard Worker   int h = height();
477*77c1e3ccSAndroid Build Coastguard Worker   int dstride = d_stride();
478*77c1e3ccSAndroid Build Coastguard Worker   int sstride = s_stride();
479*77c1e3ccSAndroid Build Coastguard Worker 
480*77c1e3ccSAndroid Build Coastguard Worker   for (int k = 0; k < block_size(); ++k) {
481*77c1e3ccSAndroid Build Coastguard Worker     dst_[k] = rnd_.Rand8();
482*77c1e3ccSAndroid Build Coastguard Worker     src_[k] = rnd_.Rand8();
483*77c1e3ccSAndroid Build Coastguard Worker   }
484*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&ref_timer);
485*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < run_time; i++) {
486*77c1e3ccSAndroid Build Coastguard Worker     aom_mse_wxh_16bit_c(dst_, dstride, src_, sstride, w, h);
487*77c1e3ccSAndroid Build Coastguard Worker   }
488*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&ref_timer);
489*77c1e3ccSAndroid Build Coastguard Worker   elapsed_time_c = static_cast<double>(aom_usec_timer_elapsed(&ref_timer));
490*77c1e3ccSAndroid Build Coastguard Worker 
491*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&test_timer);
492*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < run_time; i++) {
493*77c1e3ccSAndroid Build Coastguard Worker     params_.func(dst_, dstride, src_, sstride, w, h);
494*77c1e3ccSAndroid Build Coastguard Worker   }
495*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&test_timer);
496*77c1e3ccSAndroid Build Coastguard Worker   elapsed_time_simd = static_cast<double>(aom_usec_timer_elapsed(&test_timer));
497*77c1e3ccSAndroid Build Coastguard Worker 
498*77c1e3ccSAndroid Build Coastguard Worker   printf("%dx%d\tc_time=%lf \t simd_time=%lf \t gain=%lf\n", width(), height(),
499*77c1e3ccSAndroid Build Coastguard Worker          elapsed_time_c, elapsed_time_simd,
500*77c1e3ccSAndroid Build Coastguard Worker          (elapsed_time_c / elapsed_time_simd));
501*77c1e3ccSAndroid Build Coastguard Worker }
502*77c1e3ccSAndroid Build Coastguard Worker 
503*77c1e3ccSAndroid Build Coastguard Worker template <typename MseWxHFunctionType>
RefMatchTestMse()504*77c1e3ccSAndroid Build Coastguard Worker void MseWxHTestClass<MseWxHFunctionType>::RefMatchTestMse() {
505*77c1e3ccSAndroid Build Coastguard Worker   uint64_t mse_ref = 0;
506*77c1e3ccSAndroid Build Coastguard Worker   uint64_t mse_mod = 0;
507*77c1e3ccSAndroid Build Coastguard Worker   int w = width();
508*77c1e3ccSAndroid Build Coastguard Worker   int h = height();
509*77c1e3ccSAndroid Build Coastguard Worker   int dstride = d_stride();
510*77c1e3ccSAndroid Build Coastguard Worker   int sstride = s_stride();
511*77c1e3ccSAndroid Build Coastguard Worker 
512*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 10; i++) {
513*77c1e3ccSAndroid Build Coastguard Worker     for (int k = 0; k < block_size(); ++k) {
514*77c1e3ccSAndroid Build Coastguard Worker       dst_[k] = rnd_.Rand8();
515*77c1e3ccSAndroid Build Coastguard Worker       src_[k] = rnd_.Rand8();
516*77c1e3ccSAndroid Build Coastguard Worker     }
517*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(
518*77c1e3ccSAndroid Build Coastguard Worker         mse_ref = aom_mse_wxh_16bit_c(dst_, dstride, src_, sstride, w, h));
519*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(
520*77c1e3ccSAndroid Build Coastguard Worker         mse_mod = params_.func(dst_, dstride, src_, sstride, w, h));
521*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(mse_ref, mse_mod)
522*77c1e3ccSAndroid Build Coastguard Worker         << "ref mse: " << mse_ref << " mod mse: " << mse_mod;
523*77c1e3ccSAndroid Build Coastguard Worker   }
524*77c1e3ccSAndroid Build Coastguard Worker }
525*77c1e3ccSAndroid Build Coastguard Worker 
526*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
527*77c1e3ccSAndroid Build Coastguard Worker class Mse16xHTestClass
528*77c1e3ccSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<TestParams<FunctionType> > {
529*77c1e3ccSAndroid Build Coastguard Worker  public:
530*77c1e3ccSAndroid Build Coastguard Worker   // Memory required to compute mse of two 8x8 and four 4x4 blocks assigned for
531*77c1e3ccSAndroid Build Coastguard Worker   // maximum width 16 and maximum height 8.
532*77c1e3ccSAndroid Build Coastguard Worker   int mem_size = 16 * 8;
SetUp()533*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
534*77c1e3ccSAndroid Build Coastguard Worker     params_ = this->GetParam();
535*77c1e3ccSAndroid Build Coastguard Worker     rnd_.Reset(ACMRandom::DeterministicSeed());
536*77c1e3ccSAndroid Build Coastguard Worker     src_ = reinterpret_cast<uint16_t *>(
537*77c1e3ccSAndroid Build Coastguard Worker         aom_memalign(16, mem_size * sizeof(*src_)));
538*77c1e3ccSAndroid Build Coastguard Worker     dst_ =
539*77c1e3ccSAndroid Build Coastguard Worker         reinterpret_cast<uint8_t *>(aom_memalign(16, mem_size * sizeof(*dst_)));
540*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(src_, nullptr);
541*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(dst_, nullptr);
542*77c1e3ccSAndroid Build Coastguard Worker   }
543*77c1e3ccSAndroid Build Coastguard Worker 
TearDown()544*77c1e3ccSAndroid Build Coastguard Worker   void TearDown() override {
545*77c1e3ccSAndroid Build Coastguard Worker     aom_free(src_);
546*77c1e3ccSAndroid Build Coastguard Worker     aom_free(dst_);
547*77c1e3ccSAndroid Build Coastguard Worker     src_ = nullptr;
548*77c1e3ccSAndroid Build Coastguard Worker     dst_ = nullptr;
549*77c1e3ccSAndroid Build Coastguard Worker   }
550*77c1e3ccSAndroid Build Coastguard Worker 
RandBool()551*77c1e3ccSAndroid Build Coastguard Worker   uint8_t RandBool() {
552*77c1e3ccSAndroid Build Coastguard Worker     const uint32_t value = rnd_.Rand8();
553*77c1e3ccSAndroid Build Coastguard Worker     return (value & 0x1);
554*77c1e3ccSAndroid Build Coastguard Worker   }
555*77c1e3ccSAndroid Build Coastguard Worker 
556*77c1e3ccSAndroid Build Coastguard Worker  protected:
557*77c1e3ccSAndroid Build Coastguard Worker   void RefMatchExtremeTestMse();
558*77c1e3ccSAndroid Build Coastguard Worker   void RefMatchTestMse();
559*77c1e3ccSAndroid Build Coastguard Worker   void SpeedTest();
560*77c1e3ccSAndroid Build Coastguard Worker 
561*77c1e3ccSAndroid Build Coastguard Worker  protected:
562*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd_;
563*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *dst_;
564*77c1e3ccSAndroid Build Coastguard Worker   uint16_t *src_;
565*77c1e3ccSAndroid Build Coastguard Worker   TestParams<FunctionType> params_;
566*77c1e3ccSAndroid Build Coastguard Worker 
567*77c1e3ccSAndroid Build Coastguard Worker   // some relay helpers
width() const568*77c1e3ccSAndroid Build Coastguard Worker   int width() const { return params_.width; }
height() const569*77c1e3ccSAndroid Build Coastguard Worker   int height() const { return params_.height; }
d_stride() const570*77c1e3ccSAndroid Build Coastguard Worker   int d_stride() const { return params_.width; }
571*77c1e3ccSAndroid Build Coastguard Worker };
572*77c1e3ccSAndroid Build Coastguard Worker 
573*77c1e3ccSAndroid Build Coastguard Worker template <typename Mse16xHFunctionType>
SpeedTest()574*77c1e3ccSAndroid Build Coastguard Worker void Mse16xHTestClass<Mse16xHFunctionType>::SpeedTest() {
575*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer ref_timer, test_timer;
576*77c1e3ccSAndroid Build Coastguard Worker   double elapsed_time_c = 0.0;
577*77c1e3ccSAndroid Build Coastguard Worker   double elapsed_time_simd = 0.0;
578*77c1e3ccSAndroid Build Coastguard Worker   const int loop_count = 10000000;
579*77c1e3ccSAndroid Build Coastguard Worker   const int w = width();
580*77c1e3ccSAndroid Build Coastguard Worker   const int h = height();
581*77c1e3ccSAndroid Build Coastguard Worker   const int dstride = d_stride();
582*77c1e3ccSAndroid Build Coastguard Worker 
583*77c1e3ccSAndroid Build Coastguard Worker   for (int k = 0; k < mem_size; ++k) {
584*77c1e3ccSAndroid Build Coastguard Worker     dst_[k] = rnd_.Rand8();
585*77c1e3ccSAndroid Build Coastguard Worker     // Right shift by 6 is done to generate more input in range of [0,255] than
586*77c1e3ccSAndroid Build Coastguard Worker     // CDEF_VERY_LARGE
587*77c1e3ccSAndroid Build Coastguard Worker     int rnd_i10 = rnd_.Rand16() >> 6;
588*77c1e3ccSAndroid Build Coastguard Worker     src_[k] = (rnd_i10 < 256) ? rnd_i10 : CDEF_VERY_LARGE;
589*77c1e3ccSAndroid Build Coastguard Worker   }
590*77c1e3ccSAndroid Build Coastguard Worker 
591*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&ref_timer);
592*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < loop_count; i++) {
593*77c1e3ccSAndroid Build Coastguard Worker     aom_mse_16xh_16bit_c(dst_, dstride, src_, w, h);
594*77c1e3ccSAndroid Build Coastguard Worker   }
595*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&ref_timer);
596*77c1e3ccSAndroid Build Coastguard Worker   elapsed_time_c = static_cast<double>(aom_usec_timer_elapsed(&ref_timer));
597*77c1e3ccSAndroid Build Coastguard Worker 
598*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&test_timer);
599*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < loop_count; i++) {
600*77c1e3ccSAndroid Build Coastguard Worker     params_.func(dst_, dstride, src_, w, h);
601*77c1e3ccSAndroid Build Coastguard Worker   }
602*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&test_timer);
603*77c1e3ccSAndroid Build Coastguard Worker   elapsed_time_simd = static_cast<double>(aom_usec_timer_elapsed(&test_timer));
604*77c1e3ccSAndroid Build Coastguard Worker 
605*77c1e3ccSAndroid Build Coastguard Worker   printf("%dx%d\tc_time=%lf \t simd_time=%lf \t gain=%.31f\n", width(),
606*77c1e3ccSAndroid Build Coastguard Worker          height(), elapsed_time_c, elapsed_time_simd,
607*77c1e3ccSAndroid Build Coastguard Worker          (elapsed_time_c / elapsed_time_simd));
608*77c1e3ccSAndroid Build Coastguard Worker }
609*77c1e3ccSAndroid Build Coastguard Worker 
610*77c1e3ccSAndroid Build Coastguard Worker template <typename Mse16xHFunctionType>
RefMatchTestMse()611*77c1e3ccSAndroid Build Coastguard Worker void Mse16xHTestClass<Mse16xHFunctionType>::RefMatchTestMse() {
612*77c1e3ccSAndroid Build Coastguard Worker   uint64_t mse_ref = 0;
613*77c1e3ccSAndroid Build Coastguard Worker   uint64_t mse_mod = 0;
614*77c1e3ccSAndroid Build Coastguard Worker   const int w = width();
615*77c1e3ccSAndroid Build Coastguard Worker   const int h = height();
616*77c1e3ccSAndroid Build Coastguard Worker   const int dstride = d_stride();
617*77c1e3ccSAndroid Build Coastguard Worker 
618*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 10; i++) {
619*77c1e3ccSAndroid Build Coastguard Worker     for (int k = 0; k < mem_size; ++k) {
620*77c1e3ccSAndroid Build Coastguard Worker       dst_[k] = rnd_.Rand8();
621*77c1e3ccSAndroid Build Coastguard Worker       // Right shift by 6 is done to generate more input in range of [0,255]
622*77c1e3ccSAndroid Build Coastguard Worker       // than CDEF_VERY_LARGE
623*77c1e3ccSAndroid Build Coastguard Worker       int rnd_i10 = rnd_.Rand16() >> 6;
624*77c1e3ccSAndroid Build Coastguard Worker       src_[k] = (rnd_i10 < 256) ? rnd_i10 : CDEF_VERY_LARGE;
625*77c1e3ccSAndroid Build Coastguard Worker     }
626*77c1e3ccSAndroid Build Coastguard Worker 
627*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(
628*77c1e3ccSAndroid Build Coastguard Worker         mse_ref = aom_mse_16xh_16bit_c(dst_, dstride, src_, w, h));
629*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(mse_mod = params_.func(dst_, dstride, src_, w, h));
630*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(mse_ref, mse_mod)
631*77c1e3ccSAndroid Build Coastguard Worker         << "ref mse: " << mse_ref << " mod mse: " << mse_mod;
632*77c1e3ccSAndroid Build Coastguard Worker   }
633*77c1e3ccSAndroid Build Coastguard Worker }
634*77c1e3ccSAndroid Build Coastguard Worker 
635*77c1e3ccSAndroid Build Coastguard Worker template <typename Mse16xHFunctionType>
RefMatchExtremeTestMse()636*77c1e3ccSAndroid Build Coastguard Worker void Mse16xHTestClass<Mse16xHFunctionType>::RefMatchExtremeTestMse() {
637*77c1e3ccSAndroid Build Coastguard Worker   uint64_t mse_ref = 0;
638*77c1e3ccSAndroid Build Coastguard Worker   uint64_t mse_mod = 0;
639*77c1e3ccSAndroid Build Coastguard Worker   const int w = width();
640*77c1e3ccSAndroid Build Coastguard Worker   const int h = height();
641*77c1e3ccSAndroid Build Coastguard Worker   const int dstride = d_stride();
642*77c1e3ccSAndroid Build Coastguard Worker   const int iter = 10;
643*77c1e3ccSAndroid Build Coastguard Worker 
644*77c1e3ccSAndroid Build Coastguard Worker   // Fill the buffers with extreme values
645*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < iter; i++) {
646*77c1e3ccSAndroid Build Coastguard Worker     for (int k = 0; k < mem_size; ++k) {
647*77c1e3ccSAndroid Build Coastguard Worker       dst_[k] = static_cast<uint8_t>(RandBool() ? 0 : 255);
648*77c1e3ccSAndroid Build Coastguard Worker       src_[k] = static_cast<uint16_t>(RandBool() ? 0 : CDEF_VERY_LARGE);
649*77c1e3ccSAndroid Build Coastguard Worker     }
650*77c1e3ccSAndroid Build Coastguard Worker 
651*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(
652*77c1e3ccSAndroid Build Coastguard Worker         mse_ref = aom_mse_16xh_16bit_c(dst_, dstride, src_, w, h));
653*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(mse_mod = params_.func(dst_, dstride, src_, w, h));
654*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(mse_ref, mse_mod)
655*77c1e3ccSAndroid Build Coastguard Worker         << "ref mse: " << mse_ref << " mod mse: " << mse_mod;
656*77c1e3ccSAndroid Build Coastguard Worker   }
657*77c1e3ccSAndroid Build Coastguard Worker }
658*77c1e3ccSAndroid Build Coastguard Worker 
659*77c1e3ccSAndroid Build Coastguard Worker // Main class for testing a function type
660*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
661*77c1e3ccSAndroid Build Coastguard Worker class MainTestClass
662*77c1e3ccSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<TestParams<FunctionType> > {
663*77c1e3ccSAndroid Build Coastguard Worker  public:
SetUp()664*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
665*77c1e3ccSAndroid Build Coastguard Worker     params_ = this->GetParam();
666*77c1e3ccSAndroid Build Coastguard Worker 
667*77c1e3ccSAndroid Build Coastguard Worker     rnd_.Reset(ACMRandom::DeterministicSeed());
668*77c1e3ccSAndroid Build Coastguard Worker     const size_t unit =
669*77c1e3ccSAndroid Build Coastguard Worker         use_high_bit_depth() ? sizeof(uint16_t) : sizeof(uint8_t);
670*77c1e3ccSAndroid Build Coastguard Worker     src_ = reinterpret_cast<uint8_t *>(aom_memalign(16, block_size() * unit));
671*77c1e3ccSAndroid Build Coastguard Worker     ref_ = new uint8_t[block_size() * unit];
672*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(src_, nullptr);
673*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(ref_, nullptr);
674*77c1e3ccSAndroid Build Coastguard Worker     memset(src_, 0, block_size() * sizeof(src_[0]));
675*77c1e3ccSAndroid Build Coastguard Worker     memset(ref_, 0, block_size() * sizeof(ref_[0]));
676*77c1e3ccSAndroid Build Coastguard Worker     if (use_high_bit_depth()) {
677*77c1e3ccSAndroid Build Coastguard Worker       // TODO(skal): remove!
678*77c1e3ccSAndroid Build Coastguard Worker       src_ = CONVERT_TO_BYTEPTR(src_);
679*77c1e3ccSAndroid Build Coastguard Worker       ref_ = CONVERT_TO_BYTEPTR(ref_);
680*77c1e3ccSAndroid Build Coastguard Worker     }
681*77c1e3ccSAndroid Build Coastguard Worker   }
682*77c1e3ccSAndroid Build Coastguard Worker 
TearDown()683*77c1e3ccSAndroid Build Coastguard Worker   void TearDown() override {
684*77c1e3ccSAndroid Build Coastguard Worker     if (use_high_bit_depth()) {
685*77c1e3ccSAndroid Build Coastguard Worker       // TODO(skal): remove!
686*77c1e3ccSAndroid Build Coastguard Worker       src_ = reinterpret_cast<uint8_t *>(CONVERT_TO_SHORTPTR(src_));
687*77c1e3ccSAndroid Build Coastguard Worker       ref_ = reinterpret_cast<uint8_t *>(CONVERT_TO_SHORTPTR(ref_));
688*77c1e3ccSAndroid Build Coastguard Worker     }
689*77c1e3ccSAndroid Build Coastguard Worker 
690*77c1e3ccSAndroid Build Coastguard Worker     aom_free(src_);
691*77c1e3ccSAndroid Build Coastguard Worker     delete[] ref_;
692*77c1e3ccSAndroid Build Coastguard Worker     src_ = nullptr;
693*77c1e3ccSAndroid Build Coastguard Worker     ref_ = nullptr;
694*77c1e3ccSAndroid Build Coastguard Worker   }
695*77c1e3ccSAndroid Build Coastguard Worker 
696*77c1e3ccSAndroid Build Coastguard Worker  protected:
697*77c1e3ccSAndroid Build Coastguard Worker   // We could sub-class MainTestClass into dedicated class for Variance
698*77c1e3ccSAndroid Build Coastguard Worker   // and MSE/SSE, but it involves a lot of 'this->xxx' dereferencing
699*77c1e3ccSAndroid Build Coastguard Worker   // to access top class fields xxx. That's cumbersome, so for now we'll just
700*77c1e3ccSAndroid Build Coastguard Worker   // implement the testing methods here:
701*77c1e3ccSAndroid Build Coastguard Worker 
702*77c1e3ccSAndroid Build Coastguard Worker   // Variance tests
703*77c1e3ccSAndroid Build Coastguard Worker   void ZeroTest();
704*77c1e3ccSAndroid Build Coastguard Worker   void RefTest();
705*77c1e3ccSAndroid Build Coastguard Worker   void RefStrideTest();
706*77c1e3ccSAndroid Build Coastguard Worker   void OneQuarterTest();
707*77c1e3ccSAndroid Build Coastguard Worker   void SpeedTest();
708*77c1e3ccSAndroid Build Coastguard Worker 
709*77c1e3ccSAndroid Build Coastguard Worker   // SSE&SUM tests
710*77c1e3ccSAndroid Build Coastguard Worker   void RefTestSseSum();
711*77c1e3ccSAndroid Build Coastguard Worker   void MinTestSseSum();
712*77c1e3ccSAndroid Build Coastguard Worker   void MaxTestSseSum();
713*77c1e3ccSAndroid Build Coastguard Worker   void SseSum_SpeedTest();
714*77c1e3ccSAndroid Build Coastguard Worker 
715*77c1e3ccSAndroid Build Coastguard Worker   // SSE&SUM dual tests
716*77c1e3ccSAndroid Build Coastguard Worker   void RefTestSseSumDual();
717*77c1e3ccSAndroid Build Coastguard Worker   void MinTestSseSumDual();
718*77c1e3ccSAndroid Build Coastguard Worker   void MaxTestSseSumDual();
719*77c1e3ccSAndroid Build Coastguard Worker   void SseSum_SpeedTestDual();
720*77c1e3ccSAndroid Build Coastguard Worker 
721*77c1e3ccSAndroid Build Coastguard Worker   // MSE/SSE tests
722*77c1e3ccSAndroid Build Coastguard Worker   void RefTestMse();
723*77c1e3ccSAndroid Build Coastguard Worker   void RefTestSse();
724*77c1e3ccSAndroid Build Coastguard Worker   void MaxTestMse();
725*77c1e3ccSAndroid Build Coastguard Worker   void MaxTestSse();
726*77c1e3ccSAndroid Build Coastguard Worker 
727*77c1e3ccSAndroid Build Coastguard Worker  protected:
728*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd_;
729*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *src_;
730*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *ref_;
731*77c1e3ccSAndroid Build Coastguard Worker   TestParams<FunctionType> params_;
732*77c1e3ccSAndroid Build Coastguard Worker 
733*77c1e3ccSAndroid Build Coastguard Worker   // some relay helpers
use_high_bit_depth() const734*77c1e3ccSAndroid Build Coastguard Worker   bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
byte_shift() const735*77c1e3ccSAndroid Build Coastguard Worker   int byte_shift() const { return params_.bit_depth - 8; }
block_size() const736*77c1e3ccSAndroid Build Coastguard Worker   int block_size() const { return params_.block_size; }
width() const737*77c1e3ccSAndroid Build Coastguard Worker   int width() const { return params_.width; }
height() const738*77c1e3ccSAndroid Build Coastguard Worker   int height() const { return params_.height; }
mask() const739*77c1e3ccSAndroid Build Coastguard Worker   uint32_t mask() const { return params_.mask; }
740*77c1e3ccSAndroid Build Coastguard Worker };
741*77c1e3ccSAndroid Build Coastguard Worker 
742*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
743*77c1e3ccSAndroid Build Coastguard Worker // Tests related to variance.
744*77c1e3ccSAndroid Build Coastguard Worker 
745*77c1e3ccSAndroid Build Coastguard Worker template <typename VarianceFunctionType>
ZeroTest()746*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<VarianceFunctionType>::ZeroTest() {
747*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i <= 255; ++i) {
748*77c1e3ccSAndroid Build Coastguard Worker     if (!use_high_bit_depth()) {
749*77c1e3ccSAndroid Build Coastguard Worker       memset(src_, i, block_size());
750*77c1e3ccSAndroid Build Coastguard Worker     } else {
751*77c1e3ccSAndroid Build Coastguard Worker       uint16_t *const src16 = CONVERT_TO_SHORTPTR(src_);
752*77c1e3ccSAndroid Build Coastguard Worker       for (int k = 0; k < block_size(); ++k) src16[k] = i << byte_shift();
753*77c1e3ccSAndroid Build Coastguard Worker     }
754*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j <= 255; ++j) {
755*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
756*77c1e3ccSAndroid Build Coastguard Worker         memset(ref_, j, block_size());
757*77c1e3ccSAndroid Build Coastguard Worker       } else {
758*77c1e3ccSAndroid Build Coastguard Worker         uint16_t *const ref16 = CONVERT_TO_SHORTPTR(ref_);
759*77c1e3ccSAndroid Build Coastguard Worker         for (int k = 0; k < block_size(); ++k) ref16[k] = j << byte_shift();
760*77c1e3ccSAndroid Build Coastguard Worker       }
761*77c1e3ccSAndroid Build Coastguard Worker       unsigned int sse, var;
762*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(
763*77c1e3ccSAndroid Build Coastguard Worker           var = params_.func(src_, width(), ref_, width(), &sse));
764*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(0u, var) << "src values: " << i << " ref values: " << j;
765*77c1e3ccSAndroid Build Coastguard Worker     }
766*77c1e3ccSAndroid Build Coastguard Worker   }
767*77c1e3ccSAndroid Build Coastguard Worker }
768*77c1e3ccSAndroid Build Coastguard Worker 
769*77c1e3ccSAndroid Build Coastguard Worker template <typename VarianceFunctionType>
RefTest()770*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<VarianceFunctionType>::RefTest() {
771*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 10; ++i) {
772*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size(); j++) {
773*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
774*77c1e3ccSAndroid Build Coastguard Worker         src_[j] = rnd_.Rand8();
775*77c1e3ccSAndroid Build Coastguard Worker         ref_[j] = rnd_.Rand8();
776*77c1e3ccSAndroid Build Coastguard Worker       } else {
777*77c1e3ccSAndroid Build Coastguard Worker         CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
778*77c1e3ccSAndroid Build Coastguard Worker         CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
779*77c1e3ccSAndroid Build Coastguard Worker       }
780*77c1e3ccSAndroid Build Coastguard Worker     }
781*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse1, sse2, var1, var2;
782*77c1e3ccSAndroid Build Coastguard Worker     const int stride = width();
783*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(
784*77c1e3ccSAndroid Build Coastguard Worker         var1 = params_.func(src_, stride, ref_, stride, &sse1));
785*77c1e3ccSAndroid Build Coastguard Worker     var2 =
786*77c1e3ccSAndroid Build Coastguard Worker         variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
787*77c1e3ccSAndroid Build Coastguard Worker                      stride, &sse2, use_high_bit_depth(), params_.bit_depth);
788*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse1, sse2) << "Error at test index: " << i;
789*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(var1, var2) << "Error at test index: " << i;
790*77c1e3ccSAndroid Build Coastguard Worker   }
791*77c1e3ccSAndroid Build Coastguard Worker }
792*77c1e3ccSAndroid Build Coastguard Worker 
793*77c1e3ccSAndroid Build Coastguard Worker template <typename VarianceFunctionType>
RefStrideTest()794*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<VarianceFunctionType>::RefStrideTest() {
795*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 10; ++i) {
796*77c1e3ccSAndroid Build Coastguard Worker     const int ref_stride = (i & 1) * width();
797*77c1e3ccSAndroid Build Coastguard Worker     const int src_stride = ((i >> 1) & 1) * width();
798*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size(); j++) {
799*77c1e3ccSAndroid Build Coastguard Worker       const int ref_ind = (j / width()) * ref_stride + j % width();
800*77c1e3ccSAndroid Build Coastguard Worker       const int src_ind = (j / width()) * src_stride + j % width();
801*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
802*77c1e3ccSAndroid Build Coastguard Worker         src_[src_ind] = rnd_.Rand8();
803*77c1e3ccSAndroid Build Coastguard Worker         ref_[ref_ind] = rnd_.Rand8();
804*77c1e3ccSAndroid Build Coastguard Worker       } else {
805*77c1e3ccSAndroid Build Coastguard Worker         CONVERT_TO_SHORTPTR(src_)[src_ind] = rnd_.Rand16() & mask();
806*77c1e3ccSAndroid Build Coastguard Worker         CONVERT_TO_SHORTPTR(ref_)[ref_ind] = rnd_.Rand16() & mask();
807*77c1e3ccSAndroid Build Coastguard Worker       }
808*77c1e3ccSAndroid Build Coastguard Worker     }
809*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse1, sse2;
810*77c1e3ccSAndroid Build Coastguard Worker     unsigned int var1, var2;
811*77c1e3ccSAndroid Build Coastguard Worker 
812*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(
813*77c1e3ccSAndroid Build Coastguard Worker         var1 = params_.func(src_, src_stride, ref_, ref_stride, &sse1));
814*77c1e3ccSAndroid Build Coastguard Worker     var2 = variance_ref(src_, ref_, params_.log2width, params_.log2height,
815*77c1e3ccSAndroid Build Coastguard Worker                         src_stride, ref_stride, &sse2, use_high_bit_depth(),
816*77c1e3ccSAndroid Build Coastguard Worker                         params_.bit_depth);
817*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse1, sse2) << "Error at test index: " << i;
818*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(var1, var2) << "Error at test index: " << i;
819*77c1e3ccSAndroid Build Coastguard Worker   }
820*77c1e3ccSAndroid Build Coastguard Worker }
821*77c1e3ccSAndroid Build Coastguard Worker 
822*77c1e3ccSAndroid Build Coastguard Worker template <typename VarianceFunctionType>
OneQuarterTest()823*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<VarianceFunctionType>::OneQuarterTest() {
824*77c1e3ccSAndroid Build Coastguard Worker   const int half = block_size() / 2;
825*77c1e3ccSAndroid Build Coastguard Worker   if (!use_high_bit_depth()) {
826*77c1e3ccSAndroid Build Coastguard Worker     memset(src_, 255, block_size());
827*77c1e3ccSAndroid Build Coastguard Worker     memset(ref_, 255, half);
828*77c1e3ccSAndroid Build Coastguard Worker     memset(ref_ + half, 0, half);
829*77c1e3ccSAndroid Build Coastguard Worker   } else {
830*77c1e3ccSAndroid Build Coastguard Worker     aom_memset16(CONVERT_TO_SHORTPTR(src_), 255 << byte_shift(), block_size());
831*77c1e3ccSAndroid Build Coastguard Worker     aom_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << byte_shift(), half);
832*77c1e3ccSAndroid Build Coastguard Worker     aom_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half);
833*77c1e3ccSAndroid Build Coastguard Worker   }
834*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse, var, expected;
835*77c1e3ccSAndroid Build Coastguard Worker   API_REGISTER_STATE_CHECK(
836*77c1e3ccSAndroid Build Coastguard Worker       var = params_.func(src_, width(), ref_, width(), &sse));
837*77c1e3ccSAndroid Build Coastguard Worker   expected = block_size() * 255 * 255 / 4;
838*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(expected, var);
839*77c1e3ccSAndroid Build Coastguard Worker }
840*77c1e3ccSAndroid Build Coastguard Worker 
841*77c1e3ccSAndroid Build Coastguard Worker template <typename VarianceFunctionType>
SpeedTest()842*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<VarianceFunctionType>::SpeedTest() {
843*77c1e3ccSAndroid Build Coastguard Worker   for (int j = 0; j < block_size(); j++) {
844*77c1e3ccSAndroid Build Coastguard Worker     if (!use_high_bit_depth()) {
845*77c1e3ccSAndroid Build Coastguard Worker       src_[j] = rnd_.Rand8();
846*77c1e3ccSAndroid Build Coastguard Worker       ref_[j] = rnd_.Rand8();
847*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
848*77c1e3ccSAndroid Build Coastguard Worker     } else {
849*77c1e3ccSAndroid Build Coastguard Worker       CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
850*77c1e3ccSAndroid Build Coastguard Worker       CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
851*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
852*77c1e3ccSAndroid Build Coastguard Worker     }
853*77c1e3ccSAndroid Build Coastguard Worker   }
854*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse;
855*77c1e3ccSAndroid Build Coastguard Worker   const int stride = width();
856*77c1e3ccSAndroid Build Coastguard Worker   int run_time = 1000000000 / block_size();
857*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer timer;
858*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&timer);
859*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < run_time; ++i) {
860*77c1e3ccSAndroid Build Coastguard Worker     params_.func(src_, stride, ref_, stride, &sse);
861*77c1e3ccSAndroid Build Coastguard Worker   }
862*77c1e3ccSAndroid Build Coastguard Worker 
863*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&timer);
864*77c1e3ccSAndroid Build Coastguard Worker   const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
865*77c1e3ccSAndroid Build Coastguard Worker   printf("Variance %dx%d : %d us\n", width(), height(), elapsed_time);
866*77c1e3ccSAndroid Build Coastguard Worker }
867*77c1e3ccSAndroid Build Coastguard Worker 
868*77c1e3ccSAndroid Build Coastguard Worker template <typename GetSseSum8x8QuadFuncType>
RefTestSseSum()869*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<GetSseSum8x8QuadFuncType>::RefTestSseSum() {
870*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 10; ++i) {
871*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size(); ++j) {
872*77c1e3ccSAndroid Build Coastguard Worker       src_[j] = rnd_.Rand8();
873*77c1e3ccSAndroid Build Coastguard Worker       ref_[j] = rnd_.Rand8();
874*77c1e3ccSAndroid Build Coastguard Worker     }
875*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse1[256] = { 0 };
876*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse2[256] = { 0 };
877*77c1e3ccSAndroid Build Coastguard Worker     unsigned int var1[256] = { 0 };
878*77c1e3ccSAndroid Build Coastguard Worker     unsigned int var2[256] = { 0 };
879*77c1e3ccSAndroid Build Coastguard Worker     int sum1[256] = { 0 };
880*77c1e3ccSAndroid Build Coastguard Worker     int sum2[256] = { 0 };
881*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse_tot_c = 0;
882*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse_tot_simd = 0;
883*77c1e3ccSAndroid Build Coastguard Worker     int sum_tot_c = 0;
884*77c1e3ccSAndroid Build Coastguard Worker     int sum_tot_simd = 0;
885*77c1e3ccSAndroid Build Coastguard Worker     const int stride = width();
886*77c1e3ccSAndroid Build Coastguard Worker     int k = 0;
887*77c1e3ccSAndroid Build Coastguard Worker 
888*77c1e3ccSAndroid Build Coastguard Worker     for (int row = 0; row < height(); row += 8) {
889*77c1e3ccSAndroid Build Coastguard Worker       for (int col = 0; col < width(); col += 32) {
890*77c1e3ccSAndroid Build Coastguard Worker         API_REGISTER_STATE_CHECK(params_.func(src_ + stride * row + col, stride,
891*77c1e3ccSAndroid Build Coastguard Worker                                               ref_ + stride * row + col, stride,
892*77c1e3ccSAndroid Build Coastguard Worker                                               &sse1[k], &sum1[k], &sse_tot_simd,
893*77c1e3ccSAndroid Build Coastguard Worker                                               &sum_tot_simd, &var1[k]));
894*77c1e3ccSAndroid Build Coastguard Worker         aom_get_var_sse_sum_8x8_quad_c(
895*77c1e3ccSAndroid Build Coastguard Worker             src_ + stride * row + col, stride, ref_ + stride * row + col,
896*77c1e3ccSAndroid Build Coastguard Worker             stride, &sse2[k], &sum2[k], &sse_tot_c, &sum_tot_c, &var2[k]);
897*77c1e3ccSAndroid Build Coastguard Worker         k += 4;
898*77c1e3ccSAndroid Build Coastguard Worker       }
899*77c1e3ccSAndroid Build Coastguard Worker     }
900*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse_tot_c, sse_tot_simd);
901*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sum_tot_c, sum_tot_simd);
902*77c1e3ccSAndroid Build Coastguard Worker     for (int p = 0; p < 256; p++) {
903*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sse1[p], sse2[p]);
904*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sum1[p], sum2[p]);
905*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(var1[p], var2[p]);
906*77c1e3ccSAndroid Build Coastguard Worker     }
907*77c1e3ccSAndroid Build Coastguard Worker   }
908*77c1e3ccSAndroid Build Coastguard Worker }
909*77c1e3ccSAndroid Build Coastguard Worker 
910*77c1e3ccSAndroid Build Coastguard Worker template <typename GetSseSum8x8QuadFuncType>
MinTestSseSum()911*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<GetSseSum8x8QuadFuncType>::MinTestSseSum() {
912*77c1e3ccSAndroid Build Coastguard Worker   memset(src_, 0, block_size());
913*77c1e3ccSAndroid Build Coastguard Worker   memset(ref_, 255, block_size());
914*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse1[256] = { 0 };
915*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse2[256] = { 0 };
916*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var1[256] = { 0 };
917*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var2[256] = { 0 };
918*77c1e3ccSAndroid Build Coastguard Worker   int sum1[256] = { 0 };
919*77c1e3ccSAndroid Build Coastguard Worker   int sum2[256] = { 0 };
920*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_c = 0;
921*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_simd = 0;
922*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_c = 0;
923*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_simd = 0;
924*77c1e3ccSAndroid Build Coastguard Worker   const int stride = width();
925*77c1e3ccSAndroid Build Coastguard Worker   int k = 0;
926*77c1e3ccSAndroid Build Coastguard Worker 
927*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < height(); i += 8) {
928*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < width(); j += 32) {
929*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(params_.func(
930*77c1e3ccSAndroid Build Coastguard Worker           src_ + stride * i + j, stride, ref_ + stride * i + j, stride,
931*77c1e3ccSAndroid Build Coastguard Worker           &sse1[k], &sum1[k], &sse_tot_simd, &sum_tot_simd, &var1[k]));
932*77c1e3ccSAndroid Build Coastguard Worker       aom_get_var_sse_sum_8x8_quad_c(
933*77c1e3ccSAndroid Build Coastguard Worker           src_ + stride * i + j, stride, ref_ + stride * i + j, stride,
934*77c1e3ccSAndroid Build Coastguard Worker           &sse2[k], &sum2[k], &sse_tot_c, &sum_tot_c, &var2[k]);
935*77c1e3ccSAndroid Build Coastguard Worker       k += 4;
936*77c1e3ccSAndroid Build Coastguard Worker     }
937*77c1e3ccSAndroid Build Coastguard Worker   }
938*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(sse_tot_simd, sse_tot_c);
939*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(sum_tot_simd, sum_tot_c);
940*77c1e3ccSAndroid Build Coastguard Worker   for (int p = 0; p < 256; p++) {
941*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse1[p], sse2[p]);
942*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sum1[p], sum2[p]);
943*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(var1[p], var2[p]);
944*77c1e3ccSAndroid Build Coastguard Worker   }
945*77c1e3ccSAndroid Build Coastguard Worker }
946*77c1e3ccSAndroid Build Coastguard Worker 
947*77c1e3ccSAndroid Build Coastguard Worker template <typename GetSseSum8x8QuadFuncType>
MaxTestSseSum()948*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<GetSseSum8x8QuadFuncType>::MaxTestSseSum() {
949*77c1e3ccSAndroid Build Coastguard Worker   memset(src_, 255, block_size());
950*77c1e3ccSAndroid Build Coastguard Worker   memset(ref_, 0, block_size());
951*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse1[256] = { 0 };
952*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse2[256] = { 0 };
953*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var1[256] = { 0 };
954*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var2[256] = { 0 };
955*77c1e3ccSAndroid Build Coastguard Worker   int sum1[256] = { 0 };
956*77c1e3ccSAndroid Build Coastguard Worker   int sum2[256] = { 0 };
957*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_c = 0;
958*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_simd = 0;
959*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_c = 0;
960*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_simd = 0;
961*77c1e3ccSAndroid Build Coastguard Worker   const int stride = width();
962*77c1e3ccSAndroid Build Coastguard Worker   int k = 0;
963*77c1e3ccSAndroid Build Coastguard Worker 
964*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < height(); i += 8) {
965*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < width(); j += 32) {
966*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(params_.func(
967*77c1e3ccSAndroid Build Coastguard Worker           src_ + stride * i + j, stride, ref_ + stride * i + j, stride,
968*77c1e3ccSAndroid Build Coastguard Worker           &sse1[k], &sum1[k], &sse_tot_simd, &sum_tot_simd, &var1[k]));
969*77c1e3ccSAndroid Build Coastguard Worker       aom_get_var_sse_sum_8x8_quad_c(
970*77c1e3ccSAndroid Build Coastguard Worker           src_ + stride * i + j, stride, ref_ + stride * i + j, stride,
971*77c1e3ccSAndroid Build Coastguard Worker           &sse2[k], &sum2[k], &sse_tot_c, &sum_tot_c, &var2[k]);
972*77c1e3ccSAndroid Build Coastguard Worker       k += 4;
973*77c1e3ccSAndroid Build Coastguard Worker     }
974*77c1e3ccSAndroid Build Coastguard Worker   }
975*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(sse_tot_c, sse_tot_simd);
976*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(sum_tot_c, sum_tot_simd);
977*77c1e3ccSAndroid Build Coastguard Worker 
978*77c1e3ccSAndroid Build Coastguard Worker   for (int p = 0; p < 256; p++) {
979*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse1[p], sse2[p]);
980*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sum1[p], sum2[p]);
981*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(var1[p], var2[p]);
982*77c1e3ccSAndroid Build Coastguard Worker   }
983*77c1e3ccSAndroid Build Coastguard Worker }
984*77c1e3ccSAndroid Build Coastguard Worker 
985*77c1e3ccSAndroid Build Coastguard Worker template <typename GetSseSum8x8QuadFuncType>
SseSum_SpeedTest()986*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<GetSseSum8x8QuadFuncType>::SseSum_SpeedTest() {
987*77c1e3ccSAndroid Build Coastguard Worker   const int loop_count = 1000000000 / block_size();
988*77c1e3ccSAndroid Build Coastguard Worker   for (int j = 0; j < block_size(); ++j) {
989*77c1e3ccSAndroid Build Coastguard Worker     src_[j] = rnd_.Rand8();
990*77c1e3ccSAndroid Build Coastguard Worker     ref_[j] = rnd_.Rand8();
991*77c1e3ccSAndroid Build Coastguard Worker   }
992*77c1e3ccSAndroid Build Coastguard Worker 
993*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse1[4] = { 0 };
994*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse2[4] = { 0 };
995*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var1[4] = { 0 };
996*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var2[4] = { 0 };
997*77c1e3ccSAndroid Build Coastguard Worker   int sum1[4] = { 0 };
998*77c1e3ccSAndroid Build Coastguard Worker   int sum2[4] = { 0 };
999*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_c = 0;
1000*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_simd = 0;
1001*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_c = 0;
1002*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_simd = 0;
1003*77c1e3ccSAndroid Build Coastguard Worker   const int stride = width();
1004*77c1e3ccSAndroid Build Coastguard Worker 
1005*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer timer;
1006*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&timer);
1007*77c1e3ccSAndroid Build Coastguard Worker   for (int r = 0; r < loop_count; ++r) {
1008*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < height(); i += 8) {
1009*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < width(); j += 32) {
1010*77c1e3ccSAndroid Build Coastguard Worker         aom_get_var_sse_sum_8x8_quad_c(src_ + stride * i + j, stride,
1011*77c1e3ccSAndroid Build Coastguard Worker                                        ref_ + stride * i + j, stride, sse2,
1012*77c1e3ccSAndroid Build Coastguard Worker                                        sum2, &sse_tot_c, &sum_tot_c, var2);
1013*77c1e3ccSAndroid Build Coastguard Worker       }
1014*77c1e3ccSAndroid Build Coastguard Worker     }
1015*77c1e3ccSAndroid Build Coastguard Worker   }
1016*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&timer);
1017*77c1e3ccSAndroid Build Coastguard Worker   const double elapsed_time_ref =
1018*77c1e3ccSAndroid Build Coastguard Worker       static_cast<double>(aom_usec_timer_elapsed(&timer));
1019*77c1e3ccSAndroid Build Coastguard Worker 
1020*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&timer);
1021*77c1e3ccSAndroid Build Coastguard Worker   for (int r = 0; r < loop_count; ++r) {
1022*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < height(); i += 8) {
1023*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < width(); j += 32) {
1024*77c1e3ccSAndroid Build Coastguard Worker         params_.func(src_ + stride * i + j, stride, ref_ + stride * i + j,
1025*77c1e3ccSAndroid Build Coastguard Worker                      stride, sse1, sum1, &sse_tot_simd, &sum_tot_simd, var1);
1026*77c1e3ccSAndroid Build Coastguard Worker       }
1027*77c1e3ccSAndroid Build Coastguard Worker     }
1028*77c1e3ccSAndroid Build Coastguard Worker   }
1029*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&timer);
1030*77c1e3ccSAndroid Build Coastguard Worker   const double elapsed_time_simd =
1031*77c1e3ccSAndroid Build Coastguard Worker       static_cast<double>(aom_usec_timer_elapsed(&timer));
1032*77c1e3ccSAndroid Build Coastguard Worker 
1033*77c1e3ccSAndroid Build Coastguard Worker   printf(
1034*77c1e3ccSAndroid Build Coastguard Worker       "aom_getvar_8x8_quad for block=%dx%d : ref_time=%lf \t simd_time=%lf \t "
1035*77c1e3ccSAndroid Build Coastguard Worker       "gain=%lf \n",
1036*77c1e3ccSAndroid Build Coastguard Worker       width(), height(), elapsed_time_ref, elapsed_time_simd,
1037*77c1e3ccSAndroid Build Coastguard Worker       elapsed_time_ref / elapsed_time_simd);
1038*77c1e3ccSAndroid Build Coastguard Worker }
1039*77c1e3ccSAndroid Build Coastguard Worker 
1040*77c1e3ccSAndroid Build Coastguard Worker template <typename GetSseSum16x16DualFuncType>
RefTestSseSumDual()1041*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<GetSseSum16x16DualFuncType>::RefTestSseSumDual() {
1042*77c1e3ccSAndroid Build Coastguard Worker   for (int iter = 0; iter < 10; ++iter) {
1043*77c1e3ccSAndroid Build Coastguard Worker     for (int idx = 0; idx < block_size(); ++idx) {
1044*77c1e3ccSAndroid Build Coastguard Worker       src_[idx] = rnd_.Rand8();
1045*77c1e3ccSAndroid Build Coastguard Worker       ref_[idx] = rnd_.Rand8();
1046*77c1e3ccSAndroid Build Coastguard Worker     }
1047*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse1[64] = { 0 };
1048*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse2[64] = { 0 };
1049*77c1e3ccSAndroid Build Coastguard Worker     unsigned int var1[64] = { 0 };
1050*77c1e3ccSAndroid Build Coastguard Worker     unsigned int var2[64] = { 0 };
1051*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse_tot_c = 0;
1052*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse_tot_simd = 0;
1053*77c1e3ccSAndroid Build Coastguard Worker     int sum_tot_c = 0;
1054*77c1e3ccSAndroid Build Coastguard Worker     int sum_tot_simd = 0;
1055*77c1e3ccSAndroid Build Coastguard Worker     const int stride = width();
1056*77c1e3ccSAndroid Build Coastguard Worker     int k = 0;
1057*77c1e3ccSAndroid Build Coastguard Worker 
1058*77c1e3ccSAndroid Build Coastguard Worker     for (int row = 0; row < height(); row += 16) {
1059*77c1e3ccSAndroid Build Coastguard Worker       for (int col = 0; col < width(); col += 32) {
1060*77c1e3ccSAndroid Build Coastguard Worker         API_REGISTER_STATE_CHECK(params_.func(
1061*77c1e3ccSAndroid Build Coastguard Worker             src_ + stride * row + col, stride, ref_ + stride * row + col,
1062*77c1e3ccSAndroid Build Coastguard Worker             stride, &sse1[k], &sse_tot_simd, &sum_tot_simd, &var1[k]));
1063*77c1e3ccSAndroid Build Coastguard Worker         aom_get_var_sse_sum_16x16_dual_c(
1064*77c1e3ccSAndroid Build Coastguard Worker             src_ + stride * row + col, stride, ref_ + stride * row + col,
1065*77c1e3ccSAndroid Build Coastguard Worker             stride, &sse2[k], &sse_tot_c, &sum_tot_c, &var2[k]);
1066*77c1e3ccSAndroid Build Coastguard Worker         k += 2;
1067*77c1e3ccSAndroid Build Coastguard Worker       }
1068*77c1e3ccSAndroid Build Coastguard Worker     }
1069*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse_tot_c, sse_tot_simd);
1070*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sum_tot_c, sum_tot_simd);
1071*77c1e3ccSAndroid Build Coastguard Worker     for (int p = 0; p < 64; p++) {
1072*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sse1[p], sse2[p]);
1073*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sse_tot_simd, sse_tot_c);
1074*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sum_tot_simd, sum_tot_c);
1075*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(var1[p], var2[p]);
1076*77c1e3ccSAndroid Build Coastguard Worker     }
1077*77c1e3ccSAndroid Build Coastguard Worker   }
1078*77c1e3ccSAndroid Build Coastguard Worker }
1079*77c1e3ccSAndroid Build Coastguard Worker 
1080*77c1e3ccSAndroid Build Coastguard Worker template <typename GetSseSum16x16DualFuncType>
MinTestSseSumDual()1081*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<GetSseSum16x16DualFuncType>::MinTestSseSumDual() {
1082*77c1e3ccSAndroid Build Coastguard Worker   memset(src_, 0, block_size());
1083*77c1e3ccSAndroid Build Coastguard Worker   memset(ref_, 255, block_size());
1084*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse1[64] = { 0 };
1085*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse2[64] = { 0 };
1086*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var1[64] = { 0 };
1087*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var2[64] = { 0 };
1088*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_c = 0;
1089*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_simd = 0;
1090*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_c = 0;
1091*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_simd = 0;
1092*77c1e3ccSAndroid Build Coastguard Worker   const int stride = width();
1093*77c1e3ccSAndroid Build Coastguard Worker   int k = 0;
1094*77c1e3ccSAndroid Build Coastguard Worker 
1095*77c1e3ccSAndroid Build Coastguard Worker   for (int row = 0; row < height(); row += 16) {
1096*77c1e3ccSAndroid Build Coastguard Worker     for (int col = 0; col < width(); col += 32) {
1097*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(params_.func(
1098*77c1e3ccSAndroid Build Coastguard Worker           src_ + stride * row + col, stride, ref_ + stride * row + col, stride,
1099*77c1e3ccSAndroid Build Coastguard Worker           &sse1[k], &sse_tot_simd, &sum_tot_simd, &var1[k]));
1100*77c1e3ccSAndroid Build Coastguard Worker       aom_get_var_sse_sum_16x16_dual_c(
1101*77c1e3ccSAndroid Build Coastguard Worker           src_ + stride * row + col, stride, ref_ + stride * row + col, stride,
1102*77c1e3ccSAndroid Build Coastguard Worker           &sse2[k], &sse_tot_c, &sum_tot_c, &var2[k]);
1103*77c1e3ccSAndroid Build Coastguard Worker       k += 2;
1104*77c1e3ccSAndroid Build Coastguard Worker     }
1105*77c1e3ccSAndroid Build Coastguard Worker   }
1106*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(sse_tot_simd, sse_tot_c);
1107*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(sum_tot_simd, sum_tot_c);
1108*77c1e3ccSAndroid Build Coastguard Worker   for (int p = 0; p < 64; p++) {
1109*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse1[p], sse2[p]);
1110*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(var1[p], var2[p]);
1111*77c1e3ccSAndroid Build Coastguard Worker   }
1112*77c1e3ccSAndroid Build Coastguard Worker }
1113*77c1e3ccSAndroid Build Coastguard Worker 
1114*77c1e3ccSAndroid Build Coastguard Worker template <typename GetSseSum16x16DualFuncType>
MaxTestSseSumDual()1115*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<GetSseSum16x16DualFuncType>::MaxTestSseSumDual() {
1116*77c1e3ccSAndroid Build Coastguard Worker   memset(src_, 255, block_size());
1117*77c1e3ccSAndroid Build Coastguard Worker   memset(ref_, 0, block_size());
1118*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse1[64] = { 0 };
1119*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse2[64] = { 0 };
1120*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var1[64] = { 0 };
1121*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var2[64] = { 0 };
1122*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_c = 0;
1123*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_simd = 0;
1124*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_c = 0;
1125*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_simd = 0;
1126*77c1e3ccSAndroid Build Coastguard Worker   const int stride = width();
1127*77c1e3ccSAndroid Build Coastguard Worker   int k = 0;
1128*77c1e3ccSAndroid Build Coastguard Worker 
1129*77c1e3ccSAndroid Build Coastguard Worker   for (int row = 0; row < height(); row += 16) {
1130*77c1e3ccSAndroid Build Coastguard Worker     for (int col = 0; col < width(); col += 32) {
1131*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(params_.func(
1132*77c1e3ccSAndroid Build Coastguard Worker           src_ + stride * row + col, stride, ref_ + stride * row + col, stride,
1133*77c1e3ccSAndroid Build Coastguard Worker           &sse1[k], &sse_tot_simd, &sum_tot_simd, &var1[k]));
1134*77c1e3ccSAndroid Build Coastguard Worker       aom_get_var_sse_sum_16x16_dual_c(
1135*77c1e3ccSAndroid Build Coastguard Worker           src_ + stride * row + col, stride, ref_ + stride * row + col, stride,
1136*77c1e3ccSAndroid Build Coastguard Worker           &sse2[k], &sse_tot_c, &sum_tot_c, &var2[k]);
1137*77c1e3ccSAndroid Build Coastguard Worker       k += 2;
1138*77c1e3ccSAndroid Build Coastguard Worker     }
1139*77c1e3ccSAndroid Build Coastguard Worker   }
1140*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(sse_tot_c, sse_tot_simd);
1141*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(sum_tot_c, sum_tot_simd);
1142*77c1e3ccSAndroid Build Coastguard Worker 
1143*77c1e3ccSAndroid Build Coastguard Worker   for (int p = 0; p < 64; p++) {
1144*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse1[p], sse2[p]);
1145*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(var1[p], var2[p]);
1146*77c1e3ccSAndroid Build Coastguard Worker   }
1147*77c1e3ccSAndroid Build Coastguard Worker }
1148*77c1e3ccSAndroid Build Coastguard Worker 
1149*77c1e3ccSAndroid Build Coastguard Worker template <typename GetSseSum16x16DualFuncType>
SseSum_SpeedTestDual()1150*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<GetSseSum16x16DualFuncType>::SseSum_SpeedTestDual() {
1151*77c1e3ccSAndroid Build Coastguard Worker   const int loop_count = 1000000000 / block_size();
1152*77c1e3ccSAndroid Build Coastguard Worker   for (int idx = 0; idx < block_size(); ++idx) {
1153*77c1e3ccSAndroid Build Coastguard Worker     src_[idx] = rnd_.Rand8();
1154*77c1e3ccSAndroid Build Coastguard Worker     ref_[idx] = rnd_.Rand8();
1155*77c1e3ccSAndroid Build Coastguard Worker   }
1156*77c1e3ccSAndroid Build Coastguard Worker 
1157*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse1[2] = { 0 };
1158*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse2[2] = { 0 };
1159*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var1[2] = { 0 };
1160*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var2[2] = { 0 };
1161*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_c = 0;
1162*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse_tot_simd = 0;
1163*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_c = 0;
1164*77c1e3ccSAndroid Build Coastguard Worker   int sum_tot_simd = 0;
1165*77c1e3ccSAndroid Build Coastguard Worker   const int stride = width();
1166*77c1e3ccSAndroid Build Coastguard Worker 
1167*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer timer;
1168*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&timer);
1169*77c1e3ccSAndroid Build Coastguard Worker   for (int r = 0; r < loop_count; ++r) {
1170*77c1e3ccSAndroid Build Coastguard Worker     for (int row = 0; row < height(); row += 16) {
1171*77c1e3ccSAndroid Build Coastguard Worker       for (int col = 0; col < width(); col += 32) {
1172*77c1e3ccSAndroid Build Coastguard Worker         aom_get_var_sse_sum_16x16_dual_c(src_ + stride * row + col, stride,
1173*77c1e3ccSAndroid Build Coastguard Worker                                          ref_ + stride * row + col, stride,
1174*77c1e3ccSAndroid Build Coastguard Worker                                          sse2, &sse_tot_c, &sum_tot_c, var2);
1175*77c1e3ccSAndroid Build Coastguard Worker       }
1176*77c1e3ccSAndroid Build Coastguard Worker     }
1177*77c1e3ccSAndroid Build Coastguard Worker   }
1178*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&timer);
1179*77c1e3ccSAndroid Build Coastguard Worker   const double elapsed_time_ref =
1180*77c1e3ccSAndroid Build Coastguard Worker       static_cast<double>(aom_usec_timer_elapsed(&timer));
1181*77c1e3ccSAndroid Build Coastguard Worker 
1182*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&timer);
1183*77c1e3ccSAndroid Build Coastguard Worker   for (int r = 0; r < loop_count; ++r) {
1184*77c1e3ccSAndroid Build Coastguard Worker     for (int row = 0; row < height(); row += 16) {
1185*77c1e3ccSAndroid Build Coastguard Worker       for (int col = 0; col < width(); col += 32) {
1186*77c1e3ccSAndroid Build Coastguard Worker         params_.func(src_ + stride * row + col, stride,
1187*77c1e3ccSAndroid Build Coastguard Worker                      ref_ + stride * row + col, stride, sse1, &sse_tot_simd,
1188*77c1e3ccSAndroid Build Coastguard Worker                      &sum_tot_simd, var1);
1189*77c1e3ccSAndroid Build Coastguard Worker       }
1190*77c1e3ccSAndroid Build Coastguard Worker     }
1191*77c1e3ccSAndroid Build Coastguard Worker   }
1192*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&timer);
1193*77c1e3ccSAndroid Build Coastguard Worker   const double elapsed_time_simd =
1194*77c1e3ccSAndroid Build Coastguard Worker       static_cast<double>(aom_usec_timer_elapsed(&timer));
1195*77c1e3ccSAndroid Build Coastguard Worker 
1196*77c1e3ccSAndroid Build Coastguard Worker   printf(
1197*77c1e3ccSAndroid Build Coastguard Worker       "aom_getvar_16x16_dual for block=%dx%d : ref_time=%lf \t simd_time=%lf "
1198*77c1e3ccSAndroid Build Coastguard Worker       "\t "
1199*77c1e3ccSAndroid Build Coastguard Worker       "gain=%lf \n",
1200*77c1e3ccSAndroid Build Coastguard Worker       width(), height(), elapsed_time_ref, elapsed_time_simd,
1201*77c1e3ccSAndroid Build Coastguard Worker       elapsed_time_ref / elapsed_time_simd);
1202*77c1e3ccSAndroid Build Coastguard Worker }
1203*77c1e3ccSAndroid Build Coastguard Worker 
1204*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
1205*77c1e3ccSAndroid Build Coastguard Worker // Tests related to MSE / SSE.
1206*77c1e3ccSAndroid Build Coastguard Worker 
1207*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
RefTestMse()1208*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<FunctionType>::RefTestMse() {
1209*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 10; ++i) {
1210*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size(); ++j) {
1211*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
1212*77c1e3ccSAndroid Build Coastguard Worker         src_[j] = rnd_.Rand8();
1213*77c1e3ccSAndroid Build Coastguard Worker         ref_[j] = rnd_.Rand8();
1214*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
1215*77c1e3ccSAndroid Build Coastguard Worker       } else {
1216*77c1e3ccSAndroid Build Coastguard Worker         CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
1217*77c1e3ccSAndroid Build Coastguard Worker         CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
1218*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
1219*77c1e3ccSAndroid Build Coastguard Worker       }
1220*77c1e3ccSAndroid Build Coastguard Worker     }
1221*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse1, sse2;
1222*77c1e3ccSAndroid Build Coastguard Worker     const int stride = width();
1223*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(params_.func(src_, stride, ref_, stride, &sse1));
1224*77c1e3ccSAndroid Build Coastguard Worker     variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
1225*77c1e3ccSAndroid Build Coastguard Worker                  stride, &sse2, use_high_bit_depth(), params_.bit_depth);
1226*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(sse1, sse2);
1227*77c1e3ccSAndroid Build Coastguard Worker   }
1228*77c1e3ccSAndroid Build Coastguard Worker }
1229*77c1e3ccSAndroid Build Coastguard Worker 
1230*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
RefTestSse()1231*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<FunctionType>::RefTestSse() {
1232*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 10; ++i) {
1233*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size(); ++j) {
1234*77c1e3ccSAndroid Build Coastguard Worker       src_[j] = rnd_.Rand8();
1235*77c1e3ccSAndroid Build Coastguard Worker       ref_[j] = rnd_.Rand8();
1236*77c1e3ccSAndroid Build Coastguard Worker     }
1237*77c1e3ccSAndroid Build Coastguard Worker     unsigned int sse2;
1238*77c1e3ccSAndroid Build Coastguard Worker     unsigned int var1;
1239*77c1e3ccSAndroid Build Coastguard Worker     const int stride = width();
1240*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(var1 = params_.func(src_, stride, ref_, stride));
1241*77c1e3ccSAndroid Build Coastguard Worker     variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
1242*77c1e3ccSAndroid Build Coastguard Worker                  stride, &sse2, false, AOM_BITS_8);
1243*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(var1, sse2);
1244*77c1e3ccSAndroid Build Coastguard Worker   }
1245*77c1e3ccSAndroid Build Coastguard Worker }
1246*77c1e3ccSAndroid Build Coastguard Worker 
1247*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
MaxTestMse()1248*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<FunctionType>::MaxTestMse() {
1249*77c1e3ccSAndroid Build Coastguard Worker   int max_value = (1 << params_.bit_depth) - 1;
1250*77c1e3ccSAndroid Build Coastguard Worker   if (!use_high_bit_depth()) {
1251*77c1e3ccSAndroid Build Coastguard Worker     memset(src_, max_value, block_size());
1252*77c1e3ccSAndroid Build Coastguard Worker     memset(ref_, 0, block_size());
1253*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
1254*77c1e3ccSAndroid Build Coastguard Worker   } else {
1255*77c1e3ccSAndroid Build Coastguard Worker     aom_memset16(CONVERT_TO_SHORTPTR(src_), max_value, block_size());
1256*77c1e3ccSAndroid Build Coastguard Worker     aom_memset16(CONVERT_TO_SHORTPTR(ref_), 0, block_size());
1257*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
1258*77c1e3ccSAndroid Build Coastguard Worker   }
1259*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse;
1260*77c1e3ccSAndroid Build Coastguard Worker   API_REGISTER_STATE_CHECK(params_.func(src_, width(), ref_, width(), &sse));
1261*77c1e3ccSAndroid Build Coastguard Worker   unsigned int expected = (unsigned int)block_size() * max_value * max_value;
1262*77c1e3ccSAndroid Build Coastguard Worker   switch (params_.bit_depth) {
1263*77c1e3ccSAndroid Build Coastguard Worker     case AOM_BITS_12: expected = ROUND_POWER_OF_TWO(expected, 8); break;
1264*77c1e3ccSAndroid Build Coastguard Worker     case AOM_BITS_10: expected = ROUND_POWER_OF_TWO(expected, 4); break;
1265*77c1e3ccSAndroid Build Coastguard Worker     case AOM_BITS_8:
1266*77c1e3ccSAndroid Build Coastguard Worker     default: break;
1267*77c1e3ccSAndroid Build Coastguard Worker   }
1268*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(expected, sse);
1269*77c1e3ccSAndroid Build Coastguard Worker }
1270*77c1e3ccSAndroid Build Coastguard Worker 
1271*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
MaxTestSse()1272*77c1e3ccSAndroid Build Coastguard Worker void MainTestClass<FunctionType>::MaxTestSse() {
1273*77c1e3ccSAndroid Build Coastguard Worker   memset(src_, 255, block_size());
1274*77c1e3ccSAndroid Build Coastguard Worker   memset(ref_, 0, block_size());
1275*77c1e3ccSAndroid Build Coastguard Worker   unsigned int var;
1276*77c1e3ccSAndroid Build Coastguard Worker   API_REGISTER_STATE_CHECK(var = params_.func(src_, width(), ref_, width()));
1277*77c1e3ccSAndroid Build Coastguard Worker   const unsigned int expected = block_size() * 255 * 255;
1278*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(expected, var);
1279*77c1e3ccSAndroid Build Coastguard Worker }
1280*77c1e3ccSAndroid Build Coastguard Worker 
1281*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
1282*77c1e3ccSAndroid Build Coastguard Worker 
1283*77c1e3ccSAndroid Build Coastguard Worker using std::get;
1284*77c1e3ccSAndroid Build Coastguard Worker using std::make_tuple;
1285*77c1e3ccSAndroid Build Coastguard Worker using std::tuple;
1286*77c1e3ccSAndroid Build Coastguard Worker 
1287*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
1288*77c1e3ccSAndroid Build Coastguard Worker class SubpelVarianceTest
1289*77c1e3ccSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<TestParams<FunctionType> > {
1290*77c1e3ccSAndroid Build Coastguard Worker  public:
SetUp()1291*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
1292*77c1e3ccSAndroid Build Coastguard Worker     params_ = this->GetParam();
1293*77c1e3ccSAndroid Build Coastguard Worker 
1294*77c1e3ccSAndroid Build Coastguard Worker     rnd_.Reset(ACMRandom::DeterministicSeed());
1295*77c1e3ccSAndroid Build Coastguard Worker     if (!use_high_bit_depth()) {
1296*77c1e3ccSAndroid Build Coastguard Worker       src_ = reinterpret_cast<uint8_t *>(aom_memalign(32, block_size()));
1297*77c1e3ccSAndroid Build Coastguard Worker       sec_ = reinterpret_cast<uint8_t *>(aom_memalign(32, block_size()));
1298*77c1e3ccSAndroid Build Coastguard Worker       ref_ = reinterpret_cast<uint8_t *>(
1299*77c1e3ccSAndroid Build Coastguard Worker           aom_memalign(32, block_size() + width() + height() + 1));
1300*77c1e3ccSAndroid Build Coastguard Worker     } else {
1301*77c1e3ccSAndroid Build Coastguard Worker       src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
1302*77c1e3ccSAndroid Build Coastguard Worker           aom_memalign(32, block_size() * sizeof(uint16_t))));
1303*77c1e3ccSAndroid Build Coastguard Worker       sec_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
1304*77c1e3ccSAndroid Build Coastguard Worker           aom_memalign(32, block_size() * sizeof(uint16_t))));
1305*77c1e3ccSAndroid Build Coastguard Worker       ref_ = CONVERT_TO_BYTEPTR(aom_memalign(
1306*77c1e3ccSAndroid Build Coastguard Worker           32, (block_size() + width() + height() + 1) * sizeof(uint16_t)));
1307*77c1e3ccSAndroid Build Coastguard Worker     }
1308*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(src_, nullptr);
1309*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(sec_, nullptr);
1310*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(ref_, nullptr);
1311*77c1e3ccSAndroid Build Coastguard Worker   }
1312*77c1e3ccSAndroid Build Coastguard Worker 
TearDown()1313*77c1e3ccSAndroid Build Coastguard Worker   void TearDown() override {
1314*77c1e3ccSAndroid Build Coastguard Worker     if (!use_high_bit_depth()) {
1315*77c1e3ccSAndroid Build Coastguard Worker       aom_free(src_);
1316*77c1e3ccSAndroid Build Coastguard Worker       aom_free(ref_);
1317*77c1e3ccSAndroid Build Coastguard Worker       aom_free(sec_);
1318*77c1e3ccSAndroid Build Coastguard Worker     } else {
1319*77c1e3ccSAndroid Build Coastguard Worker       aom_free(CONVERT_TO_SHORTPTR(src_));
1320*77c1e3ccSAndroid Build Coastguard Worker       aom_free(CONVERT_TO_SHORTPTR(ref_));
1321*77c1e3ccSAndroid Build Coastguard Worker       aom_free(CONVERT_TO_SHORTPTR(sec_));
1322*77c1e3ccSAndroid Build Coastguard Worker     }
1323*77c1e3ccSAndroid Build Coastguard Worker   }
1324*77c1e3ccSAndroid Build Coastguard Worker 
1325*77c1e3ccSAndroid Build Coastguard Worker  protected:
1326*77c1e3ccSAndroid Build Coastguard Worker   void RefTest();
1327*77c1e3ccSAndroid Build Coastguard Worker   void ExtremeRefTest();
1328*77c1e3ccSAndroid Build Coastguard Worker   void SpeedTest();
1329*77c1e3ccSAndroid Build Coastguard Worker 
1330*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd_;
1331*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *src_;
1332*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *ref_;
1333*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *sec_;
1334*77c1e3ccSAndroid Build Coastguard Worker   TestParams<FunctionType> params_;
1335*77c1e3ccSAndroid Build Coastguard Worker   DIST_WTD_COMP_PARAMS jcp_param_;
1336*77c1e3ccSAndroid Build Coastguard Worker 
1337*77c1e3ccSAndroid Build Coastguard Worker   // some relay helpers
use_high_bit_depth() const1338*77c1e3ccSAndroid Build Coastguard Worker   bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
byte_shift() const1339*77c1e3ccSAndroid Build Coastguard Worker   int byte_shift() const { return params_.bit_depth - 8; }
block_size() const1340*77c1e3ccSAndroid Build Coastguard Worker   int block_size() const { return params_.block_size; }
width() const1341*77c1e3ccSAndroid Build Coastguard Worker   int width() const { return params_.width; }
height() const1342*77c1e3ccSAndroid Build Coastguard Worker   int height() const { return params_.height; }
mask() const1343*77c1e3ccSAndroid Build Coastguard Worker   uint32_t mask() const { return params_.mask; }
1344*77c1e3ccSAndroid Build Coastguard Worker };
1345*77c1e3ccSAndroid Build Coastguard Worker 
1346*77c1e3ccSAndroid Build Coastguard Worker template <typename SubpelVarianceFunctionType>
RefTest()1347*77c1e3ccSAndroid Build Coastguard Worker void SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() {
1348*77c1e3ccSAndroid Build Coastguard Worker   for (int x = 0; x < 8; ++x) {
1349*77c1e3ccSAndroid Build Coastguard Worker     for (int y = 0; y < 8; ++y) {
1350*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
1351*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size(); j++) {
1352*77c1e3ccSAndroid Build Coastguard Worker           src_[j] = rnd_.Rand8();
1353*77c1e3ccSAndroid Build Coastguard Worker         }
1354*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
1355*77c1e3ccSAndroid Build Coastguard Worker           ref_[j] = rnd_.Rand8();
1356*77c1e3ccSAndroid Build Coastguard Worker         }
1357*77c1e3ccSAndroid Build Coastguard Worker       } else {
1358*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size(); j++) {
1359*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
1360*77c1e3ccSAndroid Build Coastguard Worker         }
1361*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
1362*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
1363*77c1e3ccSAndroid Build Coastguard Worker         }
1364*77c1e3ccSAndroid Build Coastguard Worker       }
1365*77c1e3ccSAndroid Build Coastguard Worker       unsigned int sse1, sse2;
1366*77c1e3ccSAndroid Build Coastguard Worker       unsigned int var1;
1367*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(
1368*77c1e3ccSAndroid Build Coastguard Worker           var1 = params_.func(ref_, width() + 1, x, y, src_, width(), &sse1));
1369*77c1e3ccSAndroid Build Coastguard Worker       const unsigned int var2 = subpel_variance_ref(
1370*77c1e3ccSAndroid Build Coastguard Worker           ref_, src_, params_.log2width, params_.log2height, x, y, &sse2,
1371*77c1e3ccSAndroid Build Coastguard Worker           use_high_bit_depth(), params_.bit_depth);
1372*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
1373*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
1374*77c1e3ccSAndroid Build Coastguard Worker     }
1375*77c1e3ccSAndroid Build Coastguard Worker   }
1376*77c1e3ccSAndroid Build Coastguard Worker }
1377*77c1e3ccSAndroid Build Coastguard Worker 
1378*77c1e3ccSAndroid Build Coastguard Worker template <typename SubpelVarianceFunctionType>
ExtremeRefTest()1379*77c1e3ccSAndroid Build Coastguard Worker void SubpelVarianceTest<SubpelVarianceFunctionType>::ExtremeRefTest() {
1380*77c1e3ccSAndroid Build Coastguard Worker   // Compare against reference.
1381*77c1e3ccSAndroid Build Coastguard Worker   // Src: Set the first half of values to 0, the second half to the maximum.
1382*77c1e3ccSAndroid Build Coastguard Worker   // Ref: Set the first half of values to the maximum, the second half to 0.
1383*77c1e3ccSAndroid Build Coastguard Worker   for (int x = 0; x < 8; ++x) {
1384*77c1e3ccSAndroid Build Coastguard Worker     for (int y = 0; y < 8; ++y) {
1385*77c1e3ccSAndroid Build Coastguard Worker       const int half = block_size() / 2;
1386*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
1387*77c1e3ccSAndroid Build Coastguard Worker         memset(src_, 0, half);
1388*77c1e3ccSAndroid Build Coastguard Worker         memset(src_ + half, 255, half);
1389*77c1e3ccSAndroid Build Coastguard Worker         memset(ref_, 255, half);
1390*77c1e3ccSAndroid Build Coastguard Worker         memset(ref_ + half, 0, half + width() + height() + 1);
1391*77c1e3ccSAndroid Build Coastguard Worker       } else {
1392*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(CONVERT_TO_SHORTPTR(src_), mask(), half);
1393*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(CONVERT_TO_SHORTPTR(src_) + half, 0, half);
1394*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(CONVERT_TO_SHORTPTR(ref_), 0, half);
1395*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(CONVERT_TO_SHORTPTR(ref_) + half, mask(),
1396*77c1e3ccSAndroid Build Coastguard Worker                      half + width() + height() + 1);
1397*77c1e3ccSAndroid Build Coastguard Worker       }
1398*77c1e3ccSAndroid Build Coastguard Worker       unsigned int sse1, sse2;
1399*77c1e3ccSAndroid Build Coastguard Worker       unsigned int var1;
1400*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(
1401*77c1e3ccSAndroid Build Coastguard Worker           var1 = params_.func(ref_, width() + 1, x, y, src_, width(), &sse1));
1402*77c1e3ccSAndroid Build Coastguard Worker       const unsigned int var2 = subpel_variance_ref(
1403*77c1e3ccSAndroid Build Coastguard Worker           ref_, src_, params_.log2width, params_.log2height, x, y, &sse2,
1404*77c1e3ccSAndroid Build Coastguard Worker           use_high_bit_depth(), params_.bit_depth);
1405*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sse1, sse2) << "for xoffset " << x << " and yoffset " << y;
1406*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(var1, var2) << "for xoffset " << x << " and yoffset " << y;
1407*77c1e3ccSAndroid Build Coastguard Worker     }
1408*77c1e3ccSAndroid Build Coastguard Worker   }
1409*77c1e3ccSAndroid Build Coastguard Worker }
1410*77c1e3ccSAndroid Build Coastguard Worker 
1411*77c1e3ccSAndroid Build Coastguard Worker template <typename SubpelVarianceFunctionType>
SpeedTest()1412*77c1e3ccSAndroid Build Coastguard Worker void SubpelVarianceTest<SubpelVarianceFunctionType>::SpeedTest() {
1413*77c1e3ccSAndroid Build Coastguard Worker   if (!use_high_bit_depth()) {
1414*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size(); j++) {
1415*77c1e3ccSAndroid Build Coastguard Worker       src_[j] = rnd_.Rand8();
1416*77c1e3ccSAndroid Build Coastguard Worker     }
1417*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size() + width() + height() + 1; j++) {
1418*77c1e3ccSAndroid Build Coastguard Worker       ref_[j] = rnd_.Rand8();
1419*77c1e3ccSAndroid Build Coastguard Worker     }
1420*77c1e3ccSAndroid Build Coastguard Worker   } else {
1421*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size(); j++) {
1422*77c1e3ccSAndroid Build Coastguard Worker       CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
1423*77c1e3ccSAndroid Build Coastguard Worker     }
1424*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size() + width() + height() + 1; j++) {
1425*77c1e3ccSAndroid Build Coastguard Worker       CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
1426*77c1e3ccSAndroid Build Coastguard Worker     }
1427*77c1e3ccSAndroid Build Coastguard Worker   }
1428*77c1e3ccSAndroid Build Coastguard Worker 
1429*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse1, sse2;
1430*77c1e3ccSAndroid Build Coastguard Worker   int run_time = 1000000000 / block_size();
1431*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer timer;
1432*77c1e3ccSAndroid Build Coastguard Worker 
1433*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&timer);
1434*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < run_time; ++i) {
1435*77c1e3ccSAndroid Build Coastguard Worker     int x = rnd_(8);
1436*77c1e3ccSAndroid Build Coastguard Worker     int y = rnd_(8);
1437*77c1e3ccSAndroid Build Coastguard Worker     params_.func(ref_, width() + 1, x, y, src_, width(), &sse1);
1438*77c1e3ccSAndroid Build Coastguard Worker   }
1439*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&timer);
1440*77c1e3ccSAndroid Build Coastguard Worker 
1441*77c1e3ccSAndroid Build Coastguard Worker   const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
1442*77c1e3ccSAndroid Build Coastguard Worker 
1443*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer timer_c;
1444*77c1e3ccSAndroid Build Coastguard Worker 
1445*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&timer_c);
1446*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < run_time; ++i) {
1447*77c1e3ccSAndroid Build Coastguard Worker     int x = rnd_(8);
1448*77c1e3ccSAndroid Build Coastguard Worker     int y = rnd_(8);
1449*77c1e3ccSAndroid Build Coastguard Worker     subpel_variance_ref(ref_, src_, params_.log2width, params_.log2height, x, y,
1450*77c1e3ccSAndroid Build Coastguard Worker                         &sse2, use_high_bit_depth(), params_.bit_depth);
1451*77c1e3ccSAndroid Build Coastguard Worker   }
1452*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&timer_c);
1453*77c1e3ccSAndroid Build Coastguard Worker 
1454*77c1e3ccSAndroid Build Coastguard Worker   const int elapsed_time_c = static_cast<int>(aom_usec_timer_elapsed(&timer_c));
1455*77c1e3ccSAndroid Build Coastguard Worker 
1456*77c1e3ccSAndroid Build Coastguard Worker   printf(
1457*77c1e3ccSAndroid Build Coastguard Worker       "sub_pixel_variance_%dx%d_%d: ref_time=%d us opt_time=%d us gain=%d \n",
1458*77c1e3ccSAndroid Build Coastguard Worker       width(), height(), params_.bit_depth, elapsed_time_c, elapsed_time,
1459*77c1e3ccSAndroid Build Coastguard Worker       elapsed_time_c / elapsed_time);
1460*77c1e3ccSAndroid Build Coastguard Worker }
1461*77c1e3ccSAndroid Build Coastguard Worker 
1462*77c1e3ccSAndroid Build Coastguard Worker template <>
RefTest()1463*77c1e3ccSAndroid Build Coastguard Worker void SubpelVarianceTest<SubpixAvgVarMxNFunc>::RefTest() {
1464*77c1e3ccSAndroid Build Coastguard Worker   for (int x = 0; x < 8; ++x) {
1465*77c1e3ccSAndroid Build Coastguard Worker     for (int y = 0; y < 8; ++y) {
1466*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
1467*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size(); j++) {
1468*77c1e3ccSAndroid Build Coastguard Worker           src_[j] = rnd_.Rand8();
1469*77c1e3ccSAndroid Build Coastguard Worker           sec_[j] = rnd_.Rand8();
1470*77c1e3ccSAndroid Build Coastguard Worker         }
1471*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
1472*77c1e3ccSAndroid Build Coastguard Worker           ref_[j] = rnd_.Rand8();
1473*77c1e3ccSAndroid Build Coastguard Worker         }
1474*77c1e3ccSAndroid Build Coastguard Worker       } else {
1475*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size(); j++) {
1476*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
1477*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask();
1478*77c1e3ccSAndroid Build Coastguard Worker         }
1479*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
1480*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
1481*77c1e3ccSAndroid Build Coastguard Worker         }
1482*77c1e3ccSAndroid Build Coastguard Worker       }
1483*77c1e3ccSAndroid Build Coastguard Worker       uint32_t sse1, sse2;
1484*77c1e3ccSAndroid Build Coastguard Worker       uint32_t var1, var2;
1485*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(var1 = params_.func(ref_, width() + 1, x, y,
1486*77c1e3ccSAndroid Build Coastguard Worker                                                    src_, width(), &sse1, sec_));
1487*77c1e3ccSAndroid Build Coastguard Worker       var2 = subpel_avg_variance_ref(ref_, src_, sec_, params_.log2width,
1488*77c1e3ccSAndroid Build Coastguard Worker                                      params_.log2height, x, y, &sse2,
1489*77c1e3ccSAndroid Build Coastguard Worker                                      use_high_bit_depth(), params_.bit_depth);
1490*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
1491*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
1492*77c1e3ccSAndroid Build Coastguard Worker     }
1493*77c1e3ccSAndroid Build Coastguard Worker   }
1494*77c1e3ccSAndroid Build Coastguard Worker }
1495*77c1e3ccSAndroid Build Coastguard Worker 
1496*77c1e3ccSAndroid Build Coastguard Worker template <>
RefTest()1497*77c1e3ccSAndroid Build Coastguard Worker void SubpelVarianceTest<DistWtdSubpixAvgVarMxNFunc>::RefTest() {
1498*77c1e3ccSAndroid Build Coastguard Worker   for (int x = 0; x < 8; ++x) {
1499*77c1e3ccSAndroid Build Coastguard Worker     for (int y = 0; y < 8; ++y) {
1500*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
1501*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size(); j++) {
1502*77c1e3ccSAndroid Build Coastguard Worker           src_[j] = rnd_.Rand8();
1503*77c1e3ccSAndroid Build Coastguard Worker           sec_[j] = rnd_.Rand8();
1504*77c1e3ccSAndroid Build Coastguard Worker         }
1505*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
1506*77c1e3ccSAndroid Build Coastguard Worker           ref_[j] = rnd_.Rand8();
1507*77c1e3ccSAndroid Build Coastguard Worker         }
1508*77c1e3ccSAndroid Build Coastguard Worker       } else {
1509*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size(); j++) {
1510*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
1511*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask();
1512*77c1e3ccSAndroid Build Coastguard Worker         }
1513*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
1514*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
1515*77c1e3ccSAndroid Build Coastguard Worker         }
1516*77c1e3ccSAndroid Build Coastguard Worker       }
1517*77c1e3ccSAndroid Build Coastguard Worker       for (int x0 = 0; x0 < 2; ++x0) {
1518*77c1e3ccSAndroid Build Coastguard Worker         for (int y0 = 0; y0 < 4; ++y0) {
1519*77c1e3ccSAndroid Build Coastguard Worker           uint32_t sse1, sse2;
1520*77c1e3ccSAndroid Build Coastguard Worker           uint32_t var1, var2;
1521*77c1e3ccSAndroid Build Coastguard Worker           jcp_param_.fwd_offset = quant_dist_lookup_table[y0][x0];
1522*77c1e3ccSAndroid Build Coastguard Worker           jcp_param_.bck_offset = quant_dist_lookup_table[y0][1 - x0];
1523*77c1e3ccSAndroid Build Coastguard Worker           API_REGISTER_STATE_CHECK(var1 = params_.func(ref_, width() + 0, x, y,
1524*77c1e3ccSAndroid Build Coastguard Worker                                                        src_, width(), &sse1,
1525*77c1e3ccSAndroid Build Coastguard Worker                                                        sec_, &jcp_param_));
1526*77c1e3ccSAndroid Build Coastguard Worker           var2 = dist_wtd_subpel_avg_variance_ref(
1527*77c1e3ccSAndroid Build Coastguard Worker               ref_, src_, sec_, params_.log2width, params_.log2height, x, y,
1528*77c1e3ccSAndroid Build Coastguard Worker               &sse2, use_high_bit_depth(), params_.bit_depth, &jcp_param_);
1529*77c1e3ccSAndroid Build Coastguard Worker           EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
1530*77c1e3ccSAndroid Build Coastguard Worker           EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
1531*77c1e3ccSAndroid Build Coastguard Worker         }
1532*77c1e3ccSAndroid Build Coastguard Worker       }
1533*77c1e3ccSAndroid Build Coastguard Worker     }
1534*77c1e3ccSAndroid Build Coastguard Worker   }
1535*77c1e3ccSAndroid Build Coastguard Worker }
1536*77c1e3ccSAndroid Build Coastguard Worker 
1537*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
1538*77c1e3ccSAndroid Build Coastguard Worker 
1539*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
1540*77c1e3ccSAndroid Build Coastguard Worker 
1541*77c1e3ccSAndroid Build Coastguard Worker static const int kMaskMax = 64;
1542*77c1e3ccSAndroid Build Coastguard Worker 
1543*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<ObmcSubpelVarFunc> ObmcSubpelVarianceParams;
1544*77c1e3ccSAndroid Build Coastguard Worker 
1545*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
1546*77c1e3ccSAndroid Build Coastguard Worker class ObmcVarianceTest
1547*77c1e3ccSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<TestParams<FunctionType> > {
1548*77c1e3ccSAndroid Build Coastguard Worker  public:
SetUp()1549*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
1550*77c1e3ccSAndroid Build Coastguard Worker     params_ = this->GetParam();
1551*77c1e3ccSAndroid Build Coastguard Worker 
1552*77c1e3ccSAndroid Build Coastguard Worker     rnd_.Reset(ACMRandom::DeterministicSeed());
1553*77c1e3ccSAndroid Build Coastguard Worker     if (!use_high_bit_depth()) {
1554*77c1e3ccSAndroid Build Coastguard Worker       pre_ = reinterpret_cast<uint8_t *>(
1555*77c1e3ccSAndroid Build Coastguard Worker           aom_memalign(32, block_size() + width() + height() + 1));
1556*77c1e3ccSAndroid Build Coastguard Worker     } else {
1557*77c1e3ccSAndroid Build Coastguard Worker       pre_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(aom_memalign(
1558*77c1e3ccSAndroid Build Coastguard Worker           32, (block_size() + width() + height() + 1) * sizeof(uint16_t))));
1559*77c1e3ccSAndroid Build Coastguard Worker     }
1560*77c1e3ccSAndroid Build Coastguard Worker     wsrc_ = reinterpret_cast<int32_t *>(
1561*77c1e3ccSAndroid Build Coastguard Worker         aom_memalign(32, block_size() * sizeof(uint32_t)));
1562*77c1e3ccSAndroid Build Coastguard Worker     mask_ = reinterpret_cast<int32_t *>(
1563*77c1e3ccSAndroid Build Coastguard Worker         aom_memalign(32, block_size() * sizeof(uint32_t)));
1564*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(pre_, nullptr);
1565*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(wsrc_, nullptr);
1566*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(mask_, nullptr);
1567*77c1e3ccSAndroid Build Coastguard Worker   }
1568*77c1e3ccSAndroid Build Coastguard Worker 
TearDown()1569*77c1e3ccSAndroid Build Coastguard Worker   void TearDown() override {
1570*77c1e3ccSAndroid Build Coastguard Worker     if (!use_high_bit_depth()) {
1571*77c1e3ccSAndroid Build Coastguard Worker       aom_free(pre_);
1572*77c1e3ccSAndroid Build Coastguard Worker     } else {
1573*77c1e3ccSAndroid Build Coastguard Worker       aom_free(CONVERT_TO_SHORTPTR(pre_));
1574*77c1e3ccSAndroid Build Coastguard Worker     }
1575*77c1e3ccSAndroid Build Coastguard Worker     aom_free(wsrc_);
1576*77c1e3ccSAndroid Build Coastguard Worker     aom_free(mask_);
1577*77c1e3ccSAndroid Build Coastguard Worker   }
1578*77c1e3ccSAndroid Build Coastguard Worker 
1579*77c1e3ccSAndroid Build Coastguard Worker  protected:
1580*77c1e3ccSAndroid Build Coastguard Worker   void RefTest();
1581*77c1e3ccSAndroid Build Coastguard Worker   void ExtremeRefTest();
1582*77c1e3ccSAndroid Build Coastguard Worker   void SpeedTest();
1583*77c1e3ccSAndroid Build Coastguard Worker 
1584*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd_;
1585*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *pre_;
1586*77c1e3ccSAndroid Build Coastguard Worker   int32_t *wsrc_;
1587*77c1e3ccSAndroid Build Coastguard Worker   int32_t *mask_;
1588*77c1e3ccSAndroid Build Coastguard Worker   TestParams<FunctionType> params_;
1589*77c1e3ccSAndroid Build Coastguard Worker 
1590*77c1e3ccSAndroid Build Coastguard Worker   // some relay helpers
use_high_bit_depth() const1591*77c1e3ccSAndroid Build Coastguard Worker   bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
byte_shift() const1592*77c1e3ccSAndroid Build Coastguard Worker   int byte_shift() const { return params_.bit_depth - 8; }
block_size() const1593*77c1e3ccSAndroid Build Coastguard Worker   int block_size() const { return params_.block_size; }
width() const1594*77c1e3ccSAndroid Build Coastguard Worker   int width() const { return params_.width; }
height() const1595*77c1e3ccSAndroid Build Coastguard Worker   int height() const { return params_.height; }
bd_mask() const1596*77c1e3ccSAndroid Build Coastguard Worker   uint32_t bd_mask() const { return params_.mask; }
1597*77c1e3ccSAndroid Build Coastguard Worker };
1598*77c1e3ccSAndroid Build Coastguard Worker 
1599*77c1e3ccSAndroid Build Coastguard Worker template <>
RefTest()1600*77c1e3ccSAndroid Build Coastguard Worker void ObmcVarianceTest<ObmcSubpelVarFunc>::RefTest() {
1601*77c1e3ccSAndroid Build Coastguard Worker   for (int x = 0; x < 8; ++x) {
1602*77c1e3ccSAndroid Build Coastguard Worker     for (int y = 0; y < 8; ++y) {
1603*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth())
1604*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size() + width() + height() + 1; j++)
1605*77c1e3ccSAndroid Build Coastguard Worker           pre_[j] = rnd_.Rand8();
1606*77c1e3ccSAndroid Build Coastguard Worker       else
1607*77c1e3ccSAndroid Build Coastguard Worker         for (int j = 0; j < block_size() + width() + height() + 1; j++)
1608*77c1e3ccSAndroid Build Coastguard Worker           CONVERT_TO_SHORTPTR(pre_)[j] = rnd_.Rand16() & bd_mask();
1609*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < block_size(); j++) {
1610*77c1e3ccSAndroid Build Coastguard Worker         wsrc_[j] = (rnd_.Rand16() & bd_mask()) * rnd_(kMaskMax * kMaskMax + 1);
1611*77c1e3ccSAndroid Build Coastguard Worker         mask_[j] = rnd_(kMaskMax * kMaskMax + 1);
1612*77c1e3ccSAndroid Build Coastguard Worker       }
1613*77c1e3ccSAndroid Build Coastguard Worker 
1614*77c1e3ccSAndroid Build Coastguard Worker       uint32_t sse1, sse2;
1615*77c1e3ccSAndroid Build Coastguard Worker       uint32_t var1, var2;
1616*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(
1617*77c1e3ccSAndroid Build Coastguard Worker           var1 = params_.func(pre_, width() + 1, x, y, wsrc_, mask_, &sse1));
1618*77c1e3ccSAndroid Build Coastguard Worker       var2 = obmc_subpel_variance_ref(
1619*77c1e3ccSAndroid Build Coastguard Worker           pre_, params_.log2width, params_.log2height, x, y, wsrc_, mask_,
1620*77c1e3ccSAndroid Build Coastguard Worker           &sse2, use_high_bit_depth(), params_.bit_depth);
1621*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sse1, sse2) << "for xoffset " << x << " and yoffset " << y;
1622*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(var1, var2) << "for xoffset " << x << " and yoffset " << y;
1623*77c1e3ccSAndroid Build Coastguard Worker     }
1624*77c1e3ccSAndroid Build Coastguard Worker   }
1625*77c1e3ccSAndroid Build Coastguard Worker }
1626*77c1e3ccSAndroid Build Coastguard Worker 
1627*77c1e3ccSAndroid Build Coastguard Worker template <>
ExtremeRefTest()1628*77c1e3ccSAndroid Build Coastguard Worker void ObmcVarianceTest<ObmcSubpelVarFunc>::ExtremeRefTest() {
1629*77c1e3ccSAndroid Build Coastguard Worker   // Pre: Set the first half of values to the maximum, the second half to 0.
1630*77c1e3ccSAndroid Build Coastguard Worker   // Mask: same as above
1631*77c1e3ccSAndroid Build Coastguard Worker   // WSrc: Set the first half of values to 0, the second half to the maximum.
1632*77c1e3ccSAndroid Build Coastguard Worker   for (int x = 0; x < 8; ++x) {
1633*77c1e3ccSAndroid Build Coastguard Worker     for (int y = 0; y < 8; ++y) {
1634*77c1e3ccSAndroid Build Coastguard Worker       const int half = block_size() / 2;
1635*77c1e3ccSAndroid Build Coastguard Worker       if (!use_high_bit_depth()) {
1636*77c1e3ccSAndroid Build Coastguard Worker         memset(pre_, 255, half);
1637*77c1e3ccSAndroid Build Coastguard Worker         memset(pre_ + half, 0, half + width() + height() + 1);
1638*77c1e3ccSAndroid Build Coastguard Worker       } else {
1639*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(CONVERT_TO_SHORTPTR(pre_), bd_mask(), half);
1640*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(CONVERT_TO_SHORTPTR(pre_) + half, 0,
1641*77c1e3ccSAndroid Build Coastguard Worker                      half + width() + height() + 1);
1642*77c1e3ccSAndroid Build Coastguard Worker       }
1643*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < half; j++) {
1644*77c1e3ccSAndroid Build Coastguard Worker         wsrc_[j] = bd_mask() * kMaskMax * kMaskMax;
1645*77c1e3ccSAndroid Build Coastguard Worker         mask_[j] = 0;
1646*77c1e3ccSAndroid Build Coastguard Worker       }
1647*77c1e3ccSAndroid Build Coastguard Worker       for (int j = half; j < block_size(); j++) {
1648*77c1e3ccSAndroid Build Coastguard Worker         wsrc_[j] = 0;
1649*77c1e3ccSAndroid Build Coastguard Worker         mask_[j] = kMaskMax * kMaskMax;
1650*77c1e3ccSAndroid Build Coastguard Worker       }
1651*77c1e3ccSAndroid Build Coastguard Worker 
1652*77c1e3ccSAndroid Build Coastguard Worker       uint32_t sse1, sse2;
1653*77c1e3ccSAndroid Build Coastguard Worker       uint32_t var1, var2;
1654*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(
1655*77c1e3ccSAndroid Build Coastguard Worker           var1 = params_.func(pre_, width() + 1, x, y, wsrc_, mask_, &sse1));
1656*77c1e3ccSAndroid Build Coastguard Worker       var2 = obmc_subpel_variance_ref(
1657*77c1e3ccSAndroid Build Coastguard Worker           pre_, params_.log2width, params_.log2height, x, y, wsrc_, mask_,
1658*77c1e3ccSAndroid Build Coastguard Worker           &sse2, use_high_bit_depth(), params_.bit_depth);
1659*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(sse1, sse2) << "for xoffset " << x << " and yoffset " << y;
1660*77c1e3ccSAndroid Build Coastguard Worker       EXPECT_EQ(var1, var2) << "for xoffset " << x << " and yoffset " << y;
1661*77c1e3ccSAndroid Build Coastguard Worker     }
1662*77c1e3ccSAndroid Build Coastguard Worker   }
1663*77c1e3ccSAndroid Build Coastguard Worker }
1664*77c1e3ccSAndroid Build Coastguard Worker 
1665*77c1e3ccSAndroid Build Coastguard Worker template <>
SpeedTest()1666*77c1e3ccSAndroid Build Coastguard Worker void ObmcVarianceTest<ObmcSubpelVarFunc>::SpeedTest() {
1667*77c1e3ccSAndroid Build Coastguard Worker   if (!use_high_bit_depth())
1668*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size() + width() + height() + 1; j++)
1669*77c1e3ccSAndroid Build Coastguard Worker       pre_[j] = rnd_.Rand8();
1670*77c1e3ccSAndroid Build Coastguard Worker   else
1671*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < block_size() + width() + height() + 1; j++)
1672*77c1e3ccSAndroid Build Coastguard Worker       CONVERT_TO_SHORTPTR(pre_)[j] = rnd_.Rand16() & bd_mask();
1673*77c1e3ccSAndroid Build Coastguard Worker   for (int j = 0; j < block_size(); j++) {
1674*77c1e3ccSAndroid Build Coastguard Worker     wsrc_[j] = (rnd_.Rand16() & bd_mask()) * rnd_(kMaskMax * kMaskMax + 1);
1675*77c1e3ccSAndroid Build Coastguard Worker     mask_[j] = rnd_(kMaskMax * kMaskMax + 1);
1676*77c1e3ccSAndroid Build Coastguard Worker   }
1677*77c1e3ccSAndroid Build Coastguard Worker   unsigned int sse1;
1678*77c1e3ccSAndroid Build Coastguard Worker   const int stride = width() + 1;
1679*77c1e3ccSAndroid Build Coastguard Worker   int run_time = 1000000000 / block_size();
1680*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer timer;
1681*77c1e3ccSAndroid Build Coastguard Worker 
1682*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&timer);
1683*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < run_time; ++i) {
1684*77c1e3ccSAndroid Build Coastguard Worker     int x = rnd_(8);
1685*77c1e3ccSAndroid Build Coastguard Worker     int y = rnd_(8);
1686*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(
1687*77c1e3ccSAndroid Build Coastguard Worker         params_.func(pre_, stride, x, y, wsrc_, mask_, &sse1));
1688*77c1e3ccSAndroid Build Coastguard Worker   }
1689*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&timer);
1690*77c1e3ccSAndroid Build Coastguard Worker 
1691*77c1e3ccSAndroid Build Coastguard Worker   const int elapsed_time = static_cast<int>(aom_usec_timer_elapsed(&timer));
1692*77c1e3ccSAndroid Build Coastguard Worker   printf("obmc_sub_pixel_variance_%dx%d_%d: %d us\n", width(), height(),
1693*77c1e3ccSAndroid Build Coastguard Worker          params_.bit_depth, elapsed_time);
1694*77c1e3ccSAndroid Build Coastguard Worker }
1695*77c1e3ccSAndroid Build Coastguard Worker 
1696*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
1697*77c1e3ccSAndroid Build Coastguard Worker 
1698*77c1e3ccSAndroid Build Coastguard Worker typedef MseWxHTestClass<MseWxH16bitFunc> MseWxHTest;
1699*77c1e3ccSAndroid Build Coastguard Worker typedef Mse16xHTestClass<Mse16xH16bitFunc> Mse16xHTest;
1700*77c1e3ccSAndroid Build Coastguard Worker typedef MainTestClass<VarianceMxNFunc> AvxMseTest;
1701*77c1e3ccSAndroid Build Coastguard Worker typedef MainTestClass<VarianceMxNFunc> AvxVarianceTest;
1702*77c1e3ccSAndroid Build Coastguard Worker typedef MainTestClass<GetSseSum8x8QuadFunc> GetSseSum8x8QuadTest;
1703*77c1e3ccSAndroid Build Coastguard Worker typedef MainTestClass<GetSseSum16x16DualFunc> GetSseSum16x16DualTest;
1704*77c1e3ccSAndroid Build Coastguard Worker typedef SubpelVarianceTest<SubpixVarMxNFunc> AvxSubpelVarianceTest;
1705*77c1e3ccSAndroid Build Coastguard Worker typedef SubpelVarianceTest<SubpixAvgVarMxNFunc> AvxSubpelAvgVarianceTest;
1706*77c1e3ccSAndroid Build Coastguard Worker typedef SubpelVarianceTest<DistWtdSubpixAvgVarMxNFunc>
1707*77c1e3ccSAndroid Build Coastguard Worker     AvxDistWtdSubpelAvgVarianceTest;
1708*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
1709*77c1e3ccSAndroid Build Coastguard Worker typedef ObmcVarianceTest<ObmcSubpelVarFunc> AvxObmcSubpelVarianceTest;
1710*77c1e3ccSAndroid Build Coastguard Worker #endif
1711*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<MseWxH16bitFunc> MseWxHParams;
1712*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<Mse16xH16bitFunc> Mse16xHParams;
1713*77c1e3ccSAndroid Build Coastguard Worker 
TEST_P(MseWxHTest,RefMse)1714*77c1e3ccSAndroid Build Coastguard Worker TEST_P(MseWxHTest, RefMse) { RefMatchTestMse(); }
TEST_P(MseWxHTest,DISABLED_SpeedMse)1715*77c1e3ccSAndroid Build Coastguard Worker TEST_P(MseWxHTest, DISABLED_SpeedMse) { SpeedTest(); }
TEST_P(Mse16xHTest,RefMse)1716*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Mse16xHTest, RefMse) { RefMatchTestMse(); }
TEST_P(Mse16xHTest,RefMseExtreme)1717*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Mse16xHTest, RefMseExtreme) { RefMatchExtremeTestMse(); }
TEST_P(Mse16xHTest,DISABLED_SpeedMse)1718*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Mse16xHTest, DISABLED_SpeedMse) { SpeedTest(); }
TEST_P(AvxMseTest,RefMse)1719*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxMseTest, RefMse) { RefTestMse(); }
TEST_P(AvxMseTest,MaxMse)1720*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxMseTest, MaxMse) { MaxTestMse(); }
TEST_P(AvxVarianceTest,Zero)1721*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxVarianceTest, Zero) { ZeroTest(); }
TEST_P(AvxVarianceTest,Ref)1722*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxVarianceTest, Ref) { RefTest(); }
TEST_P(AvxVarianceTest,RefStride)1723*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxVarianceTest, RefStride) { RefStrideTest(); }
TEST_P(AvxVarianceTest,OneQuarter)1724*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxVarianceTest, OneQuarter) { OneQuarterTest(); }
TEST_P(AvxVarianceTest,DISABLED_Speed)1725*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxVarianceTest, DISABLED_Speed) { SpeedTest(); }
TEST_P(GetSseSum8x8QuadTest,RefMseSum)1726*77c1e3ccSAndroid Build Coastguard Worker TEST_P(GetSseSum8x8QuadTest, RefMseSum) { RefTestSseSum(); }
TEST_P(GetSseSum8x8QuadTest,MinSseSum)1727*77c1e3ccSAndroid Build Coastguard Worker TEST_P(GetSseSum8x8QuadTest, MinSseSum) { MinTestSseSum(); }
TEST_P(GetSseSum8x8QuadTest,MaxMseSum)1728*77c1e3ccSAndroid Build Coastguard Worker TEST_P(GetSseSum8x8QuadTest, MaxMseSum) { MaxTestSseSum(); }
TEST_P(GetSseSum8x8QuadTest,DISABLED_Speed)1729*77c1e3ccSAndroid Build Coastguard Worker TEST_P(GetSseSum8x8QuadTest, DISABLED_Speed) { SseSum_SpeedTest(); }
TEST_P(GetSseSum16x16DualTest,RefMseSum)1730*77c1e3ccSAndroid Build Coastguard Worker TEST_P(GetSseSum16x16DualTest, RefMseSum) { RefTestSseSumDual(); }
TEST_P(GetSseSum16x16DualTest,MinSseSum)1731*77c1e3ccSAndroid Build Coastguard Worker TEST_P(GetSseSum16x16DualTest, MinSseSum) { MinTestSseSumDual(); }
TEST_P(GetSseSum16x16DualTest,MaxMseSum)1732*77c1e3ccSAndroid Build Coastguard Worker TEST_P(GetSseSum16x16DualTest, MaxMseSum) { MaxTestSseSumDual(); }
TEST_P(GetSseSum16x16DualTest,DISABLED_Speed)1733*77c1e3ccSAndroid Build Coastguard Worker TEST_P(GetSseSum16x16DualTest, DISABLED_Speed) { SseSum_SpeedTestDual(); }
1734*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
TEST_P(SumOfSquaresTest,Const)1735*77c1e3ccSAndroid Build Coastguard Worker TEST_P(SumOfSquaresTest, Const) { ConstTest(); }
TEST_P(SumOfSquaresTest,Ref)1736*77c1e3ccSAndroid Build Coastguard Worker TEST_P(SumOfSquaresTest, Ref) { RefTest(); }
1737*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
TEST_P(AvxSubpelVarianceTest,Ref)1738*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxSubpelVarianceTest, Ref) { RefTest(); }
TEST_P(AvxSubpelVarianceTest,ExtremeRef)1739*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
TEST_P(AvxSubpelVarianceTest,DISABLED_Speed)1740*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxSubpelVarianceTest, DISABLED_Speed) { SpeedTest(); }
TEST_P(AvxSubpelAvgVarianceTest,Ref)1741*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxSubpelAvgVarianceTest, Ref) { RefTest(); }
TEST_P(AvxDistWtdSubpelAvgVarianceTest,Ref)1742*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxDistWtdSubpelAvgVarianceTest, Ref) { RefTest(); }
1743*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
TEST_P(AvxObmcSubpelVarianceTest,Ref)1744*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxObmcSubpelVarianceTest, Ref) { RefTest(); }
TEST_P(AvxObmcSubpelVarianceTest,ExtremeRef)1745*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxObmcSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
TEST_P(AvxObmcSubpelVarianceTest,DISABLED_Speed)1746*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxObmcSubpelVarianceTest, DISABLED_Speed) { SpeedTest(); }
1747*77c1e3ccSAndroid Build Coastguard Worker #endif
1748*77c1e3ccSAndroid Build Coastguard Worker 
1749*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
1750*77c1e3ccSAndroid Build Coastguard Worker     C, MseWxHTest,
1751*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseWxHParams(3, 3, &aom_mse_wxh_16bit_c, 8),
1752*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(3, 2, &aom_mse_wxh_16bit_c, 8),
1753*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(2, 3, &aom_mse_wxh_16bit_c, 8),
1754*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(2, 2, &aom_mse_wxh_16bit_c, 8)));
1755*77c1e3ccSAndroid Build Coastguard Worker 
1756*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
1757*77c1e3ccSAndroid Build Coastguard Worker     C, Mse16xHTest,
1758*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(Mse16xHParams(3, 3, &aom_mse_16xh_16bit_c, 8),
1759*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(3, 2, &aom_mse_16xh_16bit_c, 8),
1760*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(2, 3, &aom_mse_16xh_16bit_c, 8),
1761*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(2, 2, &aom_mse_16xh_16bit_c, 8)));
1762*77c1e3ccSAndroid Build Coastguard Worker 
1763*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
1764*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, SumOfSquaresTest,
1765*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::Values(aom_get_mb_ss_c));
1766*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
1767*77c1e3ccSAndroid Build Coastguard Worker 
1768*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<VarianceMxNFunc> MseParams;
1769*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxMseTest,
1770*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::Values(MseParams(4, 4, &aom_mse16x16_c),
1771*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(4, 3, &aom_mse16x8_c),
1772*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(3, 4, &aom_mse8x16_c),
1773*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(3, 3, &aom_mse8x8_c)));
1774*77c1e3ccSAndroid Build Coastguard Worker 
1775*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<VarianceMxNFunc> VarianceParams;
1776*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayVariance_c[] = {
1777*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_variance128x128_c),
1778*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_variance128x64_c),
1779*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_variance64x128_c),
1780*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_variance64x64_c),
1781*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_variance64x32_c),
1782*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_variance32x64_c),
1783*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_variance32x32_c),
1784*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_variance32x16_c),
1785*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_variance16x32_c),
1786*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_variance16x16_c),
1787*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_variance16x8_c),
1788*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_variance8x16_c),
1789*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_variance8x8_c),
1790*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_variance8x4_c),
1791*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_variance4x8_c),
1792*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_variance4x4_c),
1793*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
1794*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_variance64x16_c),
1795*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_variance16x64_c),
1796*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_variance32x8_c),
1797*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_variance8x32_c),
1798*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_variance16x4_c),
1799*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_variance4x16_c),
1800*77c1e3ccSAndroid Build Coastguard Worker #endif
1801*77c1e3ccSAndroid Build Coastguard Worker };
1802*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxVarianceTest,
1803*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayVariance_c));
1804*77c1e3ccSAndroid Build Coastguard Worker 
1805*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<GetSseSum8x8QuadFunc> GetSseSumParams;
1806*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParams kArrayGetSseSum8x8Quad_c[] = {
1807*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(7, 7, &aom_get_var_sse_sum_8x8_quad_c, 0),
1808*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(6, 6, &aom_get_var_sse_sum_8x8_quad_c, 0),
1809*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 5, &aom_get_var_sse_sum_8x8_quad_c, 0),
1810*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 4, &aom_get_var_sse_sum_8x8_quad_c, 0)
1811*77c1e3ccSAndroid Build Coastguard Worker };
1812*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, GetSseSum8x8QuadTest,
1813*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayGetSseSum8x8Quad_c));
1814*77c1e3ccSAndroid Build Coastguard Worker 
1815*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<GetSseSum16x16DualFunc> GetSseSumParamsDual;
1816*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParamsDual kArrayGetSseSum16x16Dual_c[] = {
1817*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(7, 7, &aom_get_var_sse_sum_16x16_dual_c, 0),
1818*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(6, 6, &aom_get_var_sse_sum_16x16_dual_c, 0),
1819*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 5, &aom_get_var_sse_sum_16x16_dual_c, 0),
1820*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 4, &aom_get_var_sse_sum_16x16_dual_c, 0)
1821*77c1e3ccSAndroid Build Coastguard Worker };
1822*77c1e3ccSAndroid Build Coastguard Worker 
1823*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, GetSseSum16x16DualTest,
1824*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayGetSseSum16x16Dual_c));
1825*77c1e3ccSAndroid Build Coastguard Worker 
1826*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<SubpixVarMxNFunc> SubpelVarianceParams;
1827*77c1e3ccSAndroid Build Coastguard Worker const SubpelVarianceParams kArraySubpelVariance_c[] = {
1828*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_sub_pixel_variance128x128_c, 0),
1829*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_sub_pixel_variance128x64_c, 0),
1830*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_sub_pixel_variance64x128_c, 0),
1831*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_c, 0),
1832*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_c, 0),
1833*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_c, 0),
1834*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_c, 0),
1835*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_c, 0),
1836*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_c, 0),
1837*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_c, 0),
1838*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_c, 0),
1839*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_c, 0),
1840*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_c, 0),
1841*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_c, 0),
1842*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_c, 0),
1843*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_c, 0),
1844*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
1845*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_sub_pixel_variance64x16_c, 0),
1846*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_sub_pixel_variance16x64_c, 0),
1847*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_sub_pixel_variance32x8_c, 0),
1848*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_sub_pixel_variance8x32_c, 0),
1849*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_sub_pixel_variance16x4_c, 0),
1850*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_sub_pixel_variance4x16_c, 0),
1851*77c1e3ccSAndroid Build Coastguard Worker #endif
1852*77c1e3ccSAndroid Build Coastguard Worker };
1853*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxSubpelVarianceTest,
1854*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArraySubpelVariance_c));
1855*77c1e3ccSAndroid Build Coastguard Worker 
1856*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<SubpixAvgVarMxNFunc> SubpelAvgVarianceParams;
1857*77c1e3ccSAndroid Build Coastguard Worker const SubpelAvgVarianceParams kArraySubpelAvgVariance_c[] = {
1858*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 7, &aom_sub_pixel_avg_variance128x128_c, 0),
1859*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6, &aom_sub_pixel_avg_variance128x64_c, 0),
1860*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7, &aom_sub_pixel_avg_variance64x128_c, 0),
1861*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_c, 0),
1862*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_c, 0),
1863*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_c, 0),
1864*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_c, 0),
1865*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_c, 0),
1866*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_c, 0),
1867*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_c, 0),
1868*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_c, 0),
1869*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_c, 0),
1870*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_c, 0),
1871*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_c, 0),
1872*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_c, 0),
1873*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_c, 0),
1874*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
1875*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_sub_pixel_avg_variance64x16_c, 0),
1876*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_sub_pixel_avg_variance16x64_c, 0),
1877*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_sub_pixel_avg_variance32x8_c, 0),
1878*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_sub_pixel_avg_variance8x32_c, 0),
1879*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_sub_pixel_avg_variance16x4_c, 0),
1880*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_sub_pixel_avg_variance4x16_c, 0),
1881*77c1e3ccSAndroid Build Coastguard Worker #endif
1882*77c1e3ccSAndroid Build Coastguard Worker };
1883*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxSubpelAvgVarianceTest,
1884*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArraySubpelAvgVariance_c));
1885*77c1e3ccSAndroid Build Coastguard Worker 
1886*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<DistWtdSubpixAvgVarMxNFunc> DistWtdSubpelAvgVarianceParams;
1887*77c1e3ccSAndroid Build Coastguard Worker const DistWtdSubpelAvgVarianceParams kArrayDistWtdSubpelAvgVariance_c[] = {
1888*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1889*77c1e3ccSAndroid Build Coastguard Worker       6, 6, &aom_dist_wtd_sub_pixel_avg_variance64x64_c, 0),
1890*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1891*77c1e3ccSAndroid Build Coastguard Worker       6, 5, &aom_dist_wtd_sub_pixel_avg_variance64x32_c, 0),
1892*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1893*77c1e3ccSAndroid Build Coastguard Worker       5, 6, &aom_dist_wtd_sub_pixel_avg_variance32x64_c, 0),
1894*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1895*77c1e3ccSAndroid Build Coastguard Worker       5, 5, &aom_dist_wtd_sub_pixel_avg_variance32x32_c, 0),
1896*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1897*77c1e3ccSAndroid Build Coastguard Worker       5, 4, &aom_dist_wtd_sub_pixel_avg_variance32x16_c, 0),
1898*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1899*77c1e3ccSAndroid Build Coastguard Worker       4, 5, &aom_dist_wtd_sub_pixel_avg_variance16x32_c, 0),
1900*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1901*77c1e3ccSAndroid Build Coastguard Worker       4, 4, &aom_dist_wtd_sub_pixel_avg_variance16x16_c, 0),
1902*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(4, 3,
1903*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance16x8_c, 0),
1904*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(3, 4,
1905*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance8x16_c, 0),
1906*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(3, 3,
1907*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance8x8_c, 0),
1908*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(3, 2,
1909*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance8x4_c, 0),
1910*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(2, 3,
1911*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance4x8_c, 0),
1912*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(2, 2,
1913*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance4x4_c, 0),
1914*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
1915*77c1e3ccSAndroid Build Coastguard Worker 
1916*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1917*77c1e3ccSAndroid Build Coastguard Worker       6, 4, &aom_dist_wtd_sub_pixel_avg_variance64x16_c, 0),
1918*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
1919*77c1e3ccSAndroid Build Coastguard Worker       4, 6, &aom_dist_wtd_sub_pixel_avg_variance16x64_c, 0),
1920*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(5, 3,
1921*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance32x8_c, 0),
1922*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(3, 5,
1923*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance8x32_c, 0),
1924*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(4, 2,
1925*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance16x4_c, 0),
1926*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(2, 4,
1927*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_dist_wtd_sub_pixel_avg_variance4x16_c, 0),
1928*77c1e3ccSAndroid Build Coastguard Worker #endif
1929*77c1e3ccSAndroid Build Coastguard Worker };
1930*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxDistWtdSubpelAvgVarianceTest,
1931*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayDistWtdSubpelAvgVariance_c));
1932*77c1e3ccSAndroid Build Coastguard Worker 
1933*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
1934*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
1935*77c1e3ccSAndroid Build Coastguard Worker     C, AvxObmcSubpelVarianceTest,
1936*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(
1937*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(7, 7, &aom_obmc_sub_pixel_variance128x128_c,
1938*77c1e3ccSAndroid Build Coastguard Worker                                  0),
1939*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(7, 6, &aom_obmc_sub_pixel_variance128x64_c, 0),
1940*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(6, 7, &aom_obmc_sub_pixel_variance64x128_c, 0),
1941*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(6, 6, &aom_obmc_sub_pixel_variance64x64_c, 0),
1942*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(6, 5, &aom_obmc_sub_pixel_variance64x32_c, 0),
1943*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(5, 6, &aom_obmc_sub_pixel_variance32x64_c, 0),
1944*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(5, 5, &aom_obmc_sub_pixel_variance32x32_c, 0),
1945*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(5, 4, &aom_obmc_sub_pixel_variance32x16_c, 0),
1946*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 5, &aom_obmc_sub_pixel_variance16x32_c, 0),
1947*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 4, &aom_obmc_sub_pixel_variance16x16_c, 0),
1948*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 3, &aom_obmc_sub_pixel_variance16x8_c, 0),
1949*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(3, 4, &aom_obmc_sub_pixel_variance8x16_c, 0),
1950*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(3, 3, &aom_obmc_sub_pixel_variance8x8_c, 0),
1951*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(3, 2, &aom_obmc_sub_pixel_variance8x4_c, 0),
1952*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(2, 3, &aom_obmc_sub_pixel_variance4x8_c, 0),
1953*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(2, 2, &aom_obmc_sub_pixel_variance4x4_c, 0),
1954*77c1e3ccSAndroid Build Coastguard Worker 
1955*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(6, 4, &aom_obmc_sub_pixel_variance64x16_c, 0),
1956*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 6, &aom_obmc_sub_pixel_variance16x64_c, 0),
1957*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(5, 3, &aom_obmc_sub_pixel_variance32x8_c, 0),
1958*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(3, 5, &aom_obmc_sub_pixel_variance8x32_c, 0),
1959*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 2, &aom_obmc_sub_pixel_variance16x4_c, 0),
1960*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(2, 4, &aom_obmc_sub_pixel_variance4x16_c, 0)));
1961*77c1e3ccSAndroid Build Coastguard Worker #endif
1962*77c1e3ccSAndroid Build Coastguard Worker 
1963*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
1964*77c1e3ccSAndroid Build Coastguard Worker typedef uint64_t (*MseHBDWxH16bitFunc)(uint16_t *dst, int dstride,
1965*77c1e3ccSAndroid Build Coastguard Worker                                        uint16_t *src, int sstride, int w,
1966*77c1e3ccSAndroid Build Coastguard Worker                                        int h);
1967*77c1e3ccSAndroid Build Coastguard Worker 
1968*77c1e3ccSAndroid Build Coastguard Worker template <typename FunctionType>
1969*77c1e3ccSAndroid Build Coastguard Worker class MseHBDWxHTestClass
1970*77c1e3ccSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<TestParams<FunctionType> > {
1971*77c1e3ccSAndroid Build Coastguard Worker  public:
SetUp()1972*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
1973*77c1e3ccSAndroid Build Coastguard Worker     params_ = this->GetParam();
1974*77c1e3ccSAndroid Build Coastguard Worker 
1975*77c1e3ccSAndroid Build Coastguard Worker     rnd_.Reset(ACMRandom::DeterministicSeed());
1976*77c1e3ccSAndroid Build Coastguard Worker     src_ = reinterpret_cast<uint16_t *>(
1977*77c1e3ccSAndroid Build Coastguard Worker         aom_memalign(16, block_size() * sizeof(src_)));
1978*77c1e3ccSAndroid Build Coastguard Worker     dst_ = reinterpret_cast<uint16_t *>(
1979*77c1e3ccSAndroid Build Coastguard Worker         aom_memalign(16, block_size() * sizeof(dst_)));
1980*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(src_, nullptr);
1981*77c1e3ccSAndroid Build Coastguard Worker     ASSERT_NE(dst_, nullptr);
1982*77c1e3ccSAndroid Build Coastguard Worker   }
1983*77c1e3ccSAndroid Build Coastguard Worker 
TearDown()1984*77c1e3ccSAndroid Build Coastguard Worker   void TearDown() override {
1985*77c1e3ccSAndroid Build Coastguard Worker     aom_free(src_);
1986*77c1e3ccSAndroid Build Coastguard Worker     aom_free(dst_);
1987*77c1e3ccSAndroid Build Coastguard Worker     src_ = nullptr;
1988*77c1e3ccSAndroid Build Coastguard Worker     dst_ = nullptr;
1989*77c1e3ccSAndroid Build Coastguard Worker   }
1990*77c1e3ccSAndroid Build Coastguard Worker 
1991*77c1e3ccSAndroid Build Coastguard Worker  protected:
1992*77c1e3ccSAndroid Build Coastguard Worker   void RefMatchTestMse();
1993*77c1e3ccSAndroid Build Coastguard Worker   void SpeedTest();
1994*77c1e3ccSAndroid Build Coastguard Worker 
1995*77c1e3ccSAndroid Build Coastguard Worker  protected:
1996*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd_;
1997*77c1e3ccSAndroid Build Coastguard Worker   uint16_t *dst_;
1998*77c1e3ccSAndroid Build Coastguard Worker   uint16_t *src_;
1999*77c1e3ccSAndroid Build Coastguard Worker   TestParams<FunctionType> params_;
2000*77c1e3ccSAndroid Build Coastguard Worker 
2001*77c1e3ccSAndroid Build Coastguard Worker   // some relay helpers
block_size() const2002*77c1e3ccSAndroid Build Coastguard Worker   int block_size() const { return params_.block_size; }
width() const2003*77c1e3ccSAndroid Build Coastguard Worker   int width() const { return params_.width; }
d_stride() const2004*77c1e3ccSAndroid Build Coastguard Worker   int d_stride() const { return params_.width; }  // stride is same as width
s_stride() const2005*77c1e3ccSAndroid Build Coastguard Worker   int s_stride() const { return params_.width; }  // stride is same as width
height() const2006*77c1e3ccSAndroid Build Coastguard Worker   int height() const { return params_.height; }
mask() const2007*77c1e3ccSAndroid Build Coastguard Worker   int mask() const { return params_.mask; }
2008*77c1e3ccSAndroid Build Coastguard Worker };
2009*77c1e3ccSAndroid Build Coastguard Worker 
2010*77c1e3ccSAndroid Build Coastguard Worker template <typename MseHBDWxHFunctionType>
SpeedTest()2011*77c1e3ccSAndroid Build Coastguard Worker void MseHBDWxHTestClass<MseHBDWxHFunctionType>::SpeedTest() {
2012*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer ref_timer, test_timer;
2013*77c1e3ccSAndroid Build Coastguard Worker   double elapsed_time_c = 0;
2014*77c1e3ccSAndroid Build Coastguard Worker   double elapsed_time_simd = 0;
2015*77c1e3ccSAndroid Build Coastguard Worker   int run_time = 10000000;
2016*77c1e3ccSAndroid Build Coastguard Worker   int w = width();
2017*77c1e3ccSAndroid Build Coastguard Worker   int h = height();
2018*77c1e3ccSAndroid Build Coastguard Worker   int dstride = d_stride();
2019*77c1e3ccSAndroid Build Coastguard Worker   int sstride = s_stride();
2020*77c1e3ccSAndroid Build Coastguard Worker   for (int k = 0; k < block_size(); ++k) {
2021*77c1e3ccSAndroid Build Coastguard Worker     dst_[k] = rnd_.Rand16() & mask();
2022*77c1e3ccSAndroid Build Coastguard Worker     src_[k] = rnd_.Rand16() & mask();
2023*77c1e3ccSAndroid Build Coastguard Worker   }
2024*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&ref_timer);
2025*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < run_time; i++) {
2026*77c1e3ccSAndroid Build Coastguard Worker     aom_mse_wxh_16bit_highbd_c(dst_, dstride, src_, sstride, w, h);
2027*77c1e3ccSAndroid Build Coastguard Worker   }
2028*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&ref_timer);
2029*77c1e3ccSAndroid Build Coastguard Worker   elapsed_time_c = static_cast<double>(aom_usec_timer_elapsed(&ref_timer));
2030*77c1e3ccSAndroid Build Coastguard Worker 
2031*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_start(&test_timer);
2032*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < run_time; i++) {
2033*77c1e3ccSAndroid Build Coastguard Worker     params_.func(dst_, dstride, src_, sstride, w, h);
2034*77c1e3ccSAndroid Build Coastguard Worker   }
2035*77c1e3ccSAndroid Build Coastguard Worker   aom_usec_timer_mark(&test_timer);
2036*77c1e3ccSAndroid Build Coastguard Worker   elapsed_time_simd = static_cast<double>(aom_usec_timer_elapsed(&test_timer));
2037*77c1e3ccSAndroid Build Coastguard Worker 
2038*77c1e3ccSAndroid Build Coastguard Worker   printf("%dx%d\tc_time=%lf \t simd_time=%lf \t gain=%lf\n", width(), height(),
2039*77c1e3ccSAndroid Build Coastguard Worker          elapsed_time_c, elapsed_time_simd,
2040*77c1e3ccSAndroid Build Coastguard Worker          (elapsed_time_c / elapsed_time_simd));
2041*77c1e3ccSAndroid Build Coastguard Worker }
2042*77c1e3ccSAndroid Build Coastguard Worker 
2043*77c1e3ccSAndroid Build Coastguard Worker template <typename MseHBDWxHFunctionType>
RefMatchTestMse()2044*77c1e3ccSAndroid Build Coastguard Worker void MseHBDWxHTestClass<MseHBDWxHFunctionType>::RefMatchTestMse() {
2045*77c1e3ccSAndroid Build Coastguard Worker   uint64_t mse_ref = 0;
2046*77c1e3ccSAndroid Build Coastguard Worker   uint64_t mse_mod = 0;
2047*77c1e3ccSAndroid Build Coastguard Worker   int w = width();
2048*77c1e3ccSAndroid Build Coastguard Worker   int h = height();
2049*77c1e3ccSAndroid Build Coastguard Worker   int dstride = d_stride();
2050*77c1e3ccSAndroid Build Coastguard Worker   int sstride = s_stride();
2051*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < 10; i++) {
2052*77c1e3ccSAndroid Build Coastguard Worker     for (int k = 0; k < block_size(); ++k) {
2053*77c1e3ccSAndroid Build Coastguard Worker       dst_[k] = rnd_.Rand16() & mask();
2054*77c1e3ccSAndroid Build Coastguard Worker       src_[k] = rnd_.Rand16() & mask();
2055*77c1e3ccSAndroid Build Coastguard Worker     }
2056*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(mse_ref = aom_mse_wxh_16bit_highbd_c(
2057*77c1e3ccSAndroid Build Coastguard Worker                                  dst_, dstride, src_, sstride, w, h));
2058*77c1e3ccSAndroid Build Coastguard Worker     API_REGISTER_STATE_CHECK(
2059*77c1e3ccSAndroid Build Coastguard Worker         mse_mod = params_.func(dst_, dstride, src_, sstride, w, h));
2060*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(mse_ref, mse_mod)
2061*77c1e3ccSAndroid Build Coastguard Worker         << "ref mse: " << mse_ref << " mod mse: " << mse_mod;
2062*77c1e3ccSAndroid Build Coastguard Worker   }
2063*77c1e3ccSAndroid Build Coastguard Worker }
2064*77c1e3ccSAndroid Build Coastguard Worker 
2065*77c1e3ccSAndroid Build Coastguard Worker typedef TestParams<MseHBDWxH16bitFunc> MseHBDWxHParams;
2066*77c1e3ccSAndroid Build Coastguard Worker typedef MseHBDWxHTestClass<MseHBDWxH16bitFunc> MseHBDWxHTest;
2067*77c1e3ccSAndroid Build Coastguard Worker typedef MainTestClass<VarianceMxNFunc> AvxHBDMseTest;
2068*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AvxHBDMseTest);
2069*77c1e3ccSAndroid Build Coastguard Worker typedef MainTestClass<VarianceMxNFunc> AvxHBDVarianceTest;
2070*77c1e3ccSAndroid Build Coastguard Worker typedef SubpelVarianceTest<SubpixVarMxNFunc> AvxHBDSubpelVarianceTest;
2071*77c1e3ccSAndroid Build Coastguard Worker typedef SubpelVarianceTest<SubpixAvgVarMxNFunc> AvxHBDSubpelAvgVarianceTest;
2072*77c1e3ccSAndroid Build Coastguard Worker typedef SubpelVarianceTest<DistWtdSubpixAvgVarMxNFunc>
2073*77c1e3ccSAndroid Build Coastguard Worker     AvxHBDDistWtdSubpelAvgVarianceTest;
2074*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2075*77c1e3ccSAndroid Build Coastguard Worker typedef ObmcVarianceTest<ObmcSubpelVarFunc> AvxHBDObmcSubpelVarianceTest;
2076*77c1e3ccSAndroid Build Coastguard Worker #endif
2077*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AvxHBDObmcSubpelVarianceTest);
2078*77c1e3ccSAndroid Build Coastguard Worker 
TEST_P(MseHBDWxHTest,RefMse)2079*77c1e3ccSAndroid Build Coastguard Worker TEST_P(MseHBDWxHTest, RefMse) { RefMatchTestMse(); }
TEST_P(MseHBDWxHTest,DISABLED_SpeedMse)2080*77c1e3ccSAndroid Build Coastguard Worker TEST_P(MseHBDWxHTest, DISABLED_SpeedMse) { SpeedTest(); }
TEST_P(AvxHBDMseTest,RefMse)2081*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDMseTest, RefMse) { RefTestMse(); }
TEST_P(AvxHBDMseTest,MaxMse)2082*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDMseTest, MaxMse) { MaxTestMse(); }
TEST_P(AvxHBDMseTest,DISABLED_SpeedMse)2083*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDMseTest, DISABLED_SpeedMse) { SpeedTest(); }
TEST_P(AvxHBDVarianceTest,Zero)2084*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDVarianceTest, Zero) { ZeroTest(); }
TEST_P(AvxHBDVarianceTest,Ref)2085*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDVarianceTest, Ref) { RefTest(); }
TEST_P(AvxHBDVarianceTest,RefStride)2086*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDVarianceTest, RefStride) { RefStrideTest(); }
TEST_P(AvxHBDVarianceTest,OneQuarter)2087*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDVarianceTest, OneQuarter) { OneQuarterTest(); }
TEST_P(AvxHBDVarianceTest,DISABLED_Speed)2088*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDVarianceTest, DISABLED_Speed) { SpeedTest(); }
TEST_P(AvxHBDSubpelVarianceTest,Ref)2089*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDSubpelVarianceTest, Ref) { RefTest(); }
TEST_P(AvxHBDSubpelVarianceTest,ExtremeRef)2090*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
TEST_P(AvxHBDSubpelVarianceTest,DISABLED_Speed)2091*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDSubpelVarianceTest, DISABLED_Speed) { SpeedTest(); }
TEST_P(AvxHBDSubpelAvgVarianceTest,Ref)2092*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDSubpelAvgVarianceTest, Ref) { RefTest(); }
TEST_P(AvxHBDDistWtdSubpelAvgVarianceTest,Ref)2093*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDDistWtdSubpelAvgVarianceTest, Ref) { RefTest(); }
2094*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
TEST_P(AvxHBDObmcSubpelVarianceTest,Ref)2095*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDObmcSubpelVarianceTest, Ref) { RefTest(); }
TEST_P(AvxHBDObmcSubpelVarianceTest,ExtremeRef)2096*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDObmcSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
TEST_P(AvxHBDObmcSubpelVarianceTest,DISABLED_Speed)2097*77c1e3ccSAndroid Build Coastguard Worker TEST_P(AvxHBDObmcSubpelVarianceTest, DISABLED_Speed) { SpeedTest(); }
2098*77c1e3ccSAndroid Build Coastguard Worker #endif
2099*77c1e3ccSAndroid Build Coastguard Worker 
2100*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2101*77c1e3ccSAndroid Build Coastguard Worker     C, MseHBDWxHTest,
2102*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseHBDWxHParams(3, 3, &aom_mse_wxh_16bit_highbd_c, 10),
2103*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(3, 2, &aom_mse_wxh_16bit_highbd_c, 10),
2104*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 3, &aom_mse_wxh_16bit_highbd_c, 10),
2105*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 2, &aom_mse_wxh_16bit_highbd_c, 10)));
2106*77c1e3ccSAndroid Build Coastguard Worker 
2107*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2108*77c1e3ccSAndroid Build Coastguard Worker     C, AvxHBDMseTest,
2109*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseParams(4, 4, &aom_highbd_12_mse16x16_c, 12),
2110*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_12_mse16x8_c, 12),
2111*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_12_mse8x16_c, 12),
2112*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_12_mse8x8_c, 12),
2113*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 4, &aom_highbd_10_mse16x16_c, 10),
2114*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_10_mse16x8_c, 10),
2115*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_10_mse8x16_c, 10),
2116*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_10_mse8x8_c, 10),
2117*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 4, &aom_highbd_8_mse16x16_c, 8),
2118*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_8_mse16x8_c, 8),
2119*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_8_mse8x16_c, 8),
2120*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_8_mse8x8_c, 8)));
2121*77c1e3ccSAndroid Build Coastguard Worker 
2122*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON
2123*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2124*77c1e3ccSAndroid Build Coastguard Worker     NEON, MseHBDWxHTest,
2125*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseHBDWxHParams(3, 3, &aom_mse_wxh_16bit_highbd_neon, 10),
2126*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(3, 2, &aom_mse_wxh_16bit_highbd_neon, 10),
2127*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 3, &aom_mse_wxh_16bit_highbd_neon, 10),
2128*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 2, &aom_mse_wxh_16bit_highbd_neon,
2129*77c1e3ccSAndroid Build Coastguard Worker                                       10)));
2130*77c1e3ccSAndroid Build Coastguard Worker 
2131*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2132*77c1e3ccSAndroid Build Coastguard Worker     NEON, AvxHBDMseTest,
2133*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseParams(4, 4, &aom_highbd_12_mse16x16_neon, 12),
2134*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_12_mse16x8_neon, 12),
2135*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_12_mse8x16_neon, 12),
2136*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_12_mse8x8_neon, 12),
2137*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 4, &aom_highbd_10_mse16x16_neon, 10),
2138*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_10_mse16x8_neon, 10),
2139*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_10_mse8x16_neon, 10),
2140*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_10_mse8x8_neon, 10),
2141*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 4, &aom_highbd_8_mse16x16_neon, 8),
2142*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_8_mse16x8_neon, 8),
2143*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_8_mse8x16_neon, 8),
2144*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_8_mse8x8_neon, 8)));
2145*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_NEON
2146*77c1e3ccSAndroid Build Coastguard Worker 
2147*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON_DOTPROD
2148*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2149*77c1e3ccSAndroid Build Coastguard Worker     NEON_DOTPROD, AvxHBDMseTest,
2150*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseParams(4, 4, &aom_highbd_8_mse16x16_neon_dotprod, 8),
2151*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_8_mse16x8_neon_dotprod, 8),
2152*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_8_mse8x16_neon_dotprod, 8),
2153*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_8_mse8x8_neon_dotprod, 8)));
2154*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_NEON_DOTPROD
2155*77c1e3ccSAndroid Build Coastguard Worker 
2156*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SVE
2157*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2158*77c1e3ccSAndroid Build Coastguard Worker     SVE, MseHBDWxHTest,
2159*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseHBDWxHParams(3, 3, &aom_mse_wxh_16bit_highbd_sve, 10),
2160*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(3, 2, &aom_mse_wxh_16bit_highbd_sve, 10),
2161*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 3, &aom_mse_wxh_16bit_highbd_sve, 10),
2162*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 2, &aom_mse_wxh_16bit_highbd_sve,
2163*77c1e3ccSAndroid Build Coastguard Worker                                       10)));
2164*77c1e3ccSAndroid Build Coastguard Worker 
2165*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2166*77c1e3ccSAndroid Build Coastguard Worker     SVE, AvxHBDMseTest,
2167*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseParams(4, 4, &aom_highbd_12_mse16x16_sve, 12),
2168*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_12_mse16x8_sve, 12),
2169*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_12_mse8x16_sve, 12),
2170*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_12_mse8x8_sve, 12),
2171*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 4, &aom_highbd_10_mse16x16_sve, 10),
2172*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_highbd_10_mse16x8_sve, 10),
2173*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_highbd_10_mse8x16_sve, 10),
2174*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_10_mse8x8_sve, 10)));
2175*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SVE
2176*77c1e3ccSAndroid Build Coastguard Worker 
2177*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayHBDVariance_c[] = {
2178*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_12_variance128x128_c, 12),
2179*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_12_variance128x64_c, 12),
2180*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_12_variance64x128_c, 12),
2181*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_12_variance64x64_c, 12),
2182*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_12_variance64x32_c, 12),
2183*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_12_variance32x64_c, 12),
2184*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_12_variance32x32_c, 12),
2185*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_12_variance32x16_c, 12),
2186*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_12_variance16x32_c, 12),
2187*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_12_variance16x16_c, 12),
2188*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_12_variance16x8_c, 12),
2189*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_12_variance8x16_c, 12),
2190*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_12_variance8x8_c, 12),
2191*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_12_variance8x4_c, 12),
2192*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_12_variance4x8_c, 12),
2193*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_12_variance4x4_c, 12),
2194*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_10_variance128x128_c, 10),
2195*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_10_variance128x64_c, 10),
2196*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_10_variance64x128_c, 10),
2197*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_10_variance64x64_c, 10),
2198*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_10_variance64x32_c, 10),
2199*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_10_variance32x64_c, 10),
2200*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_10_variance32x32_c, 10),
2201*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_10_variance32x16_c, 10),
2202*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_10_variance16x32_c, 10),
2203*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_10_variance16x16_c, 10),
2204*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_10_variance16x8_c, 10),
2205*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_10_variance8x16_c, 10),
2206*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_10_variance8x8_c, 10),
2207*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_10_variance8x4_c, 10),
2208*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_10_variance4x8_c, 10),
2209*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_10_variance4x4_c, 10),
2210*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_8_variance128x128_c, 8),
2211*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_8_variance128x64_c, 8),
2212*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_8_variance64x128_c, 8),
2213*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_8_variance64x64_c, 8),
2214*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_8_variance64x32_c, 8),
2215*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_8_variance32x64_c, 8),
2216*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_8_variance32x32_c, 8),
2217*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_8_variance32x16_c, 8),
2218*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_8_variance16x32_c, 8),
2219*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_8_variance16x16_c, 8),
2220*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_8_variance16x8_c, 8),
2221*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_8_variance8x16_c, 8),
2222*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_8_variance8x8_c, 8),
2223*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_8_variance8x4_c, 8),
2224*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_8_variance4x8_c, 8),
2225*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_8_variance4x4_c, 8),
2226*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2227*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_12_variance64x16_c, 12),
2228*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_12_variance16x64_c, 12),
2229*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_12_variance32x8_c, 12),
2230*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_12_variance8x32_c, 12),
2231*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_12_variance16x4_c, 12),
2232*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_12_variance4x16_c, 12),
2233*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_10_variance64x16_c, 10),
2234*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_10_variance16x64_c, 10),
2235*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_10_variance32x8_c, 10),
2236*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_10_variance8x32_c, 10),
2237*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_10_variance16x4_c, 10),
2238*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_10_variance4x16_c, 10),
2239*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_8_variance64x16_c, 8),
2240*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_8_variance16x64_c, 8),
2241*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_8_variance32x8_c, 8),
2242*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_8_variance8x32_c, 8),
2243*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_8_variance16x4_c, 8),
2244*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_8_variance4x16_c, 8),
2245*77c1e3ccSAndroid Build Coastguard Worker #endif
2246*77c1e3ccSAndroid Build Coastguard Worker };
2247*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxHBDVarianceTest,
2248*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDVariance_c));
2249*77c1e3ccSAndroid Build Coastguard Worker 
2250*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE4_1
2251*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2252*77c1e3ccSAndroid Build Coastguard Worker     SSE4_1, AvxHBDVarianceTest,
2253*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(
2254*77c1e3ccSAndroid Build Coastguard Worker         VarianceParams(2, 2, &aom_highbd_8_variance4x4_sse4_1, 8),
2255*77c1e3ccSAndroid Build Coastguard Worker         VarianceParams(2, 2, &aom_highbd_10_variance4x4_sse4_1, 10),
2256*77c1e3ccSAndroid Build Coastguard Worker         VarianceParams(2, 2, &aom_highbd_12_variance4x4_sse4_1, 12)));
2257*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSE4_1
2258*77c1e3ccSAndroid Build Coastguard Worker 
2259*77c1e3ccSAndroid Build Coastguard Worker const SubpelVarianceParams kArrayHBDSubpelVariance_c[] = {
2260*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_highbd_8_sub_pixel_variance128x128_c, 8),
2261*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_highbd_8_sub_pixel_variance128x64_c, 8),
2262*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_highbd_8_sub_pixel_variance64x128_c, 8),
2263*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_8_sub_pixel_variance64x64_c, 8),
2264*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_8_sub_pixel_variance64x32_c, 8),
2265*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_8_sub_pixel_variance32x64_c, 8),
2266*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_8_sub_pixel_variance32x32_c, 8),
2267*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_8_sub_pixel_variance32x16_c, 8),
2268*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_8_sub_pixel_variance16x32_c, 8),
2269*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_8_sub_pixel_variance16x16_c, 8),
2270*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_8_sub_pixel_variance16x8_c, 8),
2271*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_8_sub_pixel_variance8x16_c, 8),
2272*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_8_sub_pixel_variance8x8_c, 8),
2273*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_8_sub_pixel_variance8x4_c, 8),
2274*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_highbd_8_sub_pixel_variance4x8_c, 8),
2275*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_highbd_8_sub_pixel_variance4x4_c, 8),
2276*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_highbd_10_sub_pixel_variance128x128_c, 10),
2277*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_highbd_10_sub_pixel_variance128x64_c, 10),
2278*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_highbd_10_sub_pixel_variance64x128_c, 10),
2279*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_10_sub_pixel_variance64x64_c, 10),
2280*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_10_sub_pixel_variance64x32_c, 10),
2281*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_10_sub_pixel_variance32x64_c, 10),
2282*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_10_sub_pixel_variance32x32_c, 10),
2283*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_10_sub_pixel_variance32x16_c, 10),
2284*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_10_sub_pixel_variance16x32_c, 10),
2285*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_10_sub_pixel_variance16x16_c, 10),
2286*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_10_sub_pixel_variance16x8_c, 10),
2287*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_10_sub_pixel_variance8x16_c, 10),
2288*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_10_sub_pixel_variance8x8_c, 10),
2289*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_10_sub_pixel_variance8x4_c, 10),
2290*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_highbd_10_sub_pixel_variance4x8_c, 10),
2291*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_highbd_10_sub_pixel_variance4x4_c, 10),
2292*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_highbd_12_sub_pixel_variance128x128_c, 12),
2293*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_highbd_12_sub_pixel_variance128x64_c, 12),
2294*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_highbd_12_sub_pixel_variance64x128_c, 12),
2295*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_12_sub_pixel_variance64x64_c, 12),
2296*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_12_sub_pixel_variance64x32_c, 12),
2297*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_12_sub_pixel_variance32x64_c, 12),
2298*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_12_sub_pixel_variance32x32_c, 12),
2299*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_12_sub_pixel_variance32x16_c, 12),
2300*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_12_sub_pixel_variance16x32_c, 12),
2301*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_12_sub_pixel_variance16x16_c, 12),
2302*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_12_sub_pixel_variance16x8_c, 12),
2303*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_12_sub_pixel_variance8x16_c, 12),
2304*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_12_sub_pixel_variance8x8_c, 12),
2305*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_12_sub_pixel_variance8x4_c, 12),
2306*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_highbd_12_sub_pixel_variance4x8_c, 12),
2307*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_highbd_12_sub_pixel_variance4x4_c, 12),
2308*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2309*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_8_sub_pixel_variance64x16_c, 8),
2310*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_8_sub_pixel_variance16x64_c, 8),
2311*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_8_sub_pixel_variance32x8_c, 8),
2312*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_8_sub_pixel_variance8x32_c, 8),
2313*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_8_sub_pixel_variance16x4_c, 8),
2314*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_highbd_8_sub_pixel_variance4x16_c, 8),
2315*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_10_sub_pixel_variance64x16_c, 10),
2316*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_10_sub_pixel_variance16x64_c, 10),
2317*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_10_sub_pixel_variance32x8_c, 10),
2318*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_10_sub_pixel_variance8x32_c, 10),
2319*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_10_sub_pixel_variance16x4_c, 10),
2320*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_highbd_10_sub_pixel_variance4x16_c, 10),
2321*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_12_sub_pixel_variance64x16_c, 12),
2322*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_12_sub_pixel_variance16x64_c, 12),
2323*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_12_sub_pixel_variance32x8_c, 12),
2324*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_12_sub_pixel_variance8x32_c, 12),
2325*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_12_sub_pixel_variance16x4_c, 12),
2326*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_highbd_12_sub_pixel_variance4x16_c, 12),
2327*77c1e3ccSAndroid Build Coastguard Worker #endif
2328*77c1e3ccSAndroid Build Coastguard Worker };
2329*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxHBDSubpelVarianceTest,
2330*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDSubpelVariance_c));
2331*77c1e3ccSAndroid Build Coastguard Worker 
2332*77c1e3ccSAndroid Build Coastguard Worker const SubpelAvgVarianceParams kArrayHBDSubpelAvgVariance_c[] = {
2333*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 7, &aom_highbd_8_sub_pixel_avg_variance128x128_c,
2334*77c1e3ccSAndroid Build Coastguard Worker                           8),
2335*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6, &aom_highbd_8_sub_pixel_avg_variance128x64_c,
2336*77c1e3ccSAndroid Build Coastguard Worker                           8),
2337*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7, &aom_highbd_8_sub_pixel_avg_variance64x128_c,
2338*77c1e3ccSAndroid Build Coastguard Worker                           8),
2339*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_8_sub_pixel_avg_variance64x64_c, 8),
2340*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_8_sub_pixel_avg_variance64x32_c, 8),
2341*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_8_sub_pixel_avg_variance32x64_c, 8),
2342*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_8_sub_pixel_avg_variance32x32_c, 8),
2343*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_8_sub_pixel_avg_variance32x16_c, 8),
2344*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_8_sub_pixel_avg_variance16x32_c, 8),
2345*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_8_sub_pixel_avg_variance16x16_c, 8),
2346*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_8_sub_pixel_avg_variance16x8_c, 8),
2347*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_8_sub_pixel_avg_variance8x16_c, 8),
2348*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_8_sub_pixel_avg_variance8x8_c, 8),
2349*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_8_sub_pixel_avg_variance8x4_c, 8),
2350*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_highbd_8_sub_pixel_avg_variance4x8_c, 8),
2351*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_highbd_8_sub_pixel_avg_variance4x4_c, 8),
2352*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 7, &aom_highbd_10_sub_pixel_avg_variance128x128_c,
2353*77c1e3ccSAndroid Build Coastguard Worker                           10),
2354*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6, &aom_highbd_10_sub_pixel_avg_variance128x64_c,
2355*77c1e3ccSAndroid Build Coastguard Worker                           10),
2356*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7, &aom_highbd_10_sub_pixel_avg_variance64x128_c,
2357*77c1e3ccSAndroid Build Coastguard Worker                           10),
2358*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_10_sub_pixel_avg_variance64x64_c,
2359*77c1e3ccSAndroid Build Coastguard Worker                           10),
2360*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_10_sub_pixel_avg_variance64x32_c,
2361*77c1e3ccSAndroid Build Coastguard Worker                           10),
2362*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_10_sub_pixel_avg_variance32x64_c,
2363*77c1e3ccSAndroid Build Coastguard Worker                           10),
2364*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_10_sub_pixel_avg_variance32x32_c,
2365*77c1e3ccSAndroid Build Coastguard Worker                           10),
2366*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_10_sub_pixel_avg_variance32x16_c,
2367*77c1e3ccSAndroid Build Coastguard Worker                           10),
2368*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_10_sub_pixel_avg_variance16x32_c,
2369*77c1e3ccSAndroid Build Coastguard Worker                           10),
2370*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_10_sub_pixel_avg_variance16x16_c,
2371*77c1e3ccSAndroid Build Coastguard Worker                           10),
2372*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_10_sub_pixel_avg_variance16x8_c,
2373*77c1e3ccSAndroid Build Coastguard Worker                           10),
2374*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_10_sub_pixel_avg_variance8x16_c,
2375*77c1e3ccSAndroid Build Coastguard Worker                           10),
2376*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_10_sub_pixel_avg_variance8x8_c, 10),
2377*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_10_sub_pixel_avg_variance8x4_c, 10),
2378*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_highbd_10_sub_pixel_avg_variance4x8_c, 10),
2379*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_highbd_10_sub_pixel_avg_variance4x4_c, 10),
2380*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 7, &aom_highbd_12_sub_pixel_avg_variance128x128_c,
2381*77c1e3ccSAndroid Build Coastguard Worker                           12),
2382*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6, &aom_highbd_12_sub_pixel_avg_variance128x64_c,
2383*77c1e3ccSAndroid Build Coastguard Worker                           12),
2384*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7, &aom_highbd_12_sub_pixel_avg_variance64x128_c,
2385*77c1e3ccSAndroid Build Coastguard Worker                           12),
2386*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_12_sub_pixel_avg_variance64x64_c,
2387*77c1e3ccSAndroid Build Coastguard Worker                           12),
2388*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_12_sub_pixel_avg_variance64x32_c,
2389*77c1e3ccSAndroid Build Coastguard Worker                           12),
2390*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_12_sub_pixel_avg_variance32x64_c,
2391*77c1e3ccSAndroid Build Coastguard Worker                           12),
2392*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_12_sub_pixel_avg_variance32x32_c,
2393*77c1e3ccSAndroid Build Coastguard Worker                           12),
2394*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_12_sub_pixel_avg_variance32x16_c,
2395*77c1e3ccSAndroid Build Coastguard Worker                           12),
2396*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_12_sub_pixel_avg_variance16x32_c,
2397*77c1e3ccSAndroid Build Coastguard Worker                           12),
2398*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_12_sub_pixel_avg_variance16x16_c,
2399*77c1e3ccSAndroid Build Coastguard Worker                           12),
2400*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_12_sub_pixel_avg_variance16x8_c,
2401*77c1e3ccSAndroid Build Coastguard Worker                           12),
2402*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_12_sub_pixel_avg_variance8x16_c,
2403*77c1e3ccSAndroid Build Coastguard Worker                           12),
2404*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_12_sub_pixel_avg_variance8x8_c, 12),
2405*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_12_sub_pixel_avg_variance8x4_c, 12),
2406*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_highbd_12_sub_pixel_avg_variance4x8_c, 12),
2407*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_highbd_12_sub_pixel_avg_variance4x4_c, 12),
2408*77c1e3ccSAndroid Build Coastguard Worker 
2409*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2410*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_8_sub_pixel_avg_variance64x16_c, 8),
2411*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_8_sub_pixel_avg_variance16x64_c, 8),
2412*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_8_sub_pixel_avg_variance32x8_c, 8),
2413*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_8_sub_pixel_avg_variance8x32_c, 8),
2414*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_8_sub_pixel_avg_variance16x4_c, 8),
2415*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_highbd_8_sub_pixel_avg_variance4x16_c, 8),
2416*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_10_sub_pixel_avg_variance64x16_c,
2417*77c1e3ccSAndroid Build Coastguard Worker                           10),
2418*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_10_sub_pixel_avg_variance16x64_c,
2419*77c1e3ccSAndroid Build Coastguard Worker                           10),
2420*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_10_sub_pixel_avg_variance32x8_c,
2421*77c1e3ccSAndroid Build Coastguard Worker                           10),
2422*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_10_sub_pixel_avg_variance8x32_c,
2423*77c1e3ccSAndroid Build Coastguard Worker                           10),
2424*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_10_sub_pixel_avg_variance16x4_c,
2425*77c1e3ccSAndroid Build Coastguard Worker                           10),
2426*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_highbd_10_sub_pixel_avg_variance4x16_c,
2427*77c1e3ccSAndroid Build Coastguard Worker                           10),
2428*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_12_sub_pixel_avg_variance64x16_c,
2429*77c1e3ccSAndroid Build Coastguard Worker                           12),
2430*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_12_sub_pixel_avg_variance16x64_c,
2431*77c1e3ccSAndroid Build Coastguard Worker                           12),
2432*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_12_sub_pixel_avg_variance32x8_c,
2433*77c1e3ccSAndroid Build Coastguard Worker                           12),
2434*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_12_sub_pixel_avg_variance8x32_c,
2435*77c1e3ccSAndroid Build Coastguard Worker                           12),
2436*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_12_sub_pixel_avg_variance16x4_c,
2437*77c1e3ccSAndroid Build Coastguard Worker                           12),
2438*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_highbd_12_sub_pixel_avg_variance4x16_c,
2439*77c1e3ccSAndroid Build Coastguard Worker                           12),
2440*77c1e3ccSAndroid Build Coastguard Worker #endif
2441*77c1e3ccSAndroid Build Coastguard Worker };
2442*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxHBDSubpelAvgVarianceTest,
2443*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDSubpelAvgVariance_c));
2444*77c1e3ccSAndroid Build Coastguard Worker 
2445*77c1e3ccSAndroid Build Coastguard Worker const DistWtdSubpelAvgVarianceParams kArrayHBDDistWtdSubpelAvgVariance_c[] = {
2446*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2447*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance128x128_c, 8),
2448*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2449*77c1e3ccSAndroid Build Coastguard Worker       7, 6, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance128x64_c, 8),
2450*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2451*77c1e3ccSAndroid Build Coastguard Worker       6, 7, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance64x128_c, 8),
2452*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2453*77c1e3ccSAndroid Build Coastguard Worker       6, 6, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance64x64_c, 8),
2454*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2455*77c1e3ccSAndroid Build Coastguard Worker       6, 5, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance64x32_c, 8),
2456*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2457*77c1e3ccSAndroid Build Coastguard Worker       5, 6, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance32x64_c, 8),
2458*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2459*77c1e3ccSAndroid Build Coastguard Worker       5, 5, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance32x32_c, 8),
2460*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2461*77c1e3ccSAndroid Build Coastguard Worker       5, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance32x16_c, 8),
2462*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2463*77c1e3ccSAndroid Build Coastguard Worker       4, 5, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x32_c, 8),
2464*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2465*77c1e3ccSAndroid Build Coastguard Worker       4, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x16_c, 8),
2466*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2467*77c1e3ccSAndroid Build Coastguard Worker       4, 3, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x8_c, 8),
2468*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2469*77c1e3ccSAndroid Build Coastguard Worker       3, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance8x16_c, 8),
2470*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2471*77c1e3ccSAndroid Build Coastguard Worker       3, 3, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance8x8_c, 8),
2472*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2473*77c1e3ccSAndroid Build Coastguard Worker       3, 2, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance8x4_c, 8),
2474*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2475*77c1e3ccSAndroid Build Coastguard Worker       2, 3, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance4x8_c, 8),
2476*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2477*77c1e3ccSAndroid Build Coastguard Worker       2, 2, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance4x4_c, 8),
2478*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2479*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance128x128_c, 10),
2480*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2481*77c1e3ccSAndroid Build Coastguard Worker       7, 6, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance128x64_c, 10),
2482*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2483*77c1e3ccSAndroid Build Coastguard Worker       6, 7, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance64x128_c, 10),
2484*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2485*77c1e3ccSAndroid Build Coastguard Worker       6, 6, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance64x64_c, 10),
2486*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2487*77c1e3ccSAndroid Build Coastguard Worker       6, 5, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance64x32_c, 10),
2488*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2489*77c1e3ccSAndroid Build Coastguard Worker       5, 6, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance32x64_c, 10),
2490*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2491*77c1e3ccSAndroid Build Coastguard Worker       5, 5, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance32x32_c, 10),
2492*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2493*77c1e3ccSAndroid Build Coastguard Worker       5, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance32x16_c, 10),
2494*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2495*77c1e3ccSAndroid Build Coastguard Worker       4, 5, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x32_c, 10),
2496*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2497*77c1e3ccSAndroid Build Coastguard Worker       4, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x16_c, 10),
2498*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2499*77c1e3ccSAndroid Build Coastguard Worker       4, 3, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x8_c, 10),
2500*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2501*77c1e3ccSAndroid Build Coastguard Worker       3, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance8x16_c, 10),
2502*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2503*77c1e3ccSAndroid Build Coastguard Worker       3, 3, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance8x8_c, 10),
2504*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2505*77c1e3ccSAndroid Build Coastguard Worker       3, 2, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance8x4_c, 10),
2506*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2507*77c1e3ccSAndroid Build Coastguard Worker       2, 3, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance4x8_c, 10),
2508*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2509*77c1e3ccSAndroid Build Coastguard Worker       2, 2, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance4x4_c, 10),
2510*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2511*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance128x128_c, 12),
2512*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2513*77c1e3ccSAndroid Build Coastguard Worker       7, 6, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance128x64_c, 12),
2514*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2515*77c1e3ccSAndroid Build Coastguard Worker       6, 7, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance64x128_c, 12),
2516*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2517*77c1e3ccSAndroid Build Coastguard Worker       6, 6, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance64x64_c, 12),
2518*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2519*77c1e3ccSAndroid Build Coastguard Worker       6, 5, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance64x32_c, 12),
2520*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2521*77c1e3ccSAndroid Build Coastguard Worker       5, 6, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance32x64_c, 12),
2522*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2523*77c1e3ccSAndroid Build Coastguard Worker       5, 5, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance32x32_c, 12),
2524*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2525*77c1e3ccSAndroid Build Coastguard Worker       5, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance32x16_c, 12),
2526*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2527*77c1e3ccSAndroid Build Coastguard Worker       4, 5, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x32_c, 12),
2528*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2529*77c1e3ccSAndroid Build Coastguard Worker       4, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x16_c, 12),
2530*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2531*77c1e3ccSAndroid Build Coastguard Worker       4, 3, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x8_c, 12),
2532*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2533*77c1e3ccSAndroid Build Coastguard Worker       3, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance8x16_c, 12),
2534*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2535*77c1e3ccSAndroid Build Coastguard Worker       3, 3, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance8x8_c, 12),
2536*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2537*77c1e3ccSAndroid Build Coastguard Worker       3, 2, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance8x4_c, 12),
2538*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2539*77c1e3ccSAndroid Build Coastguard Worker       2, 3, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance4x8_c, 12),
2540*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2541*77c1e3ccSAndroid Build Coastguard Worker       2, 2, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance4x4_c, 12),
2542*77c1e3ccSAndroid Build Coastguard Worker 
2543*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2544*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2545*77c1e3ccSAndroid Build Coastguard Worker       6, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance64x16_c, 8),
2546*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2547*77c1e3ccSAndroid Build Coastguard Worker       4, 6, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x64_c, 8),
2548*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2549*77c1e3ccSAndroid Build Coastguard Worker       5, 3, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance32x8_c, 8),
2550*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2551*77c1e3ccSAndroid Build Coastguard Worker       3, 5, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance8x32_c, 8),
2552*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2553*77c1e3ccSAndroid Build Coastguard Worker       4, 2, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x4_c, 8),
2554*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2555*77c1e3ccSAndroid Build Coastguard Worker       2, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance4x16_c, 8),
2556*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2557*77c1e3ccSAndroid Build Coastguard Worker       6, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance64x16_c, 10),
2558*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2559*77c1e3ccSAndroid Build Coastguard Worker       4, 6, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x64_c, 10),
2560*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2561*77c1e3ccSAndroid Build Coastguard Worker       5, 3, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance32x8_c, 10),
2562*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2563*77c1e3ccSAndroid Build Coastguard Worker       3, 5, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance8x32_c, 10),
2564*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2565*77c1e3ccSAndroid Build Coastguard Worker       4, 2, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x4_c, 10),
2566*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2567*77c1e3ccSAndroid Build Coastguard Worker       2, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance4x16_c, 10),
2568*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2569*77c1e3ccSAndroid Build Coastguard Worker       6, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance64x16_c, 12),
2570*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2571*77c1e3ccSAndroid Build Coastguard Worker       4, 6, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x64_c, 12),
2572*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2573*77c1e3ccSAndroid Build Coastguard Worker       5, 3, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance32x8_c, 12),
2574*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2575*77c1e3ccSAndroid Build Coastguard Worker       3, 5, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance8x32_c, 12),
2576*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2577*77c1e3ccSAndroid Build Coastguard Worker       4, 2, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x4_c, 12),
2578*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
2579*77c1e3ccSAndroid Build Coastguard Worker       2, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance4x16_c, 12),
2580*77c1e3ccSAndroid Build Coastguard Worker #endif
2581*77c1e3ccSAndroid Build Coastguard Worker };
2582*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2583*77c1e3ccSAndroid Build Coastguard Worker     C, AvxHBDDistWtdSubpelAvgVarianceTest,
2584*77c1e3ccSAndroid Build Coastguard Worker     ::testing::ValuesIn(kArrayHBDDistWtdSubpelAvgVariance_c));
2585*77c1e3ccSAndroid Build Coastguard Worker 
2586*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2587*77c1e3ccSAndroid Build Coastguard Worker const ObmcSubpelVarianceParams kArrayHBDObmcSubpelVariance_c[] = {
2588*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 7, &aom_highbd_8_obmc_sub_pixel_variance128x128_c,
2589*77c1e3ccSAndroid Build Coastguard Worker                            8),
2590*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 6, &aom_highbd_8_obmc_sub_pixel_variance128x64_c,
2591*77c1e3ccSAndroid Build Coastguard Worker                            8),
2592*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 7, &aom_highbd_8_obmc_sub_pixel_variance64x128_c,
2593*77c1e3ccSAndroid Build Coastguard Worker                            8),
2594*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 6, &aom_highbd_8_obmc_sub_pixel_variance64x64_c,
2595*77c1e3ccSAndroid Build Coastguard Worker                            8),
2596*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 5, &aom_highbd_8_obmc_sub_pixel_variance64x32_c,
2597*77c1e3ccSAndroid Build Coastguard Worker                            8),
2598*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 6, &aom_highbd_8_obmc_sub_pixel_variance32x64_c,
2599*77c1e3ccSAndroid Build Coastguard Worker                            8),
2600*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 5, &aom_highbd_8_obmc_sub_pixel_variance32x32_c,
2601*77c1e3ccSAndroid Build Coastguard Worker                            8),
2602*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 4, &aom_highbd_8_obmc_sub_pixel_variance32x16_c,
2603*77c1e3ccSAndroid Build Coastguard Worker                            8),
2604*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 5, &aom_highbd_8_obmc_sub_pixel_variance16x32_c,
2605*77c1e3ccSAndroid Build Coastguard Worker                            8),
2606*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 4, &aom_highbd_8_obmc_sub_pixel_variance16x16_c,
2607*77c1e3ccSAndroid Build Coastguard Worker                            8),
2608*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 3, &aom_highbd_8_obmc_sub_pixel_variance16x8_c,
2609*77c1e3ccSAndroid Build Coastguard Worker                            8),
2610*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 4, &aom_highbd_8_obmc_sub_pixel_variance8x16_c,
2611*77c1e3ccSAndroid Build Coastguard Worker                            8),
2612*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 3, &aom_highbd_8_obmc_sub_pixel_variance8x8_c, 8),
2613*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 2, &aom_highbd_8_obmc_sub_pixel_variance8x4_c, 8),
2614*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 3, &aom_highbd_8_obmc_sub_pixel_variance4x8_c, 8),
2615*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 2, &aom_highbd_8_obmc_sub_pixel_variance4x4_c, 8),
2616*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 7,
2617*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_10_obmc_sub_pixel_variance128x128_c, 10),
2618*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 6, &aom_highbd_10_obmc_sub_pixel_variance128x64_c,
2619*77c1e3ccSAndroid Build Coastguard Worker                            10),
2620*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 7, &aom_highbd_10_obmc_sub_pixel_variance64x128_c,
2621*77c1e3ccSAndroid Build Coastguard Worker                            10),
2622*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 6, &aom_highbd_10_obmc_sub_pixel_variance64x64_c,
2623*77c1e3ccSAndroid Build Coastguard Worker                            10),
2624*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 5, &aom_highbd_10_obmc_sub_pixel_variance64x32_c,
2625*77c1e3ccSAndroid Build Coastguard Worker                            10),
2626*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 6, &aom_highbd_10_obmc_sub_pixel_variance32x64_c,
2627*77c1e3ccSAndroid Build Coastguard Worker                            10),
2628*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 5, &aom_highbd_10_obmc_sub_pixel_variance32x32_c,
2629*77c1e3ccSAndroid Build Coastguard Worker                            10),
2630*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 4, &aom_highbd_10_obmc_sub_pixel_variance32x16_c,
2631*77c1e3ccSAndroid Build Coastguard Worker                            10),
2632*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 5, &aom_highbd_10_obmc_sub_pixel_variance16x32_c,
2633*77c1e3ccSAndroid Build Coastguard Worker                            10),
2634*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 4, &aom_highbd_10_obmc_sub_pixel_variance16x16_c,
2635*77c1e3ccSAndroid Build Coastguard Worker                            10),
2636*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 3, &aom_highbd_10_obmc_sub_pixel_variance16x8_c,
2637*77c1e3ccSAndroid Build Coastguard Worker                            10),
2638*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 4, &aom_highbd_10_obmc_sub_pixel_variance8x16_c,
2639*77c1e3ccSAndroid Build Coastguard Worker                            10),
2640*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 3, &aom_highbd_10_obmc_sub_pixel_variance8x8_c,
2641*77c1e3ccSAndroid Build Coastguard Worker                            10),
2642*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 2, &aom_highbd_10_obmc_sub_pixel_variance8x4_c,
2643*77c1e3ccSAndroid Build Coastguard Worker                            10),
2644*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 3, &aom_highbd_10_obmc_sub_pixel_variance4x8_c,
2645*77c1e3ccSAndroid Build Coastguard Worker                            10),
2646*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 2, &aom_highbd_10_obmc_sub_pixel_variance4x4_c,
2647*77c1e3ccSAndroid Build Coastguard Worker                            10),
2648*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 7,
2649*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_12_obmc_sub_pixel_variance128x128_c, 12),
2650*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 6, &aom_highbd_12_obmc_sub_pixel_variance128x64_c,
2651*77c1e3ccSAndroid Build Coastguard Worker                            12),
2652*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 7, &aom_highbd_12_obmc_sub_pixel_variance64x128_c,
2653*77c1e3ccSAndroid Build Coastguard Worker                            12),
2654*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 6, &aom_highbd_12_obmc_sub_pixel_variance64x64_c,
2655*77c1e3ccSAndroid Build Coastguard Worker                            12),
2656*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 5, &aom_highbd_12_obmc_sub_pixel_variance64x32_c,
2657*77c1e3ccSAndroid Build Coastguard Worker                            12),
2658*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 6, &aom_highbd_12_obmc_sub_pixel_variance32x64_c,
2659*77c1e3ccSAndroid Build Coastguard Worker                            12),
2660*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 5, &aom_highbd_12_obmc_sub_pixel_variance32x32_c,
2661*77c1e3ccSAndroid Build Coastguard Worker                            12),
2662*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 4, &aom_highbd_12_obmc_sub_pixel_variance32x16_c,
2663*77c1e3ccSAndroid Build Coastguard Worker                            12),
2664*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 5, &aom_highbd_12_obmc_sub_pixel_variance16x32_c,
2665*77c1e3ccSAndroid Build Coastguard Worker                            12),
2666*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 4, &aom_highbd_12_obmc_sub_pixel_variance16x16_c,
2667*77c1e3ccSAndroid Build Coastguard Worker                            12),
2668*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 3, &aom_highbd_12_obmc_sub_pixel_variance16x8_c,
2669*77c1e3ccSAndroid Build Coastguard Worker                            12),
2670*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 4, &aom_highbd_12_obmc_sub_pixel_variance8x16_c,
2671*77c1e3ccSAndroid Build Coastguard Worker                            12),
2672*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 3, &aom_highbd_12_obmc_sub_pixel_variance8x8_c,
2673*77c1e3ccSAndroid Build Coastguard Worker                            12),
2674*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 2, &aom_highbd_12_obmc_sub_pixel_variance8x4_c,
2675*77c1e3ccSAndroid Build Coastguard Worker                            12),
2676*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 3, &aom_highbd_12_obmc_sub_pixel_variance4x8_c,
2677*77c1e3ccSAndroid Build Coastguard Worker                            12),
2678*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 2, &aom_highbd_12_obmc_sub_pixel_variance4x4_c,
2679*77c1e3ccSAndroid Build Coastguard Worker                            12),
2680*77c1e3ccSAndroid Build Coastguard Worker 
2681*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 4, &aom_highbd_8_obmc_sub_pixel_variance64x16_c,
2682*77c1e3ccSAndroid Build Coastguard Worker                            8),
2683*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 6, &aom_highbd_8_obmc_sub_pixel_variance16x64_c,
2684*77c1e3ccSAndroid Build Coastguard Worker                            8),
2685*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 3, &aom_highbd_8_obmc_sub_pixel_variance32x8_c,
2686*77c1e3ccSAndroid Build Coastguard Worker                            8),
2687*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 5, &aom_highbd_8_obmc_sub_pixel_variance8x32_c,
2688*77c1e3ccSAndroid Build Coastguard Worker                            8),
2689*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 2, &aom_highbd_8_obmc_sub_pixel_variance16x4_c,
2690*77c1e3ccSAndroid Build Coastguard Worker                            8),
2691*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 4, &aom_highbd_8_obmc_sub_pixel_variance4x16_c,
2692*77c1e3ccSAndroid Build Coastguard Worker                            8),
2693*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 4, &aom_highbd_10_obmc_sub_pixel_variance64x16_c,
2694*77c1e3ccSAndroid Build Coastguard Worker                            10),
2695*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 6, &aom_highbd_10_obmc_sub_pixel_variance16x64_c,
2696*77c1e3ccSAndroid Build Coastguard Worker                            10),
2697*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 3, &aom_highbd_10_obmc_sub_pixel_variance32x8_c,
2698*77c1e3ccSAndroid Build Coastguard Worker                            10),
2699*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 5, &aom_highbd_10_obmc_sub_pixel_variance8x32_c,
2700*77c1e3ccSAndroid Build Coastguard Worker                            10),
2701*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 2, &aom_highbd_10_obmc_sub_pixel_variance16x4_c,
2702*77c1e3ccSAndroid Build Coastguard Worker                            10),
2703*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 4, &aom_highbd_10_obmc_sub_pixel_variance4x16_c,
2704*77c1e3ccSAndroid Build Coastguard Worker                            10),
2705*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 4, &aom_highbd_12_obmc_sub_pixel_variance64x16_c,
2706*77c1e3ccSAndroid Build Coastguard Worker                            12),
2707*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 6, &aom_highbd_12_obmc_sub_pixel_variance16x64_c,
2708*77c1e3ccSAndroid Build Coastguard Worker                            12),
2709*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 3, &aom_highbd_12_obmc_sub_pixel_variance32x8_c,
2710*77c1e3ccSAndroid Build Coastguard Worker                            12),
2711*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 5, &aom_highbd_12_obmc_sub_pixel_variance8x32_c,
2712*77c1e3ccSAndroid Build Coastguard Worker                            12),
2713*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 2, &aom_highbd_12_obmc_sub_pixel_variance16x4_c,
2714*77c1e3ccSAndroid Build Coastguard Worker                            12),
2715*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 4, &aom_highbd_12_obmc_sub_pixel_variance4x16_c,
2716*77c1e3ccSAndroid Build Coastguard Worker                            12),
2717*77c1e3ccSAndroid Build Coastguard Worker };
2718*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(C, AvxHBDObmcSubpelVarianceTest,
2719*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDObmcSubpelVariance_c));
2720*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
2721*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
2722*77c1e3ccSAndroid Build Coastguard Worker 
2723*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE2
2724*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2725*77c1e3ccSAndroid Build Coastguard Worker     SSE2, MseWxHTest,
2726*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseWxHParams(3, 3, &aom_mse_wxh_16bit_sse2, 8),
2727*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(3, 2, &aom_mse_wxh_16bit_sse2, 8),
2728*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(2, 3, &aom_mse_wxh_16bit_sse2, 8),
2729*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(2, 2, &aom_mse_wxh_16bit_sse2, 8)));
2730*77c1e3ccSAndroid Build Coastguard Worker 
2731*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2732*77c1e3ccSAndroid Build Coastguard Worker     SSE2, Mse16xHTest,
2733*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(Mse16xHParams(3, 3, &aom_mse_16xh_16bit_sse2, 8),
2734*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(3, 2, &aom_mse_16xh_16bit_sse2, 8),
2735*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(2, 3, &aom_mse_16xh_16bit_sse2, 8),
2736*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(2, 2, &aom_mse_16xh_16bit_sse2, 8)));
2737*77c1e3ccSAndroid Build Coastguard Worker 
2738*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2739*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, SumOfSquaresTest,
2740*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::Values(aom_get_mb_ss_sse2));
2741*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
2742*77c1e3ccSAndroid Build Coastguard Worker 
2743*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, AvxMseTest,
2744*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::Values(MseParams(4, 4, &aom_mse16x16_sse2),
2745*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(4, 3, &aom_mse16x8_sse2),
2746*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(3, 4, &aom_mse8x16_sse2),
2747*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(3, 3, &aom_mse8x8_sse2)));
2748*77c1e3ccSAndroid Build Coastguard Worker 
2749*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayVariance_sse2[] = {
2750*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_variance128x128_sse2),
2751*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_variance128x64_sse2),
2752*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_variance64x128_sse2),
2753*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_variance64x64_sse2),
2754*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_variance64x32_sse2),
2755*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_variance32x64_sse2),
2756*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_variance32x32_sse2),
2757*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_variance32x16_sse2),
2758*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_variance16x32_sse2),
2759*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_variance16x16_sse2),
2760*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_variance16x8_sse2),
2761*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_variance8x16_sse2),
2762*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_variance8x8_sse2),
2763*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_variance8x4_sse2),
2764*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_variance4x8_sse2),
2765*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_variance4x4_sse2),
2766*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2767*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_variance64x16_sse2),
2768*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_variance32x8_sse2),
2769*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_variance16x64_sse2),
2770*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_variance16x4_sse2),
2771*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_variance8x32_sse2),
2772*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_variance4x16_sse2),
2773*77c1e3ccSAndroid Build Coastguard Worker #endif
2774*77c1e3ccSAndroid Build Coastguard Worker };
2775*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, AvxVarianceTest,
2776*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayVariance_sse2));
2777*77c1e3ccSAndroid Build Coastguard Worker 
2778*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParams kArrayGetSseSum8x8Quad_sse2[] = {
2779*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(7, 7, &aom_get_var_sse_sum_8x8_quad_sse2, 0),
2780*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(6, 6, &aom_get_var_sse_sum_8x8_quad_sse2, 0),
2781*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 5, &aom_get_var_sse_sum_8x8_quad_sse2, 0),
2782*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 4, &aom_get_var_sse_sum_8x8_quad_sse2, 0)
2783*77c1e3ccSAndroid Build Coastguard Worker };
2784*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, GetSseSum8x8QuadTest,
2785*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayGetSseSum8x8Quad_sse2));
2786*77c1e3ccSAndroid Build Coastguard Worker 
2787*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParamsDual kArrayGetSseSum16x16Dual_sse2[] = {
2788*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(7, 7, &aom_get_var_sse_sum_16x16_dual_sse2, 0),
2789*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(6, 6, &aom_get_var_sse_sum_16x16_dual_sse2, 0),
2790*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 5, &aom_get_var_sse_sum_16x16_dual_sse2, 0),
2791*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 4, &aom_get_var_sse_sum_16x16_dual_sse2, 0)
2792*77c1e3ccSAndroid Build Coastguard Worker };
2793*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, GetSseSum16x16DualTest,
2794*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayGetSseSum16x16Dual_sse2));
2795*77c1e3ccSAndroid Build Coastguard Worker 
2796*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
2797*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE2
2798*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2799*77c1e3ccSAndroid Build Coastguard Worker     SSE2, MseHBDWxHTest,
2800*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseHBDWxHParams(3, 3, &aom_mse_wxh_16bit_highbd_sse2, 10),
2801*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(3, 2, &aom_mse_wxh_16bit_highbd_sse2, 10),
2802*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 3, &aom_mse_wxh_16bit_highbd_sse2, 10),
2803*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 2, &aom_mse_wxh_16bit_highbd_sse2,
2804*77c1e3ccSAndroid Build Coastguard Worker                                       10)));
2805*77c1e3ccSAndroid Build Coastguard Worker 
2806*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2807*77c1e3ccSAndroid Build Coastguard Worker     SSE2, AvxHBDMseTest,
2808*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseParams(4, 4, &aom_highbd_12_mse16x16_sse2, 12),
2809*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_12_mse8x8_sse2, 12),
2810*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 4, &aom_highbd_10_mse16x16_sse2, 10),
2811*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_10_mse8x8_sse2, 10),
2812*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 4, &aom_highbd_8_mse16x16_sse2, 8),
2813*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 3, &aom_highbd_8_mse8x8_sse2, 8)));
2814*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSE2
2815*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE4_1
2816*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2817*77c1e3ccSAndroid Build Coastguard Worker     SSE4_1, AvxSubpelVarianceTest,
2818*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(
2819*77c1e3ccSAndroid Build Coastguard Worker         SubpelVarianceParams(2, 2, &aom_highbd_8_sub_pixel_variance4x4_sse4_1,
2820*77c1e3ccSAndroid Build Coastguard Worker                              8),
2821*77c1e3ccSAndroid Build Coastguard Worker         SubpelVarianceParams(2, 2, &aom_highbd_10_sub_pixel_variance4x4_sse4_1,
2822*77c1e3ccSAndroid Build Coastguard Worker                              10),
2823*77c1e3ccSAndroid Build Coastguard Worker         SubpelVarianceParams(2, 2, &aom_highbd_12_sub_pixel_variance4x4_sse4_1,
2824*77c1e3ccSAndroid Build Coastguard Worker                              12)));
2825*77c1e3ccSAndroid Build Coastguard Worker 
2826*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2827*77c1e3ccSAndroid Build Coastguard Worker     SSE4_1, AvxSubpelAvgVarianceTest,
2828*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(
2829*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(2, 2,
2830*77c1e3ccSAndroid Build Coastguard Worker                                 &aom_highbd_8_sub_pixel_avg_variance4x4_sse4_1,
2831*77c1e3ccSAndroid Build Coastguard Worker                                 8),
2832*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(2, 2,
2833*77c1e3ccSAndroid Build Coastguard Worker                                 &aom_highbd_10_sub_pixel_avg_variance4x4_sse4_1,
2834*77c1e3ccSAndroid Build Coastguard Worker                                 10),
2835*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(2, 2,
2836*77c1e3ccSAndroid Build Coastguard Worker                                 &aom_highbd_12_sub_pixel_avg_variance4x4_sse4_1,
2837*77c1e3ccSAndroid Build Coastguard Worker                                 12)));
2838*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSE4_1
2839*77c1e3ccSAndroid Build Coastguard Worker 
2840*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_AVX2
2841*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2842*77c1e3ccSAndroid Build Coastguard Worker     AVX2, AvxHBDMseTest,
2843*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseParams(4, 4, &aom_highbd_10_mse16x16_avx2, 10)));
2844*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_AVX2
2845*77c1e3ccSAndroid Build Coastguard Worker 
2846*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayHBDVariance_sse2[] = {
2847*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_12_variance128x128_sse2, 12),
2848*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_12_variance128x64_sse2, 12),
2849*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_12_variance64x128_sse2, 12),
2850*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_12_variance64x64_sse2, 12),
2851*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_12_variance64x32_sse2, 12),
2852*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_12_variance32x64_sse2, 12),
2853*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_12_variance32x32_sse2, 12),
2854*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_12_variance32x16_sse2, 12),
2855*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_12_variance16x32_sse2, 12),
2856*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_12_variance16x16_sse2, 12),
2857*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_12_variance16x8_sse2, 12),
2858*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_12_variance8x16_sse2, 12),
2859*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_12_variance8x8_sse2, 12),
2860*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_10_variance128x128_sse2, 10),
2861*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_10_variance128x64_sse2, 10),
2862*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_10_variance64x128_sse2, 10),
2863*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_10_variance64x64_sse2, 10),
2864*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_10_variance64x32_sse2, 10),
2865*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_10_variance32x64_sse2, 10),
2866*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_10_variance32x32_sse2, 10),
2867*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_10_variance32x16_sse2, 10),
2868*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_10_variance16x32_sse2, 10),
2869*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_10_variance16x16_sse2, 10),
2870*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_10_variance16x8_sse2, 10),
2871*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_10_variance8x16_sse2, 10),
2872*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_10_variance8x8_sse2, 10),
2873*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_8_variance128x128_sse2, 8),
2874*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_8_variance128x64_sse2, 8),
2875*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_8_variance64x128_sse2, 8),
2876*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_8_variance64x64_sse2, 8),
2877*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_8_variance64x32_sse2, 8),
2878*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_8_variance32x64_sse2, 8),
2879*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_8_variance32x32_sse2, 8),
2880*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_8_variance32x16_sse2, 8),
2881*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_8_variance16x32_sse2, 8),
2882*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_8_variance16x16_sse2, 8),
2883*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_8_variance16x8_sse2, 8),
2884*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_8_variance8x16_sse2, 8),
2885*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_8_variance8x8_sse2, 8),
2886*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2887*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_12_variance64x16_sse2, 12),
2888*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_12_variance16x64_sse2, 12),
2889*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_12_variance32x8_sse2, 12),
2890*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_12_variance8x32_sse2, 12),
2891*77c1e3ccSAndroid Build Coastguard Worker   // VarianceParams(4, 2, &aom_highbd_12_variance16x4_sse2, 12),
2892*77c1e3ccSAndroid Build Coastguard Worker   // VarianceParams(2, 4, &aom_highbd_12_variance4x16_sse2, 12),
2893*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_10_variance64x16_sse2, 10),
2894*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_10_variance16x64_sse2, 10),
2895*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_10_variance32x8_sse2, 10),
2896*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_10_variance8x32_sse2, 10),
2897*77c1e3ccSAndroid Build Coastguard Worker   // VarianceParams(4, 2, &aom_highbd_10_variance16x4_sse2, 10),
2898*77c1e3ccSAndroid Build Coastguard Worker   // VarianceParams(2, 4, &aom_highbd_10_variance4x16_sse2, 10),
2899*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_8_variance64x16_sse2, 8),
2900*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_8_variance16x64_sse2, 8),
2901*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_8_variance32x8_sse2, 8),
2902*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_8_variance8x32_sse2, 8),
2903*77c1e3ccSAndroid Build Coastguard Worker // VarianceParams(4, 2, &aom_highbd_8_variance16x4_sse2, 8),
2904*77c1e3ccSAndroid Build Coastguard Worker // VarianceParams(2, 4, &aom_highbd_8_variance4x16_sse2, 8),
2905*77c1e3ccSAndroid Build Coastguard Worker #endif
2906*77c1e3ccSAndroid Build Coastguard Worker };
2907*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, AvxHBDVarianceTest,
2908*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDVariance_sse2));
2909*77c1e3ccSAndroid Build Coastguard Worker 
2910*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_AVX2
2911*77c1e3ccSAndroid Build Coastguard Worker 
2912*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
2913*77c1e3ccSAndroid Build Coastguard Worker     AVX2, MseHBDWxHTest,
2914*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseHBDWxHParams(3, 3, &aom_mse_wxh_16bit_highbd_avx2, 10),
2915*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(3, 2, &aom_mse_wxh_16bit_highbd_avx2, 10),
2916*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 3, &aom_mse_wxh_16bit_highbd_avx2, 10),
2917*77c1e3ccSAndroid Build Coastguard Worker                       MseHBDWxHParams(2, 2, &aom_mse_wxh_16bit_highbd_avx2,
2918*77c1e3ccSAndroid Build Coastguard Worker                                       10)));
2919*77c1e3ccSAndroid Build Coastguard Worker 
2920*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayHBDVariance_avx2[] = {
2921*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_10_variance128x128_avx2, 10),
2922*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_10_variance128x64_avx2, 10),
2923*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_10_variance64x128_avx2, 10),
2924*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_10_variance64x64_avx2, 10),
2925*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_10_variance64x32_avx2, 10),
2926*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_10_variance32x64_avx2, 10),
2927*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_10_variance32x32_avx2, 10),
2928*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_10_variance32x16_avx2, 10),
2929*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_10_variance16x32_avx2, 10),
2930*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_10_variance16x16_avx2, 10),
2931*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_10_variance16x8_avx2, 10),
2932*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_10_variance8x16_avx2, 10),
2933*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_10_variance8x8_avx2, 10),
2934*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
2935*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_10_variance64x16_avx2, 10),
2936*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_10_variance32x8_avx2, 10),
2937*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_10_variance16x64_avx2, 10),
2938*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_10_variance8x32_avx2, 10),
2939*77c1e3ccSAndroid Build Coastguard Worker #endif
2940*77c1e3ccSAndroid Build Coastguard Worker };
2941*77c1e3ccSAndroid Build Coastguard Worker 
2942*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, AvxHBDVarianceTest,
2943*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDVariance_avx2));
2944*77c1e3ccSAndroid Build Coastguard Worker 
2945*77c1e3ccSAndroid Build Coastguard Worker const SubpelVarianceParams kArrayHBDSubpelVariance_avx2[] = {
2946*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_highbd_10_sub_pixel_variance128x128_avx2, 10),
2947*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_highbd_10_sub_pixel_variance128x64_avx2, 10),
2948*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_highbd_10_sub_pixel_variance64x128_avx2, 10),
2949*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_10_sub_pixel_variance64x64_avx2, 10),
2950*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_10_sub_pixel_variance64x32_avx2, 10),
2951*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_10_sub_pixel_variance32x64_avx2, 10),
2952*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_10_sub_pixel_variance32x32_avx2, 10),
2953*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_10_sub_pixel_variance32x16_avx2, 10),
2954*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_10_sub_pixel_variance16x32_avx2, 10),
2955*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_10_sub_pixel_variance16x16_avx2, 10),
2956*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_10_sub_pixel_variance16x8_avx2, 10),
2957*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_10_sub_pixel_variance8x16_avx2, 10),
2958*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_10_sub_pixel_variance8x8_avx2, 10),
2959*77c1e3ccSAndroid Build Coastguard Worker };
2960*77c1e3ccSAndroid Build Coastguard Worker 
2961*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, AvxHBDSubpelVarianceTest,
2962*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDSubpelVariance_avx2));
2963*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_AVX2
2964*77c1e3ccSAndroid Build Coastguard Worker 
2965*77c1e3ccSAndroid Build Coastguard Worker const SubpelVarianceParams kArrayHBDSubpelVariance_sse2[] = {
2966*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_highbd_12_sub_pixel_variance128x128_sse2, 12),
2967*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_highbd_12_sub_pixel_variance128x64_sse2, 12),
2968*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_highbd_12_sub_pixel_variance64x128_sse2, 12),
2969*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_12_sub_pixel_variance64x64_sse2, 12),
2970*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_12_sub_pixel_variance64x32_sse2, 12),
2971*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_12_sub_pixel_variance32x64_sse2, 12),
2972*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_12_sub_pixel_variance32x32_sse2, 12),
2973*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_12_sub_pixel_variance32x16_sse2, 12),
2974*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_12_sub_pixel_variance16x32_sse2, 12),
2975*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_12_sub_pixel_variance16x16_sse2, 12),
2976*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_12_sub_pixel_variance16x8_sse2, 12),
2977*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_12_sub_pixel_variance8x16_sse2, 12),
2978*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_12_sub_pixel_variance8x8_sse2, 12),
2979*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_12_sub_pixel_variance8x4_sse2, 12),
2980*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_highbd_10_sub_pixel_variance128x128_sse2, 10),
2981*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_highbd_10_sub_pixel_variance128x64_sse2, 10),
2982*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_highbd_10_sub_pixel_variance64x128_sse2, 10),
2983*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_10_sub_pixel_variance64x64_sse2, 10),
2984*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_10_sub_pixel_variance64x32_sse2, 10),
2985*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_10_sub_pixel_variance32x64_sse2, 10),
2986*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_10_sub_pixel_variance32x32_sse2, 10),
2987*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_10_sub_pixel_variance32x16_sse2, 10),
2988*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_10_sub_pixel_variance16x32_sse2, 10),
2989*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_10_sub_pixel_variance16x16_sse2, 10),
2990*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_10_sub_pixel_variance16x8_sse2, 10),
2991*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_10_sub_pixel_variance8x16_sse2, 10),
2992*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_10_sub_pixel_variance8x8_sse2, 10),
2993*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_10_sub_pixel_variance8x4_sse2, 10),
2994*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_highbd_8_sub_pixel_variance128x128_sse2, 8),
2995*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_highbd_8_sub_pixel_variance128x64_sse2, 8),
2996*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_highbd_8_sub_pixel_variance64x128_sse2, 8),
2997*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_8_sub_pixel_variance64x64_sse2, 8),
2998*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_8_sub_pixel_variance64x32_sse2, 8),
2999*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_8_sub_pixel_variance32x64_sse2, 8),
3000*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_8_sub_pixel_variance32x32_sse2, 8),
3001*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_8_sub_pixel_variance32x16_sse2, 8),
3002*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_8_sub_pixel_variance16x32_sse2, 8),
3003*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_8_sub_pixel_variance16x16_sse2, 8),
3004*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_8_sub_pixel_variance16x8_sse2, 8),
3005*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_8_sub_pixel_variance8x16_sse2, 8),
3006*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_8_sub_pixel_variance8x8_sse2, 8),
3007*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_8_sub_pixel_variance8x4_sse2, 8),
3008*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3009*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_12_sub_pixel_variance64x16_sse2, 12),
3010*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_12_sub_pixel_variance16x64_sse2, 12),
3011*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_12_sub_pixel_variance32x8_sse2, 12),
3012*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_12_sub_pixel_variance8x32_sse2, 12),
3013*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_12_sub_pixel_variance16x4_sse2, 12),
3014*77c1e3ccSAndroid Build Coastguard Worker   // SubpelVarianceParams(2, 4, &aom_highbd_12_sub_pixel_variance4x16_sse2, 12),
3015*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_10_sub_pixel_variance64x16_sse2, 10),
3016*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_10_sub_pixel_variance16x64_sse2, 10),
3017*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_10_sub_pixel_variance32x8_sse2, 10),
3018*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_10_sub_pixel_variance8x32_sse2, 10),
3019*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_10_sub_pixel_variance16x4_sse2, 10),
3020*77c1e3ccSAndroid Build Coastguard Worker   // SubpelVarianceParams(2, 4, &aom_highbd_10_sub_pixel_variance4x16_sse2, 10),
3021*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_8_sub_pixel_variance64x16_sse2, 8),
3022*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_8_sub_pixel_variance16x64_sse2, 8),
3023*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_8_sub_pixel_variance32x8_sse2, 8),
3024*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_8_sub_pixel_variance8x32_sse2, 8),
3025*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_8_sub_pixel_variance16x4_sse2, 8),
3026*77c1e3ccSAndroid Build Coastguard Worker // SubpelVarianceParams(2, 4, &aom_highbd_8_sub_pixel_variance4x16_sse2, 8),
3027*77c1e3ccSAndroid Build Coastguard Worker #endif
3028*77c1e3ccSAndroid Build Coastguard Worker };
3029*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, AvxHBDSubpelVarianceTest,
3030*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDSubpelVariance_sse2));
3031*77c1e3ccSAndroid Build Coastguard Worker 
3032*77c1e3ccSAndroid Build Coastguard Worker const SubpelAvgVarianceParams kArrayHBDSubpelAvgVariance_sse2[] = {
3033*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_12_sub_pixel_avg_variance64x64_sse2,
3034*77c1e3ccSAndroid Build Coastguard Worker                           12),
3035*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_12_sub_pixel_avg_variance64x32_sse2,
3036*77c1e3ccSAndroid Build Coastguard Worker                           12),
3037*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_12_sub_pixel_avg_variance32x64_sse2,
3038*77c1e3ccSAndroid Build Coastguard Worker                           12),
3039*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_12_sub_pixel_avg_variance32x32_sse2,
3040*77c1e3ccSAndroid Build Coastguard Worker                           12),
3041*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_12_sub_pixel_avg_variance32x16_sse2,
3042*77c1e3ccSAndroid Build Coastguard Worker                           12),
3043*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_12_sub_pixel_avg_variance16x32_sse2,
3044*77c1e3ccSAndroid Build Coastguard Worker                           12),
3045*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_12_sub_pixel_avg_variance16x16_sse2,
3046*77c1e3ccSAndroid Build Coastguard Worker                           12),
3047*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_12_sub_pixel_avg_variance16x8_sse2,
3048*77c1e3ccSAndroid Build Coastguard Worker                           12),
3049*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_12_sub_pixel_avg_variance8x16_sse2,
3050*77c1e3ccSAndroid Build Coastguard Worker                           12),
3051*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_12_sub_pixel_avg_variance8x8_sse2,
3052*77c1e3ccSAndroid Build Coastguard Worker                           12),
3053*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_12_sub_pixel_avg_variance8x4_sse2,
3054*77c1e3ccSAndroid Build Coastguard Worker                           12),
3055*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_10_sub_pixel_avg_variance64x64_sse2,
3056*77c1e3ccSAndroid Build Coastguard Worker                           10),
3057*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_10_sub_pixel_avg_variance64x32_sse2,
3058*77c1e3ccSAndroid Build Coastguard Worker                           10),
3059*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_10_sub_pixel_avg_variance32x64_sse2,
3060*77c1e3ccSAndroid Build Coastguard Worker                           10),
3061*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_10_sub_pixel_avg_variance32x32_sse2,
3062*77c1e3ccSAndroid Build Coastguard Worker                           10),
3063*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_10_sub_pixel_avg_variance32x16_sse2,
3064*77c1e3ccSAndroid Build Coastguard Worker                           10),
3065*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_10_sub_pixel_avg_variance16x32_sse2,
3066*77c1e3ccSAndroid Build Coastguard Worker                           10),
3067*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_10_sub_pixel_avg_variance16x16_sse2,
3068*77c1e3ccSAndroid Build Coastguard Worker                           10),
3069*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_10_sub_pixel_avg_variance16x8_sse2,
3070*77c1e3ccSAndroid Build Coastguard Worker                           10),
3071*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_10_sub_pixel_avg_variance8x16_sse2,
3072*77c1e3ccSAndroid Build Coastguard Worker                           10),
3073*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_10_sub_pixel_avg_variance8x8_sse2,
3074*77c1e3ccSAndroid Build Coastguard Worker                           10),
3075*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_10_sub_pixel_avg_variance8x4_sse2,
3076*77c1e3ccSAndroid Build Coastguard Worker                           10),
3077*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_8_sub_pixel_avg_variance64x64_sse2,
3078*77c1e3ccSAndroid Build Coastguard Worker                           8),
3079*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_8_sub_pixel_avg_variance64x32_sse2,
3080*77c1e3ccSAndroid Build Coastguard Worker                           8),
3081*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_8_sub_pixel_avg_variance32x64_sse2,
3082*77c1e3ccSAndroid Build Coastguard Worker                           8),
3083*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_8_sub_pixel_avg_variance32x32_sse2,
3084*77c1e3ccSAndroid Build Coastguard Worker                           8),
3085*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_8_sub_pixel_avg_variance32x16_sse2,
3086*77c1e3ccSAndroid Build Coastguard Worker                           8),
3087*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_8_sub_pixel_avg_variance16x32_sse2,
3088*77c1e3ccSAndroid Build Coastguard Worker                           8),
3089*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_8_sub_pixel_avg_variance16x16_sse2,
3090*77c1e3ccSAndroid Build Coastguard Worker                           8),
3091*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_8_sub_pixel_avg_variance16x8_sse2,
3092*77c1e3ccSAndroid Build Coastguard Worker                           8),
3093*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_8_sub_pixel_avg_variance8x16_sse2,
3094*77c1e3ccSAndroid Build Coastguard Worker                           8),
3095*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_8_sub_pixel_avg_variance8x8_sse2,
3096*77c1e3ccSAndroid Build Coastguard Worker                           8),
3097*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_8_sub_pixel_avg_variance8x4_sse2,
3098*77c1e3ccSAndroid Build Coastguard Worker                           8),
3099*77c1e3ccSAndroid Build Coastguard Worker 
3100*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3101*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_12_sub_pixel_avg_variance64x16_sse2,
3102*77c1e3ccSAndroid Build Coastguard Worker                           12),
3103*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_12_sub_pixel_avg_variance16x64_sse2,
3104*77c1e3ccSAndroid Build Coastguard Worker                           12),
3105*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_12_sub_pixel_avg_variance32x8_sse2,
3106*77c1e3ccSAndroid Build Coastguard Worker                           12),
3107*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_12_sub_pixel_avg_variance8x32_sse2,
3108*77c1e3ccSAndroid Build Coastguard Worker                           12),
3109*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_12_sub_pixel_avg_variance16x4_sse2,
3110*77c1e3ccSAndroid Build Coastguard Worker                           12),
3111*77c1e3ccSAndroid Build Coastguard Worker   // SubpelAvgVarianceParams(2, 4,
3112*77c1e3ccSAndroid Build Coastguard Worker   // &aom_highbd_12_sub_pixel_avg_variance4x16_sse2, 12),
3113*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_10_sub_pixel_avg_variance64x16_sse2,
3114*77c1e3ccSAndroid Build Coastguard Worker                           10),
3115*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_10_sub_pixel_avg_variance16x64_sse2,
3116*77c1e3ccSAndroid Build Coastguard Worker                           10),
3117*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_10_sub_pixel_avg_variance32x8_sse2,
3118*77c1e3ccSAndroid Build Coastguard Worker                           10),
3119*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_10_sub_pixel_avg_variance8x32_sse2,
3120*77c1e3ccSAndroid Build Coastguard Worker                           10),
3121*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_10_sub_pixel_avg_variance16x4_sse2,
3122*77c1e3ccSAndroid Build Coastguard Worker                           10),
3123*77c1e3ccSAndroid Build Coastguard Worker   // SubpelAvgVarianceParams(2, 4,
3124*77c1e3ccSAndroid Build Coastguard Worker   // &aom_highbd_10_sub_pixel_avg_variance4x16_sse2, 10),
3125*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_8_sub_pixel_avg_variance64x16_sse2,
3126*77c1e3ccSAndroid Build Coastguard Worker                           8),
3127*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_8_sub_pixel_avg_variance16x64_sse2,
3128*77c1e3ccSAndroid Build Coastguard Worker                           8),
3129*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_8_sub_pixel_avg_variance32x8_sse2,
3130*77c1e3ccSAndroid Build Coastguard Worker                           8),
3131*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_8_sub_pixel_avg_variance8x32_sse2,
3132*77c1e3ccSAndroid Build Coastguard Worker                           8),
3133*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_8_sub_pixel_avg_variance16x4_sse2,
3134*77c1e3ccSAndroid Build Coastguard Worker                           8),
3135*77c1e3ccSAndroid Build Coastguard Worker // SubpelAvgVarianceParams(2, 4,
3136*77c1e3ccSAndroid Build Coastguard Worker // &aom_highbd_8_sub_pixel_avg_variance4x16_sse2, 8),
3137*77c1e3ccSAndroid Build Coastguard Worker #endif
3138*77c1e3ccSAndroid Build Coastguard Worker };
3139*77c1e3ccSAndroid Build Coastguard Worker 
3140*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, AvxHBDSubpelAvgVarianceTest,
3141*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDSubpelAvgVariance_sse2));
3142*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSE2
3143*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
3144*77c1e3ccSAndroid Build Coastguard Worker 
3145*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSSE3
3146*77c1e3ccSAndroid Build Coastguard Worker const SubpelVarianceParams kArraySubpelVariance_ssse3[] = {
3147*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_sub_pixel_variance128x128_ssse3, 0),
3148*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_sub_pixel_variance128x64_ssse3, 0),
3149*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_sub_pixel_variance64x128_ssse3, 0),
3150*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_ssse3, 0),
3151*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_ssse3, 0),
3152*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_ssse3, 0),
3153*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_ssse3, 0),
3154*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_ssse3, 0),
3155*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_ssse3, 0),
3156*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_ssse3, 0),
3157*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_ssse3, 0),
3158*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_ssse3, 0),
3159*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_ssse3, 0),
3160*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_ssse3, 0),
3161*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_ssse3, 0),
3162*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_ssse3, 0),
3163*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3164*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_sub_pixel_variance64x16_ssse3, 0),
3165*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_sub_pixel_variance16x64_ssse3, 0),
3166*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_sub_pixel_variance32x8_ssse3, 0),
3167*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_sub_pixel_variance8x32_ssse3, 0),
3168*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_sub_pixel_variance16x4_ssse3, 0),
3169*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_sub_pixel_variance4x16_ssse3, 0),
3170*77c1e3ccSAndroid Build Coastguard Worker #endif
3171*77c1e3ccSAndroid Build Coastguard Worker };
3172*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSSE3, AvxSubpelVarianceTest,
3173*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArraySubpelVariance_ssse3));
3174*77c1e3ccSAndroid Build Coastguard Worker 
3175*77c1e3ccSAndroid Build Coastguard Worker const SubpelAvgVarianceParams kArraySubpelAvgVariance_ssse3[] = {
3176*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 7, &aom_sub_pixel_avg_variance128x128_ssse3, 0),
3177*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6, &aom_sub_pixel_avg_variance128x64_ssse3, 0),
3178*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7, &aom_sub_pixel_avg_variance64x128_ssse3, 0),
3179*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_ssse3, 0),
3180*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_ssse3, 0),
3181*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_ssse3, 0),
3182*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_ssse3, 0),
3183*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_ssse3, 0),
3184*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_ssse3, 0),
3185*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_ssse3, 0),
3186*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_ssse3, 0),
3187*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_ssse3, 0),
3188*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_ssse3, 0),
3189*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_ssse3, 0),
3190*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_ssse3, 0),
3191*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_ssse3, 0),
3192*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3193*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_sub_pixel_avg_variance64x16_ssse3, 0),
3194*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_sub_pixel_avg_variance16x64_ssse3, 0),
3195*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_sub_pixel_avg_variance32x8_ssse3, 0),
3196*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_sub_pixel_avg_variance8x32_ssse3, 0),
3197*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_sub_pixel_avg_variance16x4_ssse3, 0),
3198*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_sub_pixel_avg_variance4x16_ssse3, 0),
3199*77c1e3ccSAndroid Build Coastguard Worker #endif
3200*77c1e3ccSAndroid Build Coastguard Worker };
3201*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSSE3, AvxSubpelAvgVarianceTest,
3202*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArraySubpelAvgVariance_ssse3));
3203*77c1e3ccSAndroid Build Coastguard Worker 
3204*77c1e3ccSAndroid Build Coastguard Worker const DistWtdSubpelAvgVarianceParams kArrayDistWtdSubpelAvgVariance_ssse3[] = {
3205*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3206*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_dist_wtd_sub_pixel_avg_variance128x128_ssse3, 0),
3207*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3208*77c1e3ccSAndroid Build Coastguard Worker       7, 6, &aom_dist_wtd_sub_pixel_avg_variance128x64_ssse3, 0),
3209*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3210*77c1e3ccSAndroid Build Coastguard Worker       6, 7, &aom_dist_wtd_sub_pixel_avg_variance64x128_ssse3, 0),
3211*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3212*77c1e3ccSAndroid Build Coastguard Worker       6, 6, &aom_dist_wtd_sub_pixel_avg_variance64x64_ssse3, 0),
3213*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3214*77c1e3ccSAndroid Build Coastguard Worker       6, 5, &aom_dist_wtd_sub_pixel_avg_variance64x32_ssse3, 0),
3215*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3216*77c1e3ccSAndroid Build Coastguard Worker       5, 6, &aom_dist_wtd_sub_pixel_avg_variance32x64_ssse3, 0),
3217*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3218*77c1e3ccSAndroid Build Coastguard Worker       5, 5, &aom_dist_wtd_sub_pixel_avg_variance32x32_ssse3, 0),
3219*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3220*77c1e3ccSAndroid Build Coastguard Worker       5, 4, &aom_dist_wtd_sub_pixel_avg_variance32x16_ssse3, 0),
3221*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3222*77c1e3ccSAndroid Build Coastguard Worker       4, 5, &aom_dist_wtd_sub_pixel_avg_variance16x32_ssse3, 0),
3223*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3224*77c1e3ccSAndroid Build Coastguard Worker       4, 4, &aom_dist_wtd_sub_pixel_avg_variance16x16_ssse3, 0),
3225*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3226*77c1e3ccSAndroid Build Coastguard Worker       4, 3, &aom_dist_wtd_sub_pixel_avg_variance16x8_ssse3, 0),
3227*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3228*77c1e3ccSAndroid Build Coastguard Worker       3, 4, &aom_dist_wtd_sub_pixel_avg_variance8x16_ssse3, 0),
3229*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3230*77c1e3ccSAndroid Build Coastguard Worker       3, 3, &aom_dist_wtd_sub_pixel_avg_variance8x8_ssse3, 0),
3231*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3232*77c1e3ccSAndroid Build Coastguard Worker       3, 2, &aom_dist_wtd_sub_pixel_avg_variance8x4_ssse3, 0),
3233*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3234*77c1e3ccSAndroid Build Coastguard Worker       2, 3, &aom_dist_wtd_sub_pixel_avg_variance4x8_ssse3, 0),
3235*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3236*77c1e3ccSAndroid Build Coastguard Worker       2, 2, &aom_dist_wtd_sub_pixel_avg_variance4x4_ssse3, 0),
3237*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3238*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3239*77c1e3ccSAndroid Build Coastguard Worker       6, 4, &aom_dist_wtd_sub_pixel_avg_variance64x16_ssse3, 0),
3240*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3241*77c1e3ccSAndroid Build Coastguard Worker       4, 6, &aom_dist_wtd_sub_pixel_avg_variance16x64_ssse3, 0),
3242*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3243*77c1e3ccSAndroid Build Coastguard Worker       5, 3, &aom_dist_wtd_sub_pixel_avg_variance32x8_ssse3, 0),
3244*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3245*77c1e3ccSAndroid Build Coastguard Worker       3, 5, &aom_dist_wtd_sub_pixel_avg_variance8x32_ssse3, 0),
3246*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3247*77c1e3ccSAndroid Build Coastguard Worker       4, 2, &aom_dist_wtd_sub_pixel_avg_variance16x4_ssse3, 0),
3248*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3249*77c1e3ccSAndroid Build Coastguard Worker       2, 4, &aom_dist_wtd_sub_pixel_avg_variance4x16_ssse3, 0),
3250*77c1e3ccSAndroid Build Coastguard Worker #endif
3251*77c1e3ccSAndroid Build Coastguard Worker };
3252*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
3253*77c1e3ccSAndroid Build Coastguard Worker     SSSE3, AvxDistWtdSubpelAvgVarianceTest,
3254*77c1e3ccSAndroid Build Coastguard Worker     ::testing::ValuesIn(kArrayDistWtdSubpelAvgVariance_ssse3));
3255*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSSE3
3256*77c1e3ccSAndroid Build Coastguard Worker 
3257*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE4_1
3258*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3259*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
3260*77c1e3ccSAndroid Build Coastguard Worker     SSE4_1, AvxObmcSubpelVarianceTest,
3261*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(
3262*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(7, 7,
3263*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_obmc_sub_pixel_variance128x128_sse4_1, 0),
3264*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(7, 6,
3265*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_obmc_sub_pixel_variance128x64_sse4_1, 0),
3266*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(6, 7,
3267*77c1e3ccSAndroid Build Coastguard Worker                                  &aom_obmc_sub_pixel_variance64x128_sse4_1, 0),
3268*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(6, 6, &aom_obmc_sub_pixel_variance64x64_sse4_1,
3269*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3270*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(6, 5, &aom_obmc_sub_pixel_variance64x32_sse4_1,
3271*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3272*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(5, 6, &aom_obmc_sub_pixel_variance32x64_sse4_1,
3273*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3274*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(5, 5, &aom_obmc_sub_pixel_variance32x32_sse4_1,
3275*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3276*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(5, 4, &aom_obmc_sub_pixel_variance32x16_sse4_1,
3277*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3278*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 5, &aom_obmc_sub_pixel_variance16x32_sse4_1,
3279*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3280*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 4, &aom_obmc_sub_pixel_variance16x16_sse4_1,
3281*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3282*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 3, &aom_obmc_sub_pixel_variance16x8_sse4_1,
3283*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3284*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(3, 4, &aom_obmc_sub_pixel_variance8x16_sse4_1,
3285*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3286*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(3, 3, &aom_obmc_sub_pixel_variance8x8_sse4_1,
3287*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3288*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(3, 2, &aom_obmc_sub_pixel_variance8x4_sse4_1,
3289*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3290*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(2, 3, &aom_obmc_sub_pixel_variance4x8_sse4_1,
3291*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3292*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(2, 2, &aom_obmc_sub_pixel_variance4x4_sse4_1,
3293*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3294*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(6, 4, &aom_obmc_sub_pixel_variance64x16_sse4_1,
3295*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3296*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 6, &aom_obmc_sub_pixel_variance16x64_sse4_1,
3297*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3298*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(5, 3, &aom_obmc_sub_pixel_variance32x8_sse4_1,
3299*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3300*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(3, 5, &aom_obmc_sub_pixel_variance8x32_sse4_1,
3301*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3302*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(4, 2, &aom_obmc_sub_pixel_variance16x4_sse4_1,
3303*77c1e3ccSAndroid Build Coastguard Worker                                  0),
3304*77c1e3ccSAndroid Build Coastguard Worker         ObmcSubpelVarianceParams(2, 4, &aom_obmc_sub_pixel_variance4x16_sse4_1,
3305*77c1e3ccSAndroid Build Coastguard Worker                                  0)));
3306*77c1e3ccSAndroid Build Coastguard Worker #endif
3307*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSE4_1
3308*77c1e3ccSAndroid Build Coastguard Worker 
3309*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_AVX2
3310*77c1e3ccSAndroid Build Coastguard Worker 
3311*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
3312*77c1e3ccSAndroid Build Coastguard Worker     AVX2, MseWxHTest,
3313*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseWxHParams(3, 3, &aom_mse_wxh_16bit_avx2, 8),
3314*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(3, 2, &aom_mse_wxh_16bit_avx2, 8),
3315*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(2, 3, &aom_mse_wxh_16bit_avx2, 8),
3316*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(2, 2, &aom_mse_wxh_16bit_avx2, 8)));
3317*77c1e3ccSAndroid Build Coastguard Worker 
3318*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
3319*77c1e3ccSAndroid Build Coastguard Worker     AVX2, Mse16xHTest,
3320*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(Mse16xHParams(3, 3, &aom_mse_16xh_16bit_avx2, 8),
3321*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(3, 2, &aom_mse_16xh_16bit_avx2, 8),
3322*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(2, 3, &aom_mse_16xh_16bit_avx2, 8),
3323*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(2, 2, &aom_mse_16xh_16bit_avx2, 8)));
3324*77c1e3ccSAndroid Build Coastguard Worker 
3325*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, AvxMseTest,
3326*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::Values(MseParams(4, 4,
3327*77c1e3ccSAndroid Build Coastguard Worker                                                      &aom_mse16x16_avx2)));
3328*77c1e3ccSAndroid Build Coastguard Worker 
3329*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayVariance_avx2[] = {
3330*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_variance128x128_avx2),
3331*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_variance128x64_avx2),
3332*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_variance64x128_avx2),
3333*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_variance64x64_avx2),
3334*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_variance64x32_avx2),
3335*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_variance32x64_avx2),
3336*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_variance32x32_avx2),
3337*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_variance32x16_avx2),
3338*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_variance16x32_avx2),
3339*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_variance16x16_avx2),
3340*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_variance16x8_avx2),
3341*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3342*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_variance64x16_avx2),
3343*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_variance16x64_avx2),
3344*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_variance32x8_avx2),
3345*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_variance16x4_avx2),
3346*77c1e3ccSAndroid Build Coastguard Worker #endif
3347*77c1e3ccSAndroid Build Coastguard Worker };
3348*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, AvxVarianceTest,
3349*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayVariance_avx2));
3350*77c1e3ccSAndroid Build Coastguard Worker 
3351*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParams kArrayGetSseSum8x8Quad_avx2[] = {
3352*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(7, 7, &aom_get_var_sse_sum_8x8_quad_avx2, 0),
3353*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(6, 6, &aom_get_var_sse_sum_8x8_quad_avx2, 0),
3354*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 5, &aom_get_var_sse_sum_8x8_quad_avx2, 0),
3355*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 4, &aom_get_var_sse_sum_8x8_quad_avx2, 0)
3356*77c1e3ccSAndroid Build Coastguard Worker };
3357*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, GetSseSum8x8QuadTest,
3358*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayGetSseSum8x8Quad_avx2));
3359*77c1e3ccSAndroid Build Coastguard Worker 
3360*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParamsDual kArrayGetSseSum16x16Dual_avx2[] = {
3361*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(7, 7, &aom_get_var_sse_sum_16x16_dual_avx2, 0),
3362*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(6, 6, &aom_get_var_sse_sum_16x16_dual_avx2, 0),
3363*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 5, &aom_get_var_sse_sum_16x16_dual_avx2, 0),
3364*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 4, &aom_get_var_sse_sum_16x16_dual_avx2, 0)
3365*77c1e3ccSAndroid Build Coastguard Worker };
3366*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, GetSseSum16x16DualTest,
3367*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayGetSseSum16x16Dual_avx2));
3368*77c1e3ccSAndroid Build Coastguard Worker 
3369*77c1e3ccSAndroid Build Coastguard Worker const SubpelVarianceParams kArraySubpelVariance_avx2[] = {
3370*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_sub_pixel_variance128x128_avx2, 0),
3371*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_sub_pixel_variance128x64_avx2, 0),
3372*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_sub_pixel_variance64x128_avx2, 0),
3373*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_avx2, 0),
3374*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_avx2, 0),
3375*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_avx2, 0),
3376*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_avx2, 0),
3377*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_avx2, 0),
3378*77c1e3ccSAndroid Build Coastguard Worker 
3379*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_avx2, 0),
3380*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_avx2, 0),
3381*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_avx2, 0),
3382*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3383*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_sub_pixel_variance16x64_avx2, 0),
3384*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_sub_pixel_variance16x4_avx2, 0),
3385*77c1e3ccSAndroid Build Coastguard Worker #endif
3386*77c1e3ccSAndroid Build Coastguard Worker };
3387*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, AvxSubpelVarianceTest,
3388*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArraySubpelVariance_avx2));
3389*77c1e3ccSAndroid Build Coastguard Worker 
3390*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
3391*77c1e3ccSAndroid Build Coastguard Worker     AVX2, AvxSubpelAvgVarianceTest,
3392*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(
3393*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(7, 7, &aom_sub_pixel_avg_variance128x128_avx2,
3394*77c1e3ccSAndroid Build Coastguard Worker                                 0),
3395*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(7, 6, &aom_sub_pixel_avg_variance128x64_avx2,
3396*77c1e3ccSAndroid Build Coastguard Worker                                 0),
3397*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(6, 7, &aom_sub_pixel_avg_variance64x128_avx2,
3398*77c1e3ccSAndroid Build Coastguard Worker                                 0),
3399*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_avx2, 0),
3400*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_avx2, 0),
3401*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_avx2, 0),
3402*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_avx2, 0),
3403*77c1e3ccSAndroid Build Coastguard Worker         SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_avx2,
3404*77c1e3ccSAndroid Build Coastguard Worker                                 0)));
3405*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_AVX2
3406*77c1e3ccSAndroid Build Coastguard Worker 
3407*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON
3408*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
3409*77c1e3ccSAndroid Build Coastguard Worker     NEON, MseWxHTest,
3410*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseWxHParams(3, 3, &aom_mse_wxh_16bit_neon, 8),
3411*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(3, 2, &aom_mse_wxh_16bit_neon, 8),
3412*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(2, 3, &aom_mse_wxh_16bit_neon, 8),
3413*77c1e3ccSAndroid Build Coastguard Worker                       MseWxHParams(2, 2, &aom_mse_wxh_16bit_neon, 8)));
3414*77c1e3ccSAndroid Build Coastguard Worker 
3415*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
3416*77c1e3ccSAndroid Build Coastguard Worker     NEON, Mse16xHTest,
3417*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(Mse16xHParams(3, 3, &aom_mse_16xh_16bit_neon, 8),
3418*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(3, 2, &aom_mse_16xh_16bit_neon, 8),
3419*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(2, 3, &aom_mse_16xh_16bit_neon, 8),
3420*77c1e3ccSAndroid Build Coastguard Worker                       Mse16xHParams(2, 2, &aom_mse_16xh_16bit_neon, 8)));
3421*77c1e3ccSAndroid Build Coastguard Worker 
3422*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3423*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, SumOfSquaresTest,
3424*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::Values(aom_get_mb_ss_neon));
3425*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
3426*77c1e3ccSAndroid Build Coastguard Worker 
3427*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxMseTest,
3428*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::Values(MseParams(3, 3, &aom_mse8x8_neon),
3429*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(3, 4, &aom_mse8x16_neon),
3430*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(4, 4, &aom_mse16x16_neon),
3431*77c1e3ccSAndroid Build Coastguard Worker                                            MseParams(4, 3, &aom_mse16x8_neon)));
3432*77c1e3ccSAndroid Build Coastguard Worker 
3433*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayVariance_neon[] = {
3434*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_variance128x128_neon),
3435*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_variance64x64_neon),
3436*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_variance128x64_neon),
3437*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_variance64x128_neon),
3438*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_variance64x64_neon),
3439*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_variance64x32_neon),
3440*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_variance32x64_neon),
3441*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_variance32x32_neon),
3442*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_variance32x16_neon),
3443*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_variance16x32_neon),
3444*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_variance16x16_neon),
3445*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_variance16x8_neon),
3446*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_variance8x16_neon),
3447*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_variance8x8_neon),
3448*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_variance8x4_neon),
3449*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_variance4x8_neon),
3450*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_variance4x4_neon),
3451*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3452*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_variance4x16_neon),
3453*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_variance16x4_neon),
3454*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_variance8x32_neon),
3455*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_variance32x8_neon),
3456*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_variance16x64_neon),
3457*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_variance64x16_neon),
3458*77c1e3ccSAndroid Build Coastguard Worker #endif
3459*77c1e3ccSAndroid Build Coastguard Worker };
3460*77c1e3ccSAndroid Build Coastguard Worker 
3461*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxVarianceTest,
3462*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayVariance_neon));
3463*77c1e3ccSAndroid Build Coastguard Worker 
3464*77c1e3ccSAndroid Build Coastguard Worker const SubpelVarianceParams kArraySubpelVariance_neon[] = {
3465*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 7, &aom_sub_pixel_variance128x128_neon, 0),
3466*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(7, 6, &aom_sub_pixel_variance128x64_neon, 0),
3467*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 7, &aom_sub_pixel_variance64x128_neon, 0),
3468*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_sub_pixel_variance64x64_neon, 0),
3469*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_sub_pixel_variance64x32_neon, 0),
3470*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_sub_pixel_variance32x64_neon, 0),
3471*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_sub_pixel_variance32x32_neon, 0),
3472*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_sub_pixel_variance32x16_neon, 0),
3473*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_sub_pixel_variance16x32_neon, 0),
3474*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_sub_pixel_variance16x16_neon, 0),
3475*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_sub_pixel_variance16x8_neon, 0),
3476*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_sub_pixel_variance8x16_neon, 0),
3477*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_sub_pixel_variance8x8_neon, 0),
3478*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_sub_pixel_variance8x4_neon, 0),
3479*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_sub_pixel_variance4x8_neon, 0),
3480*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_sub_pixel_variance4x4_neon, 0),
3481*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3482*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_sub_pixel_variance64x16_neon, 0),
3483*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_sub_pixel_variance16x64_neon, 0),
3484*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_sub_pixel_variance32x8_neon, 0),
3485*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_sub_pixel_variance8x32_neon, 0),
3486*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_sub_pixel_variance16x4_neon, 0),
3487*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_sub_pixel_variance4x16_neon, 0),
3488*77c1e3ccSAndroid Build Coastguard Worker #endif
3489*77c1e3ccSAndroid Build Coastguard Worker };
3490*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxSubpelVarianceTest,
3491*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArraySubpelVariance_neon));
3492*77c1e3ccSAndroid Build Coastguard Worker 
3493*77c1e3ccSAndroid Build Coastguard Worker const SubpelAvgVarianceParams kArraySubpelAvgVariance_neon[] = {
3494*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 7, &aom_sub_pixel_avg_variance128x128_neon, 0),
3495*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6, &aom_sub_pixel_avg_variance128x64_neon, 0),
3496*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7, &aom_sub_pixel_avg_variance64x128_neon, 0),
3497*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_sub_pixel_avg_variance64x64_neon, 0),
3498*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_sub_pixel_avg_variance64x32_neon, 0),
3499*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_sub_pixel_avg_variance32x64_neon, 0),
3500*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_sub_pixel_avg_variance32x32_neon, 0),
3501*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_sub_pixel_avg_variance32x16_neon, 0),
3502*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_sub_pixel_avg_variance16x32_neon, 0),
3503*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_sub_pixel_avg_variance16x16_neon, 0),
3504*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_sub_pixel_avg_variance16x8_neon, 0),
3505*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_sub_pixel_avg_variance8x16_neon, 0),
3506*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_sub_pixel_avg_variance8x8_neon, 0),
3507*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_sub_pixel_avg_variance8x4_neon, 0),
3508*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_sub_pixel_avg_variance4x8_neon, 0),
3509*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_sub_pixel_avg_variance4x4_neon, 0),
3510*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3511*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_sub_pixel_avg_variance64x16_neon, 0),
3512*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_sub_pixel_avg_variance16x64_neon, 0),
3513*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_sub_pixel_avg_variance32x8_neon, 0),
3514*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_sub_pixel_avg_variance8x32_neon, 0),
3515*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_sub_pixel_avg_variance16x4_neon, 0),
3516*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_sub_pixel_avg_variance4x16_neon, 0),
3517*77c1e3ccSAndroid Build Coastguard Worker #endif
3518*77c1e3ccSAndroid Build Coastguard Worker };
3519*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxSubpelAvgVarianceTest,
3520*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArraySubpelAvgVariance_neon));
3521*77c1e3ccSAndroid Build Coastguard Worker 
3522*77c1e3ccSAndroid Build Coastguard Worker const DistWtdSubpelAvgVarianceParams kArrayDistWtdSubpelAvgVariance_neon[] = {
3523*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3524*77c1e3ccSAndroid Build Coastguard Worker       6, 6, &aom_dist_wtd_sub_pixel_avg_variance64x64_neon, 0),
3525*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3526*77c1e3ccSAndroid Build Coastguard Worker       6, 5, &aom_dist_wtd_sub_pixel_avg_variance64x32_neon, 0),
3527*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3528*77c1e3ccSAndroid Build Coastguard Worker       5, 6, &aom_dist_wtd_sub_pixel_avg_variance32x64_neon, 0),
3529*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3530*77c1e3ccSAndroid Build Coastguard Worker       5, 5, &aom_dist_wtd_sub_pixel_avg_variance32x32_neon, 0),
3531*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3532*77c1e3ccSAndroid Build Coastguard Worker       5, 4, &aom_dist_wtd_sub_pixel_avg_variance32x16_neon, 0),
3533*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3534*77c1e3ccSAndroid Build Coastguard Worker       4, 5, &aom_dist_wtd_sub_pixel_avg_variance16x32_neon, 0),
3535*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3536*77c1e3ccSAndroid Build Coastguard Worker       4, 4, &aom_dist_wtd_sub_pixel_avg_variance16x16_neon, 0),
3537*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3538*77c1e3ccSAndroid Build Coastguard Worker       4, 3, &aom_dist_wtd_sub_pixel_avg_variance16x8_neon, 0),
3539*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3540*77c1e3ccSAndroid Build Coastguard Worker       3, 4, &aom_dist_wtd_sub_pixel_avg_variance8x16_neon, 0),
3541*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3542*77c1e3ccSAndroid Build Coastguard Worker       3, 3, &aom_dist_wtd_sub_pixel_avg_variance8x8_neon, 0),
3543*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3544*77c1e3ccSAndroid Build Coastguard Worker       3, 2, &aom_dist_wtd_sub_pixel_avg_variance8x4_neon, 0),
3545*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3546*77c1e3ccSAndroid Build Coastguard Worker       2, 3, &aom_dist_wtd_sub_pixel_avg_variance4x8_neon, 0),
3547*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3548*77c1e3ccSAndroid Build Coastguard Worker       2, 2, &aom_dist_wtd_sub_pixel_avg_variance4x4_neon, 0),
3549*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3550*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3551*77c1e3ccSAndroid Build Coastguard Worker       6, 4, &aom_dist_wtd_sub_pixel_avg_variance64x16_neon, 0),
3552*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3553*77c1e3ccSAndroid Build Coastguard Worker       4, 6, &aom_dist_wtd_sub_pixel_avg_variance16x64_neon, 0),
3554*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3555*77c1e3ccSAndroid Build Coastguard Worker       5, 3, &aom_dist_wtd_sub_pixel_avg_variance32x8_neon, 0),
3556*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3557*77c1e3ccSAndroid Build Coastguard Worker       3, 5, &aom_dist_wtd_sub_pixel_avg_variance8x32_neon, 0),
3558*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3559*77c1e3ccSAndroid Build Coastguard Worker       4, 2, &aom_dist_wtd_sub_pixel_avg_variance16x4_neon, 0),
3560*77c1e3ccSAndroid Build Coastguard Worker   DistWtdSubpelAvgVarianceParams(
3561*77c1e3ccSAndroid Build Coastguard Worker       2, 4, &aom_dist_wtd_sub_pixel_avg_variance4x16_neon, 0),
3562*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
3563*77c1e3ccSAndroid Build Coastguard Worker };
3564*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
3565*77c1e3ccSAndroid Build Coastguard Worker     NEON, AvxDistWtdSubpelAvgVarianceTest,
3566*77c1e3ccSAndroid Build Coastguard Worker     ::testing::ValuesIn(kArrayDistWtdSubpelAvgVariance_neon));
3567*77c1e3ccSAndroid Build Coastguard Worker 
3568*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3569*77c1e3ccSAndroid Build Coastguard Worker const ObmcSubpelVarianceParams kArrayObmcSubpelVariance_neon[] = {
3570*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 7, &aom_obmc_sub_pixel_variance128x128_neon, 0),
3571*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 6, &aom_obmc_sub_pixel_variance128x64_neon, 0),
3572*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 7, &aom_obmc_sub_pixel_variance64x128_neon, 0),
3573*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 6, &aom_obmc_sub_pixel_variance64x64_neon, 0),
3574*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 5, &aom_obmc_sub_pixel_variance64x32_neon, 0),
3575*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 6, &aom_obmc_sub_pixel_variance32x64_neon, 0),
3576*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 5, &aom_obmc_sub_pixel_variance32x32_neon, 0),
3577*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 4, &aom_obmc_sub_pixel_variance32x16_neon, 0),
3578*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 5, &aom_obmc_sub_pixel_variance16x32_neon, 0),
3579*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 4, &aom_obmc_sub_pixel_variance16x16_neon, 0),
3580*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 3, &aom_obmc_sub_pixel_variance16x8_neon, 0),
3581*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 4, &aom_obmc_sub_pixel_variance8x16_neon, 0),
3582*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 3, &aom_obmc_sub_pixel_variance8x8_neon, 0),
3583*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 2, &aom_obmc_sub_pixel_variance8x4_neon, 0),
3584*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 3, &aom_obmc_sub_pixel_variance4x8_neon, 0),
3585*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 2, &aom_obmc_sub_pixel_variance4x4_neon, 0),
3586*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 4, &aom_obmc_sub_pixel_variance64x16_neon, 0),
3587*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 6, &aom_obmc_sub_pixel_variance16x64_neon, 0),
3588*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 3, &aom_obmc_sub_pixel_variance32x8_neon, 0),
3589*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 5, &aom_obmc_sub_pixel_variance8x32_neon, 0),
3590*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 2, &aom_obmc_sub_pixel_variance16x4_neon, 0),
3591*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 4, &aom_obmc_sub_pixel_variance4x16_neon, 0),
3592*77c1e3ccSAndroid Build Coastguard Worker };
3593*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxObmcSubpelVarianceTest,
3594*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayObmcSubpelVariance_neon));
3595*77c1e3ccSAndroid Build Coastguard Worker #endif
3596*77c1e3ccSAndroid Build Coastguard Worker 
3597*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParams kArrayGetSseSum8x8Quad_neon[] = {
3598*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(7, 7, &aom_get_var_sse_sum_8x8_quad_neon, 0),
3599*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(6, 6, &aom_get_var_sse_sum_8x8_quad_neon, 0),
3600*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 5, &aom_get_var_sse_sum_8x8_quad_neon, 0),
3601*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 4, &aom_get_var_sse_sum_8x8_quad_neon, 0)
3602*77c1e3ccSAndroid Build Coastguard Worker };
3603*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, GetSseSum8x8QuadTest,
3604*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayGetSseSum8x8Quad_neon));
3605*77c1e3ccSAndroid Build Coastguard Worker 
3606*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParamsDual kArrayGetSseSum16x16Dual_neon[] = {
3607*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(7, 7, &aom_get_var_sse_sum_16x16_dual_neon, 0),
3608*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(6, 6, &aom_get_var_sse_sum_16x16_dual_neon, 0),
3609*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 5, &aom_get_var_sse_sum_16x16_dual_neon, 0),
3610*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 4, &aom_get_var_sse_sum_16x16_dual_neon, 0)
3611*77c1e3ccSAndroid Build Coastguard Worker };
3612*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, GetSseSum16x16DualTest,
3613*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayGetSseSum16x16Dual_neon));
3614*77c1e3ccSAndroid Build Coastguard Worker 
3615*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
3616*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayHBDVariance_neon[] = {
3617*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_12_variance128x128_neon, 12),
3618*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_12_variance128x64_neon, 12),
3619*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_12_variance64x128_neon, 12),
3620*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_12_variance64x64_neon, 12),
3621*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_12_variance64x32_neon, 12),
3622*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_12_variance32x64_neon, 12),
3623*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_12_variance32x32_neon, 12),
3624*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_12_variance32x16_neon, 12),
3625*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_12_variance16x32_neon, 12),
3626*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_12_variance16x16_neon, 12),
3627*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_12_variance16x8_neon, 12),
3628*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_12_variance8x16_neon, 12),
3629*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_12_variance8x8_neon, 12),
3630*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_12_variance8x4_neon, 12),
3631*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_12_variance4x8_neon, 12),
3632*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_12_variance4x4_neon, 12),
3633*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_10_variance128x128_neon, 10),
3634*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_10_variance128x64_neon, 10),
3635*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_10_variance64x128_neon, 10),
3636*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_10_variance64x64_neon, 10),
3637*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_10_variance64x32_neon, 10),
3638*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_10_variance32x64_neon, 10),
3639*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_10_variance32x32_neon, 10),
3640*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_10_variance32x16_neon, 10),
3641*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_10_variance16x32_neon, 10),
3642*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_10_variance16x16_neon, 10),
3643*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_10_variance16x8_neon, 10),
3644*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_10_variance8x16_neon, 10),
3645*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_10_variance8x8_neon, 10),
3646*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_10_variance8x4_neon, 10),
3647*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_10_variance4x8_neon, 10),
3648*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_10_variance4x4_neon, 10),
3649*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_8_variance128x128_neon, 8),
3650*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_8_variance128x64_neon, 8),
3651*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_8_variance64x128_neon, 8),
3652*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_8_variance64x64_neon, 8),
3653*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_8_variance64x32_neon, 8),
3654*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_8_variance32x64_neon, 8),
3655*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_8_variance32x32_neon, 8),
3656*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_8_variance32x16_neon, 8),
3657*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_8_variance16x32_neon, 8),
3658*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_8_variance16x16_neon, 8),
3659*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_8_variance16x8_neon, 8),
3660*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_8_variance8x16_neon, 8),
3661*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_8_variance8x8_neon, 8),
3662*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_8_variance8x4_neon, 8),
3663*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_8_variance4x8_neon, 8),
3664*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_8_variance4x4_neon, 8),
3665*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3666*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_12_variance64x16_neon, 12),
3667*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_12_variance16x64_neon, 12),
3668*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_12_variance32x8_neon, 12),
3669*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_12_variance8x32_neon, 12),
3670*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_12_variance16x4_neon, 12),
3671*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_12_variance4x16_neon, 12),
3672*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_10_variance64x16_neon, 10),
3673*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_10_variance16x64_neon, 10),
3674*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_10_variance32x8_neon, 10),
3675*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_10_variance8x32_neon, 10),
3676*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_10_variance16x4_neon, 10),
3677*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_10_variance4x16_neon, 10),
3678*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_8_variance64x16_neon, 8),
3679*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_8_variance16x64_neon, 8),
3680*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_8_variance32x8_neon, 8),
3681*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_8_variance8x32_neon, 8),
3682*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_8_variance16x4_neon, 8),
3683*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_8_variance4x16_neon, 8),
3684*77c1e3ccSAndroid Build Coastguard Worker #endif
3685*77c1e3ccSAndroid Build Coastguard Worker };
3686*77c1e3ccSAndroid Build Coastguard Worker 
3687*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxHBDVarianceTest,
3688*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDVariance_neon));
3689*77c1e3ccSAndroid Build Coastguard Worker 
3690*77c1e3ccSAndroid Build Coastguard Worker const SubpelVarianceParams kArrayHBDSubpelVariance_neon[] = {
3691*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_12_sub_pixel_variance64x64_neon, 12),
3692*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_12_sub_pixel_variance64x32_neon, 12),
3693*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_12_sub_pixel_variance32x64_neon, 12),
3694*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_12_sub_pixel_variance32x32_neon, 12),
3695*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_12_sub_pixel_variance32x16_neon, 12),
3696*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_12_sub_pixel_variance16x32_neon, 12),
3697*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_12_sub_pixel_variance16x16_neon, 12),
3698*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_12_sub_pixel_variance16x8_neon, 12),
3699*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_12_sub_pixel_variance8x16_neon, 12),
3700*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_12_sub_pixel_variance8x8_neon, 12),
3701*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_12_sub_pixel_variance8x4_neon, 12),
3702*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_highbd_12_sub_pixel_variance4x8_neon, 12),
3703*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_highbd_12_sub_pixel_variance4x4_neon, 12),
3704*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_10_sub_pixel_variance64x64_neon, 10),
3705*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_10_sub_pixel_variance64x32_neon, 10),
3706*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_10_sub_pixel_variance32x64_neon, 10),
3707*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_10_sub_pixel_variance32x32_neon, 10),
3708*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_10_sub_pixel_variance32x16_neon, 10),
3709*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_10_sub_pixel_variance16x32_neon, 10),
3710*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_10_sub_pixel_variance16x16_neon, 10),
3711*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_10_sub_pixel_variance16x8_neon, 10),
3712*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_10_sub_pixel_variance8x16_neon, 10),
3713*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_10_sub_pixel_variance8x8_neon, 10),
3714*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_10_sub_pixel_variance8x4_neon, 10),
3715*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_highbd_10_sub_pixel_variance4x8_neon, 10),
3716*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_highbd_10_sub_pixel_variance4x4_neon, 10),
3717*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 6, &aom_highbd_8_sub_pixel_variance64x64_neon, 8),
3718*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 5, &aom_highbd_8_sub_pixel_variance64x32_neon, 8),
3719*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 6, &aom_highbd_8_sub_pixel_variance32x64_neon, 8),
3720*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 5, &aom_highbd_8_sub_pixel_variance32x32_neon, 8),
3721*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 4, &aom_highbd_8_sub_pixel_variance32x16_neon, 8),
3722*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 5, &aom_highbd_8_sub_pixel_variance16x32_neon, 8),
3723*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 4, &aom_highbd_8_sub_pixel_variance16x16_neon, 8),
3724*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 3, &aom_highbd_8_sub_pixel_variance16x8_neon, 8),
3725*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 4, &aom_highbd_8_sub_pixel_variance8x16_neon, 8),
3726*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 3, &aom_highbd_8_sub_pixel_variance8x8_neon, 8),
3727*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 2, &aom_highbd_8_sub_pixel_variance8x4_neon, 8),
3728*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 3, &aom_highbd_8_sub_pixel_variance4x8_neon, 8),
3729*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 2, &aom_highbd_8_sub_pixel_variance4x4_neon, 8),
3730*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3731*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_8_sub_pixel_variance64x16_neon, 8),
3732*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_8_sub_pixel_variance16x64_neon, 8),
3733*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_8_sub_pixel_variance32x8_neon, 8),
3734*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_8_sub_pixel_variance8x32_neon, 8),
3735*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_8_sub_pixel_variance16x4_neon, 8),
3736*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_highbd_8_sub_pixel_variance4x16_neon, 8),
3737*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_10_sub_pixel_variance64x16_neon, 10),
3738*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_10_sub_pixel_variance16x64_neon, 10),
3739*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_10_sub_pixel_variance32x8_neon, 10),
3740*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_10_sub_pixel_variance8x32_neon, 10),
3741*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_10_sub_pixel_variance16x4_neon, 10),
3742*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_highbd_10_sub_pixel_variance4x16_neon, 10),
3743*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(6, 4, &aom_highbd_12_sub_pixel_variance64x16_neon, 12),
3744*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 6, &aom_highbd_12_sub_pixel_variance16x64_neon, 12),
3745*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(5, 3, &aom_highbd_12_sub_pixel_variance32x8_neon, 12),
3746*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(3, 5, &aom_highbd_12_sub_pixel_variance8x32_neon, 12),
3747*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(4, 2, &aom_highbd_12_sub_pixel_variance16x4_neon, 12),
3748*77c1e3ccSAndroid Build Coastguard Worker   SubpelVarianceParams(2, 4, &aom_highbd_12_sub_pixel_variance4x16_neon, 12),
3749*77c1e3ccSAndroid Build Coastguard Worker #endif  //! CONFIG_REALTIME_ONLY
3750*77c1e3ccSAndroid Build Coastguard Worker };
3751*77c1e3ccSAndroid Build Coastguard Worker 
3752*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxHBDSubpelVarianceTest,
3753*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDSubpelVariance_neon));
3754*77c1e3ccSAndroid Build Coastguard Worker 
3755*77c1e3ccSAndroid Build Coastguard Worker const SubpelAvgVarianceParams kArrayHBDSubpelAvgVariance_neon[] = {
3756*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 7,
3757*77c1e3ccSAndroid Build Coastguard Worker                           &aom_highbd_8_sub_pixel_avg_variance128x128_neon, 8),
3758*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6, &aom_highbd_8_sub_pixel_avg_variance128x64_neon,
3759*77c1e3ccSAndroid Build Coastguard Worker                           8),
3760*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7, &aom_highbd_8_sub_pixel_avg_variance64x128_neon,
3761*77c1e3ccSAndroid Build Coastguard Worker                           8),
3762*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_8_sub_pixel_avg_variance64x64_neon,
3763*77c1e3ccSAndroid Build Coastguard Worker                           8),
3764*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_8_sub_pixel_avg_variance64x32_neon,
3765*77c1e3ccSAndroid Build Coastguard Worker                           8),
3766*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_8_sub_pixel_avg_variance32x64_neon,
3767*77c1e3ccSAndroid Build Coastguard Worker                           8),
3768*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_8_sub_pixel_avg_variance32x32_neon,
3769*77c1e3ccSAndroid Build Coastguard Worker                           8),
3770*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_8_sub_pixel_avg_variance32x16_neon,
3771*77c1e3ccSAndroid Build Coastguard Worker                           8),
3772*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_8_sub_pixel_avg_variance16x32_neon,
3773*77c1e3ccSAndroid Build Coastguard Worker                           8),
3774*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_8_sub_pixel_avg_variance16x16_neon,
3775*77c1e3ccSAndroid Build Coastguard Worker                           8),
3776*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_8_sub_pixel_avg_variance16x8_neon,
3777*77c1e3ccSAndroid Build Coastguard Worker                           8),
3778*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_8_sub_pixel_avg_variance8x16_neon,
3779*77c1e3ccSAndroid Build Coastguard Worker                           8),
3780*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_8_sub_pixel_avg_variance8x8_neon,
3781*77c1e3ccSAndroid Build Coastguard Worker                           8),
3782*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_8_sub_pixel_avg_variance8x4_neon,
3783*77c1e3ccSAndroid Build Coastguard Worker                           8),
3784*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_highbd_8_sub_pixel_avg_variance4x8_neon,
3785*77c1e3ccSAndroid Build Coastguard Worker                           8),
3786*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_highbd_8_sub_pixel_avg_variance4x4_neon,
3787*77c1e3ccSAndroid Build Coastguard Worker                           8),
3788*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(
3789*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_highbd_10_sub_pixel_avg_variance128x128_neon, 10),
3790*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6,
3791*77c1e3ccSAndroid Build Coastguard Worker                           &aom_highbd_10_sub_pixel_avg_variance128x64_neon, 10),
3792*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7,
3793*77c1e3ccSAndroid Build Coastguard Worker                           &aom_highbd_10_sub_pixel_avg_variance64x128_neon, 10),
3794*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_10_sub_pixel_avg_variance64x64_neon,
3795*77c1e3ccSAndroid Build Coastguard Worker                           10),
3796*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_10_sub_pixel_avg_variance64x32_neon,
3797*77c1e3ccSAndroid Build Coastguard Worker                           10),
3798*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_10_sub_pixel_avg_variance32x64_neon,
3799*77c1e3ccSAndroid Build Coastguard Worker                           10),
3800*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_10_sub_pixel_avg_variance32x32_neon,
3801*77c1e3ccSAndroid Build Coastguard Worker                           10),
3802*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_10_sub_pixel_avg_variance32x16_neon,
3803*77c1e3ccSAndroid Build Coastguard Worker                           10),
3804*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_10_sub_pixel_avg_variance16x32_neon,
3805*77c1e3ccSAndroid Build Coastguard Worker                           10),
3806*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_10_sub_pixel_avg_variance16x16_neon,
3807*77c1e3ccSAndroid Build Coastguard Worker                           10),
3808*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_10_sub_pixel_avg_variance16x8_neon,
3809*77c1e3ccSAndroid Build Coastguard Worker                           10),
3810*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_10_sub_pixel_avg_variance8x16_neon,
3811*77c1e3ccSAndroid Build Coastguard Worker                           10),
3812*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_10_sub_pixel_avg_variance8x8_neon,
3813*77c1e3ccSAndroid Build Coastguard Worker                           10),
3814*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_10_sub_pixel_avg_variance8x4_neon,
3815*77c1e3ccSAndroid Build Coastguard Worker                           10),
3816*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_highbd_10_sub_pixel_avg_variance4x8_neon,
3817*77c1e3ccSAndroid Build Coastguard Worker                           10),
3818*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_highbd_10_sub_pixel_avg_variance4x4_neon,
3819*77c1e3ccSAndroid Build Coastguard Worker                           10),
3820*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(
3821*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_highbd_12_sub_pixel_avg_variance128x128_neon, 12),
3822*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(7, 6,
3823*77c1e3ccSAndroid Build Coastguard Worker                           &aom_highbd_12_sub_pixel_avg_variance128x64_neon, 12),
3824*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 7,
3825*77c1e3ccSAndroid Build Coastguard Worker                           &aom_highbd_12_sub_pixel_avg_variance64x128_neon, 12),
3826*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 6, &aom_highbd_12_sub_pixel_avg_variance64x64_neon,
3827*77c1e3ccSAndroid Build Coastguard Worker                           12),
3828*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 5, &aom_highbd_12_sub_pixel_avg_variance64x32_neon,
3829*77c1e3ccSAndroid Build Coastguard Worker                           12),
3830*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 6, &aom_highbd_12_sub_pixel_avg_variance32x64_neon,
3831*77c1e3ccSAndroid Build Coastguard Worker                           12),
3832*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 5, &aom_highbd_12_sub_pixel_avg_variance32x32_neon,
3833*77c1e3ccSAndroid Build Coastguard Worker                           12),
3834*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 4, &aom_highbd_12_sub_pixel_avg_variance32x16_neon,
3835*77c1e3ccSAndroid Build Coastguard Worker                           12),
3836*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 5, &aom_highbd_12_sub_pixel_avg_variance16x32_neon,
3837*77c1e3ccSAndroid Build Coastguard Worker                           12),
3838*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 4, &aom_highbd_12_sub_pixel_avg_variance16x16_neon,
3839*77c1e3ccSAndroid Build Coastguard Worker                           12),
3840*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 3, &aom_highbd_12_sub_pixel_avg_variance16x8_neon,
3841*77c1e3ccSAndroid Build Coastguard Worker                           12),
3842*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 4, &aom_highbd_12_sub_pixel_avg_variance8x16_neon,
3843*77c1e3ccSAndroid Build Coastguard Worker                           12),
3844*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 3, &aom_highbd_12_sub_pixel_avg_variance8x8_neon,
3845*77c1e3ccSAndroid Build Coastguard Worker                           12),
3846*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 2, &aom_highbd_12_sub_pixel_avg_variance8x4_neon,
3847*77c1e3ccSAndroid Build Coastguard Worker                           12),
3848*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 3, &aom_highbd_12_sub_pixel_avg_variance4x8_neon,
3849*77c1e3ccSAndroid Build Coastguard Worker                           12),
3850*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 2, &aom_highbd_12_sub_pixel_avg_variance4x4_neon,
3851*77c1e3ccSAndroid Build Coastguard Worker                           12),
3852*77c1e3ccSAndroid Build Coastguard Worker 
3853*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3854*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_8_sub_pixel_avg_variance64x16_neon,
3855*77c1e3ccSAndroid Build Coastguard Worker                           8),
3856*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_8_sub_pixel_avg_variance16x64_neon,
3857*77c1e3ccSAndroid Build Coastguard Worker                           8),
3858*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_8_sub_pixel_avg_variance32x8_neon,
3859*77c1e3ccSAndroid Build Coastguard Worker                           8),
3860*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_8_sub_pixel_avg_variance8x32_neon,
3861*77c1e3ccSAndroid Build Coastguard Worker                           8),
3862*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_8_sub_pixel_avg_variance16x4_neon,
3863*77c1e3ccSAndroid Build Coastguard Worker                           8),
3864*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_highbd_8_sub_pixel_avg_variance4x16_neon,
3865*77c1e3ccSAndroid Build Coastguard Worker                           8),
3866*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_10_sub_pixel_avg_variance64x16_neon,
3867*77c1e3ccSAndroid Build Coastguard Worker                           10),
3868*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_10_sub_pixel_avg_variance16x64_neon,
3869*77c1e3ccSAndroid Build Coastguard Worker                           10),
3870*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_10_sub_pixel_avg_variance32x8_neon,
3871*77c1e3ccSAndroid Build Coastguard Worker                           10),
3872*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_10_sub_pixel_avg_variance8x32_neon,
3873*77c1e3ccSAndroid Build Coastguard Worker                           10),
3874*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_10_sub_pixel_avg_variance16x4_neon,
3875*77c1e3ccSAndroid Build Coastguard Worker                           10),
3876*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_highbd_10_sub_pixel_avg_variance4x16_neon,
3877*77c1e3ccSAndroid Build Coastguard Worker                           10),
3878*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(6, 4, &aom_highbd_12_sub_pixel_avg_variance64x16_neon,
3879*77c1e3ccSAndroid Build Coastguard Worker                           12),
3880*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 6, &aom_highbd_12_sub_pixel_avg_variance16x64_neon,
3881*77c1e3ccSAndroid Build Coastguard Worker                           12),
3882*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(5, 3, &aom_highbd_12_sub_pixel_avg_variance32x8_neon,
3883*77c1e3ccSAndroid Build Coastguard Worker                           12),
3884*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(3, 5, &aom_highbd_12_sub_pixel_avg_variance8x32_neon,
3885*77c1e3ccSAndroid Build Coastguard Worker                           12),
3886*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(4, 2, &aom_highbd_12_sub_pixel_avg_variance16x4_neon,
3887*77c1e3ccSAndroid Build Coastguard Worker                           12),
3888*77c1e3ccSAndroid Build Coastguard Worker   SubpelAvgVarianceParams(2, 4, &aom_highbd_12_sub_pixel_avg_variance4x16_neon,
3889*77c1e3ccSAndroid Build Coastguard Worker                           12),
3890*77c1e3ccSAndroid Build Coastguard Worker #endif
3891*77c1e3ccSAndroid Build Coastguard Worker };
3892*77c1e3ccSAndroid Build Coastguard Worker 
3893*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxHBDSubpelAvgVarianceTest,
3894*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDSubpelAvgVariance_neon));
3895*77c1e3ccSAndroid Build Coastguard Worker 
3896*77c1e3ccSAndroid Build Coastguard Worker const DistWtdSubpelAvgVarianceParams
3897*77c1e3ccSAndroid Build Coastguard Worker     kArrayHBDDistWtdSubpelAvgVariance_neon[] = {
3898*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3899*77c1e3ccSAndroid Build Coastguard Worker           7, 7, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance128x128_neon, 8),
3900*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3901*77c1e3ccSAndroid Build Coastguard Worker           7, 6, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance128x64_neon, 8),
3902*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3903*77c1e3ccSAndroid Build Coastguard Worker           6, 7, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance64x128_neon, 8),
3904*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3905*77c1e3ccSAndroid Build Coastguard Worker           6, 6, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance64x64_neon, 8),
3906*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3907*77c1e3ccSAndroid Build Coastguard Worker           6, 5, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance64x32_neon, 8),
3908*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3909*77c1e3ccSAndroid Build Coastguard Worker           5, 6, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance32x64_neon, 8),
3910*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3911*77c1e3ccSAndroid Build Coastguard Worker           5, 5, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance32x32_neon, 8),
3912*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3913*77c1e3ccSAndroid Build Coastguard Worker           5, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance32x16_neon, 8),
3914*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3915*77c1e3ccSAndroid Build Coastguard Worker           4, 5, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x32_neon, 8),
3916*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3917*77c1e3ccSAndroid Build Coastguard Worker           4, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x16_neon, 8),
3918*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3919*77c1e3ccSAndroid Build Coastguard Worker           4, 3, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x8_neon, 8),
3920*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3921*77c1e3ccSAndroid Build Coastguard Worker           3, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance8x16_neon, 8),
3922*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3923*77c1e3ccSAndroid Build Coastguard Worker           3, 3, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance8x8_neon, 8),
3924*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3925*77c1e3ccSAndroid Build Coastguard Worker           3, 2, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance8x4_neon, 8),
3926*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3927*77c1e3ccSAndroid Build Coastguard Worker           2, 3, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance4x8_neon, 8),
3928*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3929*77c1e3ccSAndroid Build Coastguard Worker           2, 2, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance4x4_neon, 8),
3930*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3931*77c1e3ccSAndroid Build Coastguard Worker           7, 7, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance128x128_neon, 10),
3932*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3933*77c1e3ccSAndroid Build Coastguard Worker           7, 6, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance128x64_neon, 10),
3934*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3935*77c1e3ccSAndroid Build Coastguard Worker           6, 7, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance64x128_neon, 10),
3936*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3937*77c1e3ccSAndroid Build Coastguard Worker           6, 6, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance64x64_neon, 10),
3938*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3939*77c1e3ccSAndroid Build Coastguard Worker           6, 5, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance64x32_neon, 10),
3940*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3941*77c1e3ccSAndroid Build Coastguard Worker           5, 6, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance32x64_neon, 10),
3942*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3943*77c1e3ccSAndroid Build Coastguard Worker           5, 5, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance32x32_neon, 10),
3944*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3945*77c1e3ccSAndroid Build Coastguard Worker           5, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance32x16_neon, 10),
3946*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3947*77c1e3ccSAndroid Build Coastguard Worker           4, 5, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x32_neon, 10),
3948*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3949*77c1e3ccSAndroid Build Coastguard Worker           4, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x16_neon, 10),
3950*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3951*77c1e3ccSAndroid Build Coastguard Worker           4, 3, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x8_neon, 10),
3952*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3953*77c1e3ccSAndroid Build Coastguard Worker           3, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance8x16_neon, 10),
3954*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3955*77c1e3ccSAndroid Build Coastguard Worker           3, 3, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance8x8_neon, 10),
3956*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3957*77c1e3ccSAndroid Build Coastguard Worker           3, 2, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance8x4_neon, 10),
3958*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3959*77c1e3ccSAndroid Build Coastguard Worker           2, 3, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance4x8_neon, 10),
3960*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3961*77c1e3ccSAndroid Build Coastguard Worker           2, 2, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance4x4_neon, 10),
3962*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3963*77c1e3ccSAndroid Build Coastguard Worker           7, 7, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance128x128_neon, 12),
3964*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3965*77c1e3ccSAndroid Build Coastguard Worker           7, 6, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance128x64_neon, 12),
3966*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3967*77c1e3ccSAndroid Build Coastguard Worker           6, 7, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance64x128_neon, 12),
3968*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3969*77c1e3ccSAndroid Build Coastguard Worker           6, 6, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance64x64_neon, 12),
3970*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3971*77c1e3ccSAndroid Build Coastguard Worker           6, 5, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance64x32_neon, 12),
3972*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3973*77c1e3ccSAndroid Build Coastguard Worker           5, 6, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance32x64_neon, 12),
3974*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3975*77c1e3ccSAndroid Build Coastguard Worker           5, 5, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance32x32_neon, 12),
3976*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3977*77c1e3ccSAndroid Build Coastguard Worker           5, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance32x16_neon, 12),
3978*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3979*77c1e3ccSAndroid Build Coastguard Worker           4, 5, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x32_neon, 12),
3980*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3981*77c1e3ccSAndroid Build Coastguard Worker           4, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x16_neon, 12),
3982*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3983*77c1e3ccSAndroid Build Coastguard Worker           4, 3, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x8_neon, 12),
3984*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3985*77c1e3ccSAndroid Build Coastguard Worker           3, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance8x16_neon, 12),
3986*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3987*77c1e3ccSAndroid Build Coastguard Worker           3, 3, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance8x8_neon, 12),
3988*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3989*77c1e3ccSAndroid Build Coastguard Worker           3, 2, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance8x4_neon, 12),
3990*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3991*77c1e3ccSAndroid Build Coastguard Worker           2, 3, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance4x8_neon, 12),
3992*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3993*77c1e3ccSAndroid Build Coastguard Worker           2, 2, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance4x4_neon, 12),
3994*77c1e3ccSAndroid Build Coastguard Worker 
3995*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
3996*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3997*77c1e3ccSAndroid Build Coastguard Worker           6, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance64x16_neon, 8),
3998*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
3999*77c1e3ccSAndroid Build Coastguard Worker           4, 6, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x64_neon, 8),
4000*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4001*77c1e3ccSAndroid Build Coastguard Worker           5, 3, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance32x8_neon, 8),
4002*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4003*77c1e3ccSAndroid Build Coastguard Worker           3, 5, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance8x32_neon, 8),
4004*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4005*77c1e3ccSAndroid Build Coastguard Worker           4, 2, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance16x4_neon, 8),
4006*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4007*77c1e3ccSAndroid Build Coastguard Worker           2, 4, &aom_highbd_8_dist_wtd_sub_pixel_avg_variance4x16_neon, 8),
4008*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4009*77c1e3ccSAndroid Build Coastguard Worker           6, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance64x16_neon, 10),
4010*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4011*77c1e3ccSAndroid Build Coastguard Worker           4, 6, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x64_neon, 10),
4012*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4013*77c1e3ccSAndroid Build Coastguard Worker           5, 3, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance32x8_neon, 10),
4014*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4015*77c1e3ccSAndroid Build Coastguard Worker           3, 5, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance8x32_neon, 10),
4016*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4017*77c1e3ccSAndroid Build Coastguard Worker           4, 2, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance16x4_neon, 10),
4018*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4019*77c1e3ccSAndroid Build Coastguard Worker           2, 4, &aom_highbd_10_dist_wtd_sub_pixel_avg_variance4x16_neon, 10),
4020*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4021*77c1e3ccSAndroid Build Coastguard Worker           6, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance64x16_neon, 12),
4022*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4023*77c1e3ccSAndroid Build Coastguard Worker           4, 6, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x64_neon, 12),
4024*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4025*77c1e3ccSAndroid Build Coastguard Worker           5, 3, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance32x8_neon, 12),
4026*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4027*77c1e3ccSAndroid Build Coastguard Worker           3, 5, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance8x32_neon, 12),
4028*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4029*77c1e3ccSAndroid Build Coastguard Worker           4, 2, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance16x4_neon, 12),
4030*77c1e3ccSAndroid Build Coastguard Worker       DistWtdSubpelAvgVarianceParams(
4031*77c1e3ccSAndroid Build Coastguard Worker           2, 4, &aom_highbd_12_dist_wtd_sub_pixel_avg_variance4x16_neon, 12),
4032*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
4033*77c1e3ccSAndroid Build Coastguard Worker     };
4034*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
4035*77c1e3ccSAndroid Build Coastguard Worker     NEON, AvxHBDDistWtdSubpelAvgVarianceTest,
4036*77c1e3ccSAndroid Build Coastguard Worker     ::testing::ValuesIn(kArrayHBDDistWtdSubpelAvgVariance_neon));
4037*77c1e3ccSAndroid Build Coastguard Worker 
4038*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
4039*77c1e3ccSAndroid Build Coastguard Worker const ObmcSubpelVarianceParams kArrayHBDObmcSubpelVariance_neon[] = {
4040*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4041*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_highbd_12_obmc_sub_pixel_variance128x128_neon, 12),
4042*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4043*77c1e3ccSAndroid Build Coastguard Worker       7, 6, &aom_highbd_12_obmc_sub_pixel_variance128x64_neon, 12),
4044*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4045*77c1e3ccSAndroid Build Coastguard Worker       6, 7, &aom_highbd_12_obmc_sub_pixel_variance64x128_neon, 12),
4046*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4047*77c1e3ccSAndroid Build Coastguard Worker       6, 6, &aom_highbd_12_obmc_sub_pixel_variance64x64_neon, 12),
4048*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4049*77c1e3ccSAndroid Build Coastguard Worker       6, 5, &aom_highbd_12_obmc_sub_pixel_variance64x32_neon, 12),
4050*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4051*77c1e3ccSAndroid Build Coastguard Worker       5, 6, &aom_highbd_12_obmc_sub_pixel_variance32x64_neon, 12),
4052*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4053*77c1e3ccSAndroid Build Coastguard Worker       5, 5, &aom_highbd_12_obmc_sub_pixel_variance32x32_neon, 12),
4054*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4055*77c1e3ccSAndroid Build Coastguard Worker       5, 4, &aom_highbd_12_obmc_sub_pixel_variance32x16_neon, 12),
4056*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4057*77c1e3ccSAndroid Build Coastguard Worker       4, 5, &aom_highbd_12_obmc_sub_pixel_variance16x32_neon, 12),
4058*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4059*77c1e3ccSAndroid Build Coastguard Worker       4, 4, &aom_highbd_12_obmc_sub_pixel_variance16x16_neon, 12),
4060*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 3,
4061*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_12_obmc_sub_pixel_variance16x8_neon, 12),
4062*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 4,
4063*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_12_obmc_sub_pixel_variance8x16_neon, 12),
4064*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 3, &aom_highbd_12_obmc_sub_pixel_variance8x8_neon,
4065*77c1e3ccSAndroid Build Coastguard Worker                            12),
4066*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 2, &aom_highbd_12_obmc_sub_pixel_variance8x4_neon,
4067*77c1e3ccSAndroid Build Coastguard Worker                            12),
4068*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 3, &aom_highbd_12_obmc_sub_pixel_variance4x8_neon,
4069*77c1e3ccSAndroid Build Coastguard Worker                            12),
4070*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 2, &aom_highbd_12_obmc_sub_pixel_variance4x4_neon,
4071*77c1e3ccSAndroid Build Coastguard Worker                            12),
4072*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4073*77c1e3ccSAndroid Build Coastguard Worker       6, 4, &aom_highbd_12_obmc_sub_pixel_variance64x16_neon, 12),
4074*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4075*77c1e3ccSAndroid Build Coastguard Worker       4, 6, &aom_highbd_12_obmc_sub_pixel_variance16x64_neon, 12),
4076*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 3,
4077*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_12_obmc_sub_pixel_variance32x8_neon, 12),
4078*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 5,
4079*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_12_obmc_sub_pixel_variance8x32_neon, 12),
4080*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 2,
4081*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_12_obmc_sub_pixel_variance16x4_neon, 12),
4082*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 4,
4083*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_12_obmc_sub_pixel_variance4x16_neon, 12),
4084*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4085*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_highbd_10_obmc_sub_pixel_variance128x128_neon, 10),
4086*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4087*77c1e3ccSAndroid Build Coastguard Worker       7, 6, &aom_highbd_10_obmc_sub_pixel_variance128x64_neon, 10),
4088*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4089*77c1e3ccSAndroid Build Coastguard Worker       6, 7, &aom_highbd_10_obmc_sub_pixel_variance64x128_neon, 10),
4090*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4091*77c1e3ccSAndroid Build Coastguard Worker       6, 6, &aom_highbd_10_obmc_sub_pixel_variance64x64_neon, 10),
4092*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4093*77c1e3ccSAndroid Build Coastguard Worker       6, 5, &aom_highbd_10_obmc_sub_pixel_variance64x32_neon, 10),
4094*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4095*77c1e3ccSAndroid Build Coastguard Worker       5, 6, &aom_highbd_10_obmc_sub_pixel_variance32x64_neon, 10),
4096*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4097*77c1e3ccSAndroid Build Coastguard Worker       5, 5, &aom_highbd_10_obmc_sub_pixel_variance32x32_neon, 10),
4098*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4099*77c1e3ccSAndroid Build Coastguard Worker       5, 4, &aom_highbd_10_obmc_sub_pixel_variance32x16_neon, 10),
4100*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4101*77c1e3ccSAndroid Build Coastguard Worker       4, 5, &aom_highbd_10_obmc_sub_pixel_variance16x32_neon, 10),
4102*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4103*77c1e3ccSAndroid Build Coastguard Worker       4, 4, &aom_highbd_10_obmc_sub_pixel_variance16x16_neon, 10),
4104*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 3,
4105*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_10_obmc_sub_pixel_variance16x8_neon, 10),
4106*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 4,
4107*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_10_obmc_sub_pixel_variance8x16_neon, 10),
4108*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 3, &aom_highbd_10_obmc_sub_pixel_variance8x8_neon,
4109*77c1e3ccSAndroid Build Coastguard Worker                            10),
4110*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 2, &aom_highbd_10_obmc_sub_pixel_variance8x4_neon,
4111*77c1e3ccSAndroid Build Coastguard Worker                            10),
4112*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 3, &aom_highbd_10_obmc_sub_pixel_variance4x8_neon,
4113*77c1e3ccSAndroid Build Coastguard Worker                            10),
4114*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 2, &aom_highbd_10_obmc_sub_pixel_variance4x4_neon,
4115*77c1e3ccSAndroid Build Coastguard Worker                            10),
4116*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4117*77c1e3ccSAndroid Build Coastguard Worker       6, 4, &aom_highbd_10_obmc_sub_pixel_variance64x16_neon, 10),
4118*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4119*77c1e3ccSAndroid Build Coastguard Worker       4, 6, &aom_highbd_10_obmc_sub_pixel_variance16x64_neon, 10),
4120*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 3,
4121*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_10_obmc_sub_pixel_variance32x8_neon, 10),
4122*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 5,
4123*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_10_obmc_sub_pixel_variance8x32_neon, 10),
4124*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 2,
4125*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_10_obmc_sub_pixel_variance16x4_neon, 10),
4126*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 4,
4127*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_10_obmc_sub_pixel_variance4x16_neon, 10),
4128*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(
4129*77c1e3ccSAndroid Build Coastguard Worker       7, 7, &aom_highbd_8_obmc_sub_pixel_variance128x128_neon, 8),
4130*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(7, 6,
4131*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance128x64_neon, 8),
4132*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 7,
4133*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance64x128_neon, 8),
4134*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 6,
4135*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance64x64_neon, 8),
4136*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 5,
4137*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance64x32_neon, 8),
4138*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 6,
4139*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance32x64_neon, 8),
4140*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 5,
4141*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance32x32_neon, 8),
4142*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 4,
4143*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance32x16_neon, 8),
4144*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 5,
4145*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance16x32_neon, 8),
4146*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 4,
4147*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance16x16_neon, 8),
4148*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 3, &aom_highbd_8_obmc_sub_pixel_variance16x8_neon,
4149*77c1e3ccSAndroid Build Coastguard Worker                            8),
4150*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 4, &aom_highbd_8_obmc_sub_pixel_variance8x16_neon,
4151*77c1e3ccSAndroid Build Coastguard Worker                            8),
4152*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 3, &aom_highbd_8_obmc_sub_pixel_variance8x8_neon,
4153*77c1e3ccSAndroid Build Coastguard Worker                            8),
4154*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 2, &aom_highbd_8_obmc_sub_pixel_variance8x4_neon,
4155*77c1e3ccSAndroid Build Coastguard Worker                            8),
4156*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 3, &aom_highbd_8_obmc_sub_pixel_variance4x8_neon,
4157*77c1e3ccSAndroid Build Coastguard Worker                            8),
4158*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 2, &aom_highbd_8_obmc_sub_pixel_variance4x4_neon,
4159*77c1e3ccSAndroid Build Coastguard Worker                            8),
4160*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(6, 4,
4161*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance64x16_neon, 8),
4162*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 6,
4163*77c1e3ccSAndroid Build Coastguard Worker                            &aom_highbd_8_obmc_sub_pixel_variance16x64_neon, 8),
4164*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(5, 3, &aom_highbd_8_obmc_sub_pixel_variance32x8_neon,
4165*77c1e3ccSAndroid Build Coastguard Worker                            8),
4166*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(3, 5, &aom_highbd_8_obmc_sub_pixel_variance8x32_neon,
4167*77c1e3ccSAndroid Build Coastguard Worker                            8),
4168*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(4, 2, &aom_highbd_8_obmc_sub_pixel_variance16x4_neon,
4169*77c1e3ccSAndroid Build Coastguard Worker                            8),
4170*77c1e3ccSAndroid Build Coastguard Worker   ObmcSubpelVarianceParams(2, 4, &aom_highbd_8_obmc_sub_pixel_variance4x16_neon,
4171*77c1e3ccSAndroid Build Coastguard Worker                            8),
4172*77c1e3ccSAndroid Build Coastguard Worker };
4173*77c1e3ccSAndroid Build Coastguard Worker 
4174*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, AvxHBDObmcSubpelVarianceTest,
4175*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDObmcSubpelVariance_neon));
4176*77c1e3ccSAndroid Build Coastguard Worker #endif  // !CONFIG_REALTIME_ONLY
4177*77c1e3ccSAndroid Build Coastguard Worker 
4178*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
4179*77c1e3ccSAndroid Build Coastguard Worker 
4180*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_NEON
4181*77c1e3ccSAndroid Build Coastguard Worker 
4182*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON_DOTPROD
4183*77c1e3ccSAndroid Build Coastguard Worker 
4184*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayVariance_neon_dotprod[] = {
4185*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_variance128x128_neon_dotprod),
4186*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_variance64x64_neon_dotprod),
4187*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_variance128x64_neon_dotprod),
4188*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_variance64x128_neon_dotprod),
4189*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_variance64x64_neon_dotprod),
4190*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_variance64x32_neon_dotprod),
4191*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_variance32x64_neon_dotprod),
4192*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_variance32x32_neon_dotprod),
4193*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_variance32x16_neon_dotprod),
4194*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_variance16x32_neon_dotprod),
4195*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_variance16x16_neon_dotprod),
4196*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_variance16x8_neon_dotprod),
4197*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_variance8x16_neon_dotprod),
4198*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_variance8x8_neon_dotprod),
4199*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_variance8x4_neon_dotprod),
4200*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_variance4x8_neon_dotprod),
4201*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_variance4x4_neon_dotprod),
4202*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
4203*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_variance4x16_neon_dotprod),
4204*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_variance16x4_neon_dotprod),
4205*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_variance8x32_neon_dotprod),
4206*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_variance32x8_neon_dotprod),
4207*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_variance16x64_neon_dotprod),
4208*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_variance64x16_neon_dotprod),
4209*77c1e3ccSAndroid Build Coastguard Worker #endif
4210*77c1e3ccSAndroid Build Coastguard Worker };
4211*77c1e3ccSAndroid Build Coastguard Worker 
4212*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON_DOTPROD, AvxVarianceTest,
4213*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayVariance_neon_dotprod));
4214*77c1e3ccSAndroid Build Coastguard Worker 
4215*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParams kArrayGetSseSum8x8Quad_neon_dotprod[] = {
4216*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(7, 7, &aom_get_var_sse_sum_8x8_quad_neon_dotprod, 0),
4217*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(6, 6, &aom_get_var_sse_sum_8x8_quad_neon_dotprod, 0),
4218*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 5, &aom_get_var_sse_sum_8x8_quad_neon_dotprod, 0),
4219*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParams(5, 4, &aom_get_var_sse_sum_8x8_quad_neon_dotprod, 0)
4220*77c1e3ccSAndroid Build Coastguard Worker };
4221*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
4222*77c1e3ccSAndroid Build Coastguard Worker     NEON_DOTPROD, GetSseSum8x8QuadTest,
4223*77c1e3ccSAndroid Build Coastguard Worker     ::testing::ValuesIn(kArrayGetSseSum8x8Quad_neon_dotprod));
4224*77c1e3ccSAndroid Build Coastguard Worker 
4225*77c1e3ccSAndroid Build Coastguard Worker const GetSseSumParamsDual kArrayGetSseSum16x16Dual_neon_dotprod[] = {
4226*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(7, 7, &aom_get_var_sse_sum_16x16_dual_neon_dotprod, 0),
4227*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(6, 6, &aom_get_var_sse_sum_16x16_dual_neon_dotprod, 0),
4228*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 5, &aom_get_var_sse_sum_16x16_dual_neon_dotprod, 0),
4229*77c1e3ccSAndroid Build Coastguard Worker   GetSseSumParamsDual(5, 4, &aom_get_var_sse_sum_16x16_dual_neon_dotprod, 0)
4230*77c1e3ccSAndroid Build Coastguard Worker };
4231*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
4232*77c1e3ccSAndroid Build Coastguard Worker     NEON_DOTPROD, GetSseSum16x16DualTest,
4233*77c1e3ccSAndroid Build Coastguard Worker     ::testing::ValuesIn(kArrayGetSseSum16x16Dual_neon_dotprod));
4234*77c1e3ccSAndroid Build Coastguard Worker 
4235*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(
4236*77c1e3ccSAndroid Build Coastguard Worker     NEON_DOTPROD, AvxMseTest,
4237*77c1e3ccSAndroid Build Coastguard Worker     ::testing::Values(MseParams(3, 3, &aom_mse8x8_neon_dotprod),
4238*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(3, 4, &aom_mse8x16_neon_dotprod),
4239*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 4, &aom_mse16x16_neon_dotprod),
4240*77c1e3ccSAndroid Build Coastguard Worker                       MseParams(4, 3, &aom_mse16x8_neon_dotprod)));
4241*77c1e3ccSAndroid Build Coastguard Worker 
4242*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_NEON_DOTPROD
4243*77c1e3ccSAndroid Build Coastguard Worker 
4244*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SVE
4245*77c1e3ccSAndroid Build Coastguard Worker 
4246*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
4247*77c1e3ccSAndroid Build Coastguard Worker const VarianceParams kArrayHBDVariance_sve[] = {
4248*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_12_variance128x128_sve, 12),
4249*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_12_variance128x64_sve, 12),
4250*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_12_variance64x128_sve, 12),
4251*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_12_variance64x64_sve, 12),
4252*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_12_variance64x32_sve, 12),
4253*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_12_variance32x64_sve, 12),
4254*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_12_variance32x32_sve, 12),
4255*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_12_variance32x16_sve, 12),
4256*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_12_variance16x32_sve, 12),
4257*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_12_variance16x16_sve, 12),
4258*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_12_variance16x8_sve, 12),
4259*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_12_variance8x16_sve, 12),
4260*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_12_variance8x8_sve, 12),
4261*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_12_variance8x4_sve, 12),
4262*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_12_variance4x8_sve, 12),
4263*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_12_variance4x4_sve, 12),
4264*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_10_variance128x128_sve, 10),
4265*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_10_variance128x64_sve, 10),
4266*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_10_variance64x128_sve, 10),
4267*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_10_variance64x64_sve, 10),
4268*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_10_variance64x32_sve, 10),
4269*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_10_variance32x64_sve, 10),
4270*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_10_variance32x32_sve, 10),
4271*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_10_variance32x16_sve, 10),
4272*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_10_variance16x32_sve, 10),
4273*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_10_variance16x16_sve, 10),
4274*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_10_variance16x8_sve, 10),
4275*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_10_variance8x16_sve, 10),
4276*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_10_variance8x8_sve, 10),
4277*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_10_variance8x4_sve, 10),
4278*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_10_variance4x8_sve, 10),
4279*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_10_variance4x4_sve, 10),
4280*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 7, &aom_highbd_8_variance128x128_sve, 8),
4281*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(7, 6, &aom_highbd_8_variance128x64_sve, 8),
4282*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 7, &aom_highbd_8_variance64x128_sve, 8),
4283*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 6, &aom_highbd_8_variance64x64_sve, 8),
4284*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 5, &aom_highbd_8_variance64x32_sve, 8),
4285*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 6, &aom_highbd_8_variance32x64_sve, 8),
4286*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 5, &aom_highbd_8_variance32x32_sve, 8),
4287*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 4, &aom_highbd_8_variance32x16_sve, 8),
4288*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 5, &aom_highbd_8_variance16x32_sve, 8),
4289*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 4, &aom_highbd_8_variance16x16_sve, 8),
4290*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 3, &aom_highbd_8_variance16x8_sve, 8),
4291*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 4, &aom_highbd_8_variance8x16_sve, 8),
4292*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 3, &aom_highbd_8_variance8x8_sve, 8),
4293*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 2, &aom_highbd_8_variance8x4_sve, 8),
4294*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 3, &aom_highbd_8_variance4x8_sve, 8),
4295*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 2, &aom_highbd_8_variance4x4_sve, 8),
4296*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
4297*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_12_variance64x16_sve, 12),
4298*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_12_variance16x64_sve, 12),
4299*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_12_variance32x8_sve, 12),
4300*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_12_variance8x32_sve, 12),
4301*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_12_variance16x4_sve, 12),
4302*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_12_variance4x16_sve, 12),
4303*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_10_variance64x16_sve, 10),
4304*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_10_variance16x64_sve, 10),
4305*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_10_variance32x8_sve, 10),
4306*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_10_variance8x32_sve, 10),
4307*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_10_variance16x4_sve, 10),
4308*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_10_variance4x16_sve, 10),
4309*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(6, 4, &aom_highbd_8_variance64x16_sve, 8),
4310*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 6, &aom_highbd_8_variance16x64_sve, 8),
4311*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(5, 3, &aom_highbd_8_variance32x8_sve, 8),
4312*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(3, 5, &aom_highbd_8_variance8x32_sve, 8),
4313*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(4, 2, &aom_highbd_8_variance16x4_sve, 8),
4314*77c1e3ccSAndroid Build Coastguard Worker   VarianceParams(2, 4, &aom_highbd_8_variance4x16_sve, 8),
4315*77c1e3ccSAndroid Build Coastguard Worker #endif
4316*77c1e3ccSAndroid Build Coastguard Worker };
4317*77c1e3ccSAndroid Build Coastguard Worker 
4318*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SVE, AvxHBDVarianceTest,
4319*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kArrayHBDVariance_sve));
4320*77c1e3ccSAndroid Build Coastguard Worker 
4321*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
4322*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SVE
4323*77c1e3ccSAndroid Build Coastguard Worker 
4324*77c1e3ccSAndroid Build Coastguard Worker }  // namespace
4325