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