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 "gtest/gtest.h"
13*77c1e3ccSAndroid Build Coastguard Worker #include "test/acm_random.h"
14*77c1e3ccSAndroid Build Coastguard Worker
15*77c1e3ccSAndroid Build Coastguard Worker #include "test/function_equivalence_test.h"
16*77c1e3ccSAndroid Build Coastguard Worker #include "test/register_state_check.h"
17*77c1e3ccSAndroid Build Coastguard Worker
18*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_config.h"
19*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_dsp_rtcd.h"
20*77c1e3ccSAndroid Build Coastguard Worker
21*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_integer.h"
22*77c1e3ccSAndroid Build Coastguard Worker
23*77c1e3ccSAndroid Build Coastguard Worker #define MAX_SB_SQUARE (MAX_SB_SIZE * MAX_SB_SIZE)
24*77c1e3ccSAndroid Build Coastguard Worker
25*77c1e3ccSAndroid Build Coastguard Worker using libaom_test::ACMRandom;
26*77c1e3ccSAndroid Build Coastguard Worker using libaom_test::FunctionEquivalenceTest;
27*77c1e3ccSAndroid Build Coastguard Worker
28*77c1e3ccSAndroid Build Coastguard Worker namespace {
29*77c1e3ccSAndroid Build Coastguard Worker
30*77c1e3ccSAndroid Build Coastguard Worker static const int kIterations = 1000;
31*77c1e3ccSAndroid Build Coastguard Worker static const int kMaskMax = 64;
32*77c1e3ccSAndroid Build Coastguard Worker
33*77c1e3ccSAndroid Build Coastguard Worker typedef unsigned int (*ObmcVarF)(const uint8_t *pre, int pre_stride,
34*77c1e3ccSAndroid Build Coastguard Worker const int32_t *wsrc, const int32_t *mask,
35*77c1e3ccSAndroid Build Coastguard Worker unsigned int *sse);
36*77c1e3ccSAndroid Build Coastguard Worker typedef libaom_test::FuncParam<ObmcVarF> TestFuncs;
37*77c1e3ccSAndroid Build Coastguard Worker
38*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
39*77c1e3ccSAndroid Build Coastguard Worker // 8 bit
40*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
41*77c1e3ccSAndroid Build Coastguard Worker
42*77c1e3ccSAndroid Build Coastguard Worker class ObmcVarianceTest : public FunctionEquivalenceTest<ObmcVarF> {};
43*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(ObmcVarianceTest);
44*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(ObmcVarianceTest,RandomValues)45*77c1e3ccSAndroid Build Coastguard Worker TEST_P(ObmcVarianceTest, RandomValues) {
46*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, uint8_t, pre[MAX_SB_SQUARE]);
47*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
48*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
49*77c1e3ccSAndroid Build Coastguard Worker
50*77c1e3ccSAndroid Build Coastguard Worker for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
51*77c1e3ccSAndroid Build Coastguard Worker const int pre_stride = this->rng_(MAX_SB_SIZE + 1);
52*77c1e3ccSAndroid Build Coastguard Worker
53*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < MAX_SB_SQUARE; ++i) {
54*77c1e3ccSAndroid Build Coastguard Worker pre[i] = this->rng_.Rand8();
55*77c1e3ccSAndroid Build Coastguard Worker wsrc[i] = this->rng_.Rand8() * this->rng_(kMaskMax * kMaskMax + 1);
56*77c1e3ccSAndroid Build Coastguard Worker mask[i] = this->rng_(kMaskMax * kMaskMax + 1);
57*77c1e3ccSAndroid Build Coastguard Worker }
58*77c1e3ccSAndroid Build Coastguard Worker
59*77c1e3ccSAndroid Build Coastguard Worker unsigned int ref_sse, tst_sse;
60*77c1e3ccSAndroid Build Coastguard Worker const unsigned int ref_res =
61*77c1e3ccSAndroid Build Coastguard Worker params_.ref_func(pre, pre_stride, wsrc, mask, &ref_sse);
62*77c1e3ccSAndroid Build Coastguard Worker unsigned int tst_res;
63*77c1e3ccSAndroid Build Coastguard Worker API_REGISTER_STATE_CHECK(
64*77c1e3ccSAndroid Build Coastguard Worker tst_res = params_.tst_func(pre, pre_stride, wsrc, mask, &tst_sse));
65*77c1e3ccSAndroid Build Coastguard Worker
66*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(ref_res, tst_res);
67*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(ref_sse, tst_sse);
68*77c1e3ccSAndroid Build Coastguard Worker }
69*77c1e3ccSAndroid Build Coastguard Worker }
70*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(ObmcVarianceTest,ExtremeValues)71*77c1e3ccSAndroid Build Coastguard Worker TEST_P(ObmcVarianceTest, ExtremeValues) {
72*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, uint8_t, pre[MAX_SB_SQUARE]);
73*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
74*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
75*77c1e3ccSAndroid Build Coastguard Worker
76*77c1e3ccSAndroid Build Coastguard Worker for (int iter = 0; iter < MAX_SB_SIZE && !HasFatalFailure(); ++iter) {
77*77c1e3ccSAndroid Build Coastguard Worker const int pre_stride = iter;
78*77c1e3ccSAndroid Build Coastguard Worker
79*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < MAX_SB_SQUARE; ++i) {
80*77c1e3ccSAndroid Build Coastguard Worker pre[i] = UINT8_MAX;
81*77c1e3ccSAndroid Build Coastguard Worker wsrc[i] = UINT8_MAX * kMaskMax * kMaskMax;
82*77c1e3ccSAndroid Build Coastguard Worker mask[i] = kMaskMax * kMaskMax;
83*77c1e3ccSAndroid Build Coastguard Worker }
84*77c1e3ccSAndroid Build Coastguard Worker
85*77c1e3ccSAndroid Build Coastguard Worker unsigned int ref_sse, tst_sse;
86*77c1e3ccSAndroid Build Coastguard Worker const unsigned int ref_res =
87*77c1e3ccSAndroid Build Coastguard Worker params_.ref_func(pre, pre_stride, wsrc, mask, &ref_sse);
88*77c1e3ccSAndroid Build Coastguard Worker unsigned int tst_res;
89*77c1e3ccSAndroid Build Coastguard Worker API_REGISTER_STATE_CHECK(
90*77c1e3ccSAndroid Build Coastguard Worker tst_res = params_.tst_func(pre, pre_stride, wsrc, mask, &tst_sse));
91*77c1e3ccSAndroid Build Coastguard Worker
92*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(ref_res, tst_res);
93*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(ref_sse, tst_sse);
94*77c1e3ccSAndroid Build Coastguard Worker }
95*77c1e3ccSAndroid Build Coastguard Worker }
96*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(ObmcVarianceTest,DISABLED_Speed)97*77c1e3ccSAndroid Build Coastguard Worker TEST_P(ObmcVarianceTest, DISABLED_Speed) {
98*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, uint8_t, pre[MAX_SB_SQUARE]);
99*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
100*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
101*77c1e3ccSAndroid Build Coastguard Worker
102*77c1e3ccSAndroid Build Coastguard Worker const int pre_stride = this->rng_(MAX_SB_SIZE + 1);
103*77c1e3ccSAndroid Build Coastguard Worker
104*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < MAX_SB_SQUARE; ++i) {
105*77c1e3ccSAndroid Build Coastguard Worker pre[i] = this->rng_.Rand8();
106*77c1e3ccSAndroid Build Coastguard Worker wsrc[i] = this->rng_.Rand8() * this->rng_(kMaskMax * kMaskMax + 1);
107*77c1e3ccSAndroid Build Coastguard Worker mask[i] = this->rng_(kMaskMax * kMaskMax + 1);
108*77c1e3ccSAndroid Build Coastguard Worker }
109*77c1e3ccSAndroid Build Coastguard Worker
110*77c1e3ccSAndroid Build Coastguard Worker const int num_loops = 1000000;
111*77c1e3ccSAndroid Build Coastguard Worker unsigned int ref_sse, tst_sse;
112*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer ref_timer, test_timer;
113*77c1e3ccSAndroid Build Coastguard Worker
114*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer_start(&ref_timer);
115*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < num_loops; ++i) {
116*77c1e3ccSAndroid Build Coastguard Worker params_.ref_func(pre, pre_stride, wsrc, mask, &ref_sse);
117*77c1e3ccSAndroid Build Coastguard Worker }
118*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer_mark(&ref_timer);
119*77c1e3ccSAndroid Build Coastguard Worker const int elapsed_time_c =
120*77c1e3ccSAndroid Build Coastguard Worker static_cast<int>(aom_usec_timer_elapsed(&ref_timer));
121*77c1e3ccSAndroid Build Coastguard Worker
122*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer_start(&test_timer);
123*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < num_loops; ++i) {
124*77c1e3ccSAndroid Build Coastguard Worker params_.tst_func(pre, pre_stride, wsrc, mask, &tst_sse);
125*77c1e3ccSAndroid Build Coastguard Worker }
126*77c1e3ccSAndroid Build Coastguard Worker aom_usec_timer_mark(&test_timer);
127*77c1e3ccSAndroid Build Coastguard Worker const int elapsed_time_simd =
128*77c1e3ccSAndroid Build Coastguard Worker static_cast<int>(aom_usec_timer_elapsed(&test_timer));
129*77c1e3ccSAndroid Build Coastguard Worker
130*77c1e3ccSAndroid Build Coastguard Worker printf("c_time=%d \t simd_time=%d \t gain=%f \n", elapsed_time_c,
131*77c1e3ccSAndroid Build Coastguard Worker elapsed_time_simd,
132*77c1e3ccSAndroid Build Coastguard Worker static_cast<double>(elapsed_time_c) / elapsed_time_simd);
133*77c1e3ccSAndroid Build Coastguard Worker }
134*77c1e3ccSAndroid Build Coastguard Worker
135*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE4_1
136*77c1e3ccSAndroid Build Coastguard Worker const ObmcVarianceTest::ParamType sse4_functions[] = {
137*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance128x128_c, aom_obmc_variance128x128_sse4_1),
138*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance128x64_c, aom_obmc_variance128x64_sse4_1),
139*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x128_c, aom_obmc_variance64x128_sse4_1),
140*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x64_c, aom_obmc_variance64x64_sse4_1),
141*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x32_c, aom_obmc_variance64x32_sse4_1),
142*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x64_c, aom_obmc_variance32x64_sse4_1),
143*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x32_c, aom_obmc_variance32x32_sse4_1),
144*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x16_c, aom_obmc_variance32x16_sse4_1),
145*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x32_c, aom_obmc_variance16x32_sse4_1),
146*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x16_c, aom_obmc_variance16x16_sse4_1),
147*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x8_c, aom_obmc_variance16x8_sse4_1),
148*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x16_c, aom_obmc_variance8x16_sse4_1),
149*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x8_c, aom_obmc_variance8x8_sse4_1),
150*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x4_c, aom_obmc_variance8x4_sse4_1),
151*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x8_c, aom_obmc_variance4x8_sse4_1),
152*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x4_c, aom_obmc_variance4x4_sse4_1),
153*77c1e3ccSAndroid Build Coastguard Worker
154*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x16_c, aom_obmc_variance64x16_sse4_1),
155*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x64_c, aom_obmc_variance16x64_sse4_1),
156*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x8_c, aom_obmc_variance32x8_sse4_1),
157*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x32_c, aom_obmc_variance8x32_sse4_1),
158*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x4_c, aom_obmc_variance16x4_sse4_1),
159*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x16_c, aom_obmc_variance4x16_sse4_1),
160*77c1e3ccSAndroid Build Coastguard Worker };
161*77c1e3ccSAndroid Build Coastguard Worker
162*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE4_1, ObmcVarianceTest,
163*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(sse4_functions));
164*77c1e3ccSAndroid Build Coastguard Worker #endif // HAVE_SSE4_1
165*77c1e3ccSAndroid Build Coastguard Worker
166*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_AVX2
167*77c1e3ccSAndroid Build Coastguard Worker const ObmcVarianceTest::ParamType avx2_functions[] = {
168*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance128x128_c, aom_obmc_variance128x128_avx2),
169*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance128x64_c, aom_obmc_variance128x64_avx2),
170*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x128_c, aom_obmc_variance64x128_avx2),
171*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x64_c, aom_obmc_variance64x64_avx2),
172*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x32_c, aom_obmc_variance64x32_avx2),
173*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x64_c, aom_obmc_variance32x64_avx2),
174*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x32_c, aom_obmc_variance32x32_avx2),
175*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x16_c, aom_obmc_variance32x16_avx2),
176*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x32_c, aom_obmc_variance16x32_avx2),
177*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x16_c, aom_obmc_variance16x16_avx2),
178*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x8_c, aom_obmc_variance16x8_avx2),
179*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x16_c, aom_obmc_variance8x16_avx2),
180*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x8_c, aom_obmc_variance8x8_avx2),
181*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x4_c, aom_obmc_variance8x4_avx2),
182*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x8_c, aom_obmc_variance4x8_avx2),
183*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x4_c, aom_obmc_variance4x4_avx2),
184*77c1e3ccSAndroid Build Coastguard Worker
185*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x16_c, aom_obmc_variance64x16_avx2),
186*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x64_c, aom_obmc_variance16x64_avx2),
187*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x8_c, aom_obmc_variance32x8_avx2),
188*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x32_c, aom_obmc_variance8x32_avx2),
189*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x4_c, aom_obmc_variance16x4_avx2),
190*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x16_c, aom_obmc_variance4x16_avx2),
191*77c1e3ccSAndroid Build Coastguard Worker };
192*77c1e3ccSAndroid Build Coastguard Worker
193*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, ObmcVarianceTest,
194*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(avx2_functions));
195*77c1e3ccSAndroid Build Coastguard Worker #endif // HAVE_AVX2
196*77c1e3ccSAndroid Build Coastguard Worker
197*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON
198*77c1e3ccSAndroid Build Coastguard Worker const ObmcVarianceTest::ParamType neon_functions[] = {
199*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance128x128_c, aom_obmc_variance128x128_neon),
200*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance128x64_c, aom_obmc_variance128x64_neon),
201*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x128_c, aom_obmc_variance64x128_neon),
202*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x64_c, aom_obmc_variance64x64_neon),
203*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x32_c, aom_obmc_variance64x32_neon),
204*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x64_c, aom_obmc_variance32x64_neon),
205*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x32_c, aom_obmc_variance32x32_neon),
206*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x16_c, aom_obmc_variance32x16_neon),
207*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x32_c, aom_obmc_variance16x32_neon),
208*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x16_c, aom_obmc_variance16x16_neon),
209*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x8_c, aom_obmc_variance16x8_neon),
210*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x16_c, aom_obmc_variance8x16_neon),
211*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x8_c, aom_obmc_variance8x8_neon),
212*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x4_c, aom_obmc_variance8x4_neon),
213*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x8_c, aom_obmc_variance4x8_neon),
214*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x4_c, aom_obmc_variance4x4_neon),
215*77c1e3ccSAndroid Build Coastguard Worker
216*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance64x16_c, aom_obmc_variance64x16_neon),
217*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x64_c, aom_obmc_variance16x64_neon),
218*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance32x8_c, aom_obmc_variance32x8_neon),
219*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance8x32_c, aom_obmc_variance8x32_neon),
220*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance16x4_c, aom_obmc_variance16x4_neon),
221*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_obmc_variance4x16_c, aom_obmc_variance4x16_neon),
222*77c1e3ccSAndroid Build Coastguard Worker };
223*77c1e3ccSAndroid Build Coastguard Worker
224*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, ObmcVarianceTest,
225*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(neon_functions));
226*77c1e3ccSAndroid Build Coastguard Worker #endif // HAVE_NEON
227*77c1e3ccSAndroid Build Coastguard Worker
228*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
229*77c1e3ccSAndroid Build Coastguard Worker // High bit-depth
230*77c1e3ccSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////////
231*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH && !CONFIG_REALTIME_ONLY
232*77c1e3ccSAndroid Build Coastguard Worker class ObmcVarianceHBDTest : public FunctionEquivalenceTest<ObmcVarF> {};
233*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(ObmcVarianceHBDTest);
234*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(ObmcVarianceHBDTest,RandomValues)235*77c1e3ccSAndroid Build Coastguard Worker TEST_P(ObmcVarianceHBDTest, RandomValues) {
236*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, uint16_t, pre[MAX_SB_SQUARE]);
237*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
238*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
239*77c1e3ccSAndroid Build Coastguard Worker
240*77c1e3ccSAndroid Build Coastguard Worker for (int iter = 0; iter < kIterations && !HasFatalFailure(); ++iter) {
241*77c1e3ccSAndroid Build Coastguard Worker const int pre_stride = this->rng_(MAX_SB_SIZE + 1);
242*77c1e3ccSAndroid Build Coastguard Worker
243*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < MAX_SB_SQUARE; ++i) {
244*77c1e3ccSAndroid Build Coastguard Worker pre[i] = this->rng_(1 << params_.bit_depth);
245*77c1e3ccSAndroid Build Coastguard Worker wsrc[i] = this->rng_(1 << params_.bit_depth) *
246*77c1e3ccSAndroid Build Coastguard Worker this->rng_(kMaskMax * kMaskMax + 1);
247*77c1e3ccSAndroid Build Coastguard Worker mask[i] = this->rng_(kMaskMax * kMaskMax + 1);
248*77c1e3ccSAndroid Build Coastguard Worker }
249*77c1e3ccSAndroid Build Coastguard Worker
250*77c1e3ccSAndroid Build Coastguard Worker unsigned int ref_sse, tst_sse;
251*77c1e3ccSAndroid Build Coastguard Worker const unsigned int ref_res = params_.ref_func(
252*77c1e3ccSAndroid Build Coastguard Worker CONVERT_TO_BYTEPTR(pre), pre_stride, wsrc, mask, &ref_sse);
253*77c1e3ccSAndroid Build Coastguard Worker unsigned int tst_res;
254*77c1e3ccSAndroid Build Coastguard Worker API_REGISTER_STATE_CHECK(tst_res = params_.tst_func(CONVERT_TO_BYTEPTR(pre),
255*77c1e3ccSAndroid Build Coastguard Worker pre_stride, wsrc, mask,
256*77c1e3ccSAndroid Build Coastguard Worker &tst_sse));
257*77c1e3ccSAndroid Build Coastguard Worker
258*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(ref_res, tst_res);
259*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(ref_sse, tst_sse);
260*77c1e3ccSAndroid Build Coastguard Worker }
261*77c1e3ccSAndroid Build Coastguard Worker }
262*77c1e3ccSAndroid Build Coastguard Worker
TEST_P(ObmcVarianceHBDTest,ExtremeValues)263*77c1e3ccSAndroid Build Coastguard Worker TEST_P(ObmcVarianceHBDTest, ExtremeValues) {
264*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, uint16_t, pre[MAX_SB_SQUARE]);
265*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, wsrc[MAX_SB_SQUARE]);
266*77c1e3ccSAndroid Build Coastguard Worker DECLARE_ALIGNED(32, int32_t, mask[MAX_SB_SQUARE]);
267*77c1e3ccSAndroid Build Coastguard Worker
268*77c1e3ccSAndroid Build Coastguard Worker for (int iter = 0; iter < MAX_SB_SIZE && !HasFatalFailure(); ++iter) {
269*77c1e3ccSAndroid Build Coastguard Worker const int pre_stride = iter;
270*77c1e3ccSAndroid Build Coastguard Worker
271*77c1e3ccSAndroid Build Coastguard Worker for (int i = 0; i < MAX_SB_SQUARE; ++i) {
272*77c1e3ccSAndroid Build Coastguard Worker pre[i] = (1 << params_.bit_depth) - 1;
273*77c1e3ccSAndroid Build Coastguard Worker wsrc[i] = ((1 << params_.bit_depth) - 1) * kMaskMax * kMaskMax;
274*77c1e3ccSAndroid Build Coastguard Worker mask[i] = kMaskMax * kMaskMax;
275*77c1e3ccSAndroid Build Coastguard Worker }
276*77c1e3ccSAndroid Build Coastguard Worker
277*77c1e3ccSAndroid Build Coastguard Worker unsigned int ref_sse, tst_sse;
278*77c1e3ccSAndroid Build Coastguard Worker const unsigned int ref_res = params_.ref_func(
279*77c1e3ccSAndroid Build Coastguard Worker CONVERT_TO_BYTEPTR(pre), pre_stride, wsrc, mask, &ref_sse);
280*77c1e3ccSAndroid Build Coastguard Worker unsigned int tst_res;
281*77c1e3ccSAndroid Build Coastguard Worker API_REGISTER_STATE_CHECK(tst_res = params_.tst_func(CONVERT_TO_BYTEPTR(pre),
282*77c1e3ccSAndroid Build Coastguard Worker pre_stride, wsrc, mask,
283*77c1e3ccSAndroid Build Coastguard Worker &tst_sse));
284*77c1e3ccSAndroid Build Coastguard Worker
285*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(ref_res, tst_res);
286*77c1e3ccSAndroid Build Coastguard Worker ASSERT_EQ(ref_sse, tst_sse);
287*77c1e3ccSAndroid Build Coastguard Worker }
288*77c1e3ccSAndroid Build Coastguard Worker }
289*77c1e3ccSAndroid Build Coastguard Worker
290*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON
291*77c1e3ccSAndroid Build Coastguard Worker ObmcVarianceHBDTest::ParamType neon_functions_hbd[] = {
292*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance128x128_c,
293*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance128x128_neon, 8),
294*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance128x64_c,
295*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance128x64_neon, 8),
296*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance64x128_c,
297*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance64x128_neon, 8),
298*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance64x64_c,
299*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance64x64_neon, 8),
300*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance64x32_c,
301*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance64x32_neon, 8),
302*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance32x64_c,
303*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance32x64_neon, 8),
304*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance32x32_c,
305*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance32x32_neon, 8),
306*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance32x16_c,
307*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance32x16_neon, 8),
308*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x32_c,
309*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x32_neon, 8),
310*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x16_c,
311*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x16_neon, 8),
312*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x8_c,
313*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x8_neon, 8),
314*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance8x16_c,
315*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance8x16_neon, 8),
316*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance8x8_c, aom_highbd_8_obmc_variance8x8_neon,
317*77c1e3ccSAndroid Build Coastguard Worker 8),
318*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance8x4_c, aom_highbd_8_obmc_variance8x4_neon,
319*77c1e3ccSAndroid Build Coastguard Worker 8),
320*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance4x8_c, aom_highbd_8_obmc_variance4x8_neon,
321*77c1e3ccSAndroid Build Coastguard Worker 8),
322*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance4x4_c, aom_highbd_8_obmc_variance4x4_neon,
323*77c1e3ccSAndroid Build Coastguard Worker 8),
324*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance128x128_c,
325*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance128x128_neon, 10),
326*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance128x64_c,
327*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance128x64_neon, 10),
328*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance64x128_c,
329*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance64x128_neon, 10),
330*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance64x64_c,
331*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance64x64_neon, 10),
332*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance64x32_c,
333*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance64x32_neon, 10),
334*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance32x64_c,
335*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance32x64_neon, 10),
336*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance32x32_c,
337*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance32x32_neon, 10),
338*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance32x16_c,
339*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance32x16_neon, 10),
340*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x32_c,
341*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x32_neon, 10),
342*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x16_c,
343*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x16_neon, 10),
344*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x8_c,
345*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x8_neon, 10),
346*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance8x16_c,
347*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance8x16_neon, 10),
348*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance8x8_c,
349*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance8x8_neon, 10),
350*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance8x4_c,
351*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance8x4_neon, 10),
352*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance4x8_c,
353*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance4x8_neon, 10),
354*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance4x4_c,
355*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance4x4_neon, 10),
356*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance128x128_c,
357*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance128x128_neon, 12),
358*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance128x64_c,
359*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance128x64_neon, 12),
360*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance64x128_c,
361*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance64x128_neon, 12),
362*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance64x64_c,
363*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance64x64_neon, 12),
364*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance64x32_c,
365*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance64x32_neon, 12),
366*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance32x64_c,
367*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance32x64_neon, 12),
368*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance32x32_c,
369*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance32x32_neon, 12),
370*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance32x16_c,
371*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance32x16_neon, 12),
372*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x32_c,
373*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x32_neon, 12),
374*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x16_c,
375*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x16_neon, 12),
376*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x8_c,
377*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x8_neon, 12),
378*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance8x16_c,
379*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance8x16_neon, 12),
380*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance8x8_c,
381*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance8x8_neon, 12),
382*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance8x4_c,
383*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance8x4_neon, 12),
384*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance4x8_c,
385*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance4x8_neon, 12),
386*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance4x4_c,
387*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance4x4_neon, 12),
388*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance64x16_c,
389*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance64x16_neon, 8),
390*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x64_c,
391*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x64_neon, 8),
392*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance32x8_c,
393*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance32x8_neon, 8),
394*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance8x32_c,
395*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance8x32_neon, 8),
396*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x4_c,
397*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x4_neon, 8),
398*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance4x16_c,
399*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance4x16_neon, 8),
400*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance64x16_c,
401*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance64x16_neon, 10),
402*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x64_c,
403*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x64_neon, 10),
404*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance32x8_c,
405*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance32x8_neon, 10),
406*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance8x32_c,
407*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance8x32_neon, 10),
408*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x4_c,
409*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x4_neon, 10),
410*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance4x16_c,
411*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance4x16_neon, 10),
412*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance64x16_c,
413*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance64x16_neon, 12),
414*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x64_c,
415*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x64_neon, 12),
416*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance32x8_c,
417*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance32x8_neon, 12),
418*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance8x32_c,
419*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance8x32_neon, 12),
420*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x4_c,
421*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x4_neon, 12),
422*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance4x16_c,
423*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance4x16_neon, 12),
424*77c1e3ccSAndroid Build Coastguard Worker };
425*77c1e3ccSAndroid Build Coastguard Worker
426*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, ObmcVarianceHBDTest,
427*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(neon_functions_hbd));
428*77c1e3ccSAndroid Build Coastguard Worker #endif // HAVE_NEON
429*77c1e3ccSAndroid Build Coastguard Worker
430*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE4_1
431*77c1e3ccSAndroid Build Coastguard Worker ObmcVarianceHBDTest::ParamType sse4_functions_hbd[] = {
432*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance128x128_c,
433*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance128x128_sse4_1, 8),
434*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance128x64_c,
435*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance128x64_sse4_1, 8),
436*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance64x128_c,
437*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance64x128_sse4_1, 8),
438*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance64x64_c,
439*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance64x64_sse4_1, 8),
440*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance64x32_c,
441*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance64x32_sse4_1, 8),
442*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance32x64_c,
443*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance32x64_sse4_1, 8),
444*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance32x32_c,
445*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance32x32_sse4_1, 8),
446*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance32x16_c,
447*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance32x16_sse4_1, 8),
448*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x32_c,
449*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x32_sse4_1, 8),
450*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x16_c,
451*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x16_sse4_1, 8),
452*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x8_c,
453*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x8_sse4_1, 8),
454*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance8x16_c,
455*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance8x16_sse4_1, 8),
456*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance8x8_c,
457*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance8x8_sse4_1, 8),
458*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance8x4_c,
459*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance8x4_sse4_1, 8),
460*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance4x8_c,
461*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance4x8_sse4_1, 8),
462*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance4x4_c,
463*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance4x4_sse4_1, 8),
464*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance128x128_c,
465*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance128x128_sse4_1, 10),
466*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance128x64_c,
467*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance128x64_sse4_1, 10),
468*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance64x128_c,
469*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance64x128_sse4_1, 10),
470*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance64x64_c,
471*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance64x64_sse4_1, 10),
472*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance64x32_c,
473*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance64x32_sse4_1, 10),
474*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance32x64_c,
475*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance32x64_sse4_1, 10),
476*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance32x32_c,
477*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance32x32_sse4_1, 10),
478*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance32x16_c,
479*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance32x16_sse4_1, 10),
480*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x32_c,
481*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x32_sse4_1, 10),
482*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x16_c,
483*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x16_sse4_1, 10),
484*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x8_c,
485*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x8_sse4_1, 10),
486*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance8x16_c,
487*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance8x16_sse4_1, 10),
488*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance8x8_c,
489*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance8x8_sse4_1, 10),
490*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance8x4_c,
491*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance8x4_sse4_1, 10),
492*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance4x8_c,
493*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance4x8_sse4_1, 10),
494*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance4x4_c,
495*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance4x4_sse4_1, 10),
496*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance128x128_c,
497*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance128x128_sse4_1, 12),
498*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance128x64_c,
499*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance128x64_sse4_1, 12),
500*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance64x128_c,
501*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance64x128_sse4_1, 12),
502*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance64x64_c,
503*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance64x64_sse4_1, 12),
504*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance64x32_c,
505*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance64x32_sse4_1, 12),
506*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance32x64_c,
507*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance32x64_sse4_1, 12),
508*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance32x32_c,
509*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance32x32_sse4_1, 12),
510*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance32x16_c,
511*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance32x16_sse4_1, 12),
512*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x32_c,
513*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x32_sse4_1, 12),
514*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x16_c,
515*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x16_sse4_1, 12),
516*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x8_c,
517*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x8_sse4_1, 12),
518*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance8x16_c,
519*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance8x16_sse4_1, 12),
520*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance8x8_c,
521*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance8x8_sse4_1, 12),
522*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance8x4_c,
523*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance8x4_sse4_1, 12),
524*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance4x8_c,
525*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance4x8_sse4_1, 12),
526*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance4x4_c,
527*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance4x4_sse4_1, 12),
528*77c1e3ccSAndroid Build Coastguard Worker
529*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance64x16_c,
530*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance64x16_sse4_1, 8),
531*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x64_c,
532*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x64_sse4_1, 8),
533*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance32x8_c,
534*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance32x8_sse4_1, 8),
535*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance8x32_c,
536*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance8x32_sse4_1, 8),
537*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance16x4_c,
538*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance16x4_sse4_1, 8),
539*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_8_obmc_variance4x16_c,
540*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_8_obmc_variance4x16_sse4_1, 8),
541*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance64x16_c,
542*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance64x16_sse4_1, 10),
543*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x64_c,
544*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x64_sse4_1, 10),
545*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance32x8_c,
546*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance32x8_sse4_1, 10),
547*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance8x32_c,
548*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance8x32_sse4_1, 10),
549*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance16x4_c,
550*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance16x4_sse4_1, 10),
551*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_10_obmc_variance4x16_c,
552*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_10_obmc_variance4x16_sse4_1, 10),
553*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance64x16_c,
554*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance64x16_sse4_1, 12),
555*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x64_c,
556*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x64_sse4_1, 12),
557*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance32x8_c,
558*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance32x8_sse4_1, 12),
559*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance8x32_c,
560*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance8x32_sse4_1, 12),
561*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance16x4_c,
562*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance16x4_sse4_1, 12),
563*77c1e3ccSAndroid Build Coastguard Worker TestFuncs(aom_highbd_12_obmc_variance4x16_c,
564*77c1e3ccSAndroid Build Coastguard Worker aom_highbd_12_obmc_variance4x16_sse4_1, 12),
565*77c1e3ccSAndroid Build Coastguard Worker };
566*77c1e3ccSAndroid Build Coastguard Worker
567*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE4_1, ObmcVarianceHBDTest,
568*77c1e3ccSAndroid Build Coastguard Worker ::testing::ValuesIn(sse4_functions_hbd));
569*77c1e3ccSAndroid Build Coastguard Worker #endif // HAVE_SSE4_1
570*77c1e3ccSAndroid Build Coastguard Worker #endif // CONFIG_AV1_HIGHBITDEPTH && !CONFIG_REALTIME_ONLY
571*77c1e3ccSAndroid Build Coastguard Worker } // namespace
572