Home | History | Annotate | Download | only in test
      1 /*
      2  *  Copyright (c) 2012 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 <cstdlib>
     12 #include <new>
     13 
     14 #include "third_party/googletest/src/include/gtest/gtest.h"
     15 
     16 #include "./vpx_config.h"
     17 #include "./vpx_dsp_rtcd.h"
     18 #include "test/acm_random.h"
     19 #include "test/clear_system_state.h"
     20 #include "test/register_state_check.h"
     21 #include "vpx/vpx_codec.h"
     22 #include "vpx/vpx_integer.h"
     23 #include "vpx_mem/vpx_mem.h"
     24 #include "vpx_ports/mem.h"
     25 #include "vpx_ports/vpx_timer.h"
     26 
     27 namespace {
     28 
     29 typedef unsigned int (*VarianceMxNFunc)(const uint8_t *a, int a_stride,
     30                                         const uint8_t *b, int b_stride,
     31                                         unsigned int *sse);
     32 typedef unsigned int (*SubpixVarMxNFunc)(const uint8_t *a, int a_stride,
     33                                          int xoffset, int yoffset,
     34                                          const uint8_t *b, int b_stride,
     35                                          unsigned int *sse);
     36 typedef unsigned int (*SubpixAvgVarMxNFunc)(const uint8_t *a, int a_stride,
     37                                             int xoffset, int yoffset,
     38                                             const uint8_t *b, int b_stride,
     39                                             uint32_t *sse,
     40                                             const uint8_t *second_pred);
     41 typedef unsigned int (*Get4x4SseFunc)(const uint8_t *a, int a_stride,
     42                                       const uint8_t *b, int b_stride);
     43 typedef unsigned int (*SumOfSquaresFunction)(const int16_t *src);
     44 
     45 using libvpx_test::ACMRandom;
     46 
     47 // Truncate high bit depth results by downshifting (with rounding) by:
     48 // 2 * (bit_depth - 8) for sse
     49 // (bit_depth - 8) for se
     50 static void RoundHighBitDepth(int bit_depth, int64_t *se, uint64_t *sse) {
     51   switch (bit_depth) {
     52     case VPX_BITS_12:
     53       *sse = (*sse + 128) >> 8;
     54       *se = (*se + 8) >> 4;
     55       break;
     56     case VPX_BITS_10:
     57       *sse = (*sse + 8) >> 4;
     58       *se = (*se + 2) >> 2;
     59       break;
     60     case VPX_BITS_8:
     61     default: break;
     62   }
     63 }
     64 
     65 static unsigned int mb_ss_ref(const int16_t *src) {
     66   unsigned int res = 0;
     67   for (int i = 0; i < 256; ++i) {
     68     res += src[i] * src[i];
     69   }
     70   return res;
     71 }
     72 
     73 /* Note:
     74  *  Our codebase calculates the "diff" value in the variance algorithm by
     75  *  (src - ref).
     76  */
     77 static uint32_t variance_ref(const uint8_t *src, const uint8_t *ref, int l2w,
     78                              int l2h, int src_stride, int ref_stride,
     79                              uint32_t *sse_ptr, bool use_high_bit_depth_,
     80                              vpx_bit_depth_t bit_depth) {
     81   int64_t se = 0;
     82   uint64_t sse = 0;
     83   const int w = 1 << l2w;
     84   const int h = 1 << l2h;
     85   for (int y = 0; y < h; y++) {
     86     for (int x = 0; x < w; x++) {
     87       int diff;
     88       if (!use_high_bit_depth_) {
     89         diff = src[y * src_stride + x] - ref[y * ref_stride + x];
     90         se += diff;
     91         sse += diff * diff;
     92 #if CONFIG_VP9_HIGHBITDEPTH
     93       } else {
     94         diff = CONVERT_TO_SHORTPTR(src)[y * src_stride + x] -
     95                CONVERT_TO_SHORTPTR(ref)[y * ref_stride + x];
     96         se += diff;
     97         sse += diff * diff;
     98 #endif  // CONFIG_VP9_HIGHBITDEPTH
     99       }
    100     }
    101   }
    102   RoundHighBitDepth(bit_depth, &se, &sse);
    103   *sse_ptr = static_cast<uint32_t>(sse);
    104   return static_cast<uint32_t>(
    105       sse - ((static_cast<int64_t>(se) * se) >> (l2w + l2h)));
    106 }
    107 
    108 /* The subpel reference functions differ from the codec version in one aspect:
    109  * they calculate the bilinear factors directly instead of using a lookup table
    110  * and therefore upshift xoff and yoff by 1. Only every other calculated value
    111  * is used so the codec version shrinks the table to save space and maintain
    112  * compatibility with vp8.
    113  */
    114 static uint32_t subpel_variance_ref(const uint8_t *ref, const uint8_t *src,
    115                                     int l2w, int l2h, int xoff, int yoff,
    116                                     uint32_t *sse_ptr, bool use_high_bit_depth_,
    117                                     vpx_bit_depth_t bit_depth) {
    118   int64_t se = 0;
    119   uint64_t sse = 0;
    120   const int w = 1 << l2w;
    121   const int h = 1 << l2h;
    122 
    123   xoff <<= 1;
    124   yoff <<= 1;
    125 
    126   for (int y = 0; y < h; y++) {
    127     for (int x = 0; x < w; x++) {
    128       // Bilinear interpolation at a 16th pel step.
    129       if (!use_high_bit_depth_) {
    130         const int a1 = ref[(w + 1) * (y + 0) + x + 0];
    131         const int a2 = ref[(w + 1) * (y + 0) + x + 1];
    132         const int b1 = ref[(w + 1) * (y + 1) + x + 0];
    133         const int b2 = ref[(w + 1) * (y + 1) + x + 1];
    134         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
    135         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
    136         const int r = a + (((b - a) * yoff + 8) >> 4);
    137         const int diff = r - src[w * y + x];
    138         se += diff;
    139         sse += diff * diff;
    140 #if CONFIG_VP9_HIGHBITDEPTH
    141       } else {
    142         uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
    143         uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
    144         const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
    145         const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
    146         const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
    147         const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
    148         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
    149         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
    150         const int r = a + (((b - a) * yoff + 8) >> 4);
    151         const int diff = r - src16[w * y + x];
    152         se += diff;
    153         sse += diff * diff;
    154 #endif  // CONFIG_VP9_HIGHBITDEPTH
    155       }
    156     }
    157   }
    158   RoundHighBitDepth(bit_depth, &se, &sse);
    159   *sse_ptr = static_cast<uint32_t>(sse);
    160   return static_cast<uint32_t>(
    161       sse - ((static_cast<int64_t>(se) * se) >> (l2w + l2h)));
    162 }
    163 
    164 static uint32_t subpel_avg_variance_ref(const uint8_t *ref, const uint8_t *src,
    165                                         const uint8_t *second_pred, int l2w,
    166                                         int l2h, int xoff, int yoff,
    167                                         uint32_t *sse_ptr,
    168                                         bool use_high_bit_depth,
    169                                         vpx_bit_depth_t bit_depth) {
    170   int64_t se = 0;
    171   uint64_t sse = 0;
    172   const int w = 1 << l2w;
    173   const int h = 1 << l2h;
    174 
    175   xoff <<= 1;
    176   yoff <<= 1;
    177 
    178   for (int y = 0; y < h; y++) {
    179     for (int x = 0; x < w; x++) {
    180       // bilinear interpolation at a 16th pel step
    181       if (!use_high_bit_depth) {
    182         const int a1 = ref[(w + 1) * (y + 0) + x + 0];
    183         const int a2 = ref[(w + 1) * (y + 0) + x + 1];
    184         const int b1 = ref[(w + 1) * (y + 1) + x + 0];
    185         const int b2 = ref[(w + 1) * (y + 1) + x + 1];
    186         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
    187         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
    188         const int r = a + (((b - a) * yoff + 8) >> 4);
    189         const int diff =
    190             ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x];
    191         se += diff;
    192         sse += diff * diff;
    193 #if CONFIG_VP9_HIGHBITDEPTH
    194       } else {
    195         const uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
    196         const uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
    197         const uint16_t *sec16 = CONVERT_TO_SHORTPTR(second_pred);
    198         const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
    199         const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
    200         const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
    201         const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
    202         const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
    203         const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
    204         const int r = a + (((b - a) * yoff + 8) >> 4);
    205         const int diff = ((r + sec16[w * y + x] + 1) >> 1) - src16[w * y + x];
    206         se += diff;
    207         sse += diff * diff;
    208 #endif  // CONFIG_VP9_HIGHBITDEPTH
    209       }
    210     }
    211   }
    212   RoundHighBitDepth(bit_depth, &se, &sse);
    213   *sse_ptr = static_cast<uint32_t>(sse);
    214   return static_cast<uint32_t>(
    215       sse - ((static_cast<int64_t>(se) * se) >> (l2w + l2h)));
    216 }
    217 
    218 ////////////////////////////////////////////////////////////////////////////////
    219 
    220 class SumOfSquaresTest : public ::testing::TestWithParam<SumOfSquaresFunction> {
    221  public:
    222   SumOfSquaresTest() : func_(GetParam()) {}
    223 
    224   virtual ~SumOfSquaresTest() { libvpx_test::ClearSystemState(); }
    225 
    226  protected:
    227   void ConstTest();
    228   void RefTest();
    229 
    230   SumOfSquaresFunction func_;
    231   ACMRandom rnd_;
    232 };
    233 
    234 void SumOfSquaresTest::ConstTest() {
    235   int16_t mem[256];
    236   unsigned int res;
    237   for (int v = 0; v < 256; ++v) {
    238     for (int i = 0; i < 256; ++i) {
    239       mem[i] = v;
    240     }
    241     ASM_REGISTER_STATE_CHECK(res = func_(mem));
    242     EXPECT_EQ(256u * (v * v), res);
    243   }
    244 }
    245 
    246 void SumOfSquaresTest::RefTest() {
    247   int16_t mem[256];
    248   for (int i = 0; i < 100; ++i) {
    249     for (int j = 0; j < 256; ++j) {
    250       mem[j] = rnd_.Rand8() - rnd_.Rand8();
    251     }
    252 
    253     const unsigned int expected = mb_ss_ref(mem);
    254     unsigned int res;
    255     ASM_REGISTER_STATE_CHECK(res = func_(mem));
    256     EXPECT_EQ(expected, res);
    257   }
    258 }
    259 
    260 ////////////////////////////////////////////////////////////////////////////////
    261 // Encapsulating struct to store the function to test along with
    262 // some testing context.
    263 // Can be used for MSE, SSE, Variance, etc.
    264 
    265 template <typename Func>
    266 struct TestParams {
    267   TestParams(int log2w = 0, int log2h = 0, Func function = NULL,
    268              int bit_depth_value = 0)
    269       : log2width(log2w), log2height(log2h), func(function) {
    270     use_high_bit_depth = (bit_depth_value > 0);
    271     if (use_high_bit_depth) {
    272       bit_depth = static_cast<vpx_bit_depth_t>(bit_depth_value);
    273     } else {
    274       bit_depth = VPX_BITS_8;
    275     }
    276     width = 1 << log2width;
    277     height = 1 << log2height;
    278     block_size = width * height;
    279     mask = (1u << bit_depth) - 1;
    280   }
    281 
    282   int log2width, log2height;
    283   int width, height;
    284   int block_size;
    285   Func func;
    286   vpx_bit_depth_t bit_depth;
    287   bool use_high_bit_depth;
    288   uint32_t mask;
    289 };
    290 
    291 template <typename Func>
    292 std::ostream &operator<<(std::ostream &os, const TestParams<Func> &p) {
    293   return os << "log2width/height:" << p.log2width << "/" << p.log2height
    294             << " function:" << reinterpret_cast<const void *>(p.func)
    295             << " bit-depth:" << p.bit_depth;
    296 }
    297 
    298 // Main class for testing a function type
    299 template <typename FunctionType>
    300 class MainTestClass
    301     : public ::testing::TestWithParam<TestParams<FunctionType> > {
    302  public:
    303   virtual void SetUp() {
    304     params_ = this->GetParam();
    305 
    306     rnd_.Reset(ACMRandom::DeterministicSeed());
    307     const size_t unit =
    308         use_high_bit_depth() ? sizeof(uint16_t) : sizeof(uint8_t);
    309     src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size() * unit));
    310     ref_ = new uint8_t[block_size() * unit];
    311     ASSERT_TRUE(src_ != NULL);
    312     ASSERT_TRUE(ref_ != NULL);
    313 #if CONFIG_VP9_HIGHBITDEPTH
    314     if (use_high_bit_depth()) {
    315       // TODO(skal): remove!
    316       src_ = CONVERT_TO_BYTEPTR(src_);
    317       ref_ = CONVERT_TO_BYTEPTR(ref_);
    318     }
    319 #endif
    320   }
    321 
    322   virtual void TearDown() {
    323 #if CONFIG_VP9_HIGHBITDEPTH
    324     if (use_high_bit_depth()) {
    325       // TODO(skal): remove!
    326       src_ = reinterpret_cast<uint8_t *>(CONVERT_TO_SHORTPTR(src_));
    327       ref_ = reinterpret_cast<uint8_t *>(CONVERT_TO_SHORTPTR(ref_));
    328     }
    329 #endif
    330 
    331     vpx_free(src_);
    332     delete[] ref_;
    333     src_ = NULL;
    334     ref_ = NULL;
    335     libvpx_test::ClearSystemState();
    336   }
    337 
    338  protected:
    339   // We could sub-class MainTestClass into dedicated class for Variance
    340   // and MSE/SSE, but it involves a lot of 'this->xxx' dereferencing
    341   // to access top class fields xxx. That's cumbersome, so for now we'll just
    342   // implement the testing methods here:
    343 
    344   // Variance tests
    345   void ZeroTest();
    346   void RefTest();
    347   void RefStrideTest();
    348   void OneQuarterTest();
    349   void SpeedTest();
    350 
    351   // MSE/SSE tests
    352   void RefTestMse();
    353   void RefTestSse();
    354   void MaxTestMse();
    355   void MaxTestSse();
    356 
    357  protected:
    358   ACMRandom rnd_;
    359   uint8_t *src_;
    360   uint8_t *ref_;
    361   TestParams<FunctionType> params_;
    362 
    363   // some relay helpers
    364   bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
    365   int byte_shift() const { return params_.bit_depth - 8; }
    366   int block_size() const { return params_.block_size; }
    367   int width() const { return params_.width; }
    368   int height() const { return params_.height; }
    369   uint32_t mask() const { return params_.mask; }
    370 };
    371 
    372 ////////////////////////////////////////////////////////////////////////////////
    373 // Tests related to variance.
    374 
    375 template <typename VarianceFunctionType>
    376 void MainTestClass<VarianceFunctionType>::ZeroTest() {
    377   for (int i = 0; i <= 255; ++i) {
    378     if (!use_high_bit_depth()) {
    379       memset(src_, i, block_size());
    380     } else {
    381       uint16_t *const src16 = CONVERT_TO_SHORTPTR(src_);
    382       for (int k = 0; k < block_size(); ++k) src16[k] = i << byte_shift();
    383     }
    384     for (int j = 0; j <= 255; ++j) {
    385       if (!use_high_bit_depth()) {
    386         memset(ref_, j, block_size());
    387       } else {
    388         uint16_t *const ref16 = CONVERT_TO_SHORTPTR(ref_);
    389         for (int k = 0; k < block_size(); ++k) ref16[k] = j << byte_shift();
    390       }
    391       unsigned int sse, var;
    392       ASM_REGISTER_STATE_CHECK(
    393           var = params_.func(src_, width(), ref_, width(), &sse));
    394       EXPECT_EQ(0u, var) << "src values: " << i << " ref values: " << j;
    395     }
    396   }
    397 }
    398 
    399 template <typename VarianceFunctionType>
    400 void MainTestClass<VarianceFunctionType>::RefTest() {
    401   for (int i = 0; i < 10; ++i) {
    402     for (int j = 0; j < block_size(); j++) {
    403       if (!use_high_bit_depth()) {
    404         src_[j] = rnd_.Rand8();
    405         ref_[j] = rnd_.Rand8();
    406 #if CONFIG_VP9_HIGHBITDEPTH
    407       } else {
    408         CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
    409         CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
    410 #endif  // CONFIG_VP9_HIGHBITDEPTH
    411       }
    412     }
    413     unsigned int sse1, sse2, var1, var2;
    414     const int stride = width();
    415     ASM_REGISTER_STATE_CHECK(
    416         var1 = params_.func(src_, stride, ref_, stride, &sse1));
    417     var2 =
    418         variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
    419                      stride, &sse2, use_high_bit_depth(), params_.bit_depth);
    420     EXPECT_EQ(sse1, sse2) << "Error at test index: " << i;
    421     EXPECT_EQ(var1, var2) << "Error at test index: " << i;
    422   }
    423 }
    424 
    425 template <typename VarianceFunctionType>
    426 void MainTestClass<VarianceFunctionType>::RefStrideTest() {
    427   for (int i = 0; i < 10; ++i) {
    428     const int ref_stride = (i & 1) * width();
    429     const int src_stride = ((i >> 1) & 1) * width();
    430     for (int j = 0; j < block_size(); j++) {
    431       const int ref_ind = (j / width()) * ref_stride + j % width();
    432       const int src_ind = (j / width()) * src_stride + j % width();
    433       if (!use_high_bit_depth()) {
    434         src_[src_ind] = rnd_.Rand8();
    435         ref_[ref_ind] = rnd_.Rand8();
    436 #if CONFIG_VP9_HIGHBITDEPTH
    437       } else {
    438         CONVERT_TO_SHORTPTR(src_)[src_ind] = rnd_.Rand16() & mask();
    439         CONVERT_TO_SHORTPTR(ref_)[ref_ind] = rnd_.Rand16() & mask();
    440 #endif  // CONFIG_VP9_HIGHBITDEPTH
    441       }
    442     }
    443     unsigned int sse1, sse2;
    444     unsigned int var1, var2;
    445 
    446     ASM_REGISTER_STATE_CHECK(
    447         var1 = params_.func(src_, src_stride, ref_, ref_stride, &sse1));
    448     var2 = variance_ref(src_, ref_, params_.log2width, params_.log2height,
    449                         src_stride, ref_stride, &sse2, use_high_bit_depth(),
    450                         params_.bit_depth);
    451     EXPECT_EQ(sse1, sse2) << "Error at test index: " << i;
    452     EXPECT_EQ(var1, var2) << "Error at test index: " << i;
    453   }
    454 }
    455 
    456 template <typename VarianceFunctionType>
    457 void MainTestClass<VarianceFunctionType>::OneQuarterTest() {
    458   const int half = block_size() / 2;
    459   if (!use_high_bit_depth()) {
    460     memset(src_, 255, block_size());
    461     memset(ref_, 255, half);
    462     memset(ref_ + half, 0, half);
    463 #if CONFIG_VP9_HIGHBITDEPTH
    464   } else {
    465     vpx_memset16(CONVERT_TO_SHORTPTR(src_), 255 << byte_shift(), block_size());
    466     vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << byte_shift(), half);
    467     vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half);
    468 #endif  // CONFIG_VP9_HIGHBITDEPTH
    469   }
    470   unsigned int sse, var, expected;
    471   ASM_REGISTER_STATE_CHECK(
    472       var = params_.func(src_, width(), ref_, width(), &sse));
    473   expected = block_size() * 255 * 255 / 4;
    474   EXPECT_EQ(expected, var);
    475 }
    476 
    477 template <typename VarianceFunctionType>
    478 void MainTestClass<VarianceFunctionType>::SpeedTest() {
    479   const int half = block_size() / 2;
    480   if (!use_high_bit_depth()) {
    481     memset(src_, 255, block_size());
    482     memset(ref_, 255, half);
    483     memset(ref_ + half, 0, half);
    484 #if CONFIG_VP9_HIGHBITDEPTH
    485   } else {
    486     vpx_memset16(CONVERT_TO_SHORTPTR(src_), 255 << byte_shift(), block_size());
    487     vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << byte_shift(), half);
    488     vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half);
    489 #endif  // CONFIG_VP9_HIGHBITDEPTH
    490   }
    491   unsigned int sse;
    492 
    493   vpx_usec_timer timer;
    494   vpx_usec_timer_start(&timer);
    495   for (int i = 0; i < (1 << 30) / block_size(); ++i) {
    496     const uint32_t variance = params_.func(src_, width(), ref_, width(), &sse);
    497     // Ignore return value.
    498     (void)variance;
    499   }
    500   vpx_usec_timer_mark(&timer);
    501   const int elapsed_time = static_cast<int>(vpx_usec_timer_elapsed(&timer));
    502   printf("Variance %dx%d time: %5d ms\n", width(), height(),
    503          elapsed_time / 1000);
    504 }
    505 
    506 ////////////////////////////////////////////////////////////////////////////////
    507 // Tests related to MSE / SSE.
    508 
    509 template <typename FunctionType>
    510 void MainTestClass<FunctionType>::RefTestMse() {
    511   for (int i = 0; i < 10; ++i) {
    512     for (int j = 0; j < block_size(); ++j) {
    513       src_[j] = rnd_.Rand8();
    514       ref_[j] = rnd_.Rand8();
    515     }
    516     unsigned int sse1, sse2;
    517     const int stride = width();
    518     ASM_REGISTER_STATE_CHECK(params_.func(src_, stride, ref_, stride, &sse1));
    519     variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
    520                  stride, &sse2, false, VPX_BITS_8);
    521     EXPECT_EQ(sse1, sse2);
    522   }
    523 }
    524 
    525 template <typename FunctionType>
    526 void MainTestClass<FunctionType>::RefTestSse() {
    527   for (int i = 0; i < 10; ++i) {
    528     for (int j = 0; j < block_size(); ++j) {
    529       src_[j] = rnd_.Rand8();
    530       ref_[j] = rnd_.Rand8();
    531     }
    532     unsigned int sse2;
    533     unsigned int var1;
    534     const int stride = width();
    535     ASM_REGISTER_STATE_CHECK(var1 = params_.func(src_, stride, ref_, stride));
    536     variance_ref(src_, ref_, params_.log2width, params_.log2height, stride,
    537                  stride, &sse2, false, VPX_BITS_8);
    538     EXPECT_EQ(var1, sse2);
    539   }
    540 }
    541 
    542 template <typename FunctionType>
    543 void MainTestClass<FunctionType>::MaxTestMse() {
    544   memset(src_, 255, block_size());
    545   memset(ref_, 0, block_size());
    546   unsigned int sse;
    547   ASM_REGISTER_STATE_CHECK(params_.func(src_, width(), ref_, width(), &sse));
    548   const unsigned int expected = block_size() * 255 * 255;
    549   EXPECT_EQ(expected, sse);
    550 }
    551 
    552 template <typename FunctionType>
    553 void MainTestClass<FunctionType>::MaxTestSse() {
    554   memset(src_, 255, block_size());
    555   memset(ref_, 0, block_size());
    556   unsigned int var;
    557   ASM_REGISTER_STATE_CHECK(var = params_.func(src_, width(), ref_, width()));
    558   const unsigned int expected = block_size() * 255 * 255;
    559   EXPECT_EQ(expected, var);
    560 }
    561 
    562 ////////////////////////////////////////////////////////////////////////////////
    563 
    564 template <typename FunctionType>
    565 class SubpelVarianceTest
    566     : public ::testing::TestWithParam<TestParams<FunctionType> > {
    567  public:
    568   virtual void SetUp() {
    569     params_ = this->GetParam();
    570 
    571     rnd_.Reset(ACMRandom::DeterministicSeed());
    572     if (!use_high_bit_depth()) {
    573       src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size()));
    574       sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size()));
    575       ref_ = new uint8_t[block_size() + width() + height() + 1];
    576 #if CONFIG_VP9_HIGHBITDEPTH
    577     } else {
    578       src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
    579           vpx_memalign(16, block_size() * sizeof(uint16_t))));
    580       sec_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
    581           vpx_memalign(16, block_size() * sizeof(uint16_t))));
    582       ref_ = CONVERT_TO_BYTEPTR(
    583           new uint16_t[block_size() + width() + height() + 1]);
    584 #endif  // CONFIG_VP9_HIGHBITDEPTH
    585     }
    586     ASSERT_TRUE(src_ != NULL);
    587     ASSERT_TRUE(sec_ != NULL);
    588     ASSERT_TRUE(ref_ != NULL);
    589   }
    590 
    591   virtual void TearDown() {
    592     if (!use_high_bit_depth()) {
    593       vpx_free(src_);
    594       delete[] ref_;
    595       vpx_free(sec_);
    596 #if CONFIG_VP9_HIGHBITDEPTH
    597     } else {
    598       vpx_free(CONVERT_TO_SHORTPTR(src_));
    599       delete[] CONVERT_TO_SHORTPTR(ref_);
    600       vpx_free(CONVERT_TO_SHORTPTR(sec_));
    601 #endif  // CONFIG_VP9_HIGHBITDEPTH
    602     }
    603     libvpx_test::ClearSystemState();
    604   }
    605 
    606  protected:
    607   void RefTest();
    608   void ExtremeRefTest();
    609 
    610   ACMRandom rnd_;
    611   uint8_t *src_;
    612   uint8_t *ref_;
    613   uint8_t *sec_;
    614   TestParams<FunctionType> params_;
    615 
    616   // some relay helpers
    617   bool use_high_bit_depth() const { return params_.use_high_bit_depth; }
    618   int byte_shift() const { return params_.bit_depth - 8; }
    619   int block_size() const { return params_.block_size; }
    620   int width() const { return params_.width; }
    621   int height() const { return params_.height; }
    622   uint32_t mask() const { return params_.mask; }
    623 };
    624 
    625 template <typename SubpelVarianceFunctionType>
    626 void SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() {
    627   for (int x = 0; x < 8; ++x) {
    628     for (int y = 0; y < 8; ++y) {
    629       if (!use_high_bit_depth()) {
    630         for (int j = 0; j < block_size(); j++) {
    631           src_[j] = rnd_.Rand8();
    632         }
    633         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
    634           ref_[j] = rnd_.Rand8();
    635         }
    636 #if CONFIG_VP9_HIGHBITDEPTH
    637       } else {
    638         for (int j = 0; j < block_size(); j++) {
    639           CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
    640         }
    641         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
    642           CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
    643         }
    644 #endif  // CONFIG_VP9_HIGHBITDEPTH
    645       }
    646       unsigned int sse1, sse2;
    647       unsigned int var1;
    648       ASM_REGISTER_STATE_CHECK(
    649           var1 = params_.func(ref_, width() + 1, x, y, src_, width(), &sse1));
    650       const unsigned int var2 = subpel_variance_ref(
    651           ref_, src_, params_.log2width, params_.log2height, x, y, &sse2,
    652           use_high_bit_depth(), params_.bit_depth);
    653       EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
    654       EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
    655     }
    656   }
    657 }
    658 
    659 template <typename SubpelVarianceFunctionType>
    660 void SubpelVarianceTest<SubpelVarianceFunctionType>::ExtremeRefTest() {
    661   // Compare against reference.
    662   // Src: Set the first half of values to 0, the second half to the maximum.
    663   // Ref: Set the first half of values to the maximum, the second half to 0.
    664   for (int x = 0; x < 8; ++x) {
    665     for (int y = 0; y < 8; ++y) {
    666       const int half = block_size() / 2;
    667       if (!use_high_bit_depth()) {
    668         memset(src_, 0, half);
    669         memset(src_ + half, 255, half);
    670         memset(ref_, 255, half);
    671         memset(ref_ + half, 0, half + width() + height() + 1);
    672 #if CONFIG_VP9_HIGHBITDEPTH
    673       } else {
    674         vpx_memset16(CONVERT_TO_SHORTPTR(src_), mask(), half);
    675         vpx_memset16(CONVERT_TO_SHORTPTR(src_) + half, 0, half);
    676         vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 0, half);
    677         vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, mask(),
    678                      half + width() + height() + 1);
    679 #endif  // CONFIG_VP9_HIGHBITDEPTH
    680       }
    681       unsigned int sse1, sse2;
    682       unsigned int var1;
    683       ASM_REGISTER_STATE_CHECK(
    684           var1 = params_.func(ref_, width() + 1, x, y, src_, width(), &sse1));
    685       const unsigned int var2 = subpel_variance_ref(
    686           ref_, src_, params_.log2width, params_.log2height, x, y, &sse2,
    687           use_high_bit_depth(), params_.bit_depth);
    688       EXPECT_EQ(sse1, sse2) << "for xoffset " << x << " and yoffset " << y;
    689       EXPECT_EQ(var1, var2) << "for xoffset " << x << " and yoffset " << y;
    690     }
    691   }
    692 }
    693 
    694 template <>
    695 void SubpelVarianceTest<SubpixAvgVarMxNFunc>::RefTest() {
    696   for (int x = 0; x < 8; ++x) {
    697     for (int y = 0; y < 8; ++y) {
    698       if (!use_high_bit_depth()) {
    699         for (int j = 0; j < block_size(); j++) {
    700           src_[j] = rnd_.Rand8();
    701           sec_[j] = rnd_.Rand8();
    702         }
    703         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
    704           ref_[j] = rnd_.Rand8();
    705         }
    706 #if CONFIG_VP9_HIGHBITDEPTH
    707       } else {
    708         for (int j = 0; j < block_size(); j++) {
    709           CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask();
    710           CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask();
    711         }
    712         for (int j = 0; j < block_size() + width() + height() + 1; j++) {
    713           CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask();
    714         }
    715 #endif  // CONFIG_VP9_HIGHBITDEPTH
    716       }
    717       uint32_t sse1, sse2;
    718       uint32_t var1, var2;
    719       ASM_REGISTER_STATE_CHECK(var1 = params_.func(ref_, width() + 1, x, y,
    720                                                    src_, width(), &sse1, sec_));
    721       var2 = subpel_avg_variance_ref(ref_, src_, sec_, params_.log2width,
    722                                      params_.log2height, x, y, &sse2,
    723                                      use_high_bit_depth(), params_.bit_depth);
    724       EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
    725       EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
    726     }
    727   }
    728 }
    729 
    730 typedef MainTestClass<Get4x4SseFunc> VpxSseTest;
    731 typedef MainTestClass<VarianceMxNFunc> VpxMseTest;
    732 typedef MainTestClass<VarianceMxNFunc> VpxVarianceTest;
    733 typedef SubpelVarianceTest<SubpixVarMxNFunc> VpxSubpelVarianceTest;
    734 typedef SubpelVarianceTest<SubpixAvgVarMxNFunc> VpxSubpelAvgVarianceTest;
    735 
    736 TEST_P(VpxSseTest, RefSse) { RefTestSse(); }
    737 TEST_P(VpxSseTest, MaxSse) { MaxTestSse(); }
    738 TEST_P(VpxMseTest, RefMse) { RefTestMse(); }
    739 TEST_P(VpxMseTest, MaxMse) { MaxTestMse(); }
    740 TEST_P(VpxVarianceTest, Zero) { ZeroTest(); }
    741 TEST_P(VpxVarianceTest, Ref) { RefTest(); }
    742 TEST_P(VpxVarianceTest, RefStride) { RefStrideTest(); }
    743 TEST_P(VpxVarianceTest, OneQuarter) { OneQuarterTest(); }
    744 TEST_P(VpxVarianceTest, DISABLED_Speed) { SpeedTest(); }
    745 TEST_P(SumOfSquaresTest, Const) { ConstTest(); }
    746 TEST_P(SumOfSquaresTest, Ref) { RefTest(); }
    747 TEST_P(VpxSubpelVarianceTest, Ref) { RefTest(); }
    748 TEST_P(VpxSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
    749 TEST_P(VpxSubpelAvgVarianceTest, Ref) { RefTest(); }
    750 
    751 INSTANTIATE_TEST_CASE_P(C, SumOfSquaresTest,
    752                         ::testing::Values(vpx_get_mb_ss_c));
    753 
    754 typedef TestParams<Get4x4SseFunc> SseParams;
    755 INSTANTIATE_TEST_CASE_P(C, VpxSseTest,
    756                         ::testing::Values(SseParams(2, 2,
    757                                                     &vpx_get4x4sse_cs_c)));
    758 
    759 typedef TestParams<VarianceMxNFunc> MseParams;
    760 INSTANTIATE_TEST_CASE_P(C, VpxMseTest,
    761                         ::testing::Values(MseParams(4, 4, &vpx_mse16x16_c),
    762                                           MseParams(4, 3, &vpx_mse16x8_c),
    763                                           MseParams(3, 4, &vpx_mse8x16_c),
    764                                           MseParams(3, 3, &vpx_mse8x8_c)));
    765 
    766 typedef TestParams<VarianceMxNFunc> VarianceParams;
    767 INSTANTIATE_TEST_CASE_P(
    768     C, VpxVarianceTest,
    769     ::testing::Values(VarianceParams(6, 6, &vpx_variance64x64_c),
    770                       VarianceParams(6, 5, &vpx_variance64x32_c),
    771                       VarianceParams(5, 6, &vpx_variance32x64_c),
    772                       VarianceParams(5, 5, &vpx_variance32x32_c),
    773                       VarianceParams(5, 4, &vpx_variance32x16_c),
    774                       VarianceParams(4, 5, &vpx_variance16x32_c),
    775                       VarianceParams(4, 4, &vpx_variance16x16_c),
    776                       VarianceParams(4, 3, &vpx_variance16x8_c),
    777                       VarianceParams(3, 4, &vpx_variance8x16_c),
    778                       VarianceParams(3, 3, &vpx_variance8x8_c),
    779                       VarianceParams(3, 2, &vpx_variance8x4_c),
    780                       VarianceParams(2, 3, &vpx_variance4x8_c),
    781                       VarianceParams(2, 2, &vpx_variance4x4_c)));
    782 
    783 typedef TestParams<SubpixVarMxNFunc> SubpelVarianceParams;
    784 INSTANTIATE_TEST_CASE_P(
    785     C, VpxSubpelVarianceTest,
    786     ::testing::Values(
    787         SubpelVarianceParams(6, 6, &vpx_sub_pixel_variance64x64_c, 0),
    788         SubpelVarianceParams(6, 5, &vpx_sub_pixel_variance64x32_c, 0),
    789         SubpelVarianceParams(5, 6, &vpx_sub_pixel_variance32x64_c, 0),
    790         SubpelVarianceParams(5, 5, &vpx_sub_pixel_variance32x32_c, 0),
    791         SubpelVarianceParams(5, 4, &vpx_sub_pixel_variance32x16_c, 0),
    792         SubpelVarianceParams(4, 5, &vpx_sub_pixel_variance16x32_c, 0),
    793         SubpelVarianceParams(4, 4, &vpx_sub_pixel_variance16x16_c, 0),
    794         SubpelVarianceParams(4, 3, &vpx_sub_pixel_variance16x8_c, 0),
    795         SubpelVarianceParams(3, 4, &vpx_sub_pixel_variance8x16_c, 0),
    796         SubpelVarianceParams(3, 3, &vpx_sub_pixel_variance8x8_c, 0),
    797         SubpelVarianceParams(3, 2, &vpx_sub_pixel_variance8x4_c, 0),
    798         SubpelVarianceParams(2, 3, &vpx_sub_pixel_variance4x8_c, 0),
    799         SubpelVarianceParams(2, 2, &vpx_sub_pixel_variance4x4_c, 0)));
    800 
    801 typedef TestParams<SubpixAvgVarMxNFunc> SubpelAvgVarianceParams;
    802 INSTANTIATE_TEST_CASE_P(
    803     C, VpxSubpelAvgVarianceTest,
    804     ::testing::Values(
    805         SubpelAvgVarianceParams(6, 6, &vpx_sub_pixel_avg_variance64x64_c, 0),
    806         SubpelAvgVarianceParams(6, 5, &vpx_sub_pixel_avg_variance64x32_c, 0),
    807         SubpelAvgVarianceParams(5, 6, &vpx_sub_pixel_avg_variance32x64_c, 0),
    808         SubpelAvgVarianceParams(5, 5, &vpx_sub_pixel_avg_variance32x32_c, 0),
    809         SubpelAvgVarianceParams(5, 4, &vpx_sub_pixel_avg_variance32x16_c, 0),
    810         SubpelAvgVarianceParams(4, 5, &vpx_sub_pixel_avg_variance16x32_c, 0),
    811         SubpelAvgVarianceParams(4, 4, &vpx_sub_pixel_avg_variance16x16_c, 0),
    812         SubpelAvgVarianceParams(4, 3, &vpx_sub_pixel_avg_variance16x8_c, 0),
    813         SubpelAvgVarianceParams(3, 4, &vpx_sub_pixel_avg_variance8x16_c, 0),
    814         SubpelAvgVarianceParams(3, 3, &vpx_sub_pixel_avg_variance8x8_c, 0),
    815         SubpelAvgVarianceParams(3, 2, &vpx_sub_pixel_avg_variance8x4_c, 0),
    816         SubpelAvgVarianceParams(2, 3, &vpx_sub_pixel_avg_variance4x8_c, 0),
    817         SubpelAvgVarianceParams(2, 2, &vpx_sub_pixel_avg_variance4x4_c, 0)));
    818 
    819 #if CONFIG_VP9_HIGHBITDEPTH
    820 typedef MainTestClass<VarianceMxNFunc> VpxHBDMseTest;
    821 typedef MainTestClass<VarianceMxNFunc> VpxHBDVarianceTest;
    822 typedef SubpelVarianceTest<SubpixVarMxNFunc> VpxHBDSubpelVarianceTest;
    823 typedef SubpelVarianceTest<SubpixAvgVarMxNFunc> VpxHBDSubpelAvgVarianceTest;
    824 
    825 TEST_P(VpxHBDMseTest, RefMse) { RefTestMse(); }
    826 TEST_P(VpxHBDMseTest, MaxMse) { MaxTestMse(); }
    827 TEST_P(VpxHBDVarianceTest, Zero) { ZeroTest(); }
    828 TEST_P(VpxHBDVarianceTest, Ref) { RefTest(); }
    829 TEST_P(VpxHBDVarianceTest, RefStride) { RefStrideTest(); }
    830 TEST_P(VpxHBDVarianceTest, OneQuarter) { OneQuarterTest(); }
    831 TEST_P(VpxHBDVarianceTest, DISABLED_Speed) { SpeedTest(); }
    832 TEST_P(VpxHBDSubpelVarianceTest, Ref) { RefTest(); }
    833 TEST_P(VpxHBDSubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
    834 TEST_P(VpxHBDSubpelAvgVarianceTest, Ref) { RefTest(); }
    835 
    836 /* TODO(debargha): This test does not support the highbd version
    837 INSTANTIATE_TEST_CASE_P(
    838     C, VpxHBDMseTest,
    839     ::testing::Values(MseParams(4, 4, &vpx_highbd_12_mse16x16_c),
    840                       MseParams(4, 4, &vpx_highbd_12_mse16x8_c),
    841                       MseParams(4, 4, &vpx_highbd_12_mse8x16_c),
    842                       MseParams(4, 4, &vpx_highbd_12_mse8x8_c),
    843                       MseParams(4, 4, &vpx_highbd_10_mse16x16_c),
    844                       MseParams(4, 4, &vpx_highbd_10_mse16x8_c),
    845                       MseParams(4, 4, &vpx_highbd_10_mse8x16_c),
    846                       MseParams(4, 4, &vpx_highbd_10_mse8x8_c),
    847                       MseParams(4, 4, &vpx_highbd_8_mse16x16_c),
    848                       MseParams(4, 4, &vpx_highbd_8_mse16x8_c),
    849                       MseParams(4, 4, &vpx_highbd_8_mse8x16_c),
    850                       MseParams(4, 4, &vpx_highbd_8_mse8x8_c)));
    851 */
    852 
    853 INSTANTIATE_TEST_CASE_P(
    854     C, VpxHBDVarianceTest,
    855     ::testing::Values(VarianceParams(6, 6, &vpx_highbd_12_variance64x64_c, 12),
    856                       VarianceParams(6, 5, &vpx_highbd_12_variance64x32_c, 12),
    857                       VarianceParams(5, 6, &vpx_highbd_12_variance32x64_c, 12),
    858                       VarianceParams(5, 5, &vpx_highbd_12_variance32x32_c, 12),
    859                       VarianceParams(5, 4, &vpx_highbd_12_variance32x16_c, 12),
    860                       VarianceParams(4, 5, &vpx_highbd_12_variance16x32_c, 12),
    861                       VarianceParams(4, 4, &vpx_highbd_12_variance16x16_c, 12),
    862                       VarianceParams(4, 3, &vpx_highbd_12_variance16x8_c, 12),
    863                       VarianceParams(3, 4, &vpx_highbd_12_variance8x16_c, 12),
    864                       VarianceParams(3, 3, &vpx_highbd_12_variance8x8_c, 12),
    865                       VarianceParams(3, 2, &vpx_highbd_12_variance8x4_c, 12),
    866                       VarianceParams(2, 3, &vpx_highbd_12_variance4x8_c, 12),
    867                       VarianceParams(2, 2, &vpx_highbd_12_variance4x4_c, 12),
    868                       VarianceParams(6, 6, &vpx_highbd_10_variance64x64_c, 10),
    869                       VarianceParams(6, 5, &vpx_highbd_10_variance64x32_c, 10),
    870                       VarianceParams(5, 6, &vpx_highbd_10_variance32x64_c, 10),
    871                       VarianceParams(5, 5, &vpx_highbd_10_variance32x32_c, 10),
    872                       VarianceParams(5, 4, &vpx_highbd_10_variance32x16_c, 10),
    873                       VarianceParams(4, 5, &vpx_highbd_10_variance16x32_c, 10),
    874                       VarianceParams(4, 4, &vpx_highbd_10_variance16x16_c, 10),
    875                       VarianceParams(4, 3, &vpx_highbd_10_variance16x8_c, 10),
    876                       VarianceParams(3, 4, &vpx_highbd_10_variance8x16_c, 10),
    877                       VarianceParams(3, 3, &vpx_highbd_10_variance8x8_c, 10),
    878                       VarianceParams(3, 2, &vpx_highbd_10_variance8x4_c, 10),
    879                       VarianceParams(2, 3, &vpx_highbd_10_variance4x8_c, 10),
    880                       VarianceParams(2, 2, &vpx_highbd_10_variance4x4_c, 10),
    881                       VarianceParams(6, 6, &vpx_highbd_8_variance64x64_c, 8),
    882                       VarianceParams(6, 5, &vpx_highbd_8_variance64x32_c, 8),
    883                       VarianceParams(5, 6, &vpx_highbd_8_variance32x64_c, 8),
    884                       VarianceParams(5, 5, &vpx_highbd_8_variance32x32_c, 8),
    885                       VarianceParams(5, 4, &vpx_highbd_8_variance32x16_c, 8),
    886                       VarianceParams(4, 5, &vpx_highbd_8_variance16x32_c, 8),
    887                       VarianceParams(4, 4, &vpx_highbd_8_variance16x16_c, 8),
    888                       VarianceParams(4, 3, &vpx_highbd_8_variance16x8_c, 8),
    889                       VarianceParams(3, 4, &vpx_highbd_8_variance8x16_c, 8),
    890                       VarianceParams(3, 3, &vpx_highbd_8_variance8x8_c, 8),
    891                       VarianceParams(3, 2, &vpx_highbd_8_variance8x4_c, 8),
    892                       VarianceParams(2, 3, &vpx_highbd_8_variance4x8_c, 8),
    893                       VarianceParams(2, 2, &vpx_highbd_8_variance4x4_c, 8)));
    894 
    895 INSTANTIATE_TEST_CASE_P(
    896     C, VpxHBDSubpelVarianceTest,
    897     ::testing::Values(
    898         SubpelVarianceParams(6, 6, &vpx_highbd_8_sub_pixel_variance64x64_c, 8),
    899         SubpelVarianceParams(6, 5, &vpx_highbd_8_sub_pixel_variance64x32_c, 8),
    900         SubpelVarianceParams(5, 6, &vpx_highbd_8_sub_pixel_variance32x64_c, 8),
    901         SubpelVarianceParams(5, 5, &vpx_highbd_8_sub_pixel_variance32x32_c, 8),
    902         SubpelVarianceParams(5, 4, &vpx_highbd_8_sub_pixel_variance32x16_c, 8),
    903         SubpelVarianceParams(4, 5, &vpx_highbd_8_sub_pixel_variance16x32_c, 8),
    904         SubpelVarianceParams(4, 4, &vpx_highbd_8_sub_pixel_variance16x16_c, 8),
    905         SubpelVarianceParams(4, 3, &vpx_highbd_8_sub_pixel_variance16x8_c, 8),
    906         SubpelVarianceParams(3, 4, &vpx_highbd_8_sub_pixel_variance8x16_c, 8),
    907         SubpelVarianceParams(3, 3, &vpx_highbd_8_sub_pixel_variance8x8_c, 8),
    908         SubpelVarianceParams(3, 2, &vpx_highbd_8_sub_pixel_variance8x4_c, 8),
    909         SubpelVarianceParams(2, 3, &vpx_highbd_8_sub_pixel_variance4x8_c, 8),
    910         SubpelVarianceParams(2, 2, &vpx_highbd_8_sub_pixel_variance4x4_c, 8),
    911         SubpelVarianceParams(6, 6, &vpx_highbd_10_sub_pixel_variance64x64_c,
    912                              10),
    913         SubpelVarianceParams(6, 5, &vpx_highbd_10_sub_pixel_variance64x32_c,
    914                              10),
    915         SubpelVarianceParams(5, 6, &vpx_highbd_10_sub_pixel_variance32x64_c,
    916                              10),
    917         SubpelVarianceParams(5, 5, &vpx_highbd_10_sub_pixel_variance32x32_c,
    918                              10),
    919         SubpelVarianceParams(5, 4, &vpx_highbd_10_sub_pixel_variance32x16_c,
    920                              10),
    921         SubpelVarianceParams(4, 5, &vpx_highbd_10_sub_pixel_variance16x32_c,
    922                              10),
    923         SubpelVarianceParams(4, 4, &vpx_highbd_10_sub_pixel_variance16x16_c,
    924                              10),
    925         SubpelVarianceParams(4, 3, &vpx_highbd_10_sub_pixel_variance16x8_c, 10),
    926         SubpelVarianceParams(3, 4, &vpx_highbd_10_sub_pixel_variance8x16_c, 10),
    927         SubpelVarianceParams(3, 3, &vpx_highbd_10_sub_pixel_variance8x8_c, 10),
    928         SubpelVarianceParams(3, 2, &vpx_highbd_10_sub_pixel_variance8x4_c, 10),
    929         SubpelVarianceParams(2, 3, &vpx_highbd_10_sub_pixel_variance4x8_c, 10),
    930         SubpelVarianceParams(2, 2, &vpx_highbd_10_sub_pixel_variance4x4_c, 10),
    931         SubpelVarianceParams(6, 6, &vpx_highbd_12_sub_pixel_variance64x64_c,
    932                              12),
    933         SubpelVarianceParams(6, 5, &vpx_highbd_12_sub_pixel_variance64x32_c,
    934                              12),
    935         SubpelVarianceParams(5, 6, &vpx_highbd_12_sub_pixel_variance32x64_c,
    936                              12),
    937         SubpelVarianceParams(5, 5, &vpx_highbd_12_sub_pixel_variance32x32_c,
    938                              12),
    939         SubpelVarianceParams(5, 4, &vpx_highbd_12_sub_pixel_variance32x16_c,
    940                              12),
    941         SubpelVarianceParams(4, 5, &vpx_highbd_12_sub_pixel_variance16x32_c,
    942                              12),
    943         SubpelVarianceParams(4, 4, &vpx_highbd_12_sub_pixel_variance16x16_c,
    944                              12),
    945         SubpelVarianceParams(4, 3, &vpx_highbd_12_sub_pixel_variance16x8_c, 12),
    946         SubpelVarianceParams(3, 4, &vpx_highbd_12_sub_pixel_variance8x16_c, 12),
    947         SubpelVarianceParams(3, 3, &vpx_highbd_12_sub_pixel_variance8x8_c, 12),
    948         SubpelVarianceParams(3, 2, &vpx_highbd_12_sub_pixel_variance8x4_c, 12),
    949         SubpelVarianceParams(2, 3, &vpx_highbd_12_sub_pixel_variance4x8_c, 12),
    950         SubpelVarianceParams(2, 2, &vpx_highbd_12_sub_pixel_variance4x4_c,
    951                              12)));
    952 
    953 INSTANTIATE_TEST_CASE_P(
    954     C, VpxHBDSubpelAvgVarianceTest,
    955     ::testing::Values(
    956         SubpelAvgVarianceParams(6, 6,
    957                                 &vpx_highbd_8_sub_pixel_avg_variance64x64_c, 8),
    958         SubpelAvgVarianceParams(6, 5,
    959                                 &vpx_highbd_8_sub_pixel_avg_variance64x32_c, 8),
    960         SubpelAvgVarianceParams(5, 6,
    961                                 &vpx_highbd_8_sub_pixel_avg_variance32x64_c, 8),
    962         SubpelAvgVarianceParams(5, 5,
    963                                 &vpx_highbd_8_sub_pixel_avg_variance32x32_c, 8),
    964         SubpelAvgVarianceParams(5, 4,
    965                                 &vpx_highbd_8_sub_pixel_avg_variance32x16_c, 8),
    966         SubpelAvgVarianceParams(4, 5,
    967                                 &vpx_highbd_8_sub_pixel_avg_variance16x32_c, 8),
    968         SubpelAvgVarianceParams(4, 4,
    969                                 &vpx_highbd_8_sub_pixel_avg_variance16x16_c, 8),
    970         SubpelAvgVarianceParams(4, 3,
    971                                 &vpx_highbd_8_sub_pixel_avg_variance16x8_c, 8),
    972         SubpelAvgVarianceParams(3, 4,
    973                                 &vpx_highbd_8_sub_pixel_avg_variance8x16_c, 8),
    974         SubpelAvgVarianceParams(3, 3, &vpx_highbd_8_sub_pixel_avg_variance8x8_c,
    975                                 8),
    976         SubpelAvgVarianceParams(3, 2, &vpx_highbd_8_sub_pixel_avg_variance8x4_c,
    977                                 8),
    978         SubpelAvgVarianceParams(2, 3, &vpx_highbd_8_sub_pixel_avg_variance4x8_c,
    979                                 8),
    980         SubpelAvgVarianceParams(2, 2, &vpx_highbd_8_sub_pixel_avg_variance4x4_c,
    981                                 8),
    982         SubpelAvgVarianceParams(6, 6,
    983                                 &vpx_highbd_10_sub_pixel_avg_variance64x64_c,
    984                                 10),
    985         SubpelAvgVarianceParams(6, 5,
    986                                 &vpx_highbd_10_sub_pixel_avg_variance64x32_c,
    987                                 10),
    988         SubpelAvgVarianceParams(5, 6,
    989                                 &vpx_highbd_10_sub_pixel_avg_variance32x64_c,
    990                                 10),
    991         SubpelAvgVarianceParams(5, 5,
    992                                 &vpx_highbd_10_sub_pixel_avg_variance32x32_c,
    993                                 10),
    994         SubpelAvgVarianceParams(5, 4,
    995                                 &vpx_highbd_10_sub_pixel_avg_variance32x16_c,
    996                                 10),
    997         SubpelAvgVarianceParams(4, 5,
    998                                 &vpx_highbd_10_sub_pixel_avg_variance16x32_c,
    999                                 10),
   1000         SubpelAvgVarianceParams(4, 4,
   1001                                 &vpx_highbd_10_sub_pixel_avg_variance16x16_c,
   1002                                 10),
   1003         SubpelAvgVarianceParams(4, 3,
   1004                                 &vpx_highbd_10_sub_pixel_avg_variance16x8_c,
   1005                                 10),
   1006         SubpelAvgVarianceParams(3, 4,
   1007                                 &vpx_highbd_10_sub_pixel_avg_variance8x16_c,
   1008                                 10),
   1009         SubpelAvgVarianceParams(3, 3,
   1010                                 &vpx_highbd_10_sub_pixel_avg_variance8x8_c, 10),
   1011         SubpelAvgVarianceParams(3, 2,
   1012                                 &vpx_highbd_10_sub_pixel_avg_variance8x4_c, 10),
   1013         SubpelAvgVarianceParams(2, 3,
   1014                                 &vpx_highbd_10_sub_pixel_avg_variance4x8_c, 10),
   1015         SubpelAvgVarianceParams(2, 2,
   1016                                 &vpx_highbd_10_sub_pixel_avg_variance4x4_c, 10),
   1017         SubpelAvgVarianceParams(6, 6,
   1018                                 &vpx_highbd_12_sub_pixel_avg_variance64x64_c,
   1019                                 12),
   1020         SubpelAvgVarianceParams(6, 5,
   1021                                 &vpx_highbd_12_sub_pixel_avg_variance64x32_c,
   1022                                 12),
   1023         SubpelAvgVarianceParams(5, 6,
   1024                                 &vpx_highbd_12_sub_pixel_avg_variance32x64_c,
   1025                                 12),
   1026         SubpelAvgVarianceParams(5, 5,
   1027                                 &vpx_highbd_12_sub_pixel_avg_variance32x32_c,
   1028                                 12),
   1029         SubpelAvgVarianceParams(5, 4,
   1030                                 &vpx_highbd_12_sub_pixel_avg_variance32x16_c,
   1031                                 12),
   1032         SubpelAvgVarianceParams(4, 5,
   1033                                 &vpx_highbd_12_sub_pixel_avg_variance16x32_c,
   1034                                 12),
   1035         SubpelAvgVarianceParams(4, 4,
   1036                                 &vpx_highbd_12_sub_pixel_avg_variance16x16_c,
   1037                                 12),
   1038         SubpelAvgVarianceParams(4, 3,
   1039                                 &vpx_highbd_12_sub_pixel_avg_variance16x8_c,
   1040                                 12),
   1041         SubpelAvgVarianceParams(3, 4,
   1042                                 &vpx_highbd_12_sub_pixel_avg_variance8x16_c,
   1043                                 12),
   1044         SubpelAvgVarianceParams(3, 3,
   1045                                 &vpx_highbd_12_sub_pixel_avg_variance8x8_c, 12),
   1046         SubpelAvgVarianceParams(3, 2,
   1047                                 &vpx_highbd_12_sub_pixel_avg_variance8x4_c, 12),
   1048         SubpelAvgVarianceParams(2, 3,
   1049                                 &vpx_highbd_12_sub_pixel_avg_variance4x8_c, 12),
   1050         SubpelAvgVarianceParams(2, 2,
   1051                                 &vpx_highbd_12_sub_pixel_avg_variance4x4_c,
   1052                                 12)));
   1053 #endif  // CONFIG_VP9_HIGHBITDEPTH
   1054 
   1055 #if HAVE_SSE2
   1056 INSTANTIATE_TEST_CASE_P(SSE2, SumOfSquaresTest,
   1057                         ::testing::Values(vpx_get_mb_ss_sse2));
   1058 
   1059 INSTANTIATE_TEST_CASE_P(SSE2, VpxMseTest,
   1060                         ::testing::Values(MseParams(4, 4, &vpx_mse16x16_sse2),
   1061                                           MseParams(4, 3, &vpx_mse16x8_sse2),
   1062                                           MseParams(3, 4, &vpx_mse8x16_sse2),
   1063                                           MseParams(3, 3, &vpx_mse8x8_sse2)));
   1064 
   1065 INSTANTIATE_TEST_CASE_P(
   1066     SSE2, VpxVarianceTest,
   1067     ::testing::Values(VarianceParams(6, 6, &vpx_variance64x64_sse2),
   1068                       VarianceParams(6, 5, &vpx_variance64x32_sse2),
   1069                       VarianceParams(5, 6, &vpx_variance32x64_sse2),
   1070                       VarianceParams(5, 5, &vpx_variance32x32_sse2),
   1071                       VarianceParams(5, 4, &vpx_variance32x16_sse2),
   1072                       VarianceParams(4, 5, &vpx_variance16x32_sse2),
   1073                       VarianceParams(4, 4, &vpx_variance16x16_sse2),
   1074                       VarianceParams(4, 3, &vpx_variance16x8_sse2),
   1075                       VarianceParams(3, 4, &vpx_variance8x16_sse2),
   1076                       VarianceParams(3, 3, &vpx_variance8x8_sse2),
   1077                       VarianceParams(3, 2, &vpx_variance8x4_sse2),
   1078                       VarianceParams(2, 3, &vpx_variance4x8_sse2),
   1079                       VarianceParams(2, 2, &vpx_variance4x4_sse2)));
   1080 
   1081 INSTANTIATE_TEST_CASE_P(
   1082     SSE2, VpxSubpelVarianceTest,
   1083     ::testing::Values(
   1084         SubpelVarianceParams(6, 6, &vpx_sub_pixel_variance64x64_sse2, 0),
   1085         SubpelVarianceParams(6, 5, &vpx_sub_pixel_variance64x32_sse2, 0),
   1086         SubpelVarianceParams(5, 6, &vpx_sub_pixel_variance32x64_sse2, 0),
   1087         SubpelVarianceParams(5, 5, &vpx_sub_pixel_variance32x32_sse2, 0),
   1088         SubpelVarianceParams(5, 4, &vpx_sub_pixel_variance32x16_sse2, 0),
   1089         SubpelVarianceParams(4, 5, &vpx_sub_pixel_variance16x32_sse2, 0),
   1090         SubpelVarianceParams(4, 4, &vpx_sub_pixel_variance16x16_sse2, 0),
   1091         SubpelVarianceParams(4, 3, &vpx_sub_pixel_variance16x8_sse2, 0),
   1092         SubpelVarianceParams(3, 4, &vpx_sub_pixel_variance8x16_sse2, 0),
   1093         SubpelVarianceParams(3, 3, &vpx_sub_pixel_variance8x8_sse2, 0),
   1094         SubpelVarianceParams(3, 2, &vpx_sub_pixel_variance8x4_sse2, 0),
   1095         SubpelVarianceParams(2, 3, &vpx_sub_pixel_variance4x8_sse2, 0),
   1096         SubpelVarianceParams(2, 2, &vpx_sub_pixel_variance4x4_sse2, 0)));
   1097 
   1098 INSTANTIATE_TEST_CASE_P(
   1099     SSE2, VpxSubpelAvgVarianceTest,
   1100     ::testing::Values(
   1101         SubpelAvgVarianceParams(6, 6, &vpx_sub_pixel_avg_variance64x64_sse2, 0),
   1102         SubpelAvgVarianceParams(6, 5, &vpx_sub_pixel_avg_variance64x32_sse2, 0),
   1103         SubpelAvgVarianceParams(5, 6, &vpx_sub_pixel_avg_variance32x64_sse2, 0),
   1104         SubpelAvgVarianceParams(5, 5, &vpx_sub_pixel_avg_variance32x32_sse2, 0),
   1105         SubpelAvgVarianceParams(5, 4, &vpx_sub_pixel_avg_variance32x16_sse2, 0),
   1106         SubpelAvgVarianceParams(4, 5, &vpx_sub_pixel_avg_variance16x32_sse2, 0),
   1107         SubpelAvgVarianceParams(4, 4, &vpx_sub_pixel_avg_variance16x16_sse2, 0),
   1108         SubpelAvgVarianceParams(4, 3, &vpx_sub_pixel_avg_variance16x8_sse2, 0),
   1109         SubpelAvgVarianceParams(3, 4, &vpx_sub_pixel_avg_variance8x16_sse2, 0),
   1110         SubpelAvgVarianceParams(3, 3, &vpx_sub_pixel_avg_variance8x8_sse2, 0),
   1111         SubpelAvgVarianceParams(3, 2, &vpx_sub_pixel_avg_variance8x4_sse2, 0),
   1112         SubpelAvgVarianceParams(2, 3, &vpx_sub_pixel_avg_variance4x8_sse2, 0),
   1113         SubpelAvgVarianceParams(2, 2, &vpx_sub_pixel_avg_variance4x4_sse2, 0)));
   1114 
   1115 #if CONFIG_VP9_HIGHBITDEPTH
   1116 /* TODO(debargha): This test does not support the highbd version
   1117 INSTANTIATE_TEST_CASE_P(
   1118     SSE2, VpxHBDMseTest,
   1119     ::testing::Values(MseParams(4, 4, &vpx_highbd_12_mse16x16_sse2),
   1120                       MseParams(4, 3, &vpx_highbd_12_mse16x8_sse2),
   1121                       MseParams(3, 4, &vpx_highbd_12_mse8x16_sse2),
   1122                       MseParams(3, 3, &vpx_highbd_12_mse8x8_sse2),
   1123                       MseParams(4, 4, &vpx_highbd_10_mse16x16_sse2),
   1124                       MseParams(4, 3, &vpx_highbd_10_mse16x8_sse2),
   1125                       MseParams(3, 4, &vpx_highbd_10_mse8x16_sse2),
   1126                       MseParams(3, 3, &vpx_highbd_10_mse8x8_sse2),
   1127                       MseParams(4, 4, &vpx_highbd_8_mse16x16_sse2),
   1128                       MseParams(4, 3, &vpx_highbd_8_mse16x8_sse2),
   1129                       MseParams(3, 4, &vpx_highbd_8_mse8x16_sse2),
   1130                       MseParams(3, 3, &vpx_highbd_8_mse8x8_sse2)));
   1131 */
   1132 
   1133 INSTANTIATE_TEST_CASE_P(
   1134     SSE2, VpxHBDVarianceTest,
   1135     ::testing::Values(
   1136         VarianceParams(6, 6, &vpx_highbd_12_variance64x64_sse2, 12),
   1137         VarianceParams(6, 5, &vpx_highbd_12_variance64x32_sse2, 12),
   1138         VarianceParams(5, 6, &vpx_highbd_12_variance32x64_sse2, 12),
   1139         VarianceParams(5, 5, &vpx_highbd_12_variance32x32_sse2, 12),
   1140         VarianceParams(5, 4, &vpx_highbd_12_variance32x16_sse2, 12),
   1141         VarianceParams(4, 5, &vpx_highbd_12_variance16x32_sse2, 12),
   1142         VarianceParams(4, 4, &vpx_highbd_12_variance16x16_sse2, 12),
   1143         VarianceParams(4, 3, &vpx_highbd_12_variance16x8_sse2, 12),
   1144         VarianceParams(3, 4, &vpx_highbd_12_variance8x16_sse2, 12),
   1145         VarianceParams(3, 3, &vpx_highbd_12_variance8x8_sse2, 12),
   1146         VarianceParams(6, 6, &vpx_highbd_10_variance64x64_sse2, 10),
   1147         VarianceParams(6, 5, &vpx_highbd_10_variance64x32_sse2, 10),
   1148         VarianceParams(5, 6, &vpx_highbd_10_variance32x64_sse2, 10),
   1149         VarianceParams(5, 5, &vpx_highbd_10_variance32x32_sse2, 10),
   1150         VarianceParams(5, 4, &vpx_highbd_10_variance32x16_sse2, 10),
   1151         VarianceParams(4, 5, &vpx_highbd_10_variance16x32_sse2, 10),
   1152         VarianceParams(4, 4, &vpx_highbd_10_variance16x16_sse2, 10),
   1153         VarianceParams(4, 3, &vpx_highbd_10_variance16x8_sse2, 10),
   1154         VarianceParams(3, 4, &vpx_highbd_10_variance8x16_sse2, 10),
   1155         VarianceParams(3, 3, &vpx_highbd_10_variance8x8_sse2, 10),
   1156         VarianceParams(6, 6, &vpx_highbd_8_variance64x64_sse2, 8),
   1157         VarianceParams(6, 5, &vpx_highbd_8_variance64x32_sse2, 8),
   1158         VarianceParams(5, 6, &vpx_highbd_8_variance32x64_sse2, 8),
   1159         VarianceParams(5, 5, &vpx_highbd_8_variance32x32_sse2, 8),
   1160         VarianceParams(5, 4, &vpx_highbd_8_variance32x16_sse2, 8),
   1161         VarianceParams(4, 5, &vpx_highbd_8_variance16x32_sse2, 8),
   1162         VarianceParams(4, 4, &vpx_highbd_8_variance16x16_sse2, 8),
   1163         VarianceParams(4, 3, &vpx_highbd_8_variance16x8_sse2, 8),
   1164         VarianceParams(3, 4, &vpx_highbd_8_variance8x16_sse2, 8),
   1165         VarianceParams(3, 3, &vpx_highbd_8_variance8x8_sse2, 8)));
   1166 
   1167 INSTANTIATE_TEST_CASE_P(
   1168     SSE2, VpxHBDSubpelVarianceTest,
   1169     ::testing::Values(
   1170         SubpelVarianceParams(6, 6, &vpx_highbd_12_sub_pixel_variance64x64_sse2,
   1171                              12),
   1172         SubpelVarianceParams(6, 5, &vpx_highbd_12_sub_pixel_variance64x32_sse2,
   1173                              12),
   1174         SubpelVarianceParams(5, 6, &vpx_highbd_12_sub_pixel_variance32x64_sse2,
   1175                              12),
   1176         SubpelVarianceParams(5, 5, &vpx_highbd_12_sub_pixel_variance32x32_sse2,
   1177                              12),
   1178         SubpelVarianceParams(5, 4, &vpx_highbd_12_sub_pixel_variance32x16_sse2,
   1179                              12),
   1180         SubpelVarianceParams(4, 5, &vpx_highbd_12_sub_pixel_variance16x32_sse2,
   1181                              12),
   1182         SubpelVarianceParams(4, 4, &vpx_highbd_12_sub_pixel_variance16x16_sse2,
   1183                              12),
   1184         SubpelVarianceParams(4, 3, &vpx_highbd_12_sub_pixel_variance16x8_sse2,
   1185                              12),
   1186         SubpelVarianceParams(3, 4, &vpx_highbd_12_sub_pixel_variance8x16_sse2,
   1187                              12),
   1188         SubpelVarianceParams(3, 3, &vpx_highbd_12_sub_pixel_variance8x8_sse2,
   1189                              12),
   1190         SubpelVarianceParams(3, 2, &vpx_highbd_12_sub_pixel_variance8x4_sse2,
   1191                              12),
   1192         SubpelVarianceParams(6, 6, &vpx_highbd_10_sub_pixel_variance64x64_sse2,
   1193                              10),
   1194         SubpelVarianceParams(6, 5, &vpx_highbd_10_sub_pixel_variance64x32_sse2,
   1195                              10),
   1196         SubpelVarianceParams(5, 6, &vpx_highbd_10_sub_pixel_variance32x64_sse2,
   1197                              10),
   1198         SubpelVarianceParams(5, 5, &vpx_highbd_10_sub_pixel_variance32x32_sse2,
   1199                              10),
   1200         SubpelVarianceParams(5, 4, &vpx_highbd_10_sub_pixel_variance32x16_sse2,
   1201                              10),
   1202         SubpelVarianceParams(4, 5, &vpx_highbd_10_sub_pixel_variance16x32_sse2,
   1203                              10),
   1204         SubpelVarianceParams(4, 4, &vpx_highbd_10_sub_pixel_variance16x16_sse2,
   1205                              10),
   1206         SubpelVarianceParams(4, 3, &vpx_highbd_10_sub_pixel_variance16x8_sse2,
   1207                              10),
   1208         SubpelVarianceParams(3, 4, &vpx_highbd_10_sub_pixel_variance8x16_sse2,
   1209                              10),
   1210         SubpelVarianceParams(3, 3, &vpx_highbd_10_sub_pixel_variance8x8_sse2,
   1211                              10),
   1212         SubpelVarianceParams(3, 2, &vpx_highbd_10_sub_pixel_variance8x4_sse2,
   1213                              10),
   1214         SubpelVarianceParams(6, 6, &vpx_highbd_8_sub_pixel_variance64x64_sse2,
   1215                              8),
   1216         SubpelVarianceParams(6, 5, &vpx_highbd_8_sub_pixel_variance64x32_sse2,
   1217                              8),
   1218         SubpelVarianceParams(5, 6, &vpx_highbd_8_sub_pixel_variance32x64_sse2,
   1219                              8),
   1220         SubpelVarianceParams(5, 5, &vpx_highbd_8_sub_pixel_variance32x32_sse2,
   1221                              8),
   1222         SubpelVarianceParams(5, 4, &vpx_highbd_8_sub_pixel_variance32x16_sse2,
   1223                              8),
   1224         SubpelVarianceParams(4, 5, &vpx_highbd_8_sub_pixel_variance16x32_sse2,
   1225                              8),
   1226         SubpelVarianceParams(4, 4, &vpx_highbd_8_sub_pixel_variance16x16_sse2,
   1227                              8),
   1228         SubpelVarianceParams(4, 3, &vpx_highbd_8_sub_pixel_variance16x8_sse2,
   1229                              8),
   1230         SubpelVarianceParams(3, 4, &vpx_highbd_8_sub_pixel_variance8x16_sse2,
   1231                              8),
   1232         SubpelVarianceParams(3, 3, &vpx_highbd_8_sub_pixel_variance8x8_sse2, 8),
   1233         SubpelVarianceParams(3, 2, &vpx_highbd_8_sub_pixel_variance8x4_sse2,
   1234                              8)));
   1235 
   1236 INSTANTIATE_TEST_CASE_P(
   1237     SSE2, VpxHBDSubpelAvgVarianceTest,
   1238     ::testing::Values(
   1239         SubpelAvgVarianceParams(6, 6,
   1240                                 &vpx_highbd_12_sub_pixel_avg_variance64x64_sse2,
   1241                                 12),
   1242         SubpelAvgVarianceParams(6, 5,
   1243                                 &vpx_highbd_12_sub_pixel_avg_variance64x32_sse2,
   1244                                 12),
   1245         SubpelAvgVarianceParams(5, 6,
   1246                                 &vpx_highbd_12_sub_pixel_avg_variance32x64_sse2,
   1247                                 12),
   1248         SubpelAvgVarianceParams(5, 5,
   1249                                 &vpx_highbd_12_sub_pixel_avg_variance32x32_sse2,
   1250                                 12),
   1251         SubpelAvgVarianceParams(5, 4,
   1252                                 &vpx_highbd_12_sub_pixel_avg_variance32x16_sse2,
   1253                                 12),
   1254         SubpelAvgVarianceParams(4, 5,
   1255                                 &vpx_highbd_12_sub_pixel_avg_variance16x32_sse2,
   1256                                 12),
   1257         SubpelAvgVarianceParams(4, 4,
   1258                                 &vpx_highbd_12_sub_pixel_avg_variance16x16_sse2,
   1259                                 12),
   1260         SubpelAvgVarianceParams(4, 3,
   1261                                 &vpx_highbd_12_sub_pixel_avg_variance16x8_sse2,
   1262                                 12),
   1263         SubpelAvgVarianceParams(3, 4,
   1264                                 &vpx_highbd_12_sub_pixel_avg_variance8x16_sse2,
   1265                                 12),
   1266         SubpelAvgVarianceParams(3, 3,
   1267                                 &vpx_highbd_12_sub_pixel_avg_variance8x8_sse2,
   1268                                 12),
   1269         SubpelAvgVarianceParams(3, 2,
   1270                                 &vpx_highbd_12_sub_pixel_avg_variance8x4_sse2,
   1271                                 12),
   1272         SubpelAvgVarianceParams(6, 6,
   1273                                 &vpx_highbd_10_sub_pixel_avg_variance64x64_sse2,
   1274                                 10),
   1275         SubpelAvgVarianceParams(6, 5,
   1276                                 &vpx_highbd_10_sub_pixel_avg_variance64x32_sse2,
   1277                                 10),
   1278         SubpelAvgVarianceParams(5, 6,
   1279                                 &vpx_highbd_10_sub_pixel_avg_variance32x64_sse2,
   1280                                 10),
   1281         SubpelAvgVarianceParams(5, 5,
   1282                                 &vpx_highbd_10_sub_pixel_avg_variance32x32_sse2,
   1283                                 10),
   1284         SubpelAvgVarianceParams(5, 4,
   1285                                 &vpx_highbd_10_sub_pixel_avg_variance32x16_sse2,
   1286                                 10),
   1287         SubpelAvgVarianceParams(4, 5,
   1288                                 &vpx_highbd_10_sub_pixel_avg_variance16x32_sse2,
   1289                                 10),
   1290         SubpelAvgVarianceParams(4, 4,
   1291                                 &vpx_highbd_10_sub_pixel_avg_variance16x16_sse2,
   1292                                 10),
   1293         SubpelAvgVarianceParams(4, 3,
   1294                                 &vpx_highbd_10_sub_pixel_avg_variance16x8_sse2,
   1295                                 10),
   1296         SubpelAvgVarianceParams(3, 4,
   1297                                 &vpx_highbd_10_sub_pixel_avg_variance8x16_sse2,
   1298                                 10),
   1299         SubpelAvgVarianceParams(3, 3,
   1300                                 &vpx_highbd_10_sub_pixel_avg_variance8x8_sse2,
   1301                                 10),
   1302         SubpelAvgVarianceParams(3, 2,
   1303                                 &vpx_highbd_10_sub_pixel_avg_variance8x4_sse2,
   1304                                 10),
   1305         SubpelAvgVarianceParams(6, 6,
   1306                                 &vpx_highbd_8_sub_pixel_avg_variance64x64_sse2,
   1307                                 8),
   1308         SubpelAvgVarianceParams(6, 5,
   1309                                 &vpx_highbd_8_sub_pixel_avg_variance64x32_sse2,
   1310                                 8),
   1311         SubpelAvgVarianceParams(5, 6,
   1312                                 &vpx_highbd_8_sub_pixel_avg_variance32x64_sse2,
   1313                                 8),
   1314         SubpelAvgVarianceParams(5, 5,
   1315                                 &vpx_highbd_8_sub_pixel_avg_variance32x32_sse2,
   1316                                 8),
   1317         SubpelAvgVarianceParams(5, 4,
   1318                                 &vpx_highbd_8_sub_pixel_avg_variance32x16_sse2,
   1319                                 8),
   1320         SubpelAvgVarianceParams(4, 5,
   1321                                 &vpx_highbd_8_sub_pixel_avg_variance16x32_sse2,
   1322                                 8),
   1323         SubpelAvgVarianceParams(4, 4,
   1324                                 &vpx_highbd_8_sub_pixel_avg_variance16x16_sse2,
   1325                                 8),
   1326         SubpelAvgVarianceParams(4, 3,
   1327                                 &vpx_highbd_8_sub_pixel_avg_variance16x8_sse2,
   1328                                 8),
   1329         SubpelAvgVarianceParams(3, 4,
   1330                                 &vpx_highbd_8_sub_pixel_avg_variance8x16_sse2,
   1331                                 8),
   1332         SubpelAvgVarianceParams(3, 3,
   1333                                 &vpx_highbd_8_sub_pixel_avg_variance8x8_sse2,
   1334                                 8),
   1335         SubpelAvgVarianceParams(3, 2,
   1336                                 &vpx_highbd_8_sub_pixel_avg_variance8x4_sse2,
   1337                                 8)));
   1338 #endif  // CONFIG_VP9_HIGHBITDEPTH
   1339 #endif  // HAVE_SSE2
   1340 
   1341 #if HAVE_SSSE3
   1342 INSTANTIATE_TEST_CASE_P(
   1343     SSSE3, VpxSubpelVarianceTest,
   1344     ::testing::Values(
   1345         SubpelVarianceParams(6, 6, &vpx_sub_pixel_variance64x64_ssse3, 0),
   1346         SubpelVarianceParams(6, 5, &vpx_sub_pixel_variance64x32_ssse3, 0),
   1347         SubpelVarianceParams(5, 6, &vpx_sub_pixel_variance32x64_ssse3, 0),
   1348         SubpelVarianceParams(5, 5, &vpx_sub_pixel_variance32x32_ssse3, 0),
   1349         SubpelVarianceParams(5, 4, &vpx_sub_pixel_variance32x16_ssse3, 0),
   1350         SubpelVarianceParams(4, 5, &vpx_sub_pixel_variance16x32_ssse3, 0),
   1351         SubpelVarianceParams(4, 4, &vpx_sub_pixel_variance16x16_ssse3, 0),
   1352         SubpelVarianceParams(4, 3, &vpx_sub_pixel_variance16x8_ssse3, 0),
   1353         SubpelVarianceParams(3, 4, &vpx_sub_pixel_variance8x16_ssse3, 0),
   1354         SubpelVarianceParams(3, 3, &vpx_sub_pixel_variance8x8_ssse3, 0),
   1355         SubpelVarianceParams(3, 2, &vpx_sub_pixel_variance8x4_ssse3, 0),
   1356         SubpelVarianceParams(2, 3, &vpx_sub_pixel_variance4x8_ssse3, 0),
   1357         SubpelVarianceParams(2, 2, &vpx_sub_pixel_variance4x4_ssse3, 0)));
   1358 
   1359 INSTANTIATE_TEST_CASE_P(
   1360     SSSE3, VpxSubpelAvgVarianceTest,
   1361     ::testing::Values(
   1362         SubpelAvgVarianceParams(6, 6, &vpx_sub_pixel_avg_variance64x64_ssse3,
   1363                                 0),
   1364         SubpelAvgVarianceParams(6, 5, &vpx_sub_pixel_avg_variance64x32_ssse3,
   1365                                 0),
   1366         SubpelAvgVarianceParams(5, 6, &vpx_sub_pixel_avg_variance32x64_ssse3,
   1367                                 0),
   1368         SubpelAvgVarianceParams(5, 5, &vpx_sub_pixel_avg_variance32x32_ssse3,
   1369                                 0),
   1370         SubpelAvgVarianceParams(5, 4, &vpx_sub_pixel_avg_variance32x16_ssse3,
   1371                                 0),
   1372         SubpelAvgVarianceParams(4, 5, &vpx_sub_pixel_avg_variance16x32_ssse3,
   1373                                 0),
   1374         SubpelAvgVarianceParams(4, 4, &vpx_sub_pixel_avg_variance16x16_ssse3,
   1375                                 0),
   1376         SubpelAvgVarianceParams(4, 3, &vpx_sub_pixel_avg_variance16x8_ssse3, 0),
   1377         SubpelAvgVarianceParams(3, 4, &vpx_sub_pixel_avg_variance8x16_ssse3, 0),
   1378         SubpelAvgVarianceParams(3, 3, &vpx_sub_pixel_avg_variance8x8_ssse3, 0),
   1379         SubpelAvgVarianceParams(3, 2, &vpx_sub_pixel_avg_variance8x4_ssse3, 0),
   1380         SubpelAvgVarianceParams(2, 3, &vpx_sub_pixel_avg_variance4x8_ssse3, 0),
   1381         SubpelAvgVarianceParams(2, 2, &vpx_sub_pixel_avg_variance4x4_ssse3,
   1382                                 0)));
   1383 #endif  // HAVE_SSSE3
   1384 
   1385 #if HAVE_AVX2
   1386 INSTANTIATE_TEST_CASE_P(AVX2, VpxMseTest,
   1387                         ::testing::Values(MseParams(4, 4, &vpx_mse16x16_avx2)));
   1388 
   1389 INSTANTIATE_TEST_CASE_P(
   1390     AVX2, VpxVarianceTest,
   1391     ::testing::Values(VarianceParams(6, 6, &vpx_variance64x64_avx2),
   1392                       VarianceParams(6, 5, &vpx_variance64x32_avx2),
   1393                       VarianceParams(5, 5, &vpx_variance32x32_avx2),
   1394                       VarianceParams(5, 4, &vpx_variance32x16_avx2),
   1395                       VarianceParams(4, 4, &vpx_variance16x16_avx2)));
   1396 
   1397 INSTANTIATE_TEST_CASE_P(
   1398     AVX2, VpxSubpelVarianceTest,
   1399     ::testing::Values(
   1400         SubpelVarianceParams(6, 6, &vpx_sub_pixel_variance64x64_avx2, 0),
   1401         SubpelVarianceParams(5, 5, &vpx_sub_pixel_variance32x32_avx2, 0)));
   1402 
   1403 INSTANTIATE_TEST_CASE_P(
   1404     AVX2, VpxSubpelAvgVarianceTest,
   1405     ::testing::Values(
   1406         SubpelAvgVarianceParams(6, 6, &vpx_sub_pixel_avg_variance64x64_avx2, 0),
   1407         SubpelAvgVarianceParams(5, 5, &vpx_sub_pixel_avg_variance32x32_avx2,
   1408                                 0)));
   1409 #endif  // HAVE_AVX2
   1410 
   1411 #if HAVE_NEON
   1412 INSTANTIATE_TEST_CASE_P(NEON, VpxSseTest,
   1413                         ::testing::Values(SseParams(2, 2,
   1414                                                     &vpx_get4x4sse_cs_neon)));
   1415 
   1416 INSTANTIATE_TEST_CASE_P(NEON, VpxMseTest,
   1417                         ::testing::Values(MseParams(4, 4, &vpx_mse16x16_neon)));
   1418 
   1419 INSTANTIATE_TEST_CASE_P(
   1420     NEON, VpxVarianceTest,
   1421     ::testing::Values(VarianceParams(6, 6, &vpx_variance64x64_neon),
   1422                       VarianceParams(6, 5, &vpx_variance64x32_neon),
   1423                       VarianceParams(5, 6, &vpx_variance32x64_neon),
   1424                       VarianceParams(5, 5, &vpx_variance32x32_neon),
   1425                       VarianceParams(5, 4, &vpx_variance32x16_neon),
   1426                       VarianceParams(4, 5, &vpx_variance16x32_neon),
   1427                       VarianceParams(4, 4, &vpx_variance16x16_neon),
   1428                       VarianceParams(4, 3, &vpx_variance16x8_neon),
   1429                       VarianceParams(3, 4, &vpx_variance8x16_neon),
   1430                       VarianceParams(3, 3, &vpx_variance8x8_neon),
   1431                       VarianceParams(3, 2, &vpx_variance8x4_neon),
   1432                       VarianceParams(2, 3, &vpx_variance4x8_neon),
   1433                       VarianceParams(2, 2, &vpx_variance4x4_neon)));
   1434 
   1435 INSTANTIATE_TEST_CASE_P(
   1436     NEON, VpxSubpelVarianceTest,
   1437     ::testing::Values(
   1438         SubpelVarianceParams(6, 6, &vpx_sub_pixel_variance64x64_neon, 0),
   1439         SubpelVarianceParams(6, 5, &vpx_sub_pixel_variance64x32_neon, 0),
   1440         SubpelVarianceParams(5, 6, &vpx_sub_pixel_variance32x64_neon, 0),
   1441         SubpelVarianceParams(5, 5, &vpx_sub_pixel_variance32x32_neon, 0),
   1442         SubpelVarianceParams(5, 4, &vpx_sub_pixel_variance32x16_neon, 0),
   1443         SubpelVarianceParams(4, 5, &vpx_sub_pixel_variance16x32_neon, 0),
   1444         SubpelVarianceParams(4, 4, &vpx_sub_pixel_variance16x16_neon, 0),
   1445         SubpelVarianceParams(4, 3, &vpx_sub_pixel_variance16x8_neon, 0),
   1446         SubpelVarianceParams(3, 4, &vpx_sub_pixel_variance8x16_neon, 0),
   1447         SubpelVarianceParams(3, 3, &vpx_sub_pixel_variance8x8_neon, 0),
   1448         SubpelVarianceParams(3, 2, &vpx_sub_pixel_variance8x4_neon, 0),
   1449         SubpelVarianceParams(2, 3, &vpx_sub_pixel_variance4x8_neon, 0),
   1450         SubpelVarianceParams(2, 2, &vpx_sub_pixel_variance4x4_neon, 0)));
   1451 
   1452 INSTANTIATE_TEST_CASE_P(
   1453     NEON, VpxSubpelAvgVarianceTest,
   1454     ::testing::Values(
   1455         SubpelAvgVarianceParams(6, 6, &vpx_sub_pixel_avg_variance64x64_neon, 0),
   1456         SubpelAvgVarianceParams(6, 5, &vpx_sub_pixel_avg_variance64x32_neon, 0),
   1457         SubpelAvgVarianceParams(5, 6, &vpx_sub_pixel_avg_variance32x64_neon, 0),
   1458         SubpelAvgVarianceParams(5, 5, &vpx_sub_pixel_avg_variance32x32_neon, 0),
   1459         SubpelAvgVarianceParams(5, 4, &vpx_sub_pixel_avg_variance32x16_neon, 0),
   1460         SubpelAvgVarianceParams(4, 5, &vpx_sub_pixel_avg_variance16x32_neon, 0),
   1461         SubpelAvgVarianceParams(4, 4, &vpx_sub_pixel_avg_variance16x16_neon, 0),
   1462         SubpelAvgVarianceParams(4, 3, &vpx_sub_pixel_avg_variance16x8_neon, 0),
   1463         SubpelAvgVarianceParams(3, 4, &vpx_sub_pixel_avg_variance8x16_neon, 0),
   1464         SubpelAvgVarianceParams(3, 3, &vpx_sub_pixel_avg_variance8x8_neon, 0),
   1465         SubpelAvgVarianceParams(3, 2, &vpx_sub_pixel_avg_variance8x4_neon, 0),
   1466         SubpelAvgVarianceParams(2, 3, &vpx_sub_pixel_avg_variance4x8_neon, 0),
   1467         SubpelAvgVarianceParams(2, 2, &vpx_sub_pixel_avg_variance4x4_neon, 0)));
   1468 #endif  // HAVE_NEON
   1469 
   1470 #if HAVE_MSA
   1471 INSTANTIATE_TEST_CASE_P(MSA, SumOfSquaresTest,
   1472                         ::testing::Values(vpx_get_mb_ss_msa));
   1473 
   1474 INSTANTIATE_TEST_CASE_P(MSA, VpxSseTest,
   1475                         ::testing::Values(SseParams(2, 2,
   1476                                                     &vpx_get4x4sse_cs_msa)));
   1477 
   1478 INSTANTIATE_TEST_CASE_P(MSA, VpxMseTest,
   1479                         ::testing::Values(MseParams(4, 4, &vpx_mse16x16_msa),
   1480                                           MseParams(4, 3, &vpx_mse16x8_msa),
   1481                                           MseParams(3, 4, &vpx_mse8x16_msa),
   1482                                           MseParams(3, 3, &vpx_mse8x8_msa)));
   1483 
   1484 INSTANTIATE_TEST_CASE_P(
   1485     MSA, VpxVarianceTest,
   1486     ::testing::Values(VarianceParams(6, 6, &vpx_variance64x64_msa),
   1487                       VarianceParams(6, 5, &vpx_variance64x32_msa),
   1488                       VarianceParams(5, 6, &vpx_variance32x64_msa),
   1489                       VarianceParams(5, 5, &vpx_variance32x32_msa),
   1490                       VarianceParams(5, 4, &vpx_variance32x16_msa),
   1491                       VarianceParams(4, 5, &vpx_variance16x32_msa),
   1492                       VarianceParams(4, 4, &vpx_variance16x16_msa),
   1493                       VarianceParams(4, 3, &vpx_variance16x8_msa),
   1494                       VarianceParams(3, 4, &vpx_variance8x16_msa),
   1495                       VarianceParams(3, 3, &vpx_variance8x8_msa),
   1496                       VarianceParams(3, 2, &vpx_variance8x4_msa),
   1497                       VarianceParams(2, 3, &vpx_variance4x8_msa),
   1498                       VarianceParams(2, 2, &vpx_variance4x4_msa)));
   1499 
   1500 INSTANTIATE_TEST_CASE_P(
   1501     MSA, VpxSubpelVarianceTest,
   1502     ::testing::Values(
   1503         SubpelVarianceParams(2, 2, &vpx_sub_pixel_variance4x4_msa, 0),
   1504         SubpelVarianceParams(2, 3, &vpx_sub_pixel_variance4x8_msa, 0),
   1505         SubpelVarianceParams(3, 2, &vpx_sub_pixel_variance8x4_msa, 0),
   1506         SubpelVarianceParams(3, 3, &vpx_sub_pixel_variance8x8_msa, 0),
   1507         SubpelVarianceParams(3, 4, &vpx_sub_pixel_variance8x16_msa, 0),
   1508         SubpelVarianceParams(4, 3, &vpx_sub_pixel_variance16x8_msa, 0),
   1509         SubpelVarianceParams(4, 4, &vpx_sub_pixel_variance16x16_msa, 0),
   1510         SubpelVarianceParams(4, 5, &vpx_sub_pixel_variance16x32_msa, 0),
   1511         SubpelVarianceParams(5, 4, &vpx_sub_pixel_variance32x16_msa, 0),
   1512         SubpelVarianceParams(5, 5, &vpx_sub_pixel_variance32x32_msa, 0),
   1513         SubpelVarianceParams(5, 6, &vpx_sub_pixel_variance32x64_msa, 0),
   1514         SubpelVarianceParams(6, 5, &vpx_sub_pixel_variance64x32_msa, 0),
   1515         SubpelVarianceParams(6, 6, &vpx_sub_pixel_variance64x64_msa, 0)));
   1516 
   1517 INSTANTIATE_TEST_CASE_P(
   1518     MSA, VpxSubpelAvgVarianceTest,
   1519     ::testing::Values(
   1520         SubpelAvgVarianceParams(6, 6, &vpx_sub_pixel_avg_variance64x64_msa, 0),
   1521         SubpelAvgVarianceParams(6, 5, &vpx_sub_pixel_avg_variance64x32_msa, 0),
   1522         SubpelAvgVarianceParams(5, 6, &vpx_sub_pixel_avg_variance32x64_msa, 0),
   1523         SubpelAvgVarianceParams(5, 5, &vpx_sub_pixel_avg_variance32x32_msa, 0),
   1524         SubpelAvgVarianceParams(5, 4, &vpx_sub_pixel_avg_variance32x16_msa, 0),
   1525         SubpelAvgVarianceParams(4, 5, &vpx_sub_pixel_avg_variance16x32_msa, 0),
   1526         SubpelAvgVarianceParams(4, 4, &vpx_sub_pixel_avg_variance16x16_msa, 0),
   1527         SubpelAvgVarianceParams(4, 3, &vpx_sub_pixel_avg_variance16x8_msa, 0),
   1528         SubpelAvgVarianceParams(3, 4, &vpx_sub_pixel_avg_variance8x16_msa, 0),
   1529         SubpelAvgVarianceParams(3, 3, &vpx_sub_pixel_avg_variance8x8_msa, 0),
   1530         SubpelAvgVarianceParams(3, 2, &vpx_sub_pixel_avg_variance8x4_msa, 0),
   1531         SubpelAvgVarianceParams(2, 3, &vpx_sub_pixel_avg_variance4x8_msa, 0),
   1532         SubpelAvgVarianceParams(2, 2, &vpx_sub_pixel_avg_variance4x4_msa, 0)));
   1533 #endif  // HAVE_MSA
   1534 
   1535 #if HAVE_VSX
   1536 INSTANTIATE_TEST_CASE_P(VSX, SumOfSquaresTest,
   1537                         ::testing::Values(vpx_get_mb_ss_vsx));
   1538 
   1539 INSTANTIATE_TEST_CASE_P(VSX, VpxSseTest,
   1540                         ::testing::Values(SseParams(2, 2,
   1541                                                     &vpx_get4x4sse_cs_vsx)));
   1542 #endif  // HAVE_VSX
   1543 
   1544 #if HAVE_MMI
   1545 INSTANTIATE_TEST_CASE_P(MMI, VpxMseTest,
   1546                         ::testing::Values(MseParams(4, 4, &vpx_mse16x16_mmi),
   1547                                           MseParams(4, 3, &vpx_mse16x8_mmi),
   1548                                           MseParams(3, 4, &vpx_mse8x16_mmi),
   1549                                           MseParams(3, 3, &vpx_mse8x8_mmi)));
   1550 
   1551 INSTANTIATE_TEST_CASE_P(
   1552     MMI, VpxVarianceTest,
   1553     ::testing::Values(VarianceParams(6, 6, &vpx_variance64x64_mmi),
   1554                       VarianceParams(6, 5, &vpx_variance64x32_mmi),
   1555                       VarianceParams(5, 6, &vpx_variance32x64_mmi),
   1556                       VarianceParams(5, 5, &vpx_variance32x32_mmi),
   1557                       VarianceParams(5, 4, &vpx_variance32x16_mmi),
   1558                       VarianceParams(4, 5, &vpx_variance16x32_mmi),
   1559                       VarianceParams(4, 4, &vpx_variance16x16_mmi),
   1560                       VarianceParams(4, 3, &vpx_variance16x8_mmi),
   1561                       VarianceParams(3, 4, &vpx_variance8x16_mmi),
   1562                       VarianceParams(3, 3, &vpx_variance8x8_mmi),
   1563                       VarianceParams(3, 2, &vpx_variance8x4_mmi),
   1564                       VarianceParams(2, 3, &vpx_variance4x8_mmi),
   1565                       VarianceParams(2, 2, &vpx_variance4x4_mmi)));
   1566 
   1567 INSTANTIATE_TEST_CASE_P(
   1568     MMI, VpxSubpelVarianceTest,
   1569     ::testing::Values(
   1570         SubpelVarianceParams(6, 6, &vpx_sub_pixel_variance64x64_mmi, 0),
   1571         SubpelVarianceParams(6, 5, &vpx_sub_pixel_variance64x32_mmi, 0),
   1572         SubpelVarianceParams(5, 6, &vpx_sub_pixel_variance32x64_mmi, 0),
   1573         SubpelVarianceParams(5, 5, &vpx_sub_pixel_variance32x32_mmi, 0),
   1574         SubpelVarianceParams(5, 4, &vpx_sub_pixel_variance32x16_mmi, 0),
   1575         SubpelVarianceParams(4, 5, &vpx_sub_pixel_variance16x32_mmi, 0),
   1576         SubpelVarianceParams(4, 4, &vpx_sub_pixel_variance16x16_mmi, 0),
   1577         SubpelVarianceParams(4, 3, &vpx_sub_pixel_variance16x8_mmi, 0),
   1578         SubpelVarianceParams(3, 4, &vpx_sub_pixel_variance8x16_mmi, 0),
   1579         SubpelVarianceParams(3, 3, &vpx_sub_pixel_variance8x8_mmi, 0),
   1580         SubpelVarianceParams(3, 2, &vpx_sub_pixel_variance8x4_mmi, 0),
   1581         SubpelVarianceParams(2, 3, &vpx_sub_pixel_variance4x8_mmi, 0),
   1582         SubpelVarianceParams(2, 2, &vpx_sub_pixel_variance4x4_mmi, 0)));
   1583 
   1584 INSTANTIATE_TEST_CASE_P(
   1585     MMI, VpxSubpelAvgVarianceTest,
   1586     ::testing::Values(
   1587         SubpelAvgVarianceParams(6, 6, &vpx_sub_pixel_avg_variance64x64_mmi, 0),
   1588         SubpelAvgVarianceParams(6, 5, &vpx_sub_pixel_avg_variance64x32_mmi, 0),
   1589         SubpelAvgVarianceParams(5, 6, &vpx_sub_pixel_avg_variance32x64_mmi, 0),
   1590         SubpelAvgVarianceParams(5, 5, &vpx_sub_pixel_avg_variance32x32_mmi, 0),
   1591         SubpelAvgVarianceParams(5, 4, &vpx_sub_pixel_avg_variance32x16_mmi, 0),
   1592         SubpelAvgVarianceParams(4, 5, &vpx_sub_pixel_avg_variance16x32_mmi, 0),
   1593         SubpelAvgVarianceParams(4, 4, &vpx_sub_pixel_avg_variance16x16_mmi, 0),
   1594         SubpelAvgVarianceParams(4, 3, &vpx_sub_pixel_avg_variance16x8_mmi, 0),
   1595         SubpelAvgVarianceParams(3, 4, &vpx_sub_pixel_avg_variance8x16_mmi, 0),
   1596         SubpelAvgVarianceParams(3, 3, &vpx_sub_pixel_avg_variance8x8_mmi, 0),
   1597         SubpelAvgVarianceParams(3, 2, &vpx_sub_pixel_avg_variance8x4_mmi, 0),
   1598         SubpelAvgVarianceParams(2, 3, &vpx_sub_pixel_avg_variance4x8_mmi, 0),
   1599         SubpelAvgVarianceParams(2, 2, &vpx_sub_pixel_avg_variance4x4_mmi, 0)));
   1600 #endif  // HAVE_MMI
   1601 }  // namespace
   1602