1 /*
2  *  Copyright (c) 2014 The WebM project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include <string>
12 
13 #include "third_party/googletest/src/include/gtest/gtest.h"
14 
15 #include "./vpx_config.h"
16 #include "./vpx_dsp_rtcd.h"
17 #include "test/acm_random.h"
18 #include "test/clear_system_state.h"
19 #include "test/register_state_check.h"
20 #include "test/util.h"
21 #include "vp9/common/vp9_blockd.h"
22 #include "vp9/common/vp9_pred_common.h"
23 #include "vpx_mem/vpx_mem.h"
24 
25 namespace {
26 
27 using libvpx_test::ACMRandom;
28 
29 const int count_test_block = 100000;
30 
31 typedef void (*IntraPredFunc)(uint8_t *dst, ptrdiff_t stride,
32                               const uint8_t *above, const uint8_t *left);
33 
34 struct IntraPredParam {
IntraPredParam__anon2a6e24c20111::IntraPredParam35   IntraPredParam(IntraPredFunc pred = NULL, IntraPredFunc ref = NULL,
36                  int block_size_value = 0, int bit_depth_value = 0)
37       : pred_fn(pred), ref_fn(ref), block_size(block_size_value),
38         bit_depth(bit_depth_value) {}
39 
40   IntraPredFunc pred_fn;
41   IntraPredFunc ref_fn;
42   int block_size;
43   int bit_depth;
44 };
45 
46 template <typename Pixel, typename PredParam>
47 class IntraPredTest : public ::testing::TestWithParam<PredParam> {
48  public:
RunTest(Pixel * left_col,Pixel * above_data,Pixel * dst,Pixel * ref_dst)49   void RunTest(Pixel *left_col, Pixel *above_data, Pixel *dst, Pixel *ref_dst) {
50     ACMRandom rnd(ACMRandom::DeterministicSeed());
51     const int block_size = params_.block_size;
52     above_row_ = above_data + 16;
53     left_col_ = left_col;
54     dst_ = dst;
55     ref_dst_ = ref_dst;
56     int error_count = 0;
57     for (int i = 0; i < count_test_block; ++i) {
58       // Fill edges with random data, try first with saturated values.
59       for (int x = -1; x < block_size; x++) {
60         if (i == 0) {
61           above_row_[x] = mask_;
62         } else {
63           above_row_[x] = rnd.Rand16() & mask_;
64         }
65       }
66       for (int x = block_size; x < 2 * block_size; x++) {
67         above_row_[x] = above_row_[block_size - 1];
68       }
69       for (int y = 0; y < block_size; y++) {
70         if (i == 0) {
71           left_col_[y] = mask_;
72         } else {
73           left_col_[y] = rnd.Rand16() & mask_;
74         }
75       }
76       Predict();
77       CheckPrediction(i, &error_count);
78     }
79     ASSERT_EQ(0, error_count);
80   }
81 
82  protected:
SetUp()83   virtual void SetUp() {
84     params_ = this->GetParam();
85     stride_ = params_.block_size * 3;
86     mask_ = (1 << params_.bit_depth) - 1;
87   }
88 
89   void Predict();
90 
CheckPrediction(int test_case_number,int * error_count) const91   void CheckPrediction(int test_case_number, int *error_count) const {
92     // For each pixel ensure that the calculated value is the same as reference.
93     const int block_size = params_.block_size;
94     for (int y = 0; y < block_size; y++) {
95       for (int x = 0; x < block_size; x++) {
96         *error_count += ref_dst_[x + y * stride_] != dst_[x + y * stride_];
97         if (*error_count == 1) {
98           ASSERT_EQ(ref_dst_[x + y * stride_], dst_[x + y * stride_])
99               << " Failed on Test Case Number " << test_case_number;
100         }
101       }
102     }
103   }
104 
105   Pixel *above_row_;
106   Pixel *left_col_;
107   Pixel *dst_;
108   Pixel *ref_dst_;
109   ptrdiff_t stride_;
110   int mask_;
111 
112   PredParam params_;
113 };
114 
115 template <>
Predict()116 void IntraPredTest<uint8_t, IntraPredParam>::Predict() {
117   params_.ref_fn(ref_dst_, stride_, above_row_, left_col_);
118   ASM_REGISTER_STATE_CHECK(
119       params_.pred_fn(dst_, stride_, above_row_, left_col_));
120 }
121 
122 typedef IntraPredTest<uint8_t, IntraPredParam> VP9IntraPredTest;
123 
TEST_P(VP9IntraPredTest,IntraPredTests)124 TEST_P(VP9IntraPredTest, IntraPredTests) {
125   // max block size is 32
126   DECLARE_ALIGNED(16, uint8_t, left_col[2 * 32]);
127   DECLARE_ALIGNED(16, uint8_t, above_data[2 * 32 + 32]);
128   DECLARE_ALIGNED(16, uint8_t, dst[3 * 32 * 32]);
129   DECLARE_ALIGNED(16, uint8_t, ref_dst[3 * 32 * 32]);
130   RunTest(left_col, above_data, dst, ref_dst);
131 }
132 
133 #if HAVE_SSE2
134 INSTANTIATE_TEST_CASE_P(
135     SSE2, VP9IntraPredTest,
136     ::testing::Values(
137         IntraPredParam(&vpx_d45_predictor_4x4_sse2, &vpx_d45_predictor_4x4_c, 4,
138                        8),
139         IntraPredParam(&vpx_d45_predictor_8x8_sse2, &vpx_d45_predictor_8x8_c, 8,
140                        8),
141         IntraPredParam(&vpx_d207_predictor_4x4_sse2, &vpx_d207_predictor_4x4_c,
142                        4, 8),
143         IntraPredParam(&vpx_dc_128_predictor_4x4_sse2,
144                        &vpx_dc_128_predictor_4x4_c, 4, 8),
145         IntraPredParam(&vpx_dc_128_predictor_8x8_sse2,
146                        &vpx_dc_128_predictor_8x8_c, 8, 8),
147         IntraPredParam(&vpx_dc_128_predictor_16x16_sse2,
148                        &vpx_dc_128_predictor_16x16_c, 16, 8),
149         IntraPredParam(&vpx_dc_128_predictor_32x32_sse2,
150                        &vpx_dc_128_predictor_32x32_c, 32, 8),
151         IntraPredParam(&vpx_dc_left_predictor_4x4_sse2,
152                        &vpx_dc_left_predictor_4x4_c, 4, 8),
153         IntraPredParam(&vpx_dc_left_predictor_8x8_sse2,
154                        &vpx_dc_left_predictor_8x8_c, 8, 8),
155         IntraPredParam(&vpx_dc_left_predictor_16x16_sse2,
156                        &vpx_dc_left_predictor_16x16_c, 16, 8),
157         IntraPredParam(&vpx_dc_left_predictor_32x32_sse2,
158                        &vpx_dc_left_predictor_32x32_c, 32, 8),
159         IntraPredParam(&vpx_dc_predictor_4x4_sse2, &vpx_dc_predictor_4x4_c, 4,
160                        8),
161         IntraPredParam(&vpx_dc_predictor_8x8_sse2, &vpx_dc_predictor_8x8_c, 8,
162                        8),
163         IntraPredParam(&vpx_dc_predictor_16x16_sse2, &vpx_dc_predictor_16x16_c,
164                        16, 8),
165         IntraPredParam(&vpx_dc_predictor_32x32_sse2, &vpx_dc_predictor_32x32_c,
166                        32, 8),
167         IntraPredParam(&vpx_dc_top_predictor_4x4_sse2,
168                        &vpx_dc_top_predictor_4x4_c, 4, 8),
169         IntraPredParam(&vpx_dc_top_predictor_8x8_sse2,
170                        &vpx_dc_top_predictor_8x8_c, 8, 8),
171         IntraPredParam(&vpx_dc_top_predictor_16x16_sse2,
172                        &vpx_dc_top_predictor_16x16_c, 16, 8),
173         IntraPredParam(&vpx_dc_top_predictor_32x32_sse2,
174                        &vpx_dc_top_predictor_32x32_c, 32, 8),
175         IntraPredParam(&vpx_h_predictor_4x4_sse2, &vpx_h_predictor_4x4_c, 4, 8),
176         IntraPredParam(&vpx_h_predictor_8x8_sse2, &vpx_h_predictor_8x8_c, 8, 8),
177         IntraPredParam(&vpx_h_predictor_16x16_sse2, &vpx_h_predictor_16x16_c,
178                        16, 8),
179         IntraPredParam(&vpx_h_predictor_32x32_sse2, &vpx_h_predictor_32x32_c,
180                        32, 8),
181         IntraPredParam(&vpx_tm_predictor_4x4_sse2, &vpx_tm_predictor_4x4_c, 4,
182                        8),
183         IntraPredParam(&vpx_tm_predictor_8x8_sse2, &vpx_tm_predictor_8x8_c, 8,
184                        8),
185         IntraPredParam(&vpx_tm_predictor_16x16_sse2, &vpx_tm_predictor_16x16_c,
186                        16, 8),
187         IntraPredParam(&vpx_tm_predictor_32x32_sse2, &vpx_tm_predictor_32x32_c,
188                        32, 8),
189         IntraPredParam(&vpx_v_predictor_4x4_sse2, &vpx_v_predictor_4x4_c, 4, 8),
190         IntraPredParam(&vpx_v_predictor_8x8_sse2, &vpx_v_predictor_8x8_c, 8, 8),
191         IntraPredParam(&vpx_v_predictor_16x16_sse2, &vpx_v_predictor_16x16_c,
192                        16, 8),
193         IntraPredParam(&vpx_v_predictor_32x32_sse2, &vpx_v_predictor_32x32_c,
194                        32, 8)));
195 #endif  // HAVE_SSE2
196 
197 #if HAVE_SSSE3
198 INSTANTIATE_TEST_CASE_P(
199     SSSE3, VP9IntraPredTest,
200     ::testing::Values(IntraPredParam(&vpx_d45_predictor_16x16_ssse3,
201                                      &vpx_d45_predictor_16x16_c, 16, 8),
202                       IntraPredParam(&vpx_d45_predictor_32x32_ssse3,
203                                      &vpx_d45_predictor_32x32_c, 32, 8),
204                       IntraPredParam(&vpx_d63_predictor_4x4_ssse3,
205                                      &vpx_d63_predictor_4x4_c, 4, 8),
206                       IntraPredParam(&vpx_d63_predictor_8x8_ssse3,
207                                      &vpx_d63_predictor_8x8_c, 8, 8),
208                       IntraPredParam(&vpx_d63_predictor_16x16_ssse3,
209                                      &vpx_d63_predictor_16x16_c, 16, 8),
210                       IntraPredParam(&vpx_d63_predictor_32x32_ssse3,
211                                      &vpx_d63_predictor_32x32_c, 32, 8),
212                       IntraPredParam(&vpx_d153_predictor_4x4_ssse3,
213                                      &vpx_d153_predictor_4x4_c, 4, 8),
214                       IntraPredParam(&vpx_d153_predictor_8x8_ssse3,
215                                      &vpx_d153_predictor_8x8_c, 8, 8),
216                       IntraPredParam(&vpx_d153_predictor_16x16_ssse3,
217                                      &vpx_d153_predictor_16x16_c, 16, 8),
218                       IntraPredParam(&vpx_d153_predictor_32x32_ssse3,
219                                      &vpx_d153_predictor_32x32_c, 32, 8),
220                       IntraPredParam(&vpx_d207_predictor_8x8_ssse3,
221                                      &vpx_d207_predictor_8x8_c, 8, 8),
222                       IntraPredParam(&vpx_d207_predictor_16x16_ssse3,
223                                      &vpx_d207_predictor_16x16_c, 16, 8),
224                       IntraPredParam(&vpx_d207_predictor_32x32_ssse3,
225                                      &vpx_d207_predictor_32x32_c, 32, 8)));
226 #endif  // HAVE_SSSE3
227 
228 #if HAVE_NEON
229 INSTANTIATE_TEST_CASE_P(
230     NEON, VP9IntraPredTest,
231     ::testing::Values(
232         IntraPredParam(&vpx_d45_predictor_4x4_neon, &vpx_d45_predictor_4x4_c, 4,
233                        8),
234         IntraPredParam(&vpx_d45_predictor_8x8_neon, &vpx_d45_predictor_8x8_c, 8,
235                        8),
236         IntraPredParam(&vpx_d45_predictor_16x16_neon,
237                        &vpx_d45_predictor_16x16_c, 16, 8),
238         IntraPredParam(&vpx_d45_predictor_32x32_neon,
239                        &vpx_d45_predictor_32x32_c, 32, 8),
240         IntraPredParam(&vpx_d135_predictor_4x4_neon, &vpx_d135_predictor_4x4_c,
241                        4, 8),
242         IntraPredParam(&vpx_d135_predictor_8x8_neon, &vpx_d135_predictor_8x8_c,
243                        8, 8),
244         IntraPredParam(&vpx_d135_predictor_16x16_neon,
245                        &vpx_d135_predictor_16x16_c, 16, 8),
246         IntraPredParam(&vpx_d135_predictor_32x32_neon,
247                        &vpx_d135_predictor_32x32_c, 32, 8),
248         IntraPredParam(&vpx_dc_128_predictor_4x4_neon,
249                        &vpx_dc_128_predictor_4x4_c, 4, 8),
250         IntraPredParam(&vpx_dc_128_predictor_8x8_neon,
251                        &vpx_dc_128_predictor_8x8_c, 8, 8),
252         IntraPredParam(&vpx_dc_128_predictor_16x16_neon,
253                        &vpx_dc_128_predictor_16x16_c, 16, 8),
254         IntraPredParam(&vpx_dc_128_predictor_32x32_neon,
255                        &vpx_dc_128_predictor_32x32_c, 32, 8),
256         IntraPredParam(&vpx_dc_left_predictor_4x4_neon,
257                        &vpx_dc_left_predictor_4x4_c, 4, 8),
258         IntraPredParam(&vpx_dc_left_predictor_8x8_neon,
259                        &vpx_dc_left_predictor_8x8_c, 8, 8),
260         IntraPredParam(&vpx_dc_left_predictor_16x16_neon,
261                        &vpx_dc_left_predictor_16x16_c, 16, 8),
262         IntraPredParam(&vpx_dc_left_predictor_32x32_neon,
263                        &vpx_dc_left_predictor_32x32_c, 32, 8),
264         IntraPredParam(&vpx_dc_predictor_4x4_neon, &vpx_dc_predictor_4x4_c, 4,
265                        8),
266         IntraPredParam(&vpx_dc_predictor_8x8_neon, &vpx_dc_predictor_8x8_c, 8,
267                        8),
268         IntraPredParam(&vpx_dc_predictor_16x16_neon, &vpx_dc_predictor_16x16_c,
269                        16, 8),
270         IntraPredParam(&vpx_dc_predictor_32x32_neon, &vpx_dc_predictor_32x32_c,
271                        32, 8),
272         IntraPredParam(&vpx_dc_top_predictor_4x4_neon,
273                        &vpx_dc_top_predictor_4x4_c, 4, 8),
274         IntraPredParam(&vpx_dc_top_predictor_8x8_neon,
275                        &vpx_dc_top_predictor_8x8_c, 8, 8),
276         IntraPredParam(&vpx_dc_top_predictor_16x16_neon,
277                        &vpx_dc_top_predictor_16x16_c, 16, 8),
278         IntraPredParam(&vpx_dc_top_predictor_32x32_neon,
279                        &vpx_dc_top_predictor_32x32_c, 32, 8),
280         IntraPredParam(&vpx_h_predictor_4x4_neon, &vpx_h_predictor_4x4_c, 4, 8),
281         IntraPredParam(&vpx_h_predictor_8x8_neon, &vpx_h_predictor_8x8_c, 8, 8),
282         IntraPredParam(&vpx_h_predictor_16x16_neon, &vpx_h_predictor_16x16_c,
283                        16, 8),
284         IntraPredParam(&vpx_h_predictor_32x32_neon, &vpx_h_predictor_32x32_c,
285                        32, 8),
286         IntraPredParam(&vpx_tm_predictor_4x4_neon, &vpx_tm_predictor_4x4_c, 4,
287                        8),
288         IntraPredParam(&vpx_tm_predictor_8x8_neon, &vpx_tm_predictor_8x8_c, 8,
289                        8),
290         IntraPredParam(&vpx_tm_predictor_16x16_neon, &vpx_tm_predictor_16x16_c,
291                        16, 8),
292         IntraPredParam(&vpx_tm_predictor_32x32_neon, &vpx_tm_predictor_32x32_c,
293                        32, 8),
294         IntraPredParam(&vpx_v_predictor_4x4_neon, &vpx_v_predictor_4x4_c, 4, 8),
295         IntraPredParam(&vpx_v_predictor_8x8_neon, &vpx_v_predictor_8x8_c, 8, 8),
296         IntraPredParam(&vpx_v_predictor_16x16_neon, &vpx_v_predictor_16x16_c,
297                        16, 8),
298         IntraPredParam(&vpx_v_predictor_32x32_neon, &vpx_v_predictor_32x32_c,
299                        32, 8)));
300 #endif  // HAVE_NEON
301 
302 #if HAVE_DSPR2
303 INSTANTIATE_TEST_CASE_P(
304     DSPR2, VP9IntraPredTest,
305     ::testing::Values(IntraPredParam(&vpx_dc_predictor_4x4_dspr2,
306                                      &vpx_dc_predictor_4x4_c, 4, 8),
307                       IntraPredParam(&vpx_dc_predictor_8x8_dspr2,
308                                      &vpx_dc_predictor_8x8_c, 8, 8),
309                       IntraPredParam(&vpx_dc_predictor_16x16_dspr2,
310                                      &vpx_dc_predictor_16x16_c, 16, 8),
311                       IntraPredParam(&vpx_h_predictor_4x4_dspr2,
312                                      &vpx_h_predictor_4x4_c, 4, 8),
313                       IntraPredParam(&vpx_h_predictor_8x8_dspr2,
314                                      &vpx_h_predictor_8x8_c, 8, 8),
315                       IntraPredParam(&vpx_h_predictor_16x16_dspr2,
316                                      &vpx_h_predictor_16x16_c, 16, 8),
317                       IntraPredParam(&vpx_tm_predictor_4x4_dspr2,
318                                      &vpx_tm_predictor_4x4_c, 4, 8),
319                       IntraPredParam(&vpx_tm_predictor_8x8_dspr2,
320                                      &vpx_tm_predictor_8x8_c, 8, 8)));
321 #endif  // HAVE_DSPR2
322 
323 #if HAVE_MSA
324 INSTANTIATE_TEST_CASE_P(
325     MSA, VP9IntraPredTest,
326     ::testing::Values(
327         IntraPredParam(&vpx_dc_128_predictor_4x4_msa,
328                        &vpx_dc_128_predictor_4x4_c, 4, 8),
329         IntraPredParam(&vpx_dc_128_predictor_8x8_msa,
330                        &vpx_dc_128_predictor_8x8_c, 8, 8),
331         IntraPredParam(&vpx_dc_128_predictor_16x16_msa,
332                        &vpx_dc_128_predictor_16x16_c, 16, 8),
333         IntraPredParam(&vpx_dc_128_predictor_32x32_msa,
334                        &vpx_dc_128_predictor_32x32_c, 32, 8),
335         IntraPredParam(&vpx_dc_left_predictor_4x4_msa,
336                        &vpx_dc_left_predictor_4x4_c, 4, 8),
337         IntraPredParam(&vpx_dc_left_predictor_8x8_msa,
338                        &vpx_dc_left_predictor_8x8_c, 8, 8),
339         IntraPredParam(&vpx_dc_left_predictor_16x16_msa,
340                        &vpx_dc_left_predictor_16x16_c, 16, 8),
341         IntraPredParam(&vpx_dc_left_predictor_32x32_msa,
342                        &vpx_dc_left_predictor_32x32_c, 32, 8),
343         IntraPredParam(&vpx_dc_predictor_4x4_msa, &vpx_dc_predictor_4x4_c, 4,
344                        8),
345         IntraPredParam(&vpx_dc_predictor_8x8_msa, &vpx_dc_predictor_8x8_c, 8,
346                        8),
347         IntraPredParam(&vpx_dc_predictor_16x16_msa, &vpx_dc_predictor_16x16_c,
348                        16, 8),
349         IntraPredParam(&vpx_dc_predictor_32x32_msa, &vpx_dc_predictor_32x32_c,
350                        32, 8),
351         IntraPredParam(&vpx_dc_top_predictor_4x4_msa,
352                        &vpx_dc_top_predictor_4x4_c, 4, 8),
353         IntraPredParam(&vpx_dc_top_predictor_8x8_msa,
354                        &vpx_dc_top_predictor_8x8_c, 8, 8),
355         IntraPredParam(&vpx_dc_top_predictor_16x16_msa,
356                        &vpx_dc_top_predictor_16x16_c, 16, 8),
357         IntraPredParam(&vpx_dc_top_predictor_32x32_msa,
358                        &vpx_dc_top_predictor_32x32_c, 32, 8),
359         IntraPredParam(&vpx_h_predictor_4x4_msa, &vpx_h_predictor_4x4_c, 4, 8),
360         IntraPredParam(&vpx_h_predictor_8x8_msa, &vpx_h_predictor_8x8_c, 8, 8),
361         IntraPredParam(&vpx_h_predictor_16x16_msa, &vpx_h_predictor_16x16_c, 16,
362                        8),
363         IntraPredParam(&vpx_h_predictor_32x32_msa, &vpx_h_predictor_32x32_c, 32,
364                        8),
365         IntraPredParam(&vpx_tm_predictor_4x4_msa, &vpx_tm_predictor_4x4_c, 4,
366                        8),
367         IntraPredParam(&vpx_tm_predictor_8x8_msa, &vpx_tm_predictor_8x8_c, 8,
368                        8),
369         IntraPredParam(&vpx_tm_predictor_16x16_msa, &vpx_tm_predictor_16x16_c,
370                        16, 8),
371         IntraPredParam(&vpx_tm_predictor_32x32_msa, &vpx_tm_predictor_32x32_c,
372                        32, 8),
373         IntraPredParam(&vpx_v_predictor_4x4_msa, &vpx_v_predictor_4x4_c, 4, 8),
374         IntraPredParam(&vpx_v_predictor_8x8_msa, &vpx_v_predictor_8x8_c, 8, 8),
375         IntraPredParam(&vpx_v_predictor_16x16_msa, &vpx_v_predictor_16x16_c, 16,
376                        8),
377         IntraPredParam(&vpx_v_predictor_32x32_msa, &vpx_v_predictor_32x32_c, 32,
378                        8)));
379 #endif  // HAVE_MSA
380 
381 #if HAVE_VSX
382 INSTANTIATE_TEST_CASE_P(
383     VSX, VP9IntraPredTest,
384     ::testing::Values(
385         IntraPredParam(&vpx_d45_predictor_8x8_vsx, &vpx_d45_predictor_8x8_c, 8,
386                        8),
387         IntraPredParam(&vpx_d45_predictor_16x16_vsx, &vpx_d45_predictor_16x16_c,
388                        16, 8),
389         IntraPredParam(&vpx_d45_predictor_32x32_vsx, &vpx_d45_predictor_32x32_c,
390                        32, 8),
391         IntraPredParam(&vpx_d63_predictor_8x8_vsx, &vpx_d63_predictor_8x8_c, 8,
392                        8),
393         IntraPredParam(&vpx_d63_predictor_16x16_vsx, &vpx_d63_predictor_16x16_c,
394                        16, 8),
395         IntraPredParam(&vpx_d63_predictor_32x32_vsx, &vpx_d63_predictor_32x32_c,
396                        32, 8),
397         IntraPredParam(&vpx_dc_128_predictor_16x16_vsx,
398                        &vpx_dc_128_predictor_16x16_c, 16, 8),
399         IntraPredParam(&vpx_dc_128_predictor_32x32_vsx,
400                        &vpx_dc_128_predictor_32x32_c, 32, 8),
401         IntraPredParam(&vpx_dc_left_predictor_16x16_vsx,
402                        &vpx_dc_left_predictor_16x16_c, 16, 8),
403         IntraPredParam(&vpx_dc_left_predictor_32x32_vsx,
404                        &vpx_dc_left_predictor_32x32_c, 32, 8),
405         IntraPredParam(&vpx_dc_predictor_8x8_vsx, &vpx_dc_predictor_8x8_c, 8,
406                        8),
407         IntraPredParam(&vpx_dc_predictor_16x16_vsx, &vpx_dc_predictor_16x16_c,
408                        16, 8),
409         IntraPredParam(&vpx_dc_predictor_32x32_vsx, &vpx_dc_predictor_32x32_c,
410                        32, 8),
411         IntraPredParam(&vpx_dc_top_predictor_16x16_vsx,
412                        &vpx_dc_top_predictor_16x16_c, 16, 8),
413         IntraPredParam(&vpx_dc_top_predictor_32x32_vsx,
414                        &vpx_dc_top_predictor_32x32_c, 32, 8),
415         IntraPredParam(&vpx_h_predictor_4x4_vsx, &vpx_h_predictor_4x4_c, 4, 8),
416         IntraPredParam(&vpx_h_predictor_8x8_vsx, &vpx_h_predictor_8x8_c, 8, 8),
417         IntraPredParam(&vpx_h_predictor_16x16_vsx, &vpx_h_predictor_16x16_c, 16,
418                        8),
419         IntraPredParam(&vpx_h_predictor_32x32_vsx, &vpx_h_predictor_32x32_c, 32,
420                        8),
421         IntraPredParam(&vpx_tm_predictor_4x4_vsx, &vpx_tm_predictor_4x4_c, 4,
422                        8),
423         IntraPredParam(&vpx_tm_predictor_8x8_vsx, &vpx_tm_predictor_8x8_c, 8,
424                        8),
425         IntraPredParam(&vpx_tm_predictor_16x16_vsx, &vpx_tm_predictor_16x16_c,
426                        16, 8),
427         IntraPredParam(&vpx_tm_predictor_32x32_vsx, &vpx_tm_predictor_32x32_c,
428                        32, 8),
429         IntraPredParam(&vpx_v_predictor_16x16_vsx, &vpx_v_predictor_16x16_c, 16,
430                        8),
431         IntraPredParam(&vpx_v_predictor_32x32_vsx, &vpx_v_predictor_32x32_c, 32,
432                        8)));
433 #endif  // HAVE_VSX
434 
435 #if CONFIG_VP9_HIGHBITDEPTH
436 typedef void (*HighbdIntraPred)(uint16_t *dst, ptrdiff_t stride,
437                                 const uint16_t *above, const uint16_t *left,
438                                 int bps);
439 struct HighbdIntraPredParam {
HighbdIntraPredParam__anon2a6e24c20111::HighbdIntraPredParam440   HighbdIntraPredParam(HighbdIntraPred pred = NULL, HighbdIntraPred ref = NULL,
441                        int block_size_value = 0, int bit_depth_value = 0)
442       : pred_fn(pred), ref_fn(ref), block_size(block_size_value),
443         bit_depth(bit_depth_value) {}
444 
445   HighbdIntraPred pred_fn;
446   HighbdIntraPred ref_fn;
447   int block_size;
448   int bit_depth;
449 };
450 
451 template <>
Predict()452 void IntraPredTest<uint16_t, HighbdIntraPredParam>::Predict() {
453   const int bit_depth = params_.bit_depth;
454   params_.ref_fn(ref_dst_, stride_, above_row_, left_col_, bit_depth);
455   ASM_REGISTER_STATE_CHECK(
456       params_.pred_fn(dst_, stride_, above_row_, left_col_, bit_depth));
457 }
458 
459 typedef IntraPredTest<uint16_t, HighbdIntraPredParam> VP9HighbdIntraPredTest;
460 
TEST_P(VP9HighbdIntraPredTest,HighbdIntraPredTests)461 TEST_P(VP9HighbdIntraPredTest, HighbdIntraPredTests) {
462   // max block size is 32
463   DECLARE_ALIGNED(16, uint16_t, left_col[2 * 32]);
464   DECLARE_ALIGNED(16, uint16_t, above_data[2 * 32 + 32]);
465   DECLARE_ALIGNED(16, uint16_t, dst[3 * 32 * 32]);
466   DECLARE_ALIGNED(16, uint16_t, ref_dst[3 * 32 * 32]);
467   RunTest(left_col, above_data, dst, ref_dst);
468 }
469 
470 #if HAVE_SSE2
471 INSTANTIATE_TEST_CASE_P(
472     SSE2_TO_C_8, VP9HighbdIntraPredTest,
473     ::testing::Values(
474         HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
475                              &vpx_highbd_dc_predictor_4x4_c, 4, 8),
476         HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
477                              &vpx_highbd_dc_predictor_8x8_c, 8, 8),
478         HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
479                              &vpx_highbd_dc_predictor_16x16_c, 16, 8),
480         HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
481                              &vpx_highbd_dc_predictor_32x32_c, 32, 8),
482         HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
483                              &vpx_highbd_tm_predictor_4x4_c, 4, 8),
484         HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
485                              &vpx_highbd_tm_predictor_8x8_c, 8, 8),
486         HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
487                              &vpx_highbd_tm_predictor_16x16_c, 16, 8),
488         HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
489                              &vpx_highbd_tm_predictor_32x32_c, 32, 8),
490         HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
491                              &vpx_highbd_v_predictor_4x4_c, 4, 8),
492         HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
493                              &vpx_highbd_v_predictor_8x8_c, 8, 8),
494         HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
495                              &vpx_highbd_v_predictor_16x16_c, 16, 8),
496         HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
497                              &vpx_highbd_v_predictor_32x32_c, 32, 8)));
498 
499 INSTANTIATE_TEST_CASE_P(
500     SSE2_TO_C_10, VP9HighbdIntraPredTest,
501     ::testing::Values(
502         HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
503                              &vpx_highbd_dc_predictor_4x4_c, 4, 10),
504         HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
505                              &vpx_highbd_dc_predictor_8x8_c, 8, 10),
506         HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
507                              &vpx_highbd_dc_predictor_16x16_c, 16, 10),
508         HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
509                              &vpx_highbd_dc_predictor_32x32_c, 32, 10),
510         HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
511                              &vpx_highbd_tm_predictor_4x4_c, 4, 10),
512         HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
513                              &vpx_highbd_tm_predictor_8x8_c, 8, 10),
514         HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
515                              &vpx_highbd_tm_predictor_16x16_c, 16, 10),
516         HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
517                              &vpx_highbd_tm_predictor_32x32_c, 32, 10),
518         HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
519                              &vpx_highbd_v_predictor_4x4_c, 4, 10),
520         HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
521                              &vpx_highbd_v_predictor_8x8_c, 8, 10),
522         HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
523                              &vpx_highbd_v_predictor_16x16_c, 16, 10),
524         HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
525                              &vpx_highbd_v_predictor_32x32_c, 32, 10)));
526 
527 INSTANTIATE_TEST_CASE_P(
528     SSE2_TO_C_12, VP9HighbdIntraPredTest,
529     ::testing::Values(
530         HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
531                              &vpx_highbd_dc_predictor_4x4_c, 4, 12),
532         HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
533                              &vpx_highbd_dc_predictor_8x8_c, 8, 12),
534         HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
535                              &vpx_highbd_dc_predictor_16x16_c, 16, 12),
536         HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
537                              &vpx_highbd_dc_predictor_32x32_c, 32, 12),
538         HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
539                              &vpx_highbd_tm_predictor_4x4_c, 4, 12),
540         HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
541                              &vpx_highbd_tm_predictor_8x8_c, 8, 12),
542         HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
543                              &vpx_highbd_tm_predictor_16x16_c, 16, 12),
544         HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
545                              &vpx_highbd_tm_predictor_32x32_c, 32, 12),
546         HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
547                              &vpx_highbd_v_predictor_4x4_c, 4, 12),
548         HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
549                              &vpx_highbd_v_predictor_8x8_c, 8, 12),
550         HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
551                              &vpx_highbd_v_predictor_16x16_c, 16, 12),
552         HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
553                              &vpx_highbd_v_predictor_32x32_c, 32, 12)));
554 #endif  // HAVE_SSE2
555 
556 #if HAVE_NEON
557 INSTANTIATE_TEST_CASE_P(
558     NEON_TO_C_8, VP9HighbdIntraPredTest,
559     ::testing::Values(
560         HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
561                              &vpx_highbd_d45_predictor_4x4_c, 4, 8),
562         HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
563                              &vpx_highbd_d45_predictor_8x8_c, 8, 8),
564         HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
565                              &vpx_highbd_d45_predictor_16x16_c, 16, 8),
566         HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
567                              &vpx_highbd_d45_predictor_32x32_c, 32, 8),
568         HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
569                              &vpx_highbd_d135_predictor_4x4_c, 4, 8),
570         HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
571                              &vpx_highbd_d135_predictor_8x8_c, 8, 8),
572         HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
573                              &vpx_highbd_d135_predictor_16x16_c, 16, 8),
574         HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
575                              &vpx_highbd_d135_predictor_32x32_c, 32, 8),
576         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
577                              &vpx_highbd_dc_128_predictor_4x4_c, 4, 8),
578         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
579                              &vpx_highbd_dc_128_predictor_8x8_c, 8, 8),
580         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
581                              &vpx_highbd_dc_128_predictor_16x16_c, 16, 8),
582         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
583                              &vpx_highbd_dc_128_predictor_32x32_c, 32, 8),
584         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
585                              &vpx_highbd_dc_left_predictor_4x4_c, 4, 8),
586         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
587                              &vpx_highbd_dc_left_predictor_8x8_c, 8, 8),
588         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
589                              &vpx_highbd_dc_left_predictor_16x16_c, 16, 8),
590         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
591                              &vpx_highbd_dc_left_predictor_32x32_c, 32, 8),
592         HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
593                              &vpx_highbd_dc_predictor_4x4_c, 4, 8),
594         HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
595                              &vpx_highbd_dc_predictor_8x8_c, 8, 8),
596         HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
597                              &vpx_highbd_dc_predictor_16x16_c, 16, 8),
598         HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
599                              &vpx_highbd_dc_predictor_32x32_c, 32, 8),
600         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
601                              &vpx_highbd_dc_top_predictor_4x4_c, 4, 8),
602         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
603                              &vpx_highbd_dc_top_predictor_8x8_c, 8, 8),
604         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
605                              &vpx_highbd_dc_top_predictor_16x16_c, 16, 8),
606         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
607                              &vpx_highbd_dc_top_predictor_32x32_c, 32, 8),
608         HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
609                              &vpx_highbd_h_predictor_4x4_c, 4, 8),
610         HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
611                              &vpx_highbd_h_predictor_8x8_c, 8, 8),
612         HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
613                              &vpx_highbd_h_predictor_16x16_c, 16, 8),
614         HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
615                              &vpx_highbd_h_predictor_32x32_c, 32, 8),
616         HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
617                              &vpx_highbd_tm_predictor_4x4_c, 4, 8),
618         HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
619                              &vpx_highbd_tm_predictor_8x8_c, 8, 8),
620         HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
621                              &vpx_highbd_tm_predictor_16x16_c, 16, 8),
622         HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
623                              &vpx_highbd_tm_predictor_32x32_c, 32, 8),
624         HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
625                              &vpx_highbd_v_predictor_4x4_c, 4, 8),
626         HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
627                              &vpx_highbd_v_predictor_8x8_c, 8, 8),
628         HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
629                              &vpx_highbd_v_predictor_16x16_c, 16, 8),
630         HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
631                              &vpx_highbd_v_predictor_32x32_c, 32, 8)));
632 
633 INSTANTIATE_TEST_CASE_P(
634     NEON_TO_C_10, VP9HighbdIntraPredTest,
635     ::testing::Values(
636         HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
637                              &vpx_highbd_d45_predictor_4x4_c, 4, 10),
638         HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
639                              &vpx_highbd_d45_predictor_8x8_c, 8, 10),
640         HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
641                              &vpx_highbd_d45_predictor_16x16_c, 16, 10),
642         HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
643                              &vpx_highbd_d45_predictor_32x32_c, 32, 10),
644         HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
645                              &vpx_highbd_d135_predictor_4x4_c, 4, 10),
646         HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
647                              &vpx_highbd_d135_predictor_8x8_c, 8, 10),
648         HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
649                              &vpx_highbd_d135_predictor_16x16_c, 16, 10),
650         HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
651                              &vpx_highbd_d135_predictor_32x32_c, 32, 10),
652         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
653                              &vpx_highbd_dc_128_predictor_4x4_c, 4, 10),
654         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
655                              &vpx_highbd_dc_128_predictor_8x8_c, 8, 10),
656         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
657                              &vpx_highbd_dc_128_predictor_16x16_c, 16, 10),
658         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
659                              &vpx_highbd_dc_128_predictor_32x32_c, 32, 10),
660         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
661                              &vpx_highbd_dc_left_predictor_4x4_c, 4, 10),
662         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
663                              &vpx_highbd_dc_left_predictor_8x8_c, 8, 10),
664         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
665                              &vpx_highbd_dc_left_predictor_16x16_c, 16, 10),
666         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
667                              &vpx_highbd_dc_left_predictor_32x32_c, 32, 10),
668         HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
669                              &vpx_highbd_dc_predictor_4x4_c, 4, 10),
670         HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
671                              &vpx_highbd_dc_predictor_8x8_c, 8, 10),
672         HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
673                              &vpx_highbd_dc_predictor_16x16_c, 16, 10),
674         HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
675                              &vpx_highbd_dc_predictor_32x32_c, 32, 10),
676         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
677                              &vpx_highbd_dc_top_predictor_4x4_c, 4, 10),
678         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
679                              &vpx_highbd_dc_top_predictor_8x8_c, 8, 10),
680         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
681                              &vpx_highbd_dc_top_predictor_16x16_c, 16, 10),
682         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
683                              &vpx_highbd_dc_top_predictor_32x32_c, 32, 10),
684         HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
685                              &vpx_highbd_h_predictor_4x4_c, 4, 10),
686         HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
687                              &vpx_highbd_h_predictor_8x8_c, 8, 10),
688         HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
689                              &vpx_highbd_h_predictor_16x16_c, 16, 10),
690         HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
691                              &vpx_highbd_h_predictor_32x32_c, 32, 10),
692         HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
693                              &vpx_highbd_tm_predictor_4x4_c, 4, 10),
694         HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
695                              &vpx_highbd_tm_predictor_8x8_c, 8, 10),
696         HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
697                              &vpx_highbd_tm_predictor_16x16_c, 16, 10),
698         HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
699                              &vpx_highbd_tm_predictor_32x32_c, 32, 10),
700         HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
701                              &vpx_highbd_v_predictor_4x4_c, 4, 10),
702         HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
703                              &vpx_highbd_v_predictor_8x8_c, 8, 10),
704         HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
705                              &vpx_highbd_v_predictor_16x16_c, 16, 10),
706         HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
707                              &vpx_highbd_v_predictor_32x32_c, 32, 10)));
708 
709 INSTANTIATE_TEST_CASE_P(
710     NEON_TO_C_12, VP9HighbdIntraPredTest,
711     ::testing::Values(
712         HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
713                              &vpx_highbd_d45_predictor_4x4_c, 4, 12),
714         HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
715                              &vpx_highbd_d45_predictor_8x8_c, 8, 12),
716         HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
717                              &vpx_highbd_d45_predictor_16x16_c, 16, 12),
718         HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
719                              &vpx_highbd_d45_predictor_32x32_c, 32, 12),
720         HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
721                              &vpx_highbd_d135_predictor_4x4_c, 4, 12),
722         HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
723                              &vpx_highbd_d135_predictor_8x8_c, 8, 12),
724         HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
725                              &vpx_highbd_d135_predictor_16x16_c, 16, 12),
726         HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
727                              &vpx_highbd_d135_predictor_32x32_c, 32, 12),
728         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
729                              &vpx_highbd_dc_128_predictor_4x4_c, 4, 12),
730         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
731                              &vpx_highbd_dc_128_predictor_8x8_c, 8, 12),
732         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
733                              &vpx_highbd_dc_128_predictor_16x16_c, 16, 12),
734         HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
735                              &vpx_highbd_dc_128_predictor_32x32_c, 32, 12),
736         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
737                              &vpx_highbd_dc_left_predictor_4x4_c, 4, 12),
738         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
739                              &vpx_highbd_dc_left_predictor_8x8_c, 8, 12),
740         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
741                              &vpx_highbd_dc_left_predictor_16x16_c, 16, 12),
742         HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
743                              &vpx_highbd_dc_left_predictor_32x32_c, 32, 12),
744         HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
745                              &vpx_highbd_dc_predictor_4x4_c, 4, 12),
746         HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
747                              &vpx_highbd_dc_predictor_8x8_c, 8, 12),
748         HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
749                              &vpx_highbd_dc_predictor_16x16_c, 16, 12),
750         HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
751                              &vpx_highbd_dc_predictor_32x32_c, 32, 12),
752         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
753                              &vpx_highbd_dc_top_predictor_4x4_c, 4, 12),
754         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
755                              &vpx_highbd_dc_top_predictor_8x8_c, 8, 12),
756         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
757                              &vpx_highbd_dc_top_predictor_16x16_c, 16, 12),
758         HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
759                              &vpx_highbd_dc_top_predictor_32x32_c, 32, 12),
760         HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
761                              &vpx_highbd_h_predictor_4x4_c, 4, 12),
762         HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
763                              &vpx_highbd_h_predictor_8x8_c, 8, 12),
764         HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
765                              &vpx_highbd_h_predictor_16x16_c, 16, 12),
766         HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
767                              &vpx_highbd_h_predictor_32x32_c, 32, 12),
768         HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
769                              &vpx_highbd_tm_predictor_4x4_c, 4, 12),
770         HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
771                              &vpx_highbd_tm_predictor_8x8_c, 8, 12),
772         HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
773                              &vpx_highbd_tm_predictor_16x16_c, 16, 12),
774         HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
775                              &vpx_highbd_tm_predictor_32x32_c, 32, 12),
776         HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
777                              &vpx_highbd_v_predictor_4x4_c, 4, 12),
778         HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
779                              &vpx_highbd_v_predictor_8x8_c, 8, 12),
780         HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
781                              &vpx_highbd_v_predictor_16x16_c, 16, 12),
782         HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
783                              &vpx_highbd_v_predictor_32x32_c, 32, 12)));
784 #endif  // HAVE_NEON
785 
786 #endif  // CONFIG_VP9_HIGHBITDEPTH
787 }  // namespace
788