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