xref: /aosp_15_r20/external/libaom/test/lpf_test.cc (revision 77c1e3ccc04c968bd2bc212e87364f250e820521)
1*77c1e3ccSAndroid Build Coastguard Worker /*
2*77c1e3ccSAndroid Build Coastguard Worker  * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3*77c1e3ccSAndroid Build Coastguard Worker  *
4*77c1e3ccSAndroid Build Coastguard Worker  * This source code is subject to the terms of the BSD 2 Clause License and
5*77c1e3ccSAndroid Build Coastguard Worker  * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6*77c1e3ccSAndroid Build Coastguard Worker  * was not distributed with this source code in the LICENSE file, you can
7*77c1e3ccSAndroid Build Coastguard Worker  * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8*77c1e3ccSAndroid Build Coastguard Worker  * Media Patent License 1.0 was not distributed with this source code in the
9*77c1e3ccSAndroid Build Coastguard Worker  * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*77c1e3ccSAndroid Build Coastguard Worker  */
11*77c1e3ccSAndroid Build Coastguard Worker 
12*77c1e3ccSAndroid Build Coastguard Worker #include <cmath>
13*77c1e3ccSAndroid Build Coastguard Worker #include <cstdlib>
14*77c1e3ccSAndroid Build Coastguard Worker #include <string>
15*77c1e3ccSAndroid Build Coastguard Worker #include <tuple>
16*77c1e3ccSAndroid Build Coastguard Worker 
17*77c1e3ccSAndroid Build Coastguard Worker #include "gtest/gtest.h"
18*77c1e3ccSAndroid Build Coastguard Worker 
19*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_config.h"
20*77c1e3ccSAndroid Build Coastguard Worker #include "config/aom_dsp_rtcd.h"
21*77c1e3ccSAndroid Build Coastguard Worker 
22*77c1e3ccSAndroid Build Coastguard Worker #include "test/acm_random.h"
23*77c1e3ccSAndroid Build Coastguard Worker #include "test/register_state_check.h"
24*77c1e3ccSAndroid Build Coastguard Worker #include "test/util.h"
25*77c1e3ccSAndroid Build Coastguard Worker #include "av1/common/av1_loopfilter.h"
26*77c1e3ccSAndroid Build Coastguard Worker #include "av1/common/entropy.h"
27*77c1e3ccSAndroid Build Coastguard Worker #include "aom/aom_integer.h"
28*77c1e3ccSAndroid Build Coastguard Worker 
29*77c1e3ccSAndroid Build Coastguard Worker using libaom_test::ACMRandom;
30*77c1e3ccSAndroid Build Coastguard Worker 
31*77c1e3ccSAndroid Build Coastguard Worker namespace {
32*77c1e3ccSAndroid Build Coastguard Worker // Horizontally and Vertically need 32x32: 8  Coeffs preceeding filtered section
33*77c1e3ccSAndroid Build Coastguard Worker //                                         16 Coefs within filtered section
34*77c1e3ccSAndroid Build Coastguard Worker //                                         8  Coeffs following filtered section
35*77c1e3ccSAndroid Build Coastguard Worker const int kNumCoeffs = 1024;
36*77c1e3ccSAndroid Build Coastguard Worker 
37*77c1e3ccSAndroid Build Coastguard Worker const int number_of_iterations = 10000;
38*77c1e3ccSAndroid Build Coastguard Worker 
39*77c1e3ccSAndroid Build Coastguard Worker const int kSpeedTestNum = 500000;
40*77c1e3ccSAndroid Build Coastguard Worker 
41*77c1e3ccSAndroid Build Coastguard Worker #define LOOP_PARAM \
42*77c1e3ccSAndroid Build Coastguard Worker   int p, const uint8_t *blimit, const uint8_t *limit, const uint8_t *thresh
43*77c1e3ccSAndroid Build Coastguard Worker #define DUAL_LOOP_PARAM                                                      \
44*77c1e3ccSAndroid Build Coastguard Worker   int p, const uint8_t *blimit0, const uint8_t *limit0,                      \
45*77c1e3ccSAndroid Build Coastguard Worker       const uint8_t *thresh0, const uint8_t *blimit1, const uint8_t *limit1, \
46*77c1e3ccSAndroid Build Coastguard Worker       const uint8_t *thresh1
47*77c1e3ccSAndroid Build Coastguard Worker 
48*77c1e3ccSAndroid Build Coastguard Worker typedef void (*loop_op_t)(uint8_t *s, LOOP_PARAM);
49*77c1e3ccSAndroid Build Coastguard Worker typedef void (*dual_loop_op_t)(uint8_t *s, DUAL_LOOP_PARAM);
50*77c1e3ccSAndroid Build Coastguard Worker typedef void (*hbdloop_op_t)(uint16_t *s, LOOP_PARAM, int bd);
51*77c1e3ccSAndroid Build Coastguard Worker typedef void (*hbddual_loop_op_t)(uint16_t *s, DUAL_LOOP_PARAM, int bd);
52*77c1e3ccSAndroid Build Coastguard Worker 
53*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<hbdloop_op_t, hbdloop_op_t, int> hbdloop_param_t;
54*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<hbddual_loop_op_t, hbddual_loop_op_t, int>
55*77c1e3ccSAndroid Build Coastguard Worker     hbddual_loop_param_t;
56*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<loop_op_t, loop_op_t, int> loop_param_t;
57*77c1e3ccSAndroid Build Coastguard Worker typedef std::tuple<dual_loop_op_t, dual_loop_op_t, int> dual_loop_param_t;
58*77c1e3ccSAndroid Build Coastguard Worker 
59*77c1e3ccSAndroid Build Coastguard Worker template <typename Pixel_t, int PIXEL_WIDTH_t>
InitInput(Pixel_t * s,Pixel_t * ref_s,ACMRandom * rnd,const uint8_t limit,const int mask,const int32_t p,const int i)60*77c1e3ccSAndroid Build Coastguard Worker void InitInput(Pixel_t *s, Pixel_t *ref_s, ACMRandom *rnd, const uint8_t limit,
61*77c1e3ccSAndroid Build Coastguard Worker                const int mask, const int32_t p, const int i) {
62*77c1e3ccSAndroid Build Coastguard Worker   uint16_t tmp_s[kNumCoeffs];
63*77c1e3ccSAndroid Build Coastguard Worker 
64*77c1e3ccSAndroid Build Coastguard Worker   for (int j = 0; j < kNumCoeffs;) {
65*77c1e3ccSAndroid Build Coastguard Worker     const uint8_t val = rnd->Rand8();
66*77c1e3ccSAndroid Build Coastguard Worker     if (val & 0x80) {  // 50% chance to choose a new value.
67*77c1e3ccSAndroid Build Coastguard Worker       tmp_s[j] = rnd->Rand16();
68*77c1e3ccSAndroid Build Coastguard Worker       j++;
69*77c1e3ccSAndroid Build Coastguard Worker     } else {  // 50% chance to repeat previous value in row X times.
70*77c1e3ccSAndroid Build Coastguard Worker       int k = 0;
71*77c1e3ccSAndroid Build Coastguard Worker       while (k++ < ((val & 0x1f) + 1) && j < kNumCoeffs) {
72*77c1e3ccSAndroid Build Coastguard Worker         if (j < 1) {
73*77c1e3ccSAndroid Build Coastguard Worker           tmp_s[j] = rnd->Rand16();
74*77c1e3ccSAndroid Build Coastguard Worker         } else if (val & 0x20) {  // Increment by a value within the limit.
75*77c1e3ccSAndroid Build Coastguard Worker           tmp_s[j] = static_cast<uint16_t>(tmp_s[j - 1] + (limit - 1));
76*77c1e3ccSAndroid Build Coastguard Worker         } else {  // Decrement by a value within the limit.
77*77c1e3ccSAndroid Build Coastguard Worker           tmp_s[j] = static_cast<uint16_t>(tmp_s[j - 1] - (limit - 1));
78*77c1e3ccSAndroid Build Coastguard Worker         }
79*77c1e3ccSAndroid Build Coastguard Worker         j++;
80*77c1e3ccSAndroid Build Coastguard Worker       }
81*77c1e3ccSAndroid Build Coastguard Worker     }
82*77c1e3ccSAndroid Build Coastguard Worker   }
83*77c1e3ccSAndroid Build Coastguard Worker 
84*77c1e3ccSAndroid Build Coastguard Worker   for (int j = 0; j < kNumCoeffs;) {
85*77c1e3ccSAndroid Build Coastguard Worker     const uint8_t val = rnd->Rand8();
86*77c1e3ccSAndroid Build Coastguard Worker     if (val & 0x80) {
87*77c1e3ccSAndroid Build Coastguard Worker       j++;
88*77c1e3ccSAndroid Build Coastguard Worker     } else {  // 50% chance to repeat previous value in column X times.
89*77c1e3ccSAndroid Build Coastguard Worker       int k = 0;
90*77c1e3ccSAndroid Build Coastguard Worker       while (k++ < ((val & 0x1f) + 1) && j < kNumCoeffs) {
91*77c1e3ccSAndroid Build Coastguard Worker         if (j < 1) {
92*77c1e3ccSAndroid Build Coastguard Worker           tmp_s[j] = rnd->Rand16();
93*77c1e3ccSAndroid Build Coastguard Worker         } else if (val & 0x20) {  // Increment by a value within the limit.
94*77c1e3ccSAndroid Build Coastguard Worker           tmp_s[(j % 32) * 32 + j / 32] = static_cast<uint16_t>(
95*77c1e3ccSAndroid Build Coastguard Worker               tmp_s[((j - 1) % 32) * 32 + (j - 1) / 32] + (limit - 1));
96*77c1e3ccSAndroid Build Coastguard Worker         } else {  // Decrement by a value within the limit.
97*77c1e3ccSAndroid Build Coastguard Worker           tmp_s[(j % 32) * 32 + j / 32] = static_cast<uint16_t>(
98*77c1e3ccSAndroid Build Coastguard Worker               tmp_s[((j - 1) % 32) * 32 + (j - 1) / 32] - (limit - 1));
99*77c1e3ccSAndroid Build Coastguard Worker         }
100*77c1e3ccSAndroid Build Coastguard Worker         j++;
101*77c1e3ccSAndroid Build Coastguard Worker       }
102*77c1e3ccSAndroid Build Coastguard Worker     }
103*77c1e3ccSAndroid Build Coastguard Worker   }
104*77c1e3ccSAndroid Build Coastguard Worker 
105*77c1e3ccSAndroid Build Coastguard Worker   for (int j = 0; j < kNumCoeffs; j++) {
106*77c1e3ccSAndroid Build Coastguard Worker     if (i % 2) {
107*77c1e3ccSAndroid Build Coastguard Worker       s[j] = tmp_s[j] & mask;
108*77c1e3ccSAndroid Build Coastguard Worker     } else {
109*77c1e3ccSAndroid Build Coastguard Worker       s[j] = tmp_s[p * (j % p) + j / p] & mask;
110*77c1e3ccSAndroid Build Coastguard Worker     }
111*77c1e3ccSAndroid Build Coastguard Worker     ref_s[j] = s[j];
112*77c1e3ccSAndroid Build Coastguard Worker   }
113*77c1e3ccSAndroid Build Coastguard Worker }
114*77c1e3ccSAndroid Build Coastguard Worker 
GetOuterThresh(ACMRandom * rnd)115*77c1e3ccSAndroid Build Coastguard Worker uint8_t GetOuterThresh(ACMRandom *rnd) {
116*77c1e3ccSAndroid Build Coastguard Worker   return static_cast<uint8_t>(rnd->PseudoUniform(3 * MAX_LOOP_FILTER + 5));
117*77c1e3ccSAndroid Build Coastguard Worker }
118*77c1e3ccSAndroid Build Coastguard Worker 
GetInnerThresh(ACMRandom * rnd)119*77c1e3ccSAndroid Build Coastguard Worker uint8_t GetInnerThresh(ACMRandom *rnd) {
120*77c1e3ccSAndroid Build Coastguard Worker   return static_cast<uint8_t>(rnd->PseudoUniform(MAX_LOOP_FILTER + 1));
121*77c1e3ccSAndroid Build Coastguard Worker }
122*77c1e3ccSAndroid Build Coastguard Worker 
GetHevThresh(ACMRandom * rnd)123*77c1e3ccSAndroid Build Coastguard Worker uint8_t GetHevThresh(ACMRandom *rnd) {
124*77c1e3ccSAndroid Build Coastguard Worker   return static_cast<uint8_t>(rnd->PseudoUniform(MAX_LOOP_FILTER + 1) >> 4);
125*77c1e3ccSAndroid Build Coastguard Worker }
126*77c1e3ccSAndroid Build Coastguard Worker 
127*77c1e3ccSAndroid Build Coastguard Worker template <typename func_type_t, typename params_t>
128*77c1e3ccSAndroid Build Coastguard Worker class LoopTestParam : public ::testing::TestWithParam<params_t> {
129*77c1e3ccSAndroid Build Coastguard Worker  public:
130*77c1e3ccSAndroid Build Coastguard Worker   ~LoopTestParam() override = default;
SetUp()131*77c1e3ccSAndroid Build Coastguard Worker   void SetUp() override {
132*77c1e3ccSAndroid Build Coastguard Worker     loopfilter_op_ = std::get<0>(this->GetParam());
133*77c1e3ccSAndroid Build Coastguard Worker     ref_loopfilter_op_ = std::get<1>(this->GetParam());
134*77c1e3ccSAndroid Build Coastguard Worker     bit_depth_ = std::get<2>(this->GetParam());
135*77c1e3ccSAndroid Build Coastguard Worker     mask_ = (1 << bit_depth_) - 1;
136*77c1e3ccSAndroid Build Coastguard Worker   }
137*77c1e3ccSAndroid Build Coastguard Worker 
138*77c1e3ccSAndroid Build Coastguard Worker  protected:
139*77c1e3ccSAndroid Build Coastguard Worker   int bit_depth_;
140*77c1e3ccSAndroid Build Coastguard Worker   int mask_;
141*77c1e3ccSAndroid Build Coastguard Worker   func_type_t loopfilter_op_;
142*77c1e3ccSAndroid Build Coastguard Worker   func_type_t ref_loopfilter_op_;
143*77c1e3ccSAndroid Build Coastguard Worker };
144*77c1e3ccSAndroid Build Coastguard Worker 
145*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
call_filter(uint16_t * s,LOOP_PARAM,int bd,hbdloop_op_t op)146*77c1e3ccSAndroid Build Coastguard Worker void call_filter(uint16_t *s, LOOP_PARAM, int bd, hbdloop_op_t op) {
147*77c1e3ccSAndroid Build Coastguard Worker   op(s, p, blimit, limit, thresh, bd);
148*77c1e3ccSAndroid Build Coastguard Worker }
call_dualfilter(uint16_t * s,DUAL_LOOP_PARAM,int bd,hbddual_loop_op_t op)149*77c1e3ccSAndroid Build Coastguard Worker void call_dualfilter(uint16_t *s, DUAL_LOOP_PARAM, int bd,
150*77c1e3ccSAndroid Build Coastguard Worker                      hbddual_loop_op_t op) {
151*77c1e3ccSAndroid Build Coastguard Worker   op(s, p, blimit0, limit0, thresh0, blimit1, limit1, thresh1, bd);
152*77c1e3ccSAndroid Build Coastguard Worker }
153*77c1e3ccSAndroid Build Coastguard Worker #endif
call_filter(uint8_t * s,LOOP_PARAM,int bd,loop_op_t op)154*77c1e3ccSAndroid Build Coastguard Worker void call_filter(uint8_t *s, LOOP_PARAM, int bd, loop_op_t op) {
155*77c1e3ccSAndroid Build Coastguard Worker   (void)bd;
156*77c1e3ccSAndroid Build Coastguard Worker   op(s, p, blimit, limit, thresh);
157*77c1e3ccSAndroid Build Coastguard Worker }
call_dualfilter(uint8_t * s,DUAL_LOOP_PARAM,int bd,dual_loop_op_t op)158*77c1e3ccSAndroid Build Coastguard Worker void call_dualfilter(uint8_t *s, DUAL_LOOP_PARAM, int bd, dual_loop_op_t op) {
159*77c1e3ccSAndroid Build Coastguard Worker   (void)bd;
160*77c1e3ccSAndroid Build Coastguard Worker   op(s, p, blimit0, limit0, thresh0, blimit1, limit1, thresh1);
161*77c1e3ccSAndroid Build Coastguard Worker }
162*77c1e3ccSAndroid Build Coastguard Worker 
163*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
164*77c1e3ccSAndroid Build Coastguard Worker typedef LoopTestParam<hbdloop_op_t, hbdloop_param_t> Loop8Test6Param_hbd;
165*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(Loop8Test6Param_hbd);
166*77c1e3ccSAndroid Build Coastguard Worker typedef LoopTestParam<hbddual_loop_op_t, hbddual_loop_param_t>
167*77c1e3ccSAndroid Build Coastguard Worker     Loop8Test9Param_hbd;
168*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(Loop8Test9Param_hbd);
169*77c1e3ccSAndroid Build Coastguard Worker #endif
170*77c1e3ccSAndroid Build Coastguard Worker typedef LoopTestParam<loop_op_t, loop_param_t> Loop8Test6Param_lbd;
171*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(Loop8Test6Param_lbd);
172*77c1e3ccSAndroid Build Coastguard Worker typedef LoopTestParam<dual_loop_op_t, dual_loop_param_t> Loop8Test9Param_lbd;
173*77c1e3ccSAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(Loop8Test9Param_lbd);
174*77c1e3ccSAndroid Build Coastguard Worker 
175*77c1e3ccSAndroid Build Coastguard Worker #define OPCHECK(a, b)                                                          \
176*77c1e3ccSAndroid Build Coastguard Worker   do {                                                                         \
177*77c1e3ccSAndroid Build Coastguard Worker     ACMRandom rnd(ACMRandom::DeterministicSeed());                             \
178*77c1e3ccSAndroid Build Coastguard Worker     const int count_test_block = number_of_iterations;                         \
179*77c1e3ccSAndroid Build Coastguard Worker     const int32_t p = kNumCoeffs / 32;                                         \
180*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, s[kNumCoeffs]);                                      \
181*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, ref_s[kNumCoeffs]);                                  \
182*77c1e3ccSAndroid Build Coastguard Worker     int err_count_total = 0;                                                   \
183*77c1e3ccSAndroid Build Coastguard Worker     int first_failure = -1;                                                    \
184*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < count_test_block; ++i) {                               \
185*77c1e3ccSAndroid Build Coastguard Worker       int err_count = 0;                                                       \
186*77c1e3ccSAndroid Build Coastguard Worker       uint8_t tmp = GetOuterThresh(&rnd);                                      \
187*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t, blimit[16]) = { tmp, tmp, tmp, tmp,   \
188*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
189*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
190*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp }; \
191*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetInnerThresh(&rnd);                                              \
192*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t,                                       \
193*77c1e3ccSAndroid Build Coastguard Worker                       limit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,   \
194*77c1e3ccSAndroid Build Coastguard Worker                                      tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
195*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetHevThresh(&rnd);                                                \
196*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t, thresh[16]) = { tmp, tmp, tmp, tmp,   \
197*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
198*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
199*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp }; \
200*77c1e3ccSAndroid Build Coastguard Worker       InitInput<a, b>(s, ref_s, &rnd, *limit, mask_, p, i);                    \
201*77c1e3ccSAndroid Build Coastguard Worker       call_filter(ref_s + 8 + p * 8, p, blimit, limit, thresh, bit_depth_,     \
202*77c1e3ccSAndroid Build Coastguard Worker                   ref_loopfilter_op_);                                         \
203*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(call_filter(s + 8 + p * 8, p, blimit, limit,    \
204*77c1e3ccSAndroid Build Coastguard Worker                                            thresh, bit_depth_,                 \
205*77c1e3ccSAndroid Build Coastguard Worker                                            loopfilter_op_));                   \
206*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < kNumCoeffs; ++j) {                                   \
207*77c1e3ccSAndroid Build Coastguard Worker         err_count += ref_s[j] != s[j];                                         \
208*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
209*77c1e3ccSAndroid Build Coastguard Worker       if (err_count && !err_count_total) {                                     \
210*77c1e3ccSAndroid Build Coastguard Worker         first_failure = i;                                                     \
211*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
212*77c1e3ccSAndroid Build Coastguard Worker       err_count_total += err_count;                                            \
213*77c1e3ccSAndroid Build Coastguard Worker     }                                                                          \
214*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(0, err_count_total)                                              \
215*77c1e3ccSAndroid Build Coastguard Worker         << "Error: Loop8Test6Param, C output doesn't match SIMD "              \
216*77c1e3ccSAndroid Build Coastguard Worker            "loopfilter output. "                                               \
217*77c1e3ccSAndroid Build Coastguard Worker         << "First failed at test case " << first_failure;                      \
218*77c1e3ccSAndroid Build Coastguard Worker   } while (false)
219*77c1e3ccSAndroid Build Coastguard Worker 
220*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
TEST_P(Loop8Test6Param_hbd,OperationCheck)221*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test6Param_hbd, OperationCheck) { OPCHECK(uint16_t, 16); }
222*77c1e3ccSAndroid Build Coastguard Worker #endif
TEST_P(Loop8Test6Param_lbd,OperationCheck)223*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test6Param_lbd, OperationCheck) { OPCHECK(uint8_t, 8); }
224*77c1e3ccSAndroid Build Coastguard Worker 
225*77c1e3ccSAndroid Build Coastguard Worker #define VALCHECK(a, b)                                                         \
226*77c1e3ccSAndroid Build Coastguard Worker   do {                                                                         \
227*77c1e3ccSAndroid Build Coastguard Worker     ACMRandom rnd(ACMRandom::DeterministicSeed());                             \
228*77c1e3ccSAndroid Build Coastguard Worker     const int count_test_block = number_of_iterations;                         \
229*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, s[kNumCoeffs]);                                      \
230*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, ref_s[kNumCoeffs]);                                  \
231*77c1e3ccSAndroid Build Coastguard Worker     int err_count_total = 0;                                                   \
232*77c1e3ccSAndroid Build Coastguard Worker     int first_failure = -1;                                                    \
233*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < count_test_block; ++i) {                               \
234*77c1e3ccSAndroid Build Coastguard Worker       int err_count = 0;                                                       \
235*77c1e3ccSAndroid Build Coastguard Worker       uint8_t tmp = GetOuterThresh(&rnd);                                      \
236*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t, blimit[16]) = { tmp, tmp, tmp, tmp,   \
237*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
238*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
239*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp }; \
240*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetInnerThresh(&rnd);                                              \
241*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t,                                       \
242*77c1e3ccSAndroid Build Coastguard Worker                       limit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,   \
243*77c1e3ccSAndroid Build Coastguard Worker                                      tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
244*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetHevThresh(&rnd);                                                \
245*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t, thresh[16]) = { tmp, tmp, tmp, tmp,   \
246*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
247*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
248*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp }; \
249*77c1e3ccSAndroid Build Coastguard Worker       int32_t p = kNumCoeffs / 32;                                             \
250*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < kNumCoeffs; ++j) {                                   \
251*77c1e3ccSAndroid Build Coastguard Worker         s[j] = rnd.Rand16() & mask_;                                           \
252*77c1e3ccSAndroid Build Coastguard Worker         ref_s[j] = s[j];                                                       \
253*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
254*77c1e3ccSAndroid Build Coastguard Worker       call_filter(ref_s + 8 + p * 8, p, blimit, limit, thresh, bit_depth_,     \
255*77c1e3ccSAndroid Build Coastguard Worker                   ref_loopfilter_op_);                                         \
256*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(call_filter(s + 8 + p * 8, p, blimit, limit,    \
257*77c1e3ccSAndroid Build Coastguard Worker                                            thresh, bit_depth_,                 \
258*77c1e3ccSAndroid Build Coastguard Worker                                            loopfilter_op_));                   \
259*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < kNumCoeffs; ++j) {                                   \
260*77c1e3ccSAndroid Build Coastguard Worker         err_count += ref_s[j] != s[j];                                         \
261*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
262*77c1e3ccSAndroid Build Coastguard Worker       if (err_count && !err_count_total) {                                     \
263*77c1e3ccSAndroid Build Coastguard Worker         first_failure = i;                                                     \
264*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
265*77c1e3ccSAndroid Build Coastguard Worker       err_count_total += err_count;                                            \
266*77c1e3ccSAndroid Build Coastguard Worker     }                                                                          \
267*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(0, err_count_total)                                              \
268*77c1e3ccSAndroid Build Coastguard Worker         << "Error: Loop8Test6Param, C output doesn't match SIMD "              \
269*77c1e3ccSAndroid Build Coastguard Worker            "loopfilter output. "                                               \
270*77c1e3ccSAndroid Build Coastguard Worker         << "First failed at test case " << first_failure;                      \
271*77c1e3ccSAndroid Build Coastguard Worker   } while (false)
272*77c1e3ccSAndroid Build Coastguard Worker 
273*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
TEST_P(Loop8Test6Param_hbd,ValueCheck)274*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test6Param_hbd, ValueCheck) { VALCHECK(uint16_t, 16); }
275*77c1e3ccSAndroid Build Coastguard Worker #endif
TEST_P(Loop8Test6Param_lbd,ValueCheck)276*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test6Param_lbd, ValueCheck) { VALCHECK(uint8_t, 8); }
277*77c1e3ccSAndroid Build Coastguard Worker 
278*77c1e3ccSAndroid Build Coastguard Worker #define SPEEDCHECK(a, b)                                                      \
279*77c1e3ccSAndroid Build Coastguard Worker   do {                                                                        \
280*77c1e3ccSAndroid Build Coastguard Worker     ACMRandom rnd(ACMRandom::DeterministicSeed());                            \
281*77c1e3ccSAndroid Build Coastguard Worker     const int count_test_block = kSpeedTestNum;                               \
282*77c1e3ccSAndroid Build Coastguard Worker     const int32_t bd = bit_depth_;                                            \
283*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, s[kNumCoeffs]);                                     \
284*77c1e3ccSAndroid Build Coastguard Worker     uint8_t tmp = GetOuterThresh(&rnd);                                       \
285*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                        \
286*77c1e3ccSAndroid Build Coastguard Worker                     blimit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,   \
287*77c1e3ccSAndroid Build Coastguard Worker                                     tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
288*77c1e3ccSAndroid Build Coastguard Worker     tmp = GetInnerThresh(&rnd);                                               \
289*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                        \
290*77c1e3ccSAndroid Build Coastguard Worker                     limit[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,    \
291*77c1e3ccSAndroid Build Coastguard Worker                                    tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp };  \
292*77c1e3ccSAndroid Build Coastguard Worker     tmp = GetHevThresh(&rnd);                                                 \
293*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                        \
294*77c1e3ccSAndroid Build Coastguard Worker                     thresh[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,   \
295*77c1e3ccSAndroid Build Coastguard Worker                                     tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
296*77c1e3ccSAndroid Build Coastguard Worker     int32_t p = kNumCoeffs / 32;                                              \
297*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < kNumCoeffs; ++j) {                                    \
298*77c1e3ccSAndroid Build Coastguard Worker       s[j] = rnd.Rand16() & mask_;                                            \
299*77c1e3ccSAndroid Build Coastguard Worker     }                                                                         \
300*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < count_test_block; ++i) {                              \
301*77c1e3ccSAndroid Build Coastguard Worker       call_filter(s + 8 + p * 8, p, blimit, limit, thresh, bd,                \
302*77c1e3ccSAndroid Build Coastguard Worker                   loopfilter_op_);                                            \
303*77c1e3ccSAndroid Build Coastguard Worker     }                                                                         \
304*77c1e3ccSAndroid Build Coastguard Worker   } while (false)
305*77c1e3ccSAndroid Build Coastguard Worker 
306*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
TEST_P(Loop8Test6Param_hbd,DISABLED_Speed)307*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test6Param_hbd, DISABLED_Speed) { SPEEDCHECK(uint16_t, 16); }
308*77c1e3ccSAndroid Build Coastguard Worker #endif
TEST_P(Loop8Test6Param_lbd,DISABLED_Speed)309*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test6Param_lbd, DISABLED_Speed) { SPEEDCHECK(uint8_t, 8); }
310*77c1e3ccSAndroid Build Coastguard Worker 
311*77c1e3ccSAndroid Build Coastguard Worker #define OPCHECKd(a, b)                                                         \
312*77c1e3ccSAndroid Build Coastguard Worker   do {                                                                         \
313*77c1e3ccSAndroid Build Coastguard Worker     ACMRandom rnd(ACMRandom::DeterministicSeed());                             \
314*77c1e3ccSAndroid Build Coastguard Worker     const int count_test_block = number_of_iterations;                         \
315*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, s[kNumCoeffs]);                                      \
316*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, ref_s[kNumCoeffs]);                                  \
317*77c1e3ccSAndroid Build Coastguard Worker     int err_count_total = 0;                                                   \
318*77c1e3ccSAndroid Build Coastguard Worker     int first_failure = -1;                                                    \
319*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < count_test_block; ++i) {                               \
320*77c1e3ccSAndroid Build Coastguard Worker       int err_count = 0;                                                       \
321*77c1e3ccSAndroid Build Coastguard Worker       uint8_t tmp = GetOuterThresh(&rnd);                                      \
322*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(                                                         \
323*77c1e3ccSAndroid Build Coastguard Worker           16, const uint8_t, blimit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp,    \
324*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp, tmp, tmp,    \
325*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp };            \
326*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetInnerThresh(&rnd);                                              \
327*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t, limit0[16]) = { tmp, tmp, tmp, tmp,   \
328*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
329*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
330*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp }; \
331*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetHevThresh(&rnd);                                                \
332*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(                                                         \
333*77c1e3ccSAndroid Build Coastguard Worker           16, const uint8_t, thresh0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp,    \
334*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp, tmp, tmp,    \
335*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp };            \
336*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetOuterThresh(&rnd);                                              \
337*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(                                                         \
338*77c1e3ccSAndroid Build Coastguard Worker           16, const uint8_t, blimit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp,    \
339*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp, tmp, tmp,    \
340*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp };            \
341*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetInnerThresh(&rnd);                                              \
342*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t, limit1[16]) = { tmp, tmp, tmp, tmp,   \
343*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
344*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
345*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp }; \
346*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetHevThresh(&rnd);                                                \
347*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(                                                         \
348*77c1e3ccSAndroid Build Coastguard Worker           16, const uint8_t, thresh1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp,    \
349*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp, tmp, tmp,    \
350*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp };            \
351*77c1e3ccSAndroid Build Coastguard Worker       int32_t p = kNumCoeffs / 32;                                             \
352*77c1e3ccSAndroid Build Coastguard Worker       const uint8_t limit = *limit0 < *limit1 ? *limit0 : *limit1;             \
353*77c1e3ccSAndroid Build Coastguard Worker       InitInput<a, b>(s, ref_s, &rnd, limit, mask_, p, i);                     \
354*77c1e3ccSAndroid Build Coastguard Worker       call_dualfilter(ref_s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
355*77c1e3ccSAndroid Build Coastguard Worker                       limit1, thresh1, bit_depth_, ref_loopfilter_op_);        \
356*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(                                                \
357*77c1e3ccSAndroid Build Coastguard Worker           call_dualfilter(s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
358*77c1e3ccSAndroid Build Coastguard Worker                           limit1, thresh1, bit_depth_, loopfilter_op_));       \
359*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < kNumCoeffs; ++j) {                                   \
360*77c1e3ccSAndroid Build Coastguard Worker         err_count += ref_s[j] != s[j];                                         \
361*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
362*77c1e3ccSAndroid Build Coastguard Worker       if (err_count && !err_count_total) {                                     \
363*77c1e3ccSAndroid Build Coastguard Worker         first_failure = i;                                                     \
364*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
365*77c1e3ccSAndroid Build Coastguard Worker       err_count_total += err_count;                                            \
366*77c1e3ccSAndroid Build Coastguard Worker     }                                                                          \
367*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(0, err_count_total)                                              \
368*77c1e3ccSAndroid Build Coastguard Worker         << "Error: Loop8Test9Param, C output doesn't match SIMD "              \
369*77c1e3ccSAndroid Build Coastguard Worker            "loopfilter output. "                                               \
370*77c1e3ccSAndroid Build Coastguard Worker         << "First failed at test case " << first_failure;                      \
371*77c1e3ccSAndroid Build Coastguard Worker   } while (false)
372*77c1e3ccSAndroid Build Coastguard Worker 
373*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
TEST_P(Loop8Test9Param_hbd,OperationCheck)374*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test9Param_hbd, OperationCheck) { OPCHECKd(uint16_t, 16); }
375*77c1e3ccSAndroid Build Coastguard Worker #endif
TEST_P(Loop8Test9Param_lbd,OperationCheck)376*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test9Param_lbd, OperationCheck) { OPCHECKd(uint8_t, 8); }
377*77c1e3ccSAndroid Build Coastguard Worker 
378*77c1e3ccSAndroid Build Coastguard Worker #define VALCHECKd(a, b)                                                        \
379*77c1e3ccSAndroid Build Coastguard Worker   do {                                                                         \
380*77c1e3ccSAndroid Build Coastguard Worker     ACMRandom rnd(ACMRandom::DeterministicSeed());                             \
381*77c1e3ccSAndroid Build Coastguard Worker     const int count_test_block = number_of_iterations;                         \
382*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, s[kNumCoeffs]);                                      \
383*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, ref_s[kNumCoeffs]);                                  \
384*77c1e3ccSAndroid Build Coastguard Worker     int err_count_total = 0;                                                   \
385*77c1e3ccSAndroid Build Coastguard Worker     int first_failure = -1;                                                    \
386*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < count_test_block; ++i) {                               \
387*77c1e3ccSAndroid Build Coastguard Worker       int err_count = 0;                                                       \
388*77c1e3ccSAndroid Build Coastguard Worker       uint8_t tmp = GetOuterThresh(&rnd);                                      \
389*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(                                                         \
390*77c1e3ccSAndroid Build Coastguard Worker           16, const uint8_t, blimit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp,    \
391*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp, tmp, tmp,    \
392*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp };            \
393*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetInnerThresh(&rnd);                                              \
394*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t, limit0[16]) = { tmp, tmp, tmp, tmp,   \
395*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
396*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
397*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp }; \
398*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetHevThresh(&rnd);                                                \
399*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(                                                         \
400*77c1e3ccSAndroid Build Coastguard Worker           16, const uint8_t, thresh0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp,    \
401*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp, tmp, tmp,    \
402*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp };            \
403*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetOuterThresh(&rnd);                                              \
404*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(                                                         \
405*77c1e3ccSAndroid Build Coastguard Worker           16, const uint8_t, blimit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp,    \
406*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp, tmp, tmp,    \
407*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp };            \
408*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetInnerThresh(&rnd);                                              \
409*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(16, const uint8_t, limit1[16]) = { tmp, tmp, tmp, tmp,   \
410*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
411*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp,   \
412*77c1e3ccSAndroid Build Coastguard Worker                                                          tmp, tmp, tmp, tmp }; \
413*77c1e3ccSAndroid Build Coastguard Worker       tmp = GetHevThresh(&rnd);                                                \
414*77c1e3ccSAndroid Build Coastguard Worker       DECLARE_ALIGNED(                                                         \
415*77c1e3ccSAndroid Build Coastguard Worker           16, const uint8_t, thresh1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp,    \
416*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp, tmp, tmp,    \
417*77c1e3ccSAndroid Build Coastguard Worker                                               tmp, tmp, tmp, tmp };            \
418*77c1e3ccSAndroid Build Coastguard Worker       int32_t p = kNumCoeffs / 32;                                             \
419*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < kNumCoeffs; ++j) {                                   \
420*77c1e3ccSAndroid Build Coastguard Worker         s[j] = rnd.Rand16() & mask_;                                           \
421*77c1e3ccSAndroid Build Coastguard Worker         ref_s[j] = s[j];                                                       \
422*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
423*77c1e3ccSAndroid Build Coastguard Worker       call_dualfilter(ref_s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
424*77c1e3ccSAndroid Build Coastguard Worker                       limit1, thresh1, bit_depth_, ref_loopfilter_op_);        \
425*77c1e3ccSAndroid Build Coastguard Worker       API_REGISTER_STATE_CHECK(                                                \
426*77c1e3ccSAndroid Build Coastguard Worker           call_dualfilter(s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1, \
427*77c1e3ccSAndroid Build Coastguard Worker                           limit1, thresh1, bit_depth_, loopfilter_op_));       \
428*77c1e3ccSAndroid Build Coastguard Worker       for (int j = 0; j < kNumCoeffs; ++j) {                                   \
429*77c1e3ccSAndroid Build Coastguard Worker         err_count += ref_s[j] != s[j];                                         \
430*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
431*77c1e3ccSAndroid Build Coastguard Worker       if (err_count && !err_count_total) {                                     \
432*77c1e3ccSAndroid Build Coastguard Worker         first_failure = i;                                                     \
433*77c1e3ccSAndroid Build Coastguard Worker       }                                                                        \
434*77c1e3ccSAndroid Build Coastguard Worker       err_count_total += err_count;                                            \
435*77c1e3ccSAndroid Build Coastguard Worker     }                                                                          \
436*77c1e3ccSAndroid Build Coastguard Worker     EXPECT_EQ(0, err_count_total)                                              \
437*77c1e3ccSAndroid Build Coastguard Worker         << "Error: Loop8Test9Param, C output doesn't match SIMD "              \
438*77c1e3ccSAndroid Build Coastguard Worker            "loopfilter output. "                                               \
439*77c1e3ccSAndroid Build Coastguard Worker         << "First failed at test case " << first_failure;                      \
440*77c1e3ccSAndroid Build Coastguard Worker   } while (false)
441*77c1e3ccSAndroid Build Coastguard Worker 
442*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
TEST_P(Loop8Test9Param_hbd,ValueCheck)443*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test9Param_hbd, ValueCheck) { VALCHECKd(uint16_t, 16); }
444*77c1e3ccSAndroid Build Coastguard Worker #endif
TEST_P(Loop8Test9Param_lbd,ValueCheck)445*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test9Param_lbd, ValueCheck) { VALCHECKd(uint8_t, 8); }
446*77c1e3ccSAndroid Build Coastguard Worker 
447*77c1e3ccSAndroid Build Coastguard Worker #define SPEEDCHECKd(a, b)                                                      \
448*77c1e3ccSAndroid Build Coastguard Worker   do {                                                                         \
449*77c1e3ccSAndroid Build Coastguard Worker     ACMRandom rnd(ACMRandom::DeterministicSeed());                             \
450*77c1e3ccSAndroid Build Coastguard Worker     const int count_test_block = kSpeedTestNum;                                \
451*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(b, a, s[kNumCoeffs]);                                      \
452*77c1e3ccSAndroid Build Coastguard Worker     uint8_t tmp = GetOuterThresh(&rnd);                                        \
453*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                         \
454*77c1e3ccSAndroid Build Coastguard Worker                     blimit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,   \
455*77c1e3ccSAndroid Build Coastguard Worker                                      tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
456*77c1e3ccSAndroid Build Coastguard Worker     tmp = GetInnerThresh(&rnd);                                                \
457*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                         \
458*77c1e3ccSAndroid Build Coastguard Worker                     limit0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,    \
459*77c1e3ccSAndroid Build Coastguard Worker                                     tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp };  \
460*77c1e3ccSAndroid Build Coastguard Worker     tmp = GetHevThresh(&rnd);                                                  \
461*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                         \
462*77c1e3ccSAndroid Build Coastguard Worker                     thresh0[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,   \
463*77c1e3ccSAndroid Build Coastguard Worker                                      tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
464*77c1e3ccSAndroid Build Coastguard Worker     tmp = GetOuterThresh(&rnd);                                                \
465*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                         \
466*77c1e3ccSAndroid Build Coastguard Worker                     blimit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,   \
467*77c1e3ccSAndroid Build Coastguard Worker                                      tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
468*77c1e3ccSAndroid Build Coastguard Worker     tmp = GetInnerThresh(&rnd);                                                \
469*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                         \
470*77c1e3ccSAndroid Build Coastguard Worker                     limit1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,    \
471*77c1e3ccSAndroid Build Coastguard Worker                                     tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp };  \
472*77c1e3ccSAndroid Build Coastguard Worker     tmp = GetHevThresh(&rnd);                                                  \
473*77c1e3ccSAndroid Build Coastguard Worker     DECLARE_ALIGNED(16, const uint8_t,                                         \
474*77c1e3ccSAndroid Build Coastguard Worker                     thresh1[16]) = { tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp,   \
475*77c1e3ccSAndroid Build Coastguard Worker                                      tmp, tmp, tmp, tmp, tmp, tmp, tmp, tmp }; \
476*77c1e3ccSAndroid Build Coastguard Worker     int32_t p = kNumCoeffs / 32;                                               \
477*77c1e3ccSAndroid Build Coastguard Worker     for (int j = 0; j < kNumCoeffs; ++j) {                                     \
478*77c1e3ccSAndroid Build Coastguard Worker       s[j] = rnd.Rand16() & mask_;                                             \
479*77c1e3ccSAndroid Build Coastguard Worker     }                                                                          \
480*77c1e3ccSAndroid Build Coastguard Worker     for (int i = 0; i < count_test_block; ++i) {                               \
481*77c1e3ccSAndroid Build Coastguard Worker       call_dualfilter(s + 8 + p * 8, p, blimit0, limit0, thresh0, blimit1,     \
482*77c1e3ccSAndroid Build Coastguard Worker                       limit1, thresh1, bit_depth_, loopfilter_op_);            \
483*77c1e3ccSAndroid Build Coastguard Worker     }                                                                          \
484*77c1e3ccSAndroid Build Coastguard Worker   } while (false)
485*77c1e3ccSAndroid Build Coastguard Worker 
486*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
TEST_P(Loop8Test9Param_hbd,DISABLED_Speed)487*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test9Param_hbd, DISABLED_Speed) { SPEEDCHECKd(uint16_t, 16); }
488*77c1e3ccSAndroid Build Coastguard Worker #endif
TEST_P(Loop8Test9Param_lbd,DISABLED_Speed)489*77c1e3ccSAndroid Build Coastguard Worker TEST_P(Loop8Test9Param_lbd, DISABLED_Speed) { SPEEDCHECKd(uint8_t, 8); }
490*77c1e3ccSAndroid Build Coastguard Worker 
491*77c1e3ccSAndroid Build Coastguard Worker using std::make_tuple;
492*77c1e3ccSAndroid Build Coastguard Worker 
493*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE2
494*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
495*77c1e3ccSAndroid Build Coastguard Worker const hbdloop_param_t kHbdLoop8Test6[] = {
496*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_sse2, &aom_highbd_lpf_horizontal_4_c,
497*77c1e3ccSAndroid Build Coastguard Worker              8),
498*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_sse2, &aom_highbd_lpf_vertical_4_c, 8),
499*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_sse2, &aom_highbd_lpf_horizontal_6_c,
500*77c1e3ccSAndroid Build Coastguard Worker              8),
501*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_sse2, &aom_highbd_lpf_horizontal_8_c,
502*77c1e3ccSAndroid Build Coastguard Worker              8),
503*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_sse2,
504*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_c, 8),
505*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_sse2, &aom_highbd_lpf_vertical_6_c, 8),
506*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_sse2, &aom_highbd_lpf_vertical_8_c, 8),
507*77c1e3ccSAndroid Build Coastguard Worker 
508*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_sse2, &aom_highbd_lpf_vertical_14_c,
509*77c1e3ccSAndroid Build Coastguard Worker              8),
510*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_sse2, &aom_highbd_lpf_horizontal_4_c,
511*77c1e3ccSAndroid Build Coastguard Worker              10),
512*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_sse2, &aom_highbd_lpf_vertical_4_c, 10),
513*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_sse2, &aom_highbd_lpf_horizontal_6_c,
514*77c1e3ccSAndroid Build Coastguard Worker              10),
515*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_sse2, &aom_highbd_lpf_horizontal_8_c,
516*77c1e3ccSAndroid Build Coastguard Worker              10),
517*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_sse2,
518*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_c, 10),
519*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_sse2, &aom_highbd_lpf_vertical_6_c, 10),
520*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_sse2, &aom_highbd_lpf_vertical_8_c, 10),
521*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_sse2, &aom_highbd_lpf_vertical_14_c,
522*77c1e3ccSAndroid Build Coastguard Worker              10),
523*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_sse2, &aom_highbd_lpf_horizontal_4_c,
524*77c1e3ccSAndroid Build Coastguard Worker              12),
525*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_sse2, &aom_highbd_lpf_vertical_4_c, 12),
526*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_sse2, &aom_highbd_lpf_horizontal_6_c,
527*77c1e3ccSAndroid Build Coastguard Worker              12),
528*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_sse2, &aom_highbd_lpf_horizontal_8_c,
529*77c1e3ccSAndroid Build Coastguard Worker              12),
530*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_sse2,
531*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_c, 12),
532*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_sse2, &aom_highbd_lpf_vertical_14_c,
533*77c1e3ccSAndroid Build Coastguard Worker              12),
534*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_sse2, &aom_highbd_lpf_vertical_6_c, 12),
535*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_sse2, &aom_highbd_lpf_vertical_8_c, 12)
536*77c1e3ccSAndroid Build Coastguard Worker };
537*77c1e3ccSAndroid Build Coastguard Worker 
538*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, Loop8Test6Param_hbd,
539*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kHbdLoop8Test6));
540*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
541*77c1e3ccSAndroid Build Coastguard Worker 
542*77c1e3ccSAndroid Build Coastguard Worker const loop_param_t kLoop8Test6[] = {
543*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_4_sse2, &aom_lpf_horizontal_4_c, 8),
544*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_8_sse2, &aom_lpf_horizontal_8_c, 8),
545*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_6_sse2, &aom_lpf_horizontal_6_c, 8),
546*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_6_sse2, &aom_lpf_vertical_6_c, 8),
547*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_14_sse2, &aom_lpf_horizontal_14_c, 8),
548*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_4_sse2, &aom_lpf_vertical_4_c, 8),
549*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_8_sse2, &aom_lpf_vertical_8_c, 8),
550*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_14_sse2, &aom_lpf_vertical_14_c, 8),
551*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_4_quad_sse2, &aom_lpf_horizontal_4_quad_c, 8),
552*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_4_quad_sse2, &aom_lpf_vertical_4_quad_c, 8),
553*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_6_quad_sse2, &aom_lpf_horizontal_6_quad_c, 8),
554*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_6_quad_sse2, &aom_lpf_vertical_6_quad_c, 8),
555*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_8_quad_sse2, &aom_lpf_horizontal_8_quad_c, 8),
556*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_8_quad_sse2, &aom_lpf_vertical_8_quad_c, 8),
557*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_14_quad_sse2, &aom_lpf_horizontal_14_quad_c,
558*77c1e3ccSAndroid Build Coastguard Worker              8),
559*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_14_quad_sse2, &aom_lpf_vertical_14_quad_c, 8)
560*77c1e3ccSAndroid Build Coastguard Worker };
561*77c1e3ccSAndroid Build Coastguard Worker 
562*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, Loop8Test6Param_lbd,
563*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kLoop8Test6));
564*77c1e3ccSAndroid Build Coastguard Worker 
565*77c1e3ccSAndroid Build Coastguard Worker const dual_loop_param_t kLoop8Test9[] = {
566*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_4_dual_sse2, &aom_lpf_horizontal_4_dual_c, 8),
567*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_4_dual_sse2, &aom_lpf_vertical_4_dual_c, 8),
568*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_6_dual_sse2, &aom_lpf_horizontal_6_dual_c, 8),
569*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_6_dual_sse2, &aom_lpf_vertical_6_dual_c, 8),
570*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_8_dual_sse2, &aom_lpf_horizontal_8_dual_c, 8),
571*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_8_dual_sse2, &aom_lpf_vertical_8_dual_c, 8),
572*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_14_dual_sse2, &aom_lpf_horizontal_14_dual_c,
573*77c1e3ccSAndroid Build Coastguard Worker              8),
574*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_14_dual_sse2, &aom_lpf_vertical_14_dual_c, 8)
575*77c1e3ccSAndroid Build Coastguard Worker };
576*77c1e3ccSAndroid Build Coastguard Worker 
577*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, Loop8Test9Param_lbd,
578*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kLoop8Test9));
579*77c1e3ccSAndroid Build Coastguard Worker 
580*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSE2
581*77c1e3ccSAndroid Build Coastguard Worker 
582*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_AVX2
583*77c1e3ccSAndroid Build Coastguard Worker const loop_param_t kLoop8Test6Avx2[] = {
584*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_6_quad_avx2, &aom_lpf_horizontal_6_quad_c, 8),
585*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_8_quad_avx2, &aom_lpf_horizontal_8_quad_c, 8),
586*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_14_quad_avx2, &aom_lpf_horizontal_14_quad_c,
587*77c1e3ccSAndroid Build Coastguard Worker              8),
588*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_14_quad_avx2, &aom_lpf_vertical_14_quad_c, 8),
589*77c1e3ccSAndroid Build Coastguard Worker };
590*77c1e3ccSAndroid Build Coastguard Worker 
591*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, Loop8Test6Param_lbd,
592*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kLoop8Test6Avx2));
593*77c1e3ccSAndroid Build Coastguard Worker #endif
594*77c1e3ccSAndroid Build Coastguard Worker 
595*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_SSE2 && CONFIG_AV1_HIGHBITDEPTH
596*77c1e3ccSAndroid Build Coastguard Worker const hbddual_loop_param_t kHbdLoop8Test9[] = {
597*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_sse2,
598*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 8),
599*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_dual_sse2,
600*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_6_dual_c, 8),
601*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_sse2,
602*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 8),
603*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_dual_sse2,
604*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_dual_c, 8),
605*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_sse2,
606*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 8),
607*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_dual_sse2,
608*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_6_dual_c, 8),
609*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_sse2,
610*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 8),
611*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_dual_sse2,
612*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_14_dual_c, 8),
613*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_sse2,
614*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 10),
615*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_dual_sse2,
616*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_6_dual_c, 10),
617*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_sse2,
618*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 10),
619*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_dual_sse2,
620*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_dual_c, 10),
621*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_sse2,
622*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 10),
623*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_dual_sse2,
624*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_6_dual_c, 10),
625*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_sse2,
626*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 10),
627*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_dual_sse2,
628*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_14_dual_c, 10),
629*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_sse2,
630*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 12),
631*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_dual_sse2,
632*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_6_dual_c, 12),
633*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_sse2,
634*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 12),
635*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_dual_sse2,
636*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_dual_c, 12),
637*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_sse2,
638*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 12),
639*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_dual_sse2,
640*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_6_dual_c, 12),
641*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_sse2,
642*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 12),
643*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_dual_sse2,
644*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_14_dual_c, 12),
645*77c1e3ccSAndroid Build Coastguard Worker };
646*77c1e3ccSAndroid Build Coastguard Worker 
647*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(SSE2, Loop8Test9Param_hbd,
648*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kHbdLoop8Test9));
649*77c1e3ccSAndroid Build Coastguard Worker 
650*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_SSE2 && CONFIG_AV1_HIGHBITDEPTH
651*77c1e3ccSAndroid Build Coastguard Worker 
652*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_NEON
653*77c1e3ccSAndroid Build Coastguard Worker const loop_param_t kLoop8Test6[] = {
654*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_14_neon, &aom_lpf_vertical_14_c, 8),
655*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_8_neon, &aom_lpf_vertical_8_c, 8),
656*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_6_neon, &aom_lpf_vertical_6_c, 8),
657*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_4_neon, &aom_lpf_vertical_4_c, 8),
658*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_14_neon, &aom_lpf_horizontal_14_c, 8),
659*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_8_neon, &aom_lpf_horizontal_8_c, 8),
660*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_6_neon, &aom_lpf_horizontal_6_c, 8),
661*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_4_neon, &aom_lpf_horizontal_4_c, 8),
662*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_4_quad_neon, &aom_lpf_horizontal_4_quad_c, 8),
663*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_4_quad_neon, &aom_lpf_vertical_4_quad_c, 8),
664*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_6_quad_neon, &aom_lpf_horizontal_6_quad_c, 8),
665*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_6_quad_neon, &aom_lpf_vertical_6_quad_c, 8),
666*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_8_quad_neon, &aom_lpf_horizontal_8_quad_c, 8),
667*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_8_quad_neon, &aom_lpf_vertical_8_quad_c, 8),
668*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_14_quad_neon, &aom_lpf_horizontal_14_quad_c,
669*77c1e3ccSAndroid Build Coastguard Worker              8),
670*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_14_quad_neon, &aom_lpf_vertical_14_quad_c, 8)
671*77c1e3ccSAndroid Build Coastguard Worker };
672*77c1e3ccSAndroid Build Coastguard Worker 
673*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, Loop8Test6Param_lbd,
674*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kLoop8Test6));
675*77c1e3ccSAndroid Build Coastguard Worker 
676*77c1e3ccSAndroid Build Coastguard Worker const dual_loop_param_t kLoop8Test9[] = {
677*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_4_dual_neon, &aom_lpf_horizontal_4_dual_c, 8),
678*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_6_dual_neon, &aom_lpf_horizontal_6_dual_c, 8),
679*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_8_dual_neon, &aom_lpf_horizontal_8_dual_c, 8),
680*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_horizontal_14_dual_neon, &aom_lpf_horizontal_14_dual_c,
681*77c1e3ccSAndroid Build Coastguard Worker              8),
682*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_4_dual_neon, &aom_lpf_vertical_4_dual_c, 8),
683*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_6_dual_neon, &aom_lpf_vertical_6_dual_c, 8),
684*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_8_dual_neon, &aom_lpf_vertical_8_dual_c, 8),
685*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_lpf_vertical_14_dual_neon, &aom_lpf_vertical_14_dual_c, 8)
686*77c1e3ccSAndroid Build Coastguard Worker };
687*77c1e3ccSAndroid Build Coastguard Worker 
688*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, Loop8Test9Param_lbd,
689*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kLoop8Test9));
690*77c1e3ccSAndroid Build Coastguard Worker #if CONFIG_AV1_HIGHBITDEPTH
691*77c1e3ccSAndroid Build Coastguard Worker const hbdloop_param_t kHbdLoop8Test6[] = {
692*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_neon, &aom_highbd_lpf_horizontal_4_c,
693*77c1e3ccSAndroid Build Coastguard Worker              8),
694*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_neon, &aom_highbd_lpf_horizontal_4_c,
695*77c1e3ccSAndroid Build Coastguard Worker              10),
696*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_neon, &aom_highbd_lpf_horizontal_4_c,
697*77c1e3ccSAndroid Build Coastguard Worker              12),
698*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_neon, &aom_highbd_lpf_horizontal_6_c,
699*77c1e3ccSAndroid Build Coastguard Worker              8),
700*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_neon, &aom_highbd_lpf_horizontal_6_c,
701*77c1e3ccSAndroid Build Coastguard Worker              10),
702*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_neon, &aom_highbd_lpf_horizontal_6_c,
703*77c1e3ccSAndroid Build Coastguard Worker              12),
704*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_neon, &aom_highbd_lpf_horizontal_8_c,
705*77c1e3ccSAndroid Build Coastguard Worker              8),
706*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_neon, &aom_highbd_lpf_horizontal_8_c,
707*77c1e3ccSAndroid Build Coastguard Worker              10),
708*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_neon, &aom_highbd_lpf_horizontal_8_c,
709*77c1e3ccSAndroid Build Coastguard Worker              12),
710*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_neon,
711*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_c, 8),
712*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_neon,
713*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_c, 10),
714*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_neon,
715*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_c, 12),
716*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_neon, &aom_highbd_lpf_vertical_4_c, 8),
717*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_neon, &aom_highbd_lpf_vertical_4_c, 10),
718*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_neon, &aom_highbd_lpf_vertical_4_c, 12),
719*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_neon, &aom_highbd_lpf_vertical_6_c, 8),
720*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_neon, &aom_highbd_lpf_vertical_6_c, 10),
721*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_neon, &aom_highbd_lpf_vertical_6_c, 12),
722*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_neon, &aom_highbd_lpf_vertical_8_c, 8),
723*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_neon, &aom_highbd_lpf_vertical_8_c, 10),
724*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_neon, &aom_highbd_lpf_vertical_8_c, 12),
725*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_neon, &aom_highbd_lpf_vertical_14_c,
726*77c1e3ccSAndroid Build Coastguard Worker              8),
727*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_neon, &aom_highbd_lpf_vertical_14_c,
728*77c1e3ccSAndroid Build Coastguard Worker              10),
729*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_neon, &aom_highbd_lpf_vertical_14_c,
730*77c1e3ccSAndroid Build Coastguard Worker              12),
731*77c1e3ccSAndroid Build Coastguard Worker };
732*77c1e3ccSAndroid Build Coastguard Worker 
733*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, Loop8Test6Param_hbd,
734*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kHbdLoop8Test6));
735*77c1e3ccSAndroid Build Coastguard Worker 
736*77c1e3ccSAndroid Build Coastguard Worker const hbddual_loop_param_t kHbdLoop8Test9[] = {
737*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_neon,
738*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 8),
739*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_dual_neon,
740*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_6_dual_c, 8),
741*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_neon,
742*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 8),
743*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_dual_neon,
744*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_dual_c, 8),
745*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_neon,
746*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 8),
747*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_dual_neon,
748*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_6_dual_c, 8),
749*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_neon,
750*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 8),
751*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_dual_neon,
752*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_14_dual_c, 8),
753*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_neon,
754*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 10),
755*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_dual_neon,
756*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_6_dual_c, 10),
757*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_neon,
758*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 10),
759*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_dual_neon,
760*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_dual_c, 10),
761*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_neon,
762*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 10),
763*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_dual_neon,
764*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_6_dual_c, 10),
765*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_neon,
766*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 10),
767*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_dual_neon,
768*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_14_dual_c, 10),
769*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_neon,
770*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 12),
771*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_6_dual_neon,
772*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_6_dual_c, 12),
773*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_neon,
774*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 12),
775*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_14_dual_neon,
776*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_14_dual_c, 12),
777*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_neon,
778*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 12),
779*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_6_dual_neon,
780*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_6_dual_c, 12),
781*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_neon,
782*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 12),
783*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_14_dual_neon,
784*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_14_dual_c, 12),
785*77c1e3ccSAndroid Build Coastguard Worker };
786*77c1e3ccSAndroid Build Coastguard Worker 
787*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(NEON, Loop8Test9Param_hbd,
788*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kHbdLoop8Test9));
789*77c1e3ccSAndroid Build Coastguard Worker 
790*77c1e3ccSAndroid Build Coastguard Worker #endif  // CONFIG_AV1_HIGHBITDEPTH
791*77c1e3ccSAndroid Build Coastguard Worker #endif  // HAVE_NEON
792*77c1e3ccSAndroid Build Coastguard Worker 
793*77c1e3ccSAndroid Build Coastguard Worker #if HAVE_AVX2 && CONFIG_AV1_HIGHBITDEPTH
794*77c1e3ccSAndroid Build Coastguard Worker const hbddual_loop_param_t kHbdLoop8Test9Avx2[] = {
795*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_avx2,
796*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 8),
797*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_avx2,
798*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 10),
799*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_4_dual_avx2,
800*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_4_dual_c, 12),
801*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_avx2,
802*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 8),
803*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_avx2,
804*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 10),
805*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_horizontal_8_dual_avx2,
806*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_horizontal_8_dual_c, 12),
807*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_avx2,
808*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 8),
809*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_avx2,
810*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 10),
811*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_4_dual_avx2,
812*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_4_dual_c, 12),
813*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_avx2,
814*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 8),
815*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_avx2,
816*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 10),
817*77c1e3ccSAndroid Build Coastguard Worker   make_tuple(&aom_highbd_lpf_vertical_8_dual_avx2,
818*77c1e3ccSAndroid Build Coastguard Worker              &aom_highbd_lpf_vertical_8_dual_c, 12),
819*77c1e3ccSAndroid Build Coastguard Worker };
820*77c1e3ccSAndroid Build Coastguard Worker 
821*77c1e3ccSAndroid Build Coastguard Worker INSTANTIATE_TEST_SUITE_P(AVX2, Loop8Test9Param_hbd,
822*77c1e3ccSAndroid Build Coastguard Worker                          ::testing::ValuesIn(kHbdLoop8Test9Avx2));
823*77c1e3ccSAndroid Build Coastguard Worker #endif
824*77c1e3ccSAndroid Build Coastguard Worker }  // namespace
825