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
25namespace {
26
27using libvpx_test::ACMRandom;
28
29const int count_test_block = 100000;
30
31typedef void (*IntraPredFunc)(uint8_t *dst, ptrdiff_t stride,
32                              const uint8_t *above, const uint8_t *left);
33
34struct IntraPredParam {
35  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
46template <typename Pixel, typename PredParam>
47class IntraPredTest : public ::testing::TestWithParam<PredParam> {
48 public:
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:
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
91  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
115template <>
116void 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
122typedef IntraPredTest<uint8_t, IntraPredParam> VP9IntraPredTest;
123
124TEST_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
134INSTANTIATE_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
198INSTANTIATE_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
229INSTANTIATE_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
303INSTANTIATE_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
324INSTANTIATE_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
382INSTANTIATE_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
436typedef void (*HighbdIntraPred)(uint16_t *dst, ptrdiff_t stride,
437                                const uint16_t *above, const uint16_t *left,
438                                int bps);
439struct HighbdIntraPredParam {
440  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
451template <>
452void 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
459typedef IntraPredTest<uint16_t, HighbdIntraPredParam> VP9HighbdIntraPredTest;
460
461TEST_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_SSSE3
471INSTANTIATE_TEST_CASE_P(
472    SSSE3_TO_C_8, VP9HighbdIntraPredTest,
473    ::testing::Values(
474        HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_ssse3,
475                             &vpx_highbd_d45_predictor_4x4_c, 4, 8),
476        HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_ssse3,
477                             &vpx_highbd_d45_predictor_8x8_c, 8, 8),
478        HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_ssse3,
479                             &vpx_highbd_d45_predictor_16x16_c, 16, 8),
480        HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_ssse3,
481                             &vpx_highbd_d45_predictor_32x32_c, 32, 8),
482        HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_ssse3,
483                             &vpx_highbd_d63_predictor_8x8_c, 8, 8),
484        HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_ssse3,
485                             &vpx_highbd_d63_predictor_16x16_c, 16, 8),
486        HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_c,
487                             &vpx_highbd_d63_predictor_32x32_ssse3, 32, 8),
488        HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_ssse3,
489                             &vpx_highbd_d117_predictor_8x8_c, 8, 8),
490        HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_ssse3,
491                             &vpx_highbd_d117_predictor_16x16_c, 16, 8),
492        HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_c,
493                             &vpx_highbd_d117_predictor_32x32_ssse3, 32, 8),
494        HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_ssse3,
495                             &vpx_highbd_d135_predictor_8x8_c, 8, 8),
496        HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_ssse3,
497                             &vpx_highbd_d135_predictor_16x16_c, 16, 8),
498        HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_ssse3,
499                             &vpx_highbd_d135_predictor_32x32_c, 32, 8),
500        HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_ssse3,
501                             &vpx_highbd_d153_predictor_8x8_c, 8, 8),
502        HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_ssse3,
503                             &vpx_highbd_d153_predictor_16x16_c, 16, 8),
504        HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_ssse3,
505                             &vpx_highbd_d153_predictor_32x32_c, 32, 8),
506        HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_ssse3,
507                             &vpx_highbd_d207_predictor_8x8_c, 8, 8),
508        HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_ssse3,
509                             &vpx_highbd_d207_predictor_16x16_c, 16, 8),
510        HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_ssse3,
511                             &vpx_highbd_d207_predictor_32x32_c, 32, 8)));
512
513INSTANTIATE_TEST_CASE_P(
514    SSSE3_TO_C_10, VP9HighbdIntraPredTest,
515    ::testing::Values(
516        HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_ssse3,
517                             &vpx_highbd_d45_predictor_4x4_c, 4, 10),
518        HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_ssse3,
519                             &vpx_highbd_d45_predictor_8x8_c, 8, 10),
520        HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_ssse3,
521                             &vpx_highbd_d45_predictor_16x16_c, 16, 10),
522        HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_ssse3,
523                             &vpx_highbd_d45_predictor_32x32_c, 32, 10),
524        HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_ssse3,
525                             &vpx_highbd_d63_predictor_8x8_c, 8, 10),
526        HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_ssse3,
527                             &vpx_highbd_d63_predictor_16x16_c, 16, 10),
528        HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_c,
529                             &vpx_highbd_d63_predictor_32x32_ssse3, 32, 10),
530        HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_ssse3,
531                             &vpx_highbd_d117_predictor_8x8_c, 8, 10),
532        HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_ssse3,
533                             &vpx_highbd_d117_predictor_16x16_c, 16, 10),
534        HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_c,
535                             &vpx_highbd_d117_predictor_32x32_ssse3, 32, 10),
536        HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_ssse3,
537                             &vpx_highbd_d135_predictor_8x8_c, 8, 10),
538        HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_ssse3,
539                             &vpx_highbd_d135_predictor_16x16_c, 16, 10),
540        HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_ssse3,
541                             &vpx_highbd_d135_predictor_32x32_c, 32, 10),
542        HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_ssse3,
543                             &vpx_highbd_d153_predictor_8x8_c, 8, 10),
544        HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_ssse3,
545                             &vpx_highbd_d153_predictor_16x16_c, 16, 10),
546        HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_ssse3,
547                             &vpx_highbd_d153_predictor_32x32_c, 32, 10),
548        HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_ssse3,
549                             &vpx_highbd_d207_predictor_8x8_c, 8, 10),
550        HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_ssse3,
551                             &vpx_highbd_d207_predictor_16x16_c, 16, 10),
552        HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_ssse3,
553                             &vpx_highbd_d207_predictor_32x32_c, 32, 10)));
554
555INSTANTIATE_TEST_CASE_P(
556    SSSE3_TO_C_12, VP9HighbdIntraPredTest,
557    ::testing::Values(
558        HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_ssse3,
559                             &vpx_highbd_d45_predictor_4x4_c, 4, 12),
560        HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_ssse3,
561                             &vpx_highbd_d45_predictor_8x8_c, 8, 12),
562        HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_ssse3,
563                             &vpx_highbd_d45_predictor_16x16_c, 16, 12),
564        HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_ssse3,
565                             &vpx_highbd_d45_predictor_32x32_c, 32, 12),
566        HighbdIntraPredParam(&vpx_highbd_d63_predictor_8x8_ssse3,
567                             &vpx_highbd_d63_predictor_8x8_c, 8, 12),
568        HighbdIntraPredParam(&vpx_highbd_d63_predictor_16x16_ssse3,
569                             &vpx_highbd_d63_predictor_16x16_c, 16, 12),
570        HighbdIntraPredParam(&vpx_highbd_d63_predictor_32x32_c,
571                             &vpx_highbd_d63_predictor_32x32_ssse3, 32, 12),
572        HighbdIntraPredParam(&vpx_highbd_d117_predictor_8x8_ssse3,
573                             &vpx_highbd_d117_predictor_8x8_c, 8, 12),
574        HighbdIntraPredParam(&vpx_highbd_d117_predictor_16x16_ssse3,
575                             &vpx_highbd_d117_predictor_16x16_c, 16, 12),
576        HighbdIntraPredParam(&vpx_highbd_d117_predictor_32x32_c,
577                             &vpx_highbd_d117_predictor_32x32_ssse3, 32, 12),
578        HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_ssse3,
579                             &vpx_highbd_d135_predictor_8x8_c, 8, 12),
580        HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_ssse3,
581                             &vpx_highbd_d135_predictor_16x16_c, 16, 12),
582        HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_ssse3,
583                             &vpx_highbd_d135_predictor_32x32_c, 32, 12),
584        HighbdIntraPredParam(&vpx_highbd_d153_predictor_8x8_ssse3,
585                             &vpx_highbd_d153_predictor_8x8_c, 8, 12),
586        HighbdIntraPredParam(&vpx_highbd_d153_predictor_16x16_ssse3,
587                             &vpx_highbd_d153_predictor_16x16_c, 16, 12),
588        HighbdIntraPredParam(&vpx_highbd_d153_predictor_32x32_ssse3,
589                             &vpx_highbd_d153_predictor_32x32_c, 32, 12),
590        HighbdIntraPredParam(&vpx_highbd_d207_predictor_8x8_ssse3,
591                             &vpx_highbd_d207_predictor_8x8_c, 8, 12),
592        HighbdIntraPredParam(&vpx_highbd_d207_predictor_16x16_ssse3,
593                             &vpx_highbd_d207_predictor_16x16_c, 16, 12),
594        HighbdIntraPredParam(&vpx_highbd_d207_predictor_32x32_ssse3,
595                             &vpx_highbd_d207_predictor_32x32_c, 32, 12)));
596#endif  // HAVE_SSSE3
597
598#if HAVE_SSE2
599INSTANTIATE_TEST_CASE_P(
600    SSE2_TO_C_8, VP9HighbdIntraPredTest,
601    ::testing::Values(
602        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_sse2,
603                             &vpx_highbd_dc_128_predictor_4x4_c, 4, 8),
604        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_sse2,
605                             &vpx_highbd_dc_128_predictor_8x8_c, 8, 8),
606        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_sse2,
607                             &vpx_highbd_dc_128_predictor_16x16_c, 16, 8),
608        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_sse2,
609                             &vpx_highbd_dc_128_predictor_32x32_c, 32, 8),
610        HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_sse2,
611                             &vpx_highbd_d63_predictor_4x4_c, 4, 8),
612        HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_sse2,
613                             &vpx_highbd_d117_predictor_4x4_c, 4, 8),
614        HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_sse2,
615                             &vpx_highbd_d135_predictor_4x4_c, 4, 8),
616        HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_sse2,
617                             &vpx_highbd_d153_predictor_4x4_c, 4, 8),
618        HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_sse2,
619                             &vpx_highbd_d207_predictor_4x4_c, 4, 8),
620        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_sse2,
621                             &vpx_highbd_dc_left_predictor_4x4_c, 4, 8),
622        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_sse2,
623                             &vpx_highbd_dc_left_predictor_8x8_c, 8, 8),
624        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_sse2,
625                             &vpx_highbd_dc_left_predictor_16x16_c, 16, 8),
626        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_sse2,
627                             &vpx_highbd_dc_left_predictor_32x32_c, 32, 8),
628        HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
629                             &vpx_highbd_dc_predictor_4x4_c, 4, 8),
630        HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
631                             &vpx_highbd_dc_predictor_8x8_c, 8, 8),
632        HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
633                             &vpx_highbd_dc_predictor_16x16_c, 16, 8),
634        HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
635                             &vpx_highbd_dc_predictor_32x32_c, 32, 8),
636        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_sse2,
637                             &vpx_highbd_dc_top_predictor_4x4_c, 4, 8),
638        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_sse2,
639                             &vpx_highbd_dc_top_predictor_8x8_c, 8, 8),
640        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_sse2,
641                             &vpx_highbd_dc_top_predictor_16x16_c, 16, 8),
642        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_sse2,
643                             &vpx_highbd_dc_top_predictor_32x32_c, 32, 8),
644        HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
645                             &vpx_highbd_tm_predictor_4x4_c, 4, 8),
646        HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
647                             &vpx_highbd_tm_predictor_8x8_c, 8, 8),
648        HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
649                             &vpx_highbd_tm_predictor_16x16_c, 16, 8),
650        HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
651                             &vpx_highbd_tm_predictor_32x32_c, 32, 8),
652        HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_sse2,
653                             &vpx_highbd_h_predictor_4x4_c, 4, 8),
654        HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_sse2,
655                             &vpx_highbd_h_predictor_8x8_c, 8, 8),
656        HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_sse2,
657                             &vpx_highbd_h_predictor_16x16_c, 16, 8),
658        HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_sse2,
659                             &vpx_highbd_h_predictor_32x32_c, 32, 8),
660        HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
661                             &vpx_highbd_v_predictor_4x4_c, 4, 8),
662        HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
663                             &vpx_highbd_v_predictor_8x8_c, 8, 8),
664        HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
665                             &vpx_highbd_v_predictor_16x16_c, 16, 8),
666        HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
667                             &vpx_highbd_v_predictor_32x32_c, 32, 8)));
668
669INSTANTIATE_TEST_CASE_P(
670    SSE2_TO_C_10, VP9HighbdIntraPredTest,
671    ::testing::Values(
672        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_sse2,
673                             &vpx_highbd_dc_128_predictor_4x4_c, 4, 10),
674        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_sse2,
675                             &vpx_highbd_dc_128_predictor_8x8_c, 8, 10),
676        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_sse2,
677                             &vpx_highbd_dc_128_predictor_16x16_c, 16, 10),
678        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_sse2,
679                             &vpx_highbd_dc_128_predictor_32x32_c, 32, 10),
680        HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_sse2,
681                             &vpx_highbd_d63_predictor_4x4_c, 4, 10),
682        HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_sse2,
683                             &vpx_highbd_d117_predictor_4x4_c, 4, 10),
684        HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_sse2,
685                             &vpx_highbd_d135_predictor_4x4_c, 4, 10),
686        HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_sse2,
687                             &vpx_highbd_d153_predictor_4x4_c, 4, 10),
688        HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_sse2,
689                             &vpx_highbd_d207_predictor_4x4_c, 4, 10),
690        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_sse2,
691                             &vpx_highbd_dc_left_predictor_4x4_c, 4, 10),
692        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_sse2,
693                             &vpx_highbd_dc_left_predictor_8x8_c, 8, 10),
694        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_sse2,
695                             &vpx_highbd_dc_left_predictor_16x16_c, 16, 10),
696        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_sse2,
697                             &vpx_highbd_dc_left_predictor_32x32_c, 32, 10),
698        HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
699                             &vpx_highbd_dc_predictor_4x4_c, 4, 10),
700        HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
701                             &vpx_highbd_dc_predictor_8x8_c, 8, 10),
702        HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
703                             &vpx_highbd_dc_predictor_16x16_c, 16, 10),
704        HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
705                             &vpx_highbd_dc_predictor_32x32_c, 32, 10),
706        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_sse2,
707                             &vpx_highbd_dc_top_predictor_4x4_c, 4, 10),
708        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_sse2,
709                             &vpx_highbd_dc_top_predictor_8x8_c, 8, 10),
710        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_sse2,
711                             &vpx_highbd_dc_top_predictor_16x16_c, 16, 10),
712        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_sse2,
713                             &vpx_highbd_dc_top_predictor_32x32_c, 32, 10),
714        HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
715                             &vpx_highbd_tm_predictor_4x4_c, 4, 10),
716        HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
717                             &vpx_highbd_tm_predictor_8x8_c, 8, 10),
718        HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
719                             &vpx_highbd_tm_predictor_16x16_c, 16, 10),
720        HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
721                             &vpx_highbd_tm_predictor_32x32_c, 32, 10),
722        HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_sse2,
723                             &vpx_highbd_h_predictor_4x4_c, 4, 10),
724        HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_sse2,
725                             &vpx_highbd_h_predictor_8x8_c, 8, 10),
726        HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_sse2,
727                             &vpx_highbd_h_predictor_16x16_c, 16, 10),
728        HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_sse2,
729                             &vpx_highbd_h_predictor_32x32_c, 32, 10),
730        HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
731                             &vpx_highbd_v_predictor_4x4_c, 4, 10),
732        HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
733                             &vpx_highbd_v_predictor_8x8_c, 8, 10),
734        HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
735                             &vpx_highbd_v_predictor_16x16_c, 16, 10),
736        HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
737                             &vpx_highbd_v_predictor_32x32_c, 32, 10)));
738
739INSTANTIATE_TEST_CASE_P(
740    SSE2_TO_C_12, VP9HighbdIntraPredTest,
741    ::testing::Values(
742        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_sse2,
743                             &vpx_highbd_dc_128_predictor_4x4_c, 4, 12),
744        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_sse2,
745                             &vpx_highbd_dc_128_predictor_8x8_c, 8, 12),
746        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_sse2,
747                             &vpx_highbd_dc_128_predictor_16x16_c, 16, 12),
748        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_sse2,
749                             &vpx_highbd_dc_128_predictor_32x32_c, 32, 12),
750        HighbdIntraPredParam(&vpx_highbd_d63_predictor_4x4_sse2,
751                             &vpx_highbd_d63_predictor_4x4_c, 4, 12),
752        HighbdIntraPredParam(&vpx_highbd_d117_predictor_4x4_sse2,
753                             &vpx_highbd_d117_predictor_4x4_c, 4, 12),
754        HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_sse2,
755                             &vpx_highbd_d135_predictor_4x4_c, 4, 12),
756        HighbdIntraPredParam(&vpx_highbd_d153_predictor_4x4_sse2,
757                             &vpx_highbd_d153_predictor_4x4_c, 4, 12),
758        HighbdIntraPredParam(&vpx_highbd_d207_predictor_4x4_sse2,
759                             &vpx_highbd_d207_predictor_4x4_c, 4, 12),
760        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_sse2,
761                             &vpx_highbd_dc_left_predictor_4x4_c, 4, 12),
762        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_sse2,
763                             &vpx_highbd_dc_left_predictor_8x8_c, 8, 12),
764        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_sse2,
765                             &vpx_highbd_dc_left_predictor_16x16_c, 16, 12),
766        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_sse2,
767                             &vpx_highbd_dc_left_predictor_32x32_c, 32, 12),
768        HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_sse2,
769                             &vpx_highbd_dc_predictor_4x4_c, 4, 12),
770        HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_sse2,
771                             &vpx_highbd_dc_predictor_8x8_c, 8, 12),
772        HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_sse2,
773                             &vpx_highbd_dc_predictor_16x16_c, 16, 12),
774        HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_sse2,
775                             &vpx_highbd_dc_predictor_32x32_c, 32, 12),
776        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_sse2,
777                             &vpx_highbd_dc_top_predictor_4x4_c, 4, 12),
778        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_sse2,
779                             &vpx_highbd_dc_top_predictor_8x8_c, 8, 12),
780        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_sse2,
781                             &vpx_highbd_dc_top_predictor_16x16_c, 16, 12),
782        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_sse2,
783                             &vpx_highbd_dc_top_predictor_32x32_c, 32, 12),
784        HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_sse2,
785                             &vpx_highbd_tm_predictor_4x4_c, 4, 12),
786        HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_sse2,
787                             &vpx_highbd_tm_predictor_8x8_c, 8, 12),
788        HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_sse2,
789                             &vpx_highbd_tm_predictor_16x16_c, 16, 12),
790        HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_sse2,
791                             &vpx_highbd_tm_predictor_32x32_c, 32, 12),
792        HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_sse2,
793                             &vpx_highbd_h_predictor_4x4_c, 4, 12),
794        HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_sse2,
795                             &vpx_highbd_h_predictor_8x8_c, 8, 12),
796        HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_sse2,
797                             &vpx_highbd_h_predictor_16x16_c, 16, 12),
798        HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_sse2,
799                             &vpx_highbd_h_predictor_32x32_c, 32, 12),
800        HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_sse2,
801                             &vpx_highbd_v_predictor_4x4_c, 4, 12),
802        HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_sse2,
803                             &vpx_highbd_v_predictor_8x8_c, 8, 12),
804        HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_sse2,
805                             &vpx_highbd_v_predictor_16x16_c, 16, 12),
806        HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_sse2,
807                             &vpx_highbd_v_predictor_32x32_c, 32, 12)));
808#endif  // HAVE_SSE2
809
810#if HAVE_NEON
811INSTANTIATE_TEST_CASE_P(
812    NEON_TO_C_8, VP9HighbdIntraPredTest,
813    ::testing::Values(
814        HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
815                             &vpx_highbd_d45_predictor_4x4_c, 4, 8),
816        HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
817                             &vpx_highbd_d45_predictor_8x8_c, 8, 8),
818        HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
819                             &vpx_highbd_d45_predictor_16x16_c, 16, 8),
820        HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
821                             &vpx_highbd_d45_predictor_32x32_c, 32, 8),
822        HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
823                             &vpx_highbd_d135_predictor_4x4_c, 4, 8),
824        HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
825                             &vpx_highbd_d135_predictor_8x8_c, 8, 8),
826        HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
827                             &vpx_highbd_d135_predictor_16x16_c, 16, 8),
828        HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
829                             &vpx_highbd_d135_predictor_32x32_c, 32, 8),
830        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
831                             &vpx_highbd_dc_128_predictor_4x4_c, 4, 8),
832        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
833                             &vpx_highbd_dc_128_predictor_8x8_c, 8, 8),
834        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
835                             &vpx_highbd_dc_128_predictor_16x16_c, 16, 8),
836        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
837                             &vpx_highbd_dc_128_predictor_32x32_c, 32, 8),
838        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
839                             &vpx_highbd_dc_left_predictor_4x4_c, 4, 8),
840        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
841                             &vpx_highbd_dc_left_predictor_8x8_c, 8, 8),
842        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
843                             &vpx_highbd_dc_left_predictor_16x16_c, 16, 8),
844        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
845                             &vpx_highbd_dc_left_predictor_32x32_c, 32, 8),
846        HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
847                             &vpx_highbd_dc_predictor_4x4_c, 4, 8),
848        HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
849                             &vpx_highbd_dc_predictor_8x8_c, 8, 8),
850        HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
851                             &vpx_highbd_dc_predictor_16x16_c, 16, 8),
852        HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
853                             &vpx_highbd_dc_predictor_32x32_c, 32, 8),
854        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
855                             &vpx_highbd_dc_top_predictor_4x4_c, 4, 8),
856        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
857                             &vpx_highbd_dc_top_predictor_8x8_c, 8, 8),
858        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
859                             &vpx_highbd_dc_top_predictor_16x16_c, 16, 8),
860        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
861                             &vpx_highbd_dc_top_predictor_32x32_c, 32, 8),
862        HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
863                             &vpx_highbd_h_predictor_4x4_c, 4, 8),
864        HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
865                             &vpx_highbd_h_predictor_8x8_c, 8, 8),
866        HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
867                             &vpx_highbd_h_predictor_16x16_c, 16, 8),
868        HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
869                             &vpx_highbd_h_predictor_32x32_c, 32, 8),
870        HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
871                             &vpx_highbd_tm_predictor_4x4_c, 4, 8),
872        HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
873                             &vpx_highbd_tm_predictor_8x8_c, 8, 8),
874        HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
875                             &vpx_highbd_tm_predictor_16x16_c, 16, 8),
876        HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
877                             &vpx_highbd_tm_predictor_32x32_c, 32, 8),
878        HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
879                             &vpx_highbd_v_predictor_4x4_c, 4, 8),
880        HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
881                             &vpx_highbd_v_predictor_8x8_c, 8, 8),
882        HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
883                             &vpx_highbd_v_predictor_16x16_c, 16, 8),
884        HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
885                             &vpx_highbd_v_predictor_32x32_c, 32, 8)));
886
887INSTANTIATE_TEST_CASE_P(
888    NEON_TO_C_10, VP9HighbdIntraPredTest,
889    ::testing::Values(
890        HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
891                             &vpx_highbd_d45_predictor_4x4_c, 4, 10),
892        HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
893                             &vpx_highbd_d45_predictor_8x8_c, 8, 10),
894        HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
895                             &vpx_highbd_d45_predictor_16x16_c, 16, 10),
896        HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
897                             &vpx_highbd_d45_predictor_32x32_c, 32, 10),
898        HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
899                             &vpx_highbd_d135_predictor_4x4_c, 4, 10),
900        HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
901                             &vpx_highbd_d135_predictor_8x8_c, 8, 10),
902        HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
903                             &vpx_highbd_d135_predictor_16x16_c, 16, 10),
904        HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
905                             &vpx_highbd_d135_predictor_32x32_c, 32, 10),
906        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
907                             &vpx_highbd_dc_128_predictor_4x4_c, 4, 10),
908        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
909                             &vpx_highbd_dc_128_predictor_8x8_c, 8, 10),
910        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
911                             &vpx_highbd_dc_128_predictor_16x16_c, 16, 10),
912        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
913                             &vpx_highbd_dc_128_predictor_32x32_c, 32, 10),
914        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
915                             &vpx_highbd_dc_left_predictor_4x4_c, 4, 10),
916        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
917                             &vpx_highbd_dc_left_predictor_8x8_c, 8, 10),
918        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
919                             &vpx_highbd_dc_left_predictor_16x16_c, 16, 10),
920        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
921                             &vpx_highbd_dc_left_predictor_32x32_c, 32, 10),
922        HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
923                             &vpx_highbd_dc_predictor_4x4_c, 4, 10),
924        HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
925                             &vpx_highbd_dc_predictor_8x8_c, 8, 10),
926        HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
927                             &vpx_highbd_dc_predictor_16x16_c, 16, 10),
928        HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
929                             &vpx_highbd_dc_predictor_32x32_c, 32, 10),
930        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
931                             &vpx_highbd_dc_top_predictor_4x4_c, 4, 10),
932        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
933                             &vpx_highbd_dc_top_predictor_8x8_c, 8, 10),
934        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
935                             &vpx_highbd_dc_top_predictor_16x16_c, 16, 10),
936        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
937                             &vpx_highbd_dc_top_predictor_32x32_c, 32, 10),
938        HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
939                             &vpx_highbd_h_predictor_4x4_c, 4, 10),
940        HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
941                             &vpx_highbd_h_predictor_8x8_c, 8, 10),
942        HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
943                             &vpx_highbd_h_predictor_16x16_c, 16, 10),
944        HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
945                             &vpx_highbd_h_predictor_32x32_c, 32, 10),
946        HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
947                             &vpx_highbd_tm_predictor_4x4_c, 4, 10),
948        HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
949                             &vpx_highbd_tm_predictor_8x8_c, 8, 10),
950        HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
951                             &vpx_highbd_tm_predictor_16x16_c, 16, 10),
952        HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
953                             &vpx_highbd_tm_predictor_32x32_c, 32, 10),
954        HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
955                             &vpx_highbd_v_predictor_4x4_c, 4, 10),
956        HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
957                             &vpx_highbd_v_predictor_8x8_c, 8, 10),
958        HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
959                             &vpx_highbd_v_predictor_16x16_c, 16, 10),
960        HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
961                             &vpx_highbd_v_predictor_32x32_c, 32, 10)));
962
963INSTANTIATE_TEST_CASE_P(
964    NEON_TO_C_12, VP9HighbdIntraPredTest,
965    ::testing::Values(
966        HighbdIntraPredParam(&vpx_highbd_d45_predictor_4x4_neon,
967                             &vpx_highbd_d45_predictor_4x4_c, 4, 12),
968        HighbdIntraPredParam(&vpx_highbd_d45_predictor_8x8_neon,
969                             &vpx_highbd_d45_predictor_8x8_c, 8, 12),
970        HighbdIntraPredParam(&vpx_highbd_d45_predictor_16x16_neon,
971                             &vpx_highbd_d45_predictor_16x16_c, 16, 12),
972        HighbdIntraPredParam(&vpx_highbd_d45_predictor_32x32_neon,
973                             &vpx_highbd_d45_predictor_32x32_c, 32, 12),
974        HighbdIntraPredParam(&vpx_highbd_d135_predictor_4x4_neon,
975                             &vpx_highbd_d135_predictor_4x4_c, 4, 12),
976        HighbdIntraPredParam(&vpx_highbd_d135_predictor_8x8_neon,
977                             &vpx_highbd_d135_predictor_8x8_c, 8, 12),
978        HighbdIntraPredParam(&vpx_highbd_d135_predictor_16x16_neon,
979                             &vpx_highbd_d135_predictor_16x16_c, 16, 12),
980        HighbdIntraPredParam(&vpx_highbd_d135_predictor_32x32_neon,
981                             &vpx_highbd_d135_predictor_32x32_c, 32, 12),
982        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_4x4_neon,
983                             &vpx_highbd_dc_128_predictor_4x4_c, 4, 12),
984        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_8x8_neon,
985                             &vpx_highbd_dc_128_predictor_8x8_c, 8, 12),
986        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_16x16_neon,
987                             &vpx_highbd_dc_128_predictor_16x16_c, 16, 12),
988        HighbdIntraPredParam(&vpx_highbd_dc_128_predictor_32x32_neon,
989                             &vpx_highbd_dc_128_predictor_32x32_c, 32, 12),
990        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_4x4_neon,
991                             &vpx_highbd_dc_left_predictor_4x4_c, 4, 12),
992        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_8x8_neon,
993                             &vpx_highbd_dc_left_predictor_8x8_c, 8, 12),
994        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_16x16_neon,
995                             &vpx_highbd_dc_left_predictor_16x16_c, 16, 12),
996        HighbdIntraPredParam(&vpx_highbd_dc_left_predictor_32x32_neon,
997                             &vpx_highbd_dc_left_predictor_32x32_c, 32, 12),
998        HighbdIntraPredParam(&vpx_highbd_dc_predictor_4x4_neon,
999                             &vpx_highbd_dc_predictor_4x4_c, 4, 12),
1000        HighbdIntraPredParam(&vpx_highbd_dc_predictor_8x8_neon,
1001                             &vpx_highbd_dc_predictor_8x8_c, 8, 12),
1002        HighbdIntraPredParam(&vpx_highbd_dc_predictor_16x16_neon,
1003                             &vpx_highbd_dc_predictor_16x16_c, 16, 12),
1004        HighbdIntraPredParam(&vpx_highbd_dc_predictor_32x32_neon,
1005                             &vpx_highbd_dc_predictor_32x32_c, 32, 12),
1006        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_4x4_neon,
1007                             &vpx_highbd_dc_top_predictor_4x4_c, 4, 12),
1008        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_8x8_neon,
1009                             &vpx_highbd_dc_top_predictor_8x8_c, 8, 12),
1010        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_16x16_neon,
1011                             &vpx_highbd_dc_top_predictor_16x16_c, 16, 12),
1012        HighbdIntraPredParam(&vpx_highbd_dc_top_predictor_32x32_neon,
1013                             &vpx_highbd_dc_top_predictor_32x32_c, 32, 12),
1014        HighbdIntraPredParam(&vpx_highbd_h_predictor_4x4_neon,
1015                             &vpx_highbd_h_predictor_4x4_c, 4, 12),
1016        HighbdIntraPredParam(&vpx_highbd_h_predictor_8x8_neon,
1017                             &vpx_highbd_h_predictor_8x8_c, 8, 12),
1018        HighbdIntraPredParam(&vpx_highbd_h_predictor_16x16_neon,
1019                             &vpx_highbd_h_predictor_16x16_c, 16, 12),
1020        HighbdIntraPredParam(&vpx_highbd_h_predictor_32x32_neon,
1021                             &vpx_highbd_h_predictor_32x32_c, 32, 12),
1022        HighbdIntraPredParam(&vpx_highbd_tm_predictor_4x4_neon,
1023                             &vpx_highbd_tm_predictor_4x4_c, 4, 12),
1024        HighbdIntraPredParam(&vpx_highbd_tm_predictor_8x8_neon,
1025                             &vpx_highbd_tm_predictor_8x8_c, 8, 12),
1026        HighbdIntraPredParam(&vpx_highbd_tm_predictor_16x16_neon,
1027                             &vpx_highbd_tm_predictor_16x16_c, 16, 12),
1028        HighbdIntraPredParam(&vpx_highbd_tm_predictor_32x32_neon,
1029                             &vpx_highbd_tm_predictor_32x32_c, 32, 12),
1030        HighbdIntraPredParam(&vpx_highbd_v_predictor_4x4_neon,
1031                             &vpx_highbd_v_predictor_4x4_c, 4, 12),
1032        HighbdIntraPredParam(&vpx_highbd_v_predictor_8x8_neon,
1033                             &vpx_highbd_v_predictor_8x8_c, 8, 12),
1034        HighbdIntraPredParam(&vpx_highbd_v_predictor_16x16_neon,
1035                             &vpx_highbd_v_predictor_16x16_c, 16, 12),
1036        HighbdIntraPredParam(&vpx_highbd_v_predictor_32x32_neon,
1037                             &vpx_highbd_v_predictor_32x32_c, 32, 12)));
1038#endif  // HAVE_NEON
1039
1040#endif  // CONFIG_VP9_HIGHBITDEPTH
1041}  // namespace
1042