xref: /aosp_15_r20/external/libaom/test/masked_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 <math.h>
13*77c1e3ccSAndroid Build Coastguard Worker #include <stdlib.h>
14*77c1e3ccSAndroid Build Coastguard Worker #include <string.h>
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 #include "test/acm_random.h"
19*77c1e3ccSAndroid Build Coastguard Worker #include "test/register_state_check.h"
20*77c1e3ccSAndroid Build Coastguard Worker #include "test/util.h"
21*77c1e3ccSAndroid Build Coastguard Worker 
22*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_config.h"
23*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_dsp_rtcd.h"
24*77c1e3ccSAndroid Build Coastguard Worker 
25*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_codec.h"
26*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_integer.h"
27*77c1e3ccSAndroid Build Coastguard Worker #include "aom_dsp/aom_filter.h"
28*77c1e3ccSAndroid Build Coastguard Worker #include "aom_mem/aom_mem.h"
29*77c1e3ccSAndroid Build Coastguard Worker 
30*77c1e3ccSAndroid Build Coastguard Worker using libaom_test::ACMRandom;
31*77c1e3ccSAndroid Build Coastguard Worker 
32*77c1e3ccSAndroid Build Coastguard Worker namespace {
33*77c1e3ccSAndroid Build Coastguard Worker const int number_of_iterations = 200;
34*77c1e3ccSAndroid Build Coastguard Worker 
35*77c1e3ccSAndroid Build Coastguard Worker typedef unsigned int (*MaskedSubPixelVarianceFunc)(
36*77c1e3ccSAndroid Build Coastguard Worker     const uint8_t *src, int src_stride, int xoffset, int yoffset,
37*77c1e3ccSAndroid Build Coastguard Worker     const uint8_t *ref, int ref_stride, const uint8_t *second_pred,
38*77c1e3ccSAndroid Build Coastguard Worker     const uint8_t *msk, int msk_stride, int invert_mask, unsigned int *sse);
39*77c1e3ccSAndroid Build Coastguard Worker 
40*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<MaskedSubPixelVarianceFunc, MaskedSubPixelVarianceFunc>
41*77c1e3ccSAndroid Build Coastguard Worker     MaskedSubPixelVarianceParam;
42*77c1e3ccSAndroid Build Coastguard Worker 
43*77c1e3ccSAndroid Build Coastguard Worker class MaskedSubPixelVarianceTest
44*77c1e3ccSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<MaskedSubPixelVarianceParam> {
45*77c1e3ccSAndroid Build Coastguard Worker  public:
46*77c1e3ccSAndroid Build Coastguard Worker   ~MaskedSubPixelVarianceTest() override = default;
SetUp()47*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
48*77c1e3ccSAndroid Build Coastguard Worker     opt_func_ = GET_PARAM(0);
49*77c1e3ccSAndroid Build Coastguard Worker     ref_func_ = GET_PARAM(1);
50*77c1e3ccSAndroid Build Coastguard Worker   }
51*77c1e3ccSAndroid Build Coastguard Worker 
52*77c1e3ccSAndroid Build Coastguard Worker  protected:
53*77c1e3ccSAndroid Build Coastguard Worker   MaskedSubPixelVarianceFunc opt_func_;
54*77c1e3ccSAndroid Build Coastguard Worker   MaskedSubPixelVarianceFunc ref_func_;
55*77c1e3ccSAndroid Build Coastguard Worker };
56*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MaskedSubPixelVarianceTest);
57*77c1e3ccSAndroid Build Coastguard Worker 
TEST_P(MaskedSubPixelVarianceTest,OperationCheck)58*77c1e3ccSAndroid Build Coastguard Worker TEST_P(MaskedSubPixelVarianceTest, OperationCheck) {
59*77c1e3ccSAndroid Build Coastguard Worker   unsigned int ref_ret, opt_ret;
60*77c1e3ccSAndroid Build Coastguard Worker   unsigned int ref_sse, opt_sse;
61*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd(ACMRandom::DeterministicSeed());
62*77c1e3ccSAndroid Build Coastguard Worker   // Note: We pad out the input array to a multiple of 16 bytes wide, so that
63*77c1e3ccSAndroid Build Coastguard Worker   // consecutive rows keep the 16-byte alignment.
64*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
65*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
66*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t,
67*77c1e3ccSAndroid Build Coastguard Worker                   second_pred_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
68*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
69*77c1e3ccSAndroid Build Coastguard Worker   int err_count = 0;
70*77c1e3ccSAndroid Build Coastguard Worker   int first_failure = -1;
71*77c1e3ccSAndroid Build Coastguard Worker   int src_stride = (MAX_SB_SIZE + 16);
72*77c1e3ccSAndroid Build Coastguard Worker   int ref_stride = (MAX_SB_SIZE + 16);
73*77c1e3ccSAndroid Build Coastguard Worker   int msk_stride = (MAX_SB_SIZE + 16);
74*77c1e3ccSAndroid Build Coastguard Worker   int xoffset;
75*77c1e3ccSAndroid Build Coastguard Worker   int yoffset;
76*77c1e3ccSAndroid Build Coastguard Worker 
77*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < number_of_iterations; ++i) {
78*77c1e3ccSAndroid Build Coastguard Worker     int xoffsets[] = { 0, 4, rnd(BIL_SUBPEL_SHIFTS) };
79*77c1e3ccSAndroid Build Coastguard Worker     int yoffsets[] = { 0, 4, rnd(BIL_SUBPEL_SHIFTS) };
80*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16); j++) {
81*77c1e3ccSAndroid Build Coastguard Worker       src_ptr[j] = rnd.Rand8();
82*77c1e3ccSAndroid Build Coastguard Worker       ref_ptr[j] = rnd.Rand8();
83*77c1e3ccSAndroid Build Coastguard Worker       second_pred_ptr[j] = rnd.Rand8();
84*77c1e3ccSAndroid Build Coastguard Worker       msk_ptr[j] = rnd(65);
85*77c1e3ccSAndroid Build Coastguard Worker     }
86*77c1e3ccSAndroid Build Coastguard Worker     for (int k = 0; k < 3; k++) {
87*77c1e3ccSAndroid Build Coastguard Worker       for (int l = 0; l < 3; l++) {
88*77c1e3ccSAndroid Build Coastguard Worker         xoffset = xoffsets[k];
89*77c1e3ccSAndroid Build Coastguard Worker         yoffset = yoffsets[l];
90*77c1e3ccSAndroid Build Coastguard Worker         for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
91*77c1e3ccSAndroid Build Coastguard Worker           ref_ret = ref_func_(src_ptr, src_stride, xoffset, yoffset, ref_ptr,
92*77c1e3ccSAndroid Build Coastguard Worker                               ref_stride, second_pred_ptr, msk_ptr, msk_stride,
93*77c1e3ccSAndroid Build Coastguard Worker                               invert_mask, &ref_sse);
94*77c1e3ccSAndroid Build Coastguard Worker           API_REGISTER_STATE_CHECK(
95*77c1e3ccSAndroid Build Coastguard Worker               opt_ret = opt_func_(src_ptr, src_stride, xoffset, yoffset,
96*77c1e3ccSAndroid Build Coastguard Worker                                   ref_ptr, ref_stride, second_pred_ptr, msk_ptr,
97*77c1e3ccSAndroid Build Coastguard Worker                                   msk_stride, invert_mask, &opt_sse));
98*77c1e3ccSAndroid Build Coastguard Worker 
99*77c1e3ccSAndroid Build Coastguard Worker           if (opt_ret != ref_ret || opt_sse != ref_sse) {
100*77c1e3ccSAndroid Build Coastguard Worker             err_count++;
101*77c1e3ccSAndroid Build Coastguard Worker             if (first_failure == -1) first_failure = i;
102*77c1e3ccSAndroid Build Coastguard Worker           }
103*77c1e3ccSAndroid Build Coastguard Worker         }
104*77c1e3ccSAndroid Build Coastguard Worker       }
105*77c1e3ccSAndroid Build Coastguard Worker     }
106*77c1e3ccSAndroid Build Coastguard Worker   }
107*77c1e3ccSAndroid Build Coastguard Worker 
108*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(0, err_count)
109*77c1e3ccSAndroid Build Coastguard Worker       << "Error: Masked Sub Pixel Variance Test OperationCheck,"
110*77c1e3ccSAndroid Build Coastguard Worker       << "C output doesn't match SSSE3 output. "
111*77c1e3ccSAndroid Build Coastguard Worker       << "First failed at test case " << first_failure;
112*77c1e3ccSAndroid Build Coastguard Worker }
113*77c1e3ccSAndroid Build Coastguard Worker 
TEST_P(MaskedSubPixelVarianceTest,ExtremeValues)114*77c1e3ccSAndroid Build Coastguard Worker TEST_P(MaskedSubPixelVarianceTest, ExtremeValues) {
115*77c1e3ccSAndroid Build Coastguard Worker   unsigned int ref_ret, opt_ret;
116*77c1e3ccSAndroid Build Coastguard Worker   unsigned int ref_sse, opt_sse;
117*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd(ACMRandom::DeterministicSeed());
118*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
119*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
120*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t,
121*77c1e3ccSAndroid Build Coastguard Worker                   second_pred_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
122*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16)]);
123*77c1e3ccSAndroid Build Coastguard Worker   int first_failure_x = -1;
124*77c1e3ccSAndroid Build Coastguard Worker   int first_failure_y = -1;
125*77c1e3ccSAndroid Build Coastguard Worker   int err_count = 0;
126*77c1e3ccSAndroid Build Coastguard Worker   int first_failure = -1;
127*77c1e3ccSAndroid Build Coastguard Worker   int src_stride = (MAX_SB_SIZE + 16);
128*77c1e3ccSAndroid Build Coastguard Worker   int ref_stride = (MAX_SB_SIZE + 16);
129*77c1e3ccSAndroid Build Coastguard Worker   int msk_stride = (MAX_SB_SIZE + 16);
130*77c1e3ccSAndroid Build Coastguard Worker 
131*77c1e3ccSAndroid Build Coastguard Worker   for (int xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
132*77c1e3ccSAndroid Build Coastguard Worker     for (int yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
133*77c1e3ccSAndroid Build Coastguard Worker       for (int i = 0; i < 16; ++i) {
134*77c1e3ccSAndroid Build Coastguard Worker         memset(src_ptr, (i & 0x1) ? 255 : 0,
135*77c1e3ccSAndroid Build Coastguard Worker                (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16));
136*77c1e3ccSAndroid Build Coastguard Worker         memset(ref_ptr, (i & 0x2) ? 255 : 0,
137*77c1e3ccSAndroid Build Coastguard Worker                (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16));
138*77c1e3ccSAndroid Build Coastguard Worker         memset(second_pred_ptr, (i & 0x4) ? 255 : 0,
139*77c1e3ccSAndroid Build Coastguard Worker                (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16));
140*77c1e3ccSAndroid Build Coastguard Worker         memset(msk_ptr, (i & 0x8) ? 64 : 0,
141*77c1e3ccSAndroid Build Coastguard Worker                (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 16));
142*77c1e3ccSAndroid Build Coastguard Worker 
143*77c1e3ccSAndroid Build Coastguard Worker         for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
144*77c1e3ccSAndroid Build Coastguard Worker           ref_ret = ref_func_(src_ptr, src_stride, xoffset, yoffset, ref_ptr,
145*77c1e3ccSAndroid Build Coastguard Worker                               ref_stride, second_pred_ptr, msk_ptr, msk_stride,
146*77c1e3ccSAndroid Build Coastguard Worker                               invert_mask, &ref_sse);
147*77c1e3ccSAndroid Build Coastguard Worker           API_REGISTER_STATE_CHECK(
148*77c1e3ccSAndroid Build Coastguard Worker               opt_ret = opt_func_(src_ptr, src_stride, xoffset, yoffset,
149*77c1e3ccSAndroid Build Coastguard Worker                                   ref_ptr, ref_stride, second_pred_ptr, msk_ptr,
150*77c1e3ccSAndroid Build Coastguard Worker                                   msk_stride, invert_mask, &opt_sse));
151*77c1e3ccSAndroid Build Coastguard Worker 
152*77c1e3ccSAndroid Build Coastguard Worker           if (opt_ret != ref_ret || opt_sse != ref_sse) {
153*77c1e3ccSAndroid Build Coastguard Worker             err_count++;
154*77c1e3ccSAndroid Build Coastguard Worker             if (first_failure == -1) {
155*77c1e3ccSAndroid Build Coastguard Worker               first_failure = i;
156*77c1e3ccSAndroid Build Coastguard Worker               first_failure_x = xoffset;
157*77c1e3ccSAndroid Build Coastguard Worker               first_failure_y = yoffset;
158*77c1e3ccSAndroid Build Coastguard Worker             }
159*77c1e3ccSAndroid Build Coastguard Worker           }
160*77c1e3ccSAndroid Build Coastguard Worker         }
161*77c1e3ccSAndroid Build Coastguard Worker       }
162*77c1e3ccSAndroid Build Coastguard Worker     }
163*77c1e3ccSAndroid Build Coastguard Worker   }
164*77c1e3ccSAndroid Build Coastguard Worker 
165*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(0, err_count) << "Error: Masked Variance Test ExtremeValues,"
166*77c1e3ccSAndroid Build Coastguard Worker                           << "C output doesn't match SSSE3 output. "
167*77c1e3ccSAndroid Build Coastguard Worker                           << "First failed at test case " << first_failure
168*77c1e3ccSAndroid Build Coastguard Worker                           << " x_offset = " << first_failure_x
169*77c1e3ccSAndroid Build Coastguard Worker                           << " y_offset = " << first_failure_y;
170*77c1e3ccSAndroid Build Coastguard Worker }
171*77c1e3ccSAndroid Build Coastguard Worker 
172*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
173*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<MaskedSubPixelVarianceFunc, MaskedSubPixelVarianceFunc,
174*77c1e3ccSAndroid Build Coastguard Worker                    aom_bit_depth_t>
175*77c1e3ccSAndroid Build Coastguard Worker     HighbdMaskedSubPixelVarianceParam;
176*77c1e3ccSAndroid Build Coastguard Worker 
177*77c1e3ccSAndroid Build Coastguard Worker class HighbdMaskedSubPixelVarianceTest
178*77c1e3ccSAndroid Build Coastguard Worker     : public ::testing::TestWithParam<HighbdMaskedSubPixelVarianceParam> {
179*77c1e3ccSAndroid Build Coastguard Worker  public:
180*77c1e3ccSAndroid Build Coastguard Worker   ~HighbdMaskedSubPixelVarianceTest() override = default;
SetUp()181*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
182*77c1e3ccSAndroid Build Coastguard Worker     opt_func_ = GET_PARAM(0);
183*77c1e3ccSAndroid Build Coastguard Worker     ref_func_ = GET_PARAM(1);
184*77c1e3ccSAndroid Build Coastguard Worker     bit_depth_ = GET_PARAM(2);
185*77c1e3ccSAndroid Build Coastguard Worker   }
186*77c1e3ccSAndroid Build Coastguard Worker 
187*77c1e3ccSAndroid Build Coastguard Worker  protected:
188*77c1e3ccSAndroid Build Coastguard Worker   MaskedSubPixelVarianceFunc opt_func_;
189*77c1e3ccSAndroid Build Coastguard Worker   MaskedSubPixelVarianceFunc ref_func_;
190*77c1e3ccSAndroid Build Coastguard Worker   aom_bit_depth_t bit_depth_;
191*77c1e3ccSAndroid Build Coastguard Worker };
192*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(HighbdMaskedSubPixelVarianceTest);
193*77c1e3ccSAndroid Build Coastguard Worker 
TEST_P(HighbdMaskedSubPixelVarianceTest,OperationCheck)194*77c1e3ccSAndroid Build Coastguard Worker TEST_P(HighbdMaskedSubPixelVarianceTest, OperationCheck) {
195*77c1e3ccSAndroid Build Coastguard Worker   unsigned int ref_ret, opt_ret;
196*77c1e3ccSAndroid Build Coastguard Worker   unsigned int ref_sse, opt_sse;
197*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd(ACMRandom::DeterministicSeed());
198*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint16_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
199*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint16_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
200*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint16_t,
201*77c1e3ccSAndroid Build Coastguard Worker                   second_pred_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
202*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
203*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
204*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
205*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *second_pred8_ptr = CONVERT_TO_BYTEPTR(second_pred_ptr);
206*77c1e3ccSAndroid Build Coastguard Worker   int err_count = 0;
207*77c1e3ccSAndroid Build Coastguard Worker   int first_failure = -1;
208*77c1e3ccSAndroid Build Coastguard Worker   int first_failure_x = -1;
209*77c1e3ccSAndroid Build Coastguard Worker   int first_failure_y = -1;
210*77c1e3ccSAndroid Build Coastguard Worker   int src_stride = (MAX_SB_SIZE + 8);
211*77c1e3ccSAndroid Build Coastguard Worker   int ref_stride = (MAX_SB_SIZE + 8);
212*77c1e3ccSAndroid Build Coastguard Worker   int msk_stride = (MAX_SB_SIZE + 8);
213*77c1e3ccSAndroid Build Coastguard Worker   int xoffset, yoffset;
214*77c1e3ccSAndroid Build Coastguard Worker 
215*77c1e3ccSAndroid Build Coastguard Worker   for (int i = 0; i < number_of_iterations; ++i) {
216*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8); j++) {
217*77c1e3ccSAndroid Build Coastguard Worker       src_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
218*77c1e3ccSAndroid Build Coastguard Worker       ref_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
219*77c1e3ccSAndroid Build Coastguard Worker       second_pred_ptr[j] = rnd.Rand16() & ((1 << bit_depth_) - 1);
220*77c1e3ccSAndroid Build Coastguard Worker       msk_ptr[j] = rnd(65);
221*77c1e3ccSAndroid Build Coastguard Worker     }
222*77c1e3ccSAndroid Build Coastguard Worker     for (xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
223*77c1e3ccSAndroid Build Coastguard Worker       for (yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
224*77c1e3ccSAndroid Build Coastguard Worker         for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
225*77c1e3ccSAndroid Build Coastguard Worker           ref_ret = ref_func_(src8_ptr, src_stride, xoffset, yoffset, ref8_ptr,
226*77c1e3ccSAndroid Build Coastguard Worker                               ref_stride, second_pred8_ptr, msk_ptr, msk_stride,
227*77c1e3ccSAndroid Build Coastguard Worker                               invert_mask, &ref_sse);
228*77c1e3ccSAndroid Build Coastguard Worker           API_REGISTER_STATE_CHECK(
229*77c1e3ccSAndroid Build Coastguard Worker               opt_ret = opt_func_(src8_ptr, src_stride, xoffset, yoffset,
230*77c1e3ccSAndroid Build Coastguard Worker                                   ref8_ptr, ref_stride, second_pred8_ptr,
231*77c1e3ccSAndroid Build Coastguard Worker                                   msk_ptr, msk_stride, invert_mask, &opt_sse));
232*77c1e3ccSAndroid Build Coastguard Worker 
233*77c1e3ccSAndroid Build Coastguard Worker           if (opt_ret != ref_ret || opt_sse != ref_sse) {
234*77c1e3ccSAndroid Build Coastguard Worker             err_count++;
235*77c1e3ccSAndroid Build Coastguard Worker             if (first_failure == -1) {
236*77c1e3ccSAndroid Build Coastguard Worker               first_failure = i;
237*77c1e3ccSAndroid Build Coastguard Worker               first_failure_x = xoffset;
238*77c1e3ccSAndroid Build Coastguard Worker               first_failure_y = yoffset;
239*77c1e3ccSAndroid Build Coastguard Worker             }
240*77c1e3ccSAndroid Build Coastguard Worker           }
241*77c1e3ccSAndroid Build Coastguard Worker         }
242*77c1e3ccSAndroid Build Coastguard Worker       }
243*77c1e3ccSAndroid Build Coastguard Worker     }
244*77c1e3ccSAndroid Build Coastguard Worker   }
245*77c1e3ccSAndroid Build Coastguard Worker 
246*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(0, err_count)
247*77c1e3ccSAndroid Build Coastguard Worker       << "Error: Masked Sub Pixel Variance Test OperationCheck,"
248*77c1e3ccSAndroid Build Coastguard Worker       << "C output doesn't match SSSE3 output. "
249*77c1e3ccSAndroid Build Coastguard Worker       << "First failed at test case " << first_failure
250*77c1e3ccSAndroid Build Coastguard Worker       << " x_offset = " << first_failure_x << " y_offset = " << first_failure_y;
251*77c1e3ccSAndroid Build Coastguard Worker }
252*77c1e3ccSAndroid Build Coastguard Worker 
TEST_P(HighbdMaskedSubPixelVarianceTest,ExtremeValues)253*77c1e3ccSAndroid Build Coastguard Worker TEST_P(HighbdMaskedSubPixelVarianceTest, ExtremeValues) {
254*77c1e3ccSAndroid Build Coastguard Worker   unsigned int ref_ret, opt_ret;
255*77c1e3ccSAndroid Build Coastguard Worker   unsigned int ref_sse, opt_sse;
256*77c1e3ccSAndroid Build Coastguard Worker   ACMRandom rnd(ACMRandom::DeterministicSeed());
257*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint16_t, src_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
258*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint16_t, ref_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
259*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint8_t, msk_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
260*77c1e3ccSAndroid Build Coastguard Worker   DECLARE_ALIGNED(16, uint16_t,
261*77c1e3ccSAndroid Build Coastguard Worker                   second_pred_ptr[(MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8)]);
262*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *src8_ptr = CONVERT_TO_BYTEPTR(src_ptr);
263*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *ref8_ptr = CONVERT_TO_BYTEPTR(ref_ptr);
264*77c1e3ccSAndroid Build Coastguard Worker   uint8_t *second_pred8_ptr = CONVERT_TO_BYTEPTR(second_pred_ptr);
265*77c1e3ccSAndroid Build Coastguard Worker   int first_failure_x = -1;
266*77c1e3ccSAndroid Build Coastguard Worker   int first_failure_y = -1;
267*77c1e3ccSAndroid Build Coastguard Worker   int err_count = 0;
268*77c1e3ccSAndroid Build Coastguard Worker   int first_failure = -1;
269*77c1e3ccSAndroid Build Coastguard Worker   int src_stride = (MAX_SB_SIZE + 8);
270*77c1e3ccSAndroid Build Coastguard Worker   int ref_stride = (MAX_SB_SIZE + 8);
271*77c1e3ccSAndroid Build Coastguard Worker   int msk_stride = (MAX_SB_SIZE + 8);
272*77c1e3ccSAndroid Build Coastguard Worker 
273*77c1e3ccSAndroid Build Coastguard Worker   for (int xoffset = 0; xoffset < BIL_SUBPEL_SHIFTS; xoffset++) {
274*77c1e3ccSAndroid Build Coastguard Worker     for (int yoffset = 0; yoffset < BIL_SUBPEL_SHIFTS; yoffset++) {
275*77c1e3ccSAndroid Build Coastguard Worker       for (int i = 0; i < 16; ++i) {
276*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(src_ptr, (i & 0x1) ? ((1 << bit_depth_) - 1) : 0,
277*77c1e3ccSAndroid Build Coastguard Worker                      (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8));
278*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(ref_ptr, (i & 0x2) ? ((1 << bit_depth_) - 1) : 0,
279*77c1e3ccSAndroid Build Coastguard Worker                      (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8));
280*77c1e3ccSAndroid Build Coastguard Worker         aom_memset16(second_pred_ptr, (i & 0x4) ? ((1 << bit_depth_) - 1) : 0,
281*77c1e3ccSAndroid Build Coastguard Worker                      (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8));
282*77c1e3ccSAndroid Build Coastguard Worker         memset(msk_ptr, (i & 0x8) ? 64 : 0,
283*77c1e3ccSAndroid Build Coastguard Worker                (MAX_SB_SIZE + 1) * (MAX_SB_SIZE + 8));
284*77c1e3ccSAndroid Build Coastguard Worker 
285*77c1e3ccSAndroid Build Coastguard Worker         for (int invert_mask = 0; invert_mask < 2; ++invert_mask) {
286*77c1e3ccSAndroid Build Coastguard Worker           ref_ret = ref_func_(src8_ptr, src_stride, xoffset, yoffset, ref8_ptr,
287*77c1e3ccSAndroid Build Coastguard Worker                               ref_stride, second_pred8_ptr, msk_ptr, msk_stride,
288*77c1e3ccSAndroid Build Coastguard Worker                               invert_mask, &ref_sse);
289*77c1e3ccSAndroid Build Coastguard Worker           API_REGISTER_STATE_CHECK(
290*77c1e3ccSAndroid Build Coastguard Worker               opt_ret = opt_func_(src8_ptr, src_stride, xoffset, yoffset,
291*77c1e3ccSAndroid Build Coastguard Worker                                   ref8_ptr, ref_stride, second_pred8_ptr,
292*77c1e3ccSAndroid Build Coastguard Worker                                   msk_ptr, msk_stride, invert_mask, &opt_sse));
293*77c1e3ccSAndroid Build Coastguard Worker 
294*77c1e3ccSAndroid Build Coastguard Worker           if (opt_ret != ref_ret || opt_sse != ref_sse) {
295*77c1e3ccSAndroid Build Coastguard Worker             err_count++;
296*77c1e3ccSAndroid Build Coastguard Worker             if (first_failure == -1) {
297*77c1e3ccSAndroid Build Coastguard Worker               first_failure = i;
298*77c1e3ccSAndroid Build Coastguard Worker               first_failure_x = xoffset;
299*77c1e3ccSAndroid Build Coastguard Worker               first_failure_y = yoffset;
300*77c1e3ccSAndroid Build Coastguard Worker             }
301*77c1e3ccSAndroid Build Coastguard Worker           }
302*77c1e3ccSAndroid Build Coastguard Worker         }
303*77c1e3ccSAndroid Build Coastguard Worker       }
304*77c1e3ccSAndroid Build Coastguard Worker     }
305*77c1e3ccSAndroid Build Coastguard Worker   }
306*77c1e3ccSAndroid Build Coastguard Worker 
307*77c1e3ccSAndroid Build Coastguard Worker   EXPECT_EQ(0, err_count) << "Error: Masked Variance Test ExtremeValues,"
308*77c1e3ccSAndroid Build Coastguard Worker                           << "C output doesn't match SSSE3 output. "
309*77c1e3ccSAndroid Build Coastguard Worker                           << "First failed at test case " << first_failure
310*77c1e3ccSAndroid Build Coastguard Worker                           << " x_offset = " << first_failure_x
311*77c1e3ccSAndroid Build Coastguard Worker                           << " y_offset = " << first_failure_y;
312*77c1e3ccSAndroid Build Coastguard Worker }
313*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
314*77c1e3ccSAndroid Build Coastguard Worker 
315*77c1e3ccSAndroid Build Coastguard Worker using std::make_tuple;
316*77c1e3ccSAndroid Build Coastguard Worker 
317*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSSE3
318*77c1e3ccSAndroid Build Coastguard Worker 
319*77c1e3ccSAndroid Build Coastguard Worker const MaskedSubPixelVarianceParam sub_pel_var_test[] = {
320*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance128x128_ssse3,
321*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance128x128_c),
322*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance128x64_ssse3,
323*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance128x64_c),
324*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance64x128_ssse3,
325*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance64x128_c),
326*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance64x64_ssse3,
327*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance64x64_c),
328*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance64x32_ssse3,
329*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance64x32_c),
330*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance32x64_ssse3,
331*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance32x64_c),
332*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance32x32_ssse3,
333*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance32x32_c),
334*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance32x16_ssse3,
335*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance32x16_c),
336*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x32_ssse3,
337*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x32_c),
338*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x16_ssse3,
339*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x16_c),
340*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x8_ssse3,
341*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x8_c),
342*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance8x16_ssse3,
343*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance8x16_c),
344*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance8x8_ssse3,
345*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance8x8_c),
346*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance8x4_ssse3,
347*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance8x4_c),
348*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance4x8_ssse3,
349*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance4x8_c),
350*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance4x4_ssse3,
351*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance4x4_c),
352*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
353*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance64x16_ssse3,
354*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance64x16_c),
355*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x64_ssse3,
356*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x64_c),
357*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance32x8_ssse3,
358*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance32x8_c),
359*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance8x32_ssse3,
360*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance8x32_c),
361*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x4_ssse3,
362*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x4_c),
363*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance4x16_ssse3,
364*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance4x16_c),
365*77c1e3ccSAndroid Build Coastguard Worker #endif
366*77c1e3ccSAndroid Build Coastguard Worker };
367*77c1e3ccSAndroid Build Coastguard Worker 
368*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSSE3_C_COMPARE, MaskedSubPixelVarianceTest,
369*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(sub_pel_var_test));
370*77c1e3ccSAndroid Build Coastguard Worker 
371*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
372*77c1e3ccSAndroid Build Coastguard Worker const HighbdMaskedSubPixelVarianceParam hbd_sub_pel_var_test[] = {
373*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance128x128_ssse3,
374*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance128x128_c, AOM_BITS_8),
375*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance128x64_ssse3,
376*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance128x64_c, AOM_BITS_8),
377*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x128_ssse3,
378*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance64x128_c, AOM_BITS_8),
379*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x64_ssse3,
380*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance64x64_c, AOM_BITS_8),
381*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x32_ssse3,
382*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance64x32_c, AOM_BITS_8),
383*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x64_ssse3,
384*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance32x64_c, AOM_BITS_8),
385*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x32_ssse3,
386*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance32x32_c, AOM_BITS_8),
387*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x16_ssse3,
388*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance32x16_c, AOM_BITS_8),
389*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x32_ssse3,
390*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x32_c, AOM_BITS_8),
391*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x16_ssse3,
392*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x16_c, AOM_BITS_8),
393*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x8_ssse3,
394*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x8_c, AOM_BITS_8),
395*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x16_ssse3,
396*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance8x16_c, AOM_BITS_8),
397*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x8_ssse3,
398*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance8x8_c, AOM_BITS_8),
399*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x4_ssse3,
400*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance8x4_c, AOM_BITS_8),
401*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance4x8_ssse3,
402*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance4x8_c, AOM_BITS_8),
403*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance4x4_ssse3,
404*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance4x4_c, AOM_BITS_8),
405*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance128x128_ssse3,
406*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance128x128_c, AOM_BITS_10),
407*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance128x64_ssse3,
408*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance128x64_c, AOM_BITS_10),
409*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x128_ssse3,
410*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance64x128_c, AOM_BITS_10),
411*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x64_ssse3,
412*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance64x64_c, AOM_BITS_10),
413*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x32_ssse3,
414*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance64x32_c, AOM_BITS_10),
415*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x64_ssse3,
416*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance32x64_c, AOM_BITS_10),
417*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x32_ssse3,
418*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance32x32_c, AOM_BITS_10),
419*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x16_ssse3,
420*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance32x16_c, AOM_BITS_10),
421*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x32_ssse3,
422*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x32_c, AOM_BITS_10),
423*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x16_ssse3,
424*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x16_c, AOM_BITS_10),
425*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x8_ssse3,
426*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x8_c, AOM_BITS_10),
427*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x16_ssse3,
428*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance8x16_c, AOM_BITS_10),
429*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x8_ssse3,
430*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance8x8_c, AOM_BITS_10),
431*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x4_ssse3,
432*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance8x4_c, AOM_BITS_10),
433*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x8_ssse3,
434*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance4x8_c, AOM_BITS_10),
435*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x4_ssse3,
436*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance4x4_c, AOM_BITS_10),
437*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance128x128_ssse3,
438*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance128x128_c, AOM_BITS_12),
439*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance128x64_ssse3,
440*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance128x64_c, AOM_BITS_12),
441*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x128_ssse3,
442*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance64x128_c, AOM_BITS_12),
443*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x64_ssse3,
444*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance64x64_c, AOM_BITS_12),
445*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x32_ssse3,
446*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance64x32_c, AOM_BITS_12),
447*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x64_ssse3,
448*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance32x64_c, AOM_BITS_12),
449*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x32_ssse3,
450*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance32x32_c, AOM_BITS_12),
451*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x16_ssse3,
452*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance32x16_c, AOM_BITS_12),
453*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x32_ssse3,
454*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x32_c, AOM_BITS_12),
455*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x16_ssse3,
456*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x16_c, AOM_BITS_12),
457*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x8_ssse3,
458*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x8_c, AOM_BITS_12),
459*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x16_ssse3,
460*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance8x16_c, AOM_BITS_12),
461*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x8_ssse3,
462*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance8x8_c, AOM_BITS_12),
463*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x4_ssse3,
464*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance8x4_c, AOM_BITS_12),
465*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x8_ssse3,
466*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance4x8_c, AOM_BITS_12),
467*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x4_ssse3,
468*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance4x4_c, AOM_BITS_12),
469*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
470*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x16_ssse3,
471*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance64x16_c, AOM_BITS_8),
472*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x64_ssse3,
473*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x64_c, AOM_BITS_8),
474*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x8_ssse3,
475*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance32x8_c, AOM_BITS_8),
476*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x32_ssse3,
477*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance8x32_c, AOM_BITS_8),
478*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x4_ssse3,
479*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x4_c, AOM_BITS_8),
480*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance4x16_ssse3,
481*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance4x16_c, AOM_BITS_8),
482*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x16_ssse3,
483*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance64x16_c, AOM_BITS_10),
484*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x64_ssse3,
485*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x64_c, AOM_BITS_10),
486*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x8_ssse3,
487*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance32x8_c, AOM_BITS_10),
488*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x32_ssse3,
489*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance8x32_c, AOM_BITS_10),
490*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x4_ssse3,
491*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x4_c, AOM_BITS_10),
492*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x16_ssse3,
493*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance4x16_c, AOM_BITS_10),
494*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x16_ssse3,
495*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance64x16_c, AOM_BITS_12),
496*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x64_ssse3,
497*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x64_c, AOM_BITS_12),
498*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x8_ssse3,
499*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance32x8_c, AOM_BITS_12),
500*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x32_ssse3,
501*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance8x32_c, AOM_BITS_12),
502*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x4_ssse3,
503*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x4_c, AOM_BITS_12),
504*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x16_ssse3,
505*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance4x16_c, AOM_BITS_12),
506*77c1e3ccSAndroid Build Coastguard Worker #endif
507*77c1e3ccSAndroid Build Coastguard Worker };
508*77c1e3ccSAndroid Build Coastguard Worker 
509*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSSE3_C_COMPARE, HighbdMaskedSubPixelVarianceTest,
510*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(hbd_sub_pel_var_test));
511*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
512*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSSE3
513*77c1e3ccSAndroid Build Coastguard Worker 
514*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON
515*77c1e3ccSAndroid Build Coastguard Worker 
516*77c1e3ccSAndroid Build Coastguard Worker const MaskedSubPixelVarianceParam sub_pel_var_test[] = {
517*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance128x128_neon,
518*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance128x128_c),
519*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance128x64_neon,
520*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance128x64_c),
521*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance64x128_neon,
522*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance64x128_c),
523*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance64x64_neon,
524*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance64x64_c),
525*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance64x32_neon,
526*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance64x32_c),
527*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance32x64_neon,
528*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance32x64_c),
529*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance32x32_neon,
530*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance32x32_c),
531*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance32x16_neon,
532*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance32x16_c),
533*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x32_neon,
534*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x32_c),
535*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x16_neon,
536*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x16_c),
537*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x8_neon,
538*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x8_c),
539*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance8x16_neon,
540*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance8x16_c),
541*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance8x8_neon,
542*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance8x8_c),
543*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance8x4_neon,
544*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance8x4_c),
545*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance4x8_neon,
546*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance4x8_c),
547*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance4x4_neon,
548*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance4x4_c),
549*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
550*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance64x16_neon,
551*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance64x16_c),
552*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x64_neon,
553*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x64_c),
554*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance32x8_neon,
555*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance32x8_c),
556*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance8x32_neon,
557*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance8x32_c),
558*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance16x4_neon,
559*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance16x4_c),
560*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_masked_sub_pixel_variance4x16_neon,
561*77c1e3ccSAndroid Build Coastguard Worker              &aom_masked_sub_pixel_variance4x16_c),
562*77c1e3ccSAndroid Build Coastguard Worker #endif
563*77c1e3ccSAndroid Build Coastguard Worker };
564*77c1e3ccSAndroid Build Coastguard Worker 
565*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON_C_COMPARE, MaskedSubPixelVarianceTest,
566*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(sub_pel_var_test));
567*77c1e3ccSAndroid Build Coastguard Worker 
568*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
569*77c1e3ccSAndroid Build Coastguard Worker const HighbdMaskedSubPixelVarianceParam hbd_sub_pel_var_test_neon[] = {
570*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance128x128_neon,
571*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance128x128_c, AOM_BITS_8),
572*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance128x64_neon,
573*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance128x64_c, AOM_BITS_8),
574*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x128_neon,
575*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance64x128_c, AOM_BITS_8),
576*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x64_neon,
577*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance64x64_c, AOM_BITS_8),
578*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x32_neon,
579*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance64x32_c, AOM_BITS_8),
580*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x64_neon,
581*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance32x64_c, AOM_BITS_8),
582*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x32_neon,
583*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance32x32_c, AOM_BITS_8),
584*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x16_neon,
585*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance32x16_c, AOM_BITS_8),
586*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x32_neon,
587*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x32_c, AOM_BITS_8),
588*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x16_neon,
589*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x16_c, AOM_BITS_8),
590*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x8_neon,
591*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x8_c, AOM_BITS_8),
592*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x16_neon,
593*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance8x16_c, AOM_BITS_8),
594*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x8_neon,
595*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance8x8_c, AOM_BITS_8),
596*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x4_neon,
597*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance8x4_c, AOM_BITS_8),
598*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance4x8_neon,
599*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance4x8_c, AOM_BITS_8),
600*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance4x4_neon,
601*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance4x4_c, AOM_BITS_8),
602*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance128x128_neon,
603*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance128x128_c, AOM_BITS_10),
604*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance128x64_neon,
605*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance128x64_c, AOM_BITS_10),
606*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x128_neon,
607*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance64x128_c, AOM_BITS_10),
608*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x64_neon,
609*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance64x64_c, AOM_BITS_10),
610*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x32_neon,
611*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance64x32_c, AOM_BITS_10),
612*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x64_neon,
613*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance32x64_c, AOM_BITS_10),
614*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x32_neon,
615*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance32x32_c, AOM_BITS_10),
616*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x16_neon,
617*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance32x16_c, AOM_BITS_10),
618*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x32_neon,
619*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x32_c, AOM_BITS_10),
620*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x16_neon,
621*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x16_c, AOM_BITS_10),
622*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x8_neon,
623*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x8_c, AOM_BITS_10),
624*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x16_neon,
625*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance8x16_c, AOM_BITS_10),
626*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x8_neon,
627*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance8x8_c, AOM_BITS_10),
628*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x4_neon,
629*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance8x4_c, AOM_BITS_10),
630*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x8_neon,
631*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance4x8_c, AOM_BITS_10),
632*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x4_neon,
633*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance4x4_c, AOM_BITS_10),
634*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance128x128_neon,
635*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance128x128_c, AOM_BITS_12),
636*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance128x64_neon,
637*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance128x64_c, AOM_BITS_12),
638*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x128_neon,
639*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance64x128_c, AOM_BITS_12),
640*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x64_neon,
641*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance64x64_c, AOM_BITS_12),
642*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x32_neon,
643*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance64x32_c, AOM_BITS_12),
644*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x64_neon,
645*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance32x64_c, AOM_BITS_12),
646*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x32_neon,
647*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance32x32_c, AOM_BITS_12),
648*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x16_neon,
649*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance32x16_c, AOM_BITS_12),
650*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x32_neon,
651*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x32_c, AOM_BITS_12),
652*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x16_neon,
653*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x16_c, AOM_BITS_12),
654*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x8_neon,
655*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x8_c, AOM_BITS_12),
656*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x16_neon,
657*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance8x16_c, AOM_BITS_12),
658*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x8_neon,
659*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance8x8_c, AOM_BITS_12),
660*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x4_neon,
661*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance8x4_c, AOM_BITS_12),
662*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x8_neon,
663*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance4x8_c, AOM_BITS_12),
664*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x4_neon,
665*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance4x4_c, AOM_BITS_12),
666*77c1e3ccSAndroid Build Coastguard Worker #if !CONFIG_REALTIME_ONLY
667*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance64x16_neon,
668*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance64x16_c, AOM_BITS_8),
669*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x64_neon,
670*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x64_c, AOM_BITS_8),
671*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance32x8_neon,
672*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance32x8_c, AOM_BITS_8),
673*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance8x32_neon,
674*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance8x32_c, AOM_BITS_8),
675*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance16x4_neon,
676*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance16x4_c, AOM_BITS_8),
677*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_8_masked_sub_pixel_variance4x16_neon,
678*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_8_masked_sub_pixel_variance4x16_c, AOM_BITS_8),
679*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance64x16_neon,
680*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance64x16_c, AOM_BITS_10),
681*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x64_neon,
682*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x64_c, AOM_BITS_10),
683*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance32x8_neon,
684*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance32x8_c, AOM_BITS_10),
685*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance8x32_neon,
686*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance8x32_c, AOM_BITS_10),
687*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance16x4_neon,
688*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance16x4_c, AOM_BITS_10),
689*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_10_masked_sub_pixel_variance4x16_neon,
690*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_10_masked_sub_pixel_variance4x16_c, AOM_BITS_10),
691*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance64x16_neon,
692*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance64x16_c, AOM_BITS_12),
693*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x64_neon,
694*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x64_c, AOM_BITS_12),
695*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance32x8_neon,
696*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance32x8_c, AOM_BITS_12),
697*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance8x32_neon,
698*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance8x32_c, AOM_BITS_12),
699*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance16x4_neon,
700*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance16x4_c, AOM_BITS_12),
701*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_12_masked_sub_pixel_variance4x16_neon,
702*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_12_masked_sub_pixel_variance4x16_c, AOM_BITS_12),
703*77c1e3ccSAndroid Build Coastguard Worker #endif
704*77c1e3ccSAndroid Build Coastguard Worker };
705*77c1e3ccSAndroid Build Coastguard Worker 
706*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON_C_COMPARE, HighbdMaskedSubPixelVarianceTest,
707*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(hbd_sub_pel_var_test_neon));
708*77c1e3ccSAndroid Build Coastguard Worker 
709*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
710*77c1e3ccSAndroid Build Coastguard Worker 
711*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_NEON
712*77c1e3ccSAndroid Build Coastguard Worker }  // namespace
713