/*
 *  Copyright (c) 2012 The WebM project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#include <cstdlib>
#include <new>

#include "test/acm_random.h"
#include "test/clear_system_state.h"
#include "test/register_state_check.h"
#include "third_party/googletest/src/include/gtest/gtest.h"

#include "./vpx_config.h"
#include "vpx/vpx_codec.h"
#include "vpx/vpx_integer.h"
#include "vpx_mem/vpx_mem.h"
#include "vpx_ports/mem.h"
#if CONFIG_VP9_ENCODER
# include "./vp9_rtcd.h"
# include "vp9/encoder/vp9_variance.h"
#endif  // CONFIG_VP9_ENCODER
#include "./vpx_dsp_rtcd.h"

namespace {

typedef unsigned int (*VarianceMxNFunc)(const uint8_t *a, int a_stride,
                                        const uint8_t *b, int b_stride,
                                        unsigned int *sse);
typedef unsigned int (*Get4x4SseFunc)(const uint8_t *a, int a_stride,
                                      const uint8_t *b, int b_stride);


using ::std::tr1::get;
using ::std::tr1::make_tuple;
using ::std::tr1::tuple;
using libvpx_test::ACMRandom;

// Truncate high bit depth results by downshifting (with rounding) by:
// 2 * (bit_depth - 8) for sse
// (bit_depth - 8) for se
static void RoundHighBitDepth(int bit_depth, int64_t *se, uint64_t *sse) {
  switch (bit_depth) {
    case VPX_BITS_12:
      *sse = (*sse + 128) >> 8;
      *se = (*se + 8) >> 4;
      break;
    case VPX_BITS_10:
      *sse = (*sse + 8) >> 4;
      *se = (*se + 2) >> 2;
      break;
    case VPX_BITS_8:
    default:
      break;
  }
}

static unsigned int mb_ss_ref(const int16_t *src) {
  unsigned int res = 0;
  for (int i = 0; i < 256; ++i) {
    res += src[i] * src[i];
  }
  return res;
}

static unsigned int variance_ref(const uint8_t *src, const uint8_t *ref,
                                 int l2w, int l2h, int src_stride_coeff,
                                 int ref_stride_coeff, uint32_t *sse_ptr,
                                 bool use_high_bit_depth_,
                                 vpx_bit_depth_t bit_depth) {
  int64_t se = 0;
  uint64_t sse = 0;
  const int w = 1 << l2w;
  const int h = 1 << l2h;
  for (int y = 0; y < h; y++) {
    for (int x = 0; x < w; x++) {
      int diff;
      if (!use_high_bit_depth_) {
        diff = ref[w * y * ref_stride_coeff + x] -
               src[w * y * src_stride_coeff + x];
        se += diff;
        sse += diff * diff;
#if CONFIG_VP9_HIGHBITDEPTH
      } else {
        diff = CONVERT_TO_SHORTPTR(ref)[w * y * ref_stride_coeff + x] -
               CONVERT_TO_SHORTPTR(src)[w * y * src_stride_coeff + x];
        se += diff;
        sse += diff * diff;
#endif  // CONFIG_VP9_HIGHBITDEPTH
      }
    }
  }
  RoundHighBitDepth(bit_depth, &se, &sse);
  *sse_ptr = sse;
  return sse - (((int64_t) se * se) >> (l2w + l2h));
}

static unsigned int subpel_variance_ref(const uint8_t *ref, const uint8_t *src,
                                        int l2w, int l2h, int xoff, int yoff,
                                        unsigned int *sse_ptr,
                                        bool use_high_bit_depth_,
                                        vpx_bit_depth_t bit_depth) {
  int64_t se = 0;
  uint64_t sse = 0;
  const int w = 1 << l2w;
  const int h = 1 << l2h;
  for (int y = 0; y < h; y++) {
    for (int x = 0; x < w; x++) {
      // Bilinear interpolation at a 16th pel step.
      if (!use_high_bit_depth_) {
        const int a1 = ref[(w + 1) * (y + 0) + x + 0];
        const int a2 = ref[(w + 1) * (y + 0) + x + 1];
        const int b1 = ref[(w + 1) * (y + 1) + x + 0];
        const int b2 = ref[(w + 1) * (y + 1) + x + 1];
        const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
        const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
        const int r = a + (((b - a) * yoff + 8) >> 4);
        const int diff = r - src[w * y + x];
        se += diff;
        sse += diff * diff;
#if CONFIG_VP9_HIGHBITDEPTH
      } else {
        uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
        uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
        const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
        const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
        const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
        const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
        const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
        const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
        const int r = a + (((b - a) * yoff + 8) >> 4);
        const int diff = r - src16[w * y + x];
        se += diff;
        sse += diff * diff;
#endif  // CONFIG_VP9_HIGHBITDEPTH
      }
    }
  }
  RoundHighBitDepth(bit_depth, &se, &sse);
  *sse_ptr = sse;
  return sse - (((int64_t) se * se) >> (l2w + l2h));
}

typedef unsigned int (*SumOfSquaresFunction)(const int16_t *src);

class SumOfSquaresTest : public ::testing::TestWithParam<SumOfSquaresFunction> {
 public:
  SumOfSquaresTest() : func_(GetParam()) {}

  virtual ~SumOfSquaresTest() {
    libvpx_test::ClearSystemState();
  }

 protected:
  void ConstTest();
  void RefTest();

  SumOfSquaresFunction func_;
  ACMRandom rnd_;
};

void SumOfSquaresTest::ConstTest() {
  int16_t mem[256];
  unsigned int res;
  for (int v = 0; v < 256; ++v) {
    for (int i = 0; i < 256; ++i) {
      mem[i] = v;
    }
    ASM_REGISTER_STATE_CHECK(res = func_(mem));
    EXPECT_EQ(256u * (v * v), res);
  }
}

void SumOfSquaresTest::RefTest() {
  int16_t mem[256];
  for (int i = 0; i < 100; ++i) {
    for (int j = 0; j < 256; ++j) {
      mem[j] = rnd_.Rand8() - rnd_.Rand8();
    }

    const unsigned int expected = mb_ss_ref(mem);
    unsigned int res;
    ASM_REGISTER_STATE_CHECK(res = func_(mem));
    EXPECT_EQ(expected, res);
  }
}

template<typename VarianceFunctionType>
class VarianceTest
    : public ::testing::TestWithParam<tuple<int, int,
                                            VarianceFunctionType, int> > {
 public:
  virtual void SetUp() {
    const tuple<int, int, VarianceFunctionType, int>& params = this->GetParam();
    log2width_  = get<0>(params);
    width_ = 1 << log2width_;
    log2height_ = get<1>(params);
    height_ = 1 << log2height_;
    variance_ = get<2>(params);
    if (get<3>(params)) {
      bit_depth_ = static_cast<vpx_bit_depth_t>(get<3>(params));
      use_high_bit_depth_ = true;
    } else {
      bit_depth_ = VPX_BITS_8;
      use_high_bit_depth_ = false;
    }
    mask_ = (1 << bit_depth_) - 1;

    rnd_.Reset(ACMRandom::DeterministicSeed());
    block_size_ = width_ * height_;
    if (!use_high_bit_depth_) {
      src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_ * 2));
      ref_ = new uint8_t[block_size_ * 2];
#if CONFIG_VP9_HIGHBITDEPTH
    } else {
      src_ = CONVERT_TO_BYTEPTR(reinterpret_cast<uint16_t *>(
          vpx_memalign(16, block_size_ * 2 * sizeof(uint16_t))));
      ref_ = CONVERT_TO_BYTEPTR(new uint16_t[block_size_ * 2]);
#endif  // CONFIG_VP9_HIGHBITDEPTH
    }
    ASSERT_TRUE(src_ != NULL);
    ASSERT_TRUE(ref_ != NULL);
  }

  virtual void TearDown() {
    if (!use_high_bit_depth_) {
      vpx_free(src_);
      delete[] ref_;
#if CONFIG_VP9_HIGHBITDEPTH
    } else {
      vpx_free(CONVERT_TO_SHORTPTR(src_));
      delete[] CONVERT_TO_SHORTPTR(ref_);
#endif  // CONFIG_VP9_HIGHBITDEPTH
    }
    libvpx_test::ClearSystemState();
  }

 protected:
  void ZeroTest();
  void RefTest();
  void RefStrideTest();
  void OneQuarterTest();

  ACMRandom rnd_;
  uint8_t *src_;
  uint8_t *ref_;
  int width_, log2width_;
  int height_, log2height_;
  vpx_bit_depth_t bit_depth_;
  int mask_;
  bool use_high_bit_depth_;
  int block_size_;
  VarianceFunctionType variance_;
};

template<typename VarianceFunctionType>
void VarianceTest<VarianceFunctionType>::ZeroTest() {
  for (int i = 0; i <= 255; ++i) {
    if (!use_high_bit_depth_) {
      memset(src_, i, block_size_);
#if CONFIG_VP9_HIGHBITDEPTH
    } else {
      vpx_memset16(CONVERT_TO_SHORTPTR(src_), i << (bit_depth_ - 8),
                   block_size_);
#endif  // CONFIG_VP9_HIGHBITDEPTH
    }
    for (int j = 0; j <= 255; ++j) {
      if (!use_high_bit_depth_) {
        memset(ref_, j, block_size_);
#if CONFIG_VP9_HIGHBITDEPTH
      } else {
        vpx_memset16(CONVERT_TO_SHORTPTR(ref_), j  << (bit_depth_ - 8),
                     block_size_);
#endif  // CONFIG_VP9_HIGHBITDEPTH
      }
      unsigned int sse;
      unsigned int var;
      ASM_REGISTER_STATE_CHECK(
          var = variance_(src_, width_, ref_, width_, &sse));
      EXPECT_EQ(0u, var) << "src values: " << i << " ref values: " << j;
    }
  }
}

template<typename VarianceFunctionType>
void VarianceTest<VarianceFunctionType>::RefTest() {
  for (int i = 0; i < 10; ++i) {
    for (int j = 0; j < block_size_; j++) {
    if (!use_high_bit_depth_) {
      src_[j] = rnd_.Rand8();
      ref_[j] = rnd_.Rand8();
#if CONFIG_VP9_HIGHBITDEPTH
    } else {
      CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() && mask_;
      CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() && mask_;
#endif  // CONFIG_VP9_HIGHBITDEPTH
    }
    }
    unsigned int sse1, sse2;
    unsigned int var1;
    const int stride_coeff = 1;
    ASM_REGISTER_STATE_CHECK(
        var1 = variance_(src_, width_, ref_, width_, &sse1));
    const unsigned int var2 = variance_ref(src_, ref_, log2width_,
                                           log2height_, stride_coeff,
                                           stride_coeff, &sse2,
                                           use_high_bit_depth_, bit_depth_);
    EXPECT_EQ(sse1, sse2);
    EXPECT_EQ(var1, var2);
  }
}

template<typename VarianceFunctionType>
void VarianceTest<VarianceFunctionType>::RefStrideTest() {
  for (int i = 0; i < 10; ++i) {
    int ref_stride_coeff = i % 2;
    int src_stride_coeff = (i >> 1) % 2;
    for (int j = 0; j < block_size_; j++) {
      int ref_ind = (j / width_) * ref_stride_coeff * width_ + j % width_;
      int src_ind = (j / width_) * src_stride_coeff * width_ + j % width_;
      if (!use_high_bit_depth_) {
        src_[src_ind] = rnd_.Rand8();
        ref_[ref_ind] = rnd_.Rand8();
#if CONFIG_VP9_HIGHBITDEPTH
      } else {
        CONVERT_TO_SHORTPTR(src_)[src_ind] = rnd_.Rand16() && mask_;
        CONVERT_TO_SHORTPTR(ref_)[ref_ind] = rnd_.Rand16() && mask_;
#endif  // CONFIG_VP9_HIGHBITDEPTH
      }
    }
    unsigned int sse1, sse2;
    unsigned int var1;

    ASM_REGISTER_STATE_CHECK(
        var1 = variance_(src_, width_ * src_stride_coeff,
                         ref_, width_ * ref_stride_coeff, &sse1));
    const unsigned int var2 = variance_ref(src_, ref_, log2width_,
                                           log2height_, src_stride_coeff,
                                           ref_stride_coeff, &sse2,
                                           use_high_bit_depth_, bit_depth_);
    EXPECT_EQ(sse1, sse2);
    EXPECT_EQ(var1, var2);
  }
}

template<typename VarianceFunctionType>
void VarianceTest<VarianceFunctionType>::OneQuarterTest() {
  const int half = block_size_ / 2;
  if (!use_high_bit_depth_) {
    memset(src_, 255, block_size_);
    memset(ref_, 255, half);
    memset(ref_ + half, 0, half);
#if CONFIG_VP9_HIGHBITDEPTH
  } else {
    vpx_memset16(CONVERT_TO_SHORTPTR(src_), 255 << (bit_depth_ - 8),
                 block_size_);
    vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 255 << (bit_depth_ - 8), half);
    vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, 0, half);
#endif  // CONFIG_VP9_HIGHBITDEPTH
  }
  unsigned int sse;
  unsigned int var;
  ASM_REGISTER_STATE_CHECK(var = variance_(src_, width_, ref_, width_, &sse));
  const unsigned int expected = block_size_ * 255 * 255 / 4;
  EXPECT_EQ(expected, var);
}

template<typename MseFunctionType>
class MseTest
    : public ::testing::TestWithParam<tuple<int, int, MseFunctionType> > {
 public:
  virtual void SetUp() {
    const tuple<int, int, MseFunctionType>& params = this->GetParam();
    log2width_  = get<0>(params);
    width_ = 1 << log2width_;
    log2height_ = get<1>(params);
    height_ = 1 << log2height_;
    mse_ = get<2>(params);

    rnd(ACMRandom::DeterministicSeed());
    block_size_ = width_ * height_;
    src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_));
    ref_ = new uint8_t[block_size_];
    ASSERT_TRUE(src_ != NULL);
    ASSERT_TRUE(ref_ != NULL);
  }

  virtual void TearDown() {
    vpx_free(src_);
    delete[] ref_;
    libvpx_test::ClearSystemState();
  }

 protected:
  void RefTest_mse();
  void RefTest_sse();
  void MaxTest_mse();
  void MaxTest_sse();

  ACMRandom rnd;
  uint8_t* src_;
  uint8_t* ref_;
  int width_, log2width_;
  int height_, log2height_;
  int block_size_;
  MseFunctionType mse_;
};

template<typename MseFunctionType>
void MseTest<MseFunctionType>::RefTest_mse() {
  for (int i = 0; i < 10; ++i) {
    for (int j = 0; j < block_size_; j++) {
      src_[j] = rnd.Rand8();
      ref_[j] = rnd.Rand8();
    }
    unsigned int sse1, sse2;
    const int stride_coeff = 1;
    ASM_REGISTER_STATE_CHECK(mse_(src_, width_, ref_, width_, &sse1));
    variance_ref(src_, ref_, log2width_, log2height_, stride_coeff,
                 stride_coeff, &sse2, false, VPX_BITS_8);
    EXPECT_EQ(sse1, sse2);
  }
}

template<typename MseFunctionType>
void MseTest<MseFunctionType>::RefTest_sse() {
  for (int i = 0; i < 10; ++i) {
    for (int j = 0; j < block_size_; j++) {
      src_[j] = rnd.Rand8();
      ref_[j] = rnd.Rand8();
    }
    unsigned int sse2;
    unsigned int var1;
    const int stride_coeff = 1;
    ASM_REGISTER_STATE_CHECK(var1 = mse_(src_, width_, ref_, width_));
    variance_ref(src_, ref_, log2width_, log2height_, stride_coeff,
                 stride_coeff, &sse2, false, VPX_BITS_8);
    EXPECT_EQ(var1, sse2);
  }
}

template<typename MseFunctionType>
void MseTest<MseFunctionType>::MaxTest_mse() {
  memset(src_, 255, block_size_);
  memset(ref_, 0, block_size_);
  unsigned int sse;
  ASM_REGISTER_STATE_CHECK(mse_(src_, width_, ref_, width_, &sse));
  const unsigned int expected = block_size_ * 255 * 255;
  EXPECT_EQ(expected, sse);
}

template<typename MseFunctionType>
void MseTest<MseFunctionType>::MaxTest_sse() {
  memset(src_, 255, block_size_);
  memset(ref_, 0, block_size_);
  unsigned int var;
  ASM_REGISTER_STATE_CHECK(var = mse_(src_, width_, ref_, width_));
  const unsigned int expected = block_size_ * 255 * 255;
  EXPECT_EQ(expected, var);
}

unsigned int subpel_avg_variance_ref(const uint8_t *ref,
                                     const uint8_t *src,
                                     const uint8_t *second_pred,
                                     int l2w, int l2h,
                                     int xoff, int yoff,
                                     unsigned int *sse_ptr,
                                     bool use_high_bit_depth,
                                     vpx_bit_depth_t bit_depth) {
  int64_t se = 0;
  uint64_t sse = 0;
  const int w = 1 << l2w;
  const int h = 1 << l2h;
  for (int y = 0; y < h; y++) {
    for (int x = 0; x < w; x++) {
      // bilinear interpolation at a 16th pel step
      if (!use_high_bit_depth) {
        const int a1 = ref[(w + 1) * (y + 0) + x + 0];
        const int a2 = ref[(w + 1) * (y + 0) + x + 1];
        const int b1 = ref[(w + 1) * (y + 1) + x + 0];
        const int b2 = ref[(w + 1) * (y + 1) + x + 1];
        const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
        const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
        const int r = a + (((b - a) * yoff + 8) >> 4);
        const int diff = ((r + second_pred[w * y + x] + 1) >> 1) - src[w * y + x];
        se += diff;
        sse += diff * diff;
#if CONFIG_VP9_HIGHBITDEPTH
      } else {
        uint16_t *ref16 = CONVERT_TO_SHORTPTR(ref);
        uint16_t *src16 = CONVERT_TO_SHORTPTR(src);
        uint16_t *sec16   = CONVERT_TO_SHORTPTR(second_pred);
        const int a1 = ref16[(w + 1) * (y + 0) + x + 0];
        const int a2 = ref16[(w + 1) * (y + 0) + x + 1];
        const int b1 = ref16[(w + 1) * (y + 1) + x + 0];
        const int b2 = ref16[(w + 1) * (y + 1) + x + 1];
        const int a = a1 + (((a2 - a1) * xoff + 8) >> 4);
        const int b = b1 + (((b2 - b1) * xoff + 8) >> 4);
        const int r = a + (((b - a) * yoff + 8) >> 4);
        const int diff = ((r + sec16[w * y + x] + 1) >> 1) - src16[w * y + x];
        se += diff;
        sse += diff * diff;
#endif  // CONFIG_VP9_HIGHBITDEPTH
      }
    }
  }
  RoundHighBitDepth(bit_depth, &se, &sse);
  *sse_ptr = sse;
  return sse - (((int64_t) se * se) >> (l2w + l2h));
}

template<typename SubpelVarianceFunctionType>
class SubpelVarianceTest
    : public ::testing::TestWithParam<tuple<int, int,
                                            SubpelVarianceFunctionType, int> > {
 public:
  virtual void SetUp() {
    const tuple<int, int, SubpelVarianceFunctionType, int>& params =
        this->GetParam();
    log2width_  = get<0>(params);
    width_ = 1 << log2width_;
    log2height_ = get<1>(params);
    height_ = 1 << log2height_;
    subpel_variance_ = get<2>(params);
    if (get<3>(params)) {
      bit_depth_ = (vpx_bit_depth_t) get<3>(params);
      use_high_bit_depth_ = true;
    } else {
      bit_depth_ = VPX_BITS_8;
      use_high_bit_depth_ = false;
    }
    mask_ = (1 << bit_depth_)-1;

    rnd_.Reset(ACMRandom::DeterministicSeed());
    block_size_ = width_ * height_;
    if (!use_high_bit_depth_) {
      src_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_));
      sec_ = reinterpret_cast<uint8_t *>(vpx_memalign(16, block_size_));
      ref_ = new uint8_t[block_size_ + width_ + height_ + 1];
#if CONFIG_VP9_HIGHBITDEPTH
    } else {
      src_ = CONVERT_TO_BYTEPTR(
          reinterpret_cast<uint16_t *>(
              vpx_memalign(16, block_size_*sizeof(uint16_t))));
      sec_ = CONVERT_TO_BYTEPTR(
          reinterpret_cast<uint16_t *>(
              vpx_memalign(16, block_size_*sizeof(uint16_t))));
      ref_ = CONVERT_TO_BYTEPTR(
          new uint16_t[block_size_ + width_ + height_ + 1]);
#endif  // CONFIG_VP9_HIGHBITDEPTH
    }
    ASSERT_TRUE(src_ != NULL);
    ASSERT_TRUE(sec_ != NULL);
    ASSERT_TRUE(ref_ != NULL);
  }

  virtual void TearDown() {
    if (!use_high_bit_depth_) {
      vpx_free(src_);
      delete[] ref_;
      vpx_free(sec_);
#if CONFIG_VP9_HIGHBITDEPTH
    } else {
      vpx_free(CONVERT_TO_SHORTPTR(src_));
      delete[] CONVERT_TO_SHORTPTR(ref_);
      vpx_free(CONVERT_TO_SHORTPTR(sec_));
#endif  // CONFIG_VP9_HIGHBITDEPTH
    }
    libvpx_test::ClearSystemState();
  }

 protected:
  void RefTest();
  void ExtremeRefTest();

  ACMRandom rnd_;
  uint8_t *src_;
  uint8_t *ref_;
  uint8_t *sec_;
  bool use_high_bit_depth_;
  vpx_bit_depth_t bit_depth_;
  int width_, log2width_;
  int height_, log2height_;
  int block_size_,  mask_;
  SubpelVarianceFunctionType subpel_variance_;
};

template<typename SubpelVarianceFunctionType>
void SubpelVarianceTest<SubpelVarianceFunctionType>::RefTest() {
  for (int x = 0; x < 16; ++x) {
    for (int y = 0; y < 16; ++y) {
      if (!use_high_bit_depth_) {
        for (int j = 0; j < block_size_; j++) {
          src_[j] = rnd_.Rand8();
        }
        for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
          ref_[j] = rnd_.Rand8();
        }
#if CONFIG_VP9_HIGHBITDEPTH
      } else {
        for (int j = 0; j < block_size_; j++) {
          CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask_;
        }
        for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
          CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask_;
        }
#endif  // CONFIG_VP9_HIGHBITDEPTH
      }
      unsigned int sse1, sse2;
      unsigned int var1;
      ASM_REGISTER_STATE_CHECK(var1 = subpel_variance_(ref_, width_ + 1, x, y,
                                                       src_, width_, &sse1));
      const unsigned int var2 = subpel_variance_ref(ref_, src_, log2width_,
                                                    log2height_, x, y, &sse2,
                                                    use_high_bit_depth_,
                                                    bit_depth_);
      EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
      EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
    }
  }
}

template<typename SubpelVarianceFunctionType>
void SubpelVarianceTest<SubpelVarianceFunctionType>::ExtremeRefTest() {
  // Compare against reference.
  // Src: Set the first half of values to 0, the second half to the maximum.
  // Ref: Set the first half of values to the maximum, the second half to 0.
  for (int x = 0; x < 16; ++x) {
    for (int y = 0; y < 16; ++y) {
      const int half = block_size_ / 2;
      if (!use_high_bit_depth_) {
        memset(src_, 0, half);
        memset(src_ + half, 255, half);
        memset(ref_, 255, half);
        memset(ref_ + half, 0, half + width_ + height_ + 1);
#if CONFIG_VP9_HIGHBITDEPTH
      } else {
        vpx_memset16(CONVERT_TO_SHORTPTR(src_), mask_, half);
        vpx_memset16(CONVERT_TO_SHORTPTR(src_) + half, 0, half);
        vpx_memset16(CONVERT_TO_SHORTPTR(ref_), 0, half);
        vpx_memset16(CONVERT_TO_SHORTPTR(ref_) + half, mask_,
                     half + width_ + height_ + 1);
#endif  // CONFIG_VP9_HIGHBITDEPTH
      }
      unsigned int sse1, sse2;
      unsigned int var1;
      ASM_REGISTER_STATE_CHECK(
          var1 = subpel_variance_(ref_, width_ + 1, x, y, src_, width_, &sse1));
      const unsigned int var2 =
          subpel_variance_ref(ref_, src_, log2width_, log2height_, x, y, &sse2,
                              use_high_bit_depth_, bit_depth_);
      EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
      EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
    }
  }
}

#if CONFIG_VP9_ENCODER
template<>
void SubpelVarianceTest<vp9_subp_avg_variance_fn_t>::RefTest() {
  for (int x = 0; x < 16; ++x) {
    for (int y = 0; y < 16; ++y) {
      if (!use_high_bit_depth_) {
        for (int j = 0; j < block_size_; j++) {
          src_[j] = rnd_.Rand8();
          sec_[j] = rnd_.Rand8();
        }
        for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
          ref_[j] = rnd_.Rand8();
        }
#if CONFIG_VP9_HIGHBITDEPTH
      } else {
        for (int j = 0; j < block_size_; j++) {
          CONVERT_TO_SHORTPTR(src_)[j] = rnd_.Rand16() & mask_;
          CONVERT_TO_SHORTPTR(sec_)[j] = rnd_.Rand16() & mask_;
        }
        for (int j = 0; j < block_size_ + width_ + height_ + 1; j++) {
          CONVERT_TO_SHORTPTR(ref_)[j] = rnd_.Rand16() & mask_;
        }
#endif  // CONFIG_VP9_HIGHBITDEPTH
      }
      unsigned int sse1, sse2;
      unsigned int var1;
      ASM_REGISTER_STATE_CHECK(
          var1 = subpel_variance_(ref_, width_ + 1, x, y,
                                  src_, width_, &sse1, sec_));
      const unsigned int var2 = subpel_avg_variance_ref(ref_, src_, sec_,
                                                        log2width_, log2height_,
                                                        x, y, &sse2,
                                                        use_high_bit_depth_,
                                                        bit_depth_);
      EXPECT_EQ(sse1, sse2) << "at position " << x << ", " << y;
      EXPECT_EQ(var1, var2) << "at position " << x << ", " << y;
    }
  }
}
#endif  // CONFIG_VP9_ENCODER

typedef MseTest<Get4x4SseFunc> VpxSseTest;
typedef MseTest<VarianceMxNFunc> VpxMseTest;
typedef VarianceTest<VarianceMxNFunc> VpxVarianceTest;

TEST_P(VpxSseTest, Ref_sse) { RefTest_sse(); }
TEST_P(VpxSseTest, Max_sse) { MaxTest_sse(); }
TEST_P(VpxMseTest, Ref_mse) { RefTest_mse(); }
TEST_P(VpxMseTest, Max_mse) { MaxTest_mse(); }
TEST_P(VpxVarianceTest, Zero) { ZeroTest(); }
TEST_P(VpxVarianceTest, Ref) { RefTest(); }
TEST_P(VpxVarianceTest, RefStride) { RefStrideTest(); }
TEST_P(VpxVarianceTest, OneQuarter) { OneQuarterTest(); }
TEST_P(SumOfSquaresTest, Const) { ConstTest(); }
TEST_P(SumOfSquaresTest, Ref) { RefTest(); }

INSTANTIATE_TEST_CASE_P(C, SumOfSquaresTest,
                        ::testing::Values(vpx_get_mb_ss_c));

const Get4x4SseFunc get4x4sse_cs_c = vpx_get4x4sse_cs_c;
INSTANTIATE_TEST_CASE_P(C, VpxSseTest,
                        ::testing::Values(make_tuple(2, 2, get4x4sse_cs_c)));

const VarianceMxNFunc mse16x16_c = vpx_mse16x16_c;
const VarianceMxNFunc mse16x8_c = vpx_mse16x8_c;
const VarianceMxNFunc mse8x16_c = vpx_mse8x16_c;
const VarianceMxNFunc mse8x8_c = vpx_mse8x8_c;
INSTANTIATE_TEST_CASE_P(C, VpxMseTest,
                        ::testing::Values(make_tuple(4, 4, mse16x16_c),
                                          make_tuple(4, 3, mse16x8_c),
                                          make_tuple(3, 4, mse8x16_c),
                                          make_tuple(3, 3, mse8x8_c)));

const VarianceMxNFunc variance64x64_c = vpx_variance64x64_c;
const VarianceMxNFunc variance64x32_c = vpx_variance64x32_c;
const VarianceMxNFunc variance32x64_c = vpx_variance32x64_c;
const VarianceMxNFunc variance32x32_c = vpx_variance32x32_c;
const VarianceMxNFunc variance32x16_c = vpx_variance32x16_c;
const VarianceMxNFunc variance16x32_c = vpx_variance16x32_c;
const VarianceMxNFunc variance16x16_c = vpx_variance16x16_c;
const VarianceMxNFunc variance16x8_c = vpx_variance16x8_c;
const VarianceMxNFunc variance8x16_c = vpx_variance8x16_c;
const VarianceMxNFunc variance8x8_c = vpx_variance8x8_c;
const VarianceMxNFunc variance8x4_c = vpx_variance8x4_c;
const VarianceMxNFunc variance4x8_c = vpx_variance4x8_c;
const VarianceMxNFunc variance4x4_c = vpx_variance4x4_c;

INSTANTIATE_TEST_CASE_P(
    C, VpxVarianceTest,
    ::testing::Values(make_tuple(6, 6, variance64x64_c, 0),
                      make_tuple(6, 5, variance64x32_c, 0),
                      make_tuple(5, 6, variance32x64_c, 0),
                      make_tuple(5, 5, variance32x32_c, 0),
                      make_tuple(5, 4, variance32x16_c, 0),
                      make_tuple(4, 5, variance16x32_c, 0),
                      make_tuple(4, 4, variance16x16_c, 0),
                      make_tuple(4, 3, variance16x8_c, 0),
                      make_tuple(3, 4, variance8x16_c, 0),
                      make_tuple(3, 3, variance8x8_c, 0),
                      make_tuple(3, 2, variance8x4_c, 0),
                      make_tuple(2, 3, variance4x8_c, 0),
                      make_tuple(2, 2, variance4x4_c, 0)));

#if CONFIG_VP9_HIGHBITDEPTH
typedef MseTest<VarianceMxNFunc> VpxHBDMseTest;
typedef VarianceTest<VarianceMxNFunc> VpxHBDVarianceTest;

TEST_P(VpxHBDMseTest, Ref_mse) { RefTest_mse(); }
TEST_P(VpxHBDMseTest, Max_mse) { MaxTest_mse(); }
TEST_P(VpxHBDVarianceTest, Zero) { ZeroTest(); }
TEST_P(VpxHBDVarianceTest, Ref) { RefTest(); }
TEST_P(VpxHBDVarianceTest, RefStride) { RefStrideTest(); }
TEST_P(VpxHBDVarianceTest, OneQuarter) { OneQuarterTest(); }

/* TODO(debargha): This test does not support the highbd version
const VarianceMxNFunc highbd_12_mse16x16_c = vpx_highbd_12_mse16x16_c;
const VarianceMxNFunc highbd_12_mse16x8_c = vpx_highbd_12_mse16x8_c;
const VarianceMxNFunc highbd_12_mse8x16_c = vpx_highbd_12_mse8x16_c;
const VarianceMxNFunc highbd_12_mse8x8_c = vpx_highbd_12_mse8x8_c;

const VarianceMxNFunc highbd_10_mse16x16_c = vpx_highbd_10_mse16x16_c;
const VarianceMxNFunc highbd_10_mse16x8_c = vpx_highbd_10_mse16x8_c;
const VarianceMxNFunc highbd_10_mse8x16_c = vpx_highbd_10_mse8x16_c;
const VarianceMxNFunc highbd_10_mse8x8_c = vpx_highbd_10_mse8x8_c;

const VarianceMxNFunc highbd_8_mse16x16_c = vpx_highbd_8_mse16x16_c;
const VarianceMxNFunc highbd_8_mse16x8_c = vpx_highbd_8_mse16x8_c;
const VarianceMxNFunc highbd_8_mse8x16_c = vpx_highbd_8_mse8x16_c;
const VarianceMxNFunc highbd_8_mse8x8_c = vpx_highbd_8_mse8x8_c;

INSTANTIATE_TEST_CASE_P(
    C, VpxHBDMseTest, ::testing::Values(make_tuple(4, 4, highbd_12_mse16x16_c),
                                        make_tuple(4, 4, highbd_12_mse16x8_c),
                                        make_tuple(4, 4, highbd_12_mse8x16_c),
                                        make_tuple(4, 4, highbd_12_mse8x8_c),
                                        make_tuple(4, 4, highbd_10_mse16x16_c),
                                        make_tuple(4, 4, highbd_10_mse16x8_c),
                                        make_tuple(4, 4, highbd_10_mse8x16_c),
                                        make_tuple(4, 4, highbd_10_mse8x8_c),
                                        make_tuple(4, 4, highbd_8_mse16x16_c),
                                        make_tuple(4, 4, highbd_8_mse16x8_c),
                                        make_tuple(4, 4, highbd_8_mse8x16_c),
                                        make_tuple(4, 4, highbd_8_mse8x8_c)));
*/


const VarianceMxNFunc highbd_12_variance64x64_c = vpx_highbd_12_variance64x64_c;
const VarianceMxNFunc highbd_12_variance64x32_c = vpx_highbd_12_variance64x32_c;
const VarianceMxNFunc highbd_12_variance32x64_c = vpx_highbd_12_variance32x64_c;
const VarianceMxNFunc highbd_12_variance32x32_c = vpx_highbd_12_variance32x32_c;
const VarianceMxNFunc highbd_12_variance32x16_c = vpx_highbd_12_variance32x16_c;
const VarianceMxNFunc highbd_12_variance16x32_c = vpx_highbd_12_variance16x32_c;
const VarianceMxNFunc highbd_12_variance16x16_c = vpx_highbd_12_variance16x16_c;
const VarianceMxNFunc highbd_12_variance16x8_c = vpx_highbd_12_variance16x8_c;
const VarianceMxNFunc highbd_12_variance8x16_c = vpx_highbd_12_variance8x16_c;
const VarianceMxNFunc highbd_12_variance8x8_c = vpx_highbd_12_variance8x8_c;
const VarianceMxNFunc highbd_12_variance8x4_c = vpx_highbd_12_variance8x4_c;
const VarianceMxNFunc highbd_12_variance4x8_c = vpx_highbd_12_variance4x8_c;
const VarianceMxNFunc highbd_12_variance4x4_c = vpx_highbd_12_variance4x4_c;

const VarianceMxNFunc highbd_10_variance64x64_c = vpx_highbd_10_variance64x64_c;
const VarianceMxNFunc highbd_10_variance64x32_c = vpx_highbd_10_variance64x32_c;
const VarianceMxNFunc highbd_10_variance32x64_c = vpx_highbd_10_variance32x64_c;
const VarianceMxNFunc highbd_10_variance32x32_c = vpx_highbd_10_variance32x32_c;
const VarianceMxNFunc highbd_10_variance32x16_c = vpx_highbd_10_variance32x16_c;
const VarianceMxNFunc highbd_10_variance16x32_c = vpx_highbd_10_variance16x32_c;
const VarianceMxNFunc highbd_10_variance16x16_c = vpx_highbd_10_variance16x16_c;
const VarianceMxNFunc highbd_10_variance16x8_c = vpx_highbd_10_variance16x8_c;
const VarianceMxNFunc highbd_10_variance8x16_c = vpx_highbd_10_variance8x16_c;
const VarianceMxNFunc highbd_10_variance8x8_c = vpx_highbd_10_variance8x8_c;
const VarianceMxNFunc highbd_10_variance8x4_c = vpx_highbd_10_variance8x4_c;
const VarianceMxNFunc highbd_10_variance4x8_c = vpx_highbd_10_variance4x8_c;
const VarianceMxNFunc highbd_10_variance4x4_c = vpx_highbd_10_variance4x4_c;

const VarianceMxNFunc highbd_8_variance64x64_c = vpx_highbd_8_variance64x64_c;
const VarianceMxNFunc highbd_8_variance64x32_c = vpx_highbd_8_variance64x32_c;
const VarianceMxNFunc highbd_8_variance32x64_c = vpx_highbd_8_variance32x64_c;
const VarianceMxNFunc highbd_8_variance32x32_c = vpx_highbd_8_variance32x32_c;
const VarianceMxNFunc highbd_8_variance32x16_c = vpx_highbd_8_variance32x16_c;
const VarianceMxNFunc highbd_8_variance16x32_c = vpx_highbd_8_variance16x32_c;
const VarianceMxNFunc highbd_8_variance16x16_c = vpx_highbd_8_variance16x16_c;
const VarianceMxNFunc highbd_8_variance16x8_c = vpx_highbd_8_variance16x8_c;
const VarianceMxNFunc highbd_8_variance8x16_c = vpx_highbd_8_variance8x16_c;
const VarianceMxNFunc highbd_8_variance8x8_c = vpx_highbd_8_variance8x8_c;
const VarianceMxNFunc highbd_8_variance8x4_c = vpx_highbd_8_variance8x4_c;
const VarianceMxNFunc highbd_8_variance4x8_c = vpx_highbd_8_variance4x8_c;
const VarianceMxNFunc highbd_8_variance4x4_c = vpx_highbd_8_variance4x4_c;
INSTANTIATE_TEST_CASE_P(
    C, VpxHBDVarianceTest,
    ::testing::Values(make_tuple(6, 6, highbd_12_variance64x64_c, 12),
                      make_tuple(6, 5, highbd_12_variance64x32_c, 12),
                      make_tuple(5, 6, highbd_12_variance32x64_c, 12),
                      make_tuple(5, 5, highbd_12_variance32x32_c, 12),
                      make_tuple(5, 4, highbd_12_variance32x16_c, 12),
                      make_tuple(4, 5, highbd_12_variance16x32_c, 12),
                      make_tuple(4, 4, highbd_12_variance16x16_c, 12),
                      make_tuple(4, 3, highbd_12_variance16x8_c, 12),
                      make_tuple(3, 4, highbd_12_variance8x16_c, 12),
                      make_tuple(3, 3, highbd_12_variance8x8_c, 12),
                      make_tuple(3, 2, highbd_12_variance8x4_c, 12),
                      make_tuple(2, 3, highbd_12_variance4x8_c, 12),
                      make_tuple(2, 2, highbd_12_variance4x4_c, 12),
                      make_tuple(6, 6, highbd_10_variance64x64_c, 10),
                      make_tuple(6, 5, highbd_10_variance64x32_c, 10),
                      make_tuple(5, 6, highbd_10_variance32x64_c, 10),
                      make_tuple(5, 5, highbd_10_variance32x32_c, 10),
                      make_tuple(5, 4, highbd_10_variance32x16_c, 10),
                      make_tuple(4, 5, highbd_10_variance16x32_c, 10),
                      make_tuple(4, 4, highbd_10_variance16x16_c, 10),
                      make_tuple(4, 3, highbd_10_variance16x8_c, 10),
                      make_tuple(3, 4, highbd_10_variance8x16_c, 10),
                      make_tuple(3, 3, highbd_10_variance8x8_c, 10),
                      make_tuple(3, 2, highbd_10_variance8x4_c, 10),
                      make_tuple(2, 3, highbd_10_variance4x8_c, 10),
                      make_tuple(2, 2, highbd_10_variance4x4_c, 10),
                      make_tuple(6, 6, highbd_8_variance64x64_c, 8),
                      make_tuple(6, 5, highbd_8_variance64x32_c, 8),
                      make_tuple(5, 6, highbd_8_variance32x64_c, 8),
                      make_tuple(5, 5, highbd_8_variance32x32_c, 8),
                      make_tuple(5, 4, highbd_8_variance32x16_c, 8),
                      make_tuple(4, 5, highbd_8_variance16x32_c, 8),
                      make_tuple(4, 4, highbd_8_variance16x16_c, 8),
                      make_tuple(4, 3, highbd_8_variance16x8_c, 8),
                      make_tuple(3, 4, highbd_8_variance8x16_c, 8),
                      make_tuple(3, 3, highbd_8_variance8x8_c, 8),
                      make_tuple(3, 2, highbd_8_variance8x4_c, 8),
                      make_tuple(2, 3, highbd_8_variance4x8_c, 8),
                      make_tuple(2, 2, highbd_8_variance4x4_c, 8)));
#endif  // CONFIG_VP9_HIGHBITDEPTH

#if HAVE_MMX
const VarianceMxNFunc mse16x16_mmx = vpx_mse16x16_mmx;
INSTANTIATE_TEST_CASE_P(MMX, VpxMseTest,
                        ::testing::Values(make_tuple(4, 4, mse16x16_mmx)));

INSTANTIATE_TEST_CASE_P(MMX, SumOfSquaresTest,
                        ::testing::Values(vpx_get_mb_ss_mmx));

const VarianceMxNFunc variance16x16_mmx = vpx_variance16x16_mmx;
const VarianceMxNFunc variance16x8_mmx = vpx_variance16x8_mmx;
const VarianceMxNFunc variance8x16_mmx = vpx_variance8x16_mmx;
const VarianceMxNFunc variance8x8_mmx = vpx_variance8x8_mmx;
const VarianceMxNFunc variance4x4_mmx = vpx_variance4x4_mmx;
INSTANTIATE_TEST_CASE_P(
    MMX, VpxVarianceTest,
    ::testing::Values(make_tuple(4, 4, variance16x16_mmx, 0),
                      make_tuple(4, 3, variance16x8_mmx, 0),
                      make_tuple(3, 4, variance8x16_mmx, 0),
                      make_tuple(3, 3, variance8x8_mmx, 0),
                      make_tuple(2, 2, variance4x4_mmx, 0)));
#endif  // HAVE_MMX

#if HAVE_SSE2
INSTANTIATE_TEST_CASE_P(SSE2, SumOfSquaresTest,
                        ::testing::Values(vpx_get_mb_ss_sse2));

const VarianceMxNFunc mse16x16_sse2 = vpx_mse16x16_sse2;
const VarianceMxNFunc mse16x8_sse2 = vpx_mse16x8_sse2;
const VarianceMxNFunc mse8x16_sse2 = vpx_mse8x16_sse2;
const VarianceMxNFunc mse8x8_sse2 = vpx_mse8x8_sse2;
INSTANTIATE_TEST_CASE_P(SSE2, VpxMseTest,
                        ::testing::Values(make_tuple(4, 4, mse16x16_sse2),
                                          make_tuple(4, 3, mse16x8_sse2),
                                          make_tuple(3, 4, mse8x16_sse2),
                                          make_tuple(3, 3, mse8x8_sse2)));

const VarianceMxNFunc variance64x64_sse2 = vpx_variance64x64_sse2;
const VarianceMxNFunc variance64x32_sse2 = vpx_variance64x32_sse2;
const VarianceMxNFunc variance32x64_sse2 = vpx_variance32x64_sse2;
const VarianceMxNFunc variance32x32_sse2 = vpx_variance32x32_sse2;
const VarianceMxNFunc variance32x16_sse2 = vpx_variance32x16_sse2;
const VarianceMxNFunc variance16x32_sse2 = vpx_variance16x32_sse2;
const VarianceMxNFunc variance16x16_sse2 = vpx_variance16x16_sse2;
const VarianceMxNFunc variance16x8_sse2 = vpx_variance16x8_sse2;
const VarianceMxNFunc variance8x16_sse2 = vpx_variance8x16_sse2;
const VarianceMxNFunc variance8x8_sse2 = vpx_variance8x8_sse2;
const VarianceMxNFunc variance8x4_sse2 = vpx_variance8x4_sse2;
const VarianceMxNFunc variance4x8_sse2 = vpx_variance4x8_sse2;
const VarianceMxNFunc variance4x4_sse2 = vpx_variance4x4_sse2;
INSTANTIATE_TEST_CASE_P(
    SSE2, VpxVarianceTest,
    ::testing::Values(make_tuple(6, 6, variance64x64_sse2, 0),
                      make_tuple(6, 5, variance64x32_sse2, 0),
                      make_tuple(5, 6, variance32x64_sse2, 0),
                      make_tuple(5, 5, variance32x32_sse2, 0),
                      make_tuple(5, 4, variance32x16_sse2, 0),
                      make_tuple(4, 5, variance16x32_sse2, 0),
                      make_tuple(4, 4, variance16x16_sse2, 0),
                      make_tuple(4, 3, variance16x8_sse2, 0),
                      make_tuple(3, 4, variance8x16_sse2, 0),
                      make_tuple(3, 3, variance8x8_sse2, 0),
                      make_tuple(3, 2, variance8x4_sse2, 0),
                      make_tuple(2, 3, variance4x8_sse2, 0),
                      make_tuple(2, 2, variance4x4_sse2, 0)));
#if CONFIG_VP9_HIGHBITDEPTH
/* TODO(debargha): This test does not support the highbd version
const VarianceMxNFunc highbd_12_mse16x16_sse2 = vpx_highbd_12_mse16x16_sse2;
const VarianceMxNFunc highbd_12_mse16x8_sse2 = vpx_highbd_12_mse16x8_sse2;
const VarianceMxNFunc highbd_12_mse8x16_sse2 = vpx_highbd_12_mse8x16_sse2;
const VarianceMxNFunc highbd_12_mse8x8_sse2 = vpx_highbd_12_mse8x8_sse2;

const VarianceMxNFunc highbd_10_mse16x16_sse2 = vpx_highbd_10_mse16x16_sse2;
const VarianceMxNFunc highbd_10_mse16x8_sse2 = vpx_highbd_10_mse16x8_sse2;
const VarianceMxNFunc highbd_10_mse8x16_sse2 = vpx_highbd_10_mse8x16_sse2;
const VarianceMxNFunc highbd_10_mse8x8_sse2 = vpx_highbd_10_mse8x8_sse2;

const VarianceMxNFunc highbd_8_mse16x16_sse2 = vpx_highbd_8_mse16x16_sse2;
const VarianceMxNFunc highbd_8_mse16x8_sse2 = vpx_highbd_8_mse16x8_sse2;
const VarianceMxNFunc highbd_8_mse8x16_sse2 = vpx_highbd_8_mse8x16_sse2;
const VarianceMxNFunc highbd_8_mse8x8_sse2 = vpx_highbd_8_mse8x8_sse2;

INSTANTIATE_TEST_CASE_P(
    SSE2, VpxHBDMseTest, ::testing::Values(make_tuple(4, 4, highbd_12_mse16x16_sse2),
                                           make_tuple(4, 3, highbd_12_mse16x8_sse2),
                                           make_tuple(3, 4, highbd_12_mse8x16_sse2),
                                           make_tuple(3, 3, highbd_12_mse8x8_sse2),
                                           make_tuple(4, 4, highbd_10_mse16x16_sse2),
                                           make_tuple(4, 3, highbd_10_mse16x8_sse2),
                                           make_tuple(3, 4, highbd_10_mse8x16_sse2),
                                           make_tuple(3, 3, highbd_10_mse8x8_sse2),
                                           make_tuple(4, 4, highbd_8_mse16x16_sse2),
                                           make_tuple(4, 3, highbd_8_mse16x8_sse2),
                                           make_tuple(3, 4, highbd_8_mse8x16_sse2),
                                           make_tuple(3, 3, highbd_8_mse8x8_sse2)));
*/

const VarianceMxNFunc highbd_12_variance64x64_sse2 =
    vpx_highbd_12_variance64x64_sse2;
const VarianceMxNFunc highbd_12_variance64x32_sse2 =
    vpx_highbd_12_variance64x32_sse2;
const VarianceMxNFunc highbd_12_variance32x64_sse2 =
    vpx_highbd_12_variance32x64_sse2;
const VarianceMxNFunc highbd_12_variance32x32_sse2 =
    vpx_highbd_12_variance32x32_sse2;
const VarianceMxNFunc highbd_12_variance32x16_sse2 =
    vpx_highbd_12_variance32x16_sse2;
const VarianceMxNFunc highbd_12_variance16x32_sse2 =
    vpx_highbd_12_variance16x32_sse2;
const VarianceMxNFunc highbd_12_variance16x16_sse2 =
    vpx_highbd_12_variance16x16_sse2;
const VarianceMxNFunc highbd_12_variance16x8_sse2 =
    vpx_highbd_12_variance16x8_sse2;
const VarianceMxNFunc highbd_12_variance8x16_sse2 =
    vpx_highbd_12_variance8x16_sse2;
const VarianceMxNFunc highbd_12_variance8x8_sse2 =
    vpx_highbd_12_variance8x8_sse2;
const VarianceMxNFunc highbd_10_variance64x64_sse2 =
    vpx_highbd_10_variance64x64_sse2;
const VarianceMxNFunc highbd_10_variance64x32_sse2 =
    vpx_highbd_10_variance64x32_sse2;
const VarianceMxNFunc highbd_10_variance32x64_sse2 =
    vpx_highbd_10_variance32x64_sse2;
const VarianceMxNFunc highbd_10_variance32x32_sse2 =
    vpx_highbd_10_variance32x32_sse2;
const VarianceMxNFunc highbd_10_variance32x16_sse2 =
    vpx_highbd_10_variance32x16_sse2;
const VarianceMxNFunc highbd_10_variance16x32_sse2 =
    vpx_highbd_10_variance16x32_sse2;
const VarianceMxNFunc highbd_10_variance16x16_sse2 =
    vpx_highbd_10_variance16x16_sse2;
const VarianceMxNFunc highbd_10_variance16x8_sse2 =
    vpx_highbd_10_variance16x8_sse2;
const VarianceMxNFunc highbd_10_variance8x16_sse2 =
    vpx_highbd_10_variance8x16_sse2;
const VarianceMxNFunc highbd_10_variance8x8_sse2 =
    vpx_highbd_10_variance8x8_sse2;
const VarianceMxNFunc highbd_8_variance64x64_sse2 =
    vpx_highbd_8_variance64x64_sse2;
const VarianceMxNFunc highbd_8_variance64x32_sse2 =
    vpx_highbd_8_variance64x32_sse2;
const VarianceMxNFunc highbd_8_variance32x64_sse2 =
    vpx_highbd_8_variance32x64_sse2;
const VarianceMxNFunc highbd_8_variance32x32_sse2 =
    vpx_highbd_8_variance32x32_sse2;
const VarianceMxNFunc highbd_8_variance32x16_sse2 =
    vpx_highbd_8_variance32x16_sse2;
const VarianceMxNFunc highbd_8_variance16x32_sse2 =
    vpx_highbd_8_variance16x32_sse2;
const VarianceMxNFunc highbd_8_variance16x16_sse2 =
    vpx_highbd_8_variance16x16_sse2;
const VarianceMxNFunc highbd_8_variance16x8_sse2 =
    vpx_highbd_8_variance16x8_sse2;
const VarianceMxNFunc highbd_8_variance8x16_sse2 =
    vpx_highbd_8_variance8x16_sse2;
const VarianceMxNFunc highbd_8_variance8x8_sse2 =
    vpx_highbd_8_variance8x8_sse2;

INSTANTIATE_TEST_CASE_P(
    SSE2, VpxHBDVarianceTest,
    ::testing::Values(make_tuple(6, 6, highbd_12_variance64x64_sse2, 12),
                      make_tuple(6, 5, highbd_12_variance64x32_sse2, 12),
                      make_tuple(5, 6, highbd_12_variance32x64_sse2, 12),
                      make_tuple(5, 5, highbd_12_variance32x32_sse2, 12),
                      make_tuple(5, 4, highbd_12_variance32x16_sse2, 12),
                      make_tuple(4, 5, highbd_12_variance16x32_sse2, 12),
                      make_tuple(4, 4, highbd_12_variance16x16_sse2, 12),
                      make_tuple(4, 3, highbd_12_variance16x8_sse2, 12),
                      make_tuple(3, 4, highbd_12_variance8x16_sse2, 12),
                      make_tuple(3, 3, highbd_12_variance8x8_sse2, 12),
                      make_tuple(6, 6, highbd_10_variance64x64_sse2, 10),
                      make_tuple(6, 5, highbd_10_variance64x32_sse2, 10),
                      make_tuple(5, 6, highbd_10_variance32x64_sse2, 10),
                      make_tuple(5, 5, highbd_10_variance32x32_sse2, 10),
                      make_tuple(5, 4, highbd_10_variance32x16_sse2, 10),
                      make_tuple(4, 5, highbd_10_variance16x32_sse2, 10),
                      make_tuple(4, 4, highbd_10_variance16x16_sse2, 10),
                      make_tuple(4, 3, highbd_10_variance16x8_sse2, 10),
                      make_tuple(3, 4, highbd_10_variance8x16_sse2, 10),
                      make_tuple(3, 3, highbd_10_variance8x8_sse2, 10),
                      make_tuple(6, 6, highbd_8_variance64x64_sse2, 8),
                      make_tuple(6, 5, highbd_8_variance64x32_sse2, 8),
                      make_tuple(5, 6, highbd_8_variance32x64_sse2, 8),
                      make_tuple(5, 5, highbd_8_variance32x32_sse2, 8),
                      make_tuple(5, 4, highbd_8_variance32x16_sse2, 8),
                      make_tuple(4, 5, highbd_8_variance16x32_sse2, 8),
                      make_tuple(4, 4, highbd_8_variance16x16_sse2, 8),
                      make_tuple(4, 3, highbd_8_variance16x8_sse2, 8),
                      make_tuple(3, 4, highbd_8_variance8x16_sse2, 8),
                      make_tuple(3, 3, highbd_8_variance8x8_sse2, 8)));
#endif  // CONFIG_VP9_HIGHBITDEPTH
#endif  // HAVE_SSE2

#if CONFIG_VP9_ENCODER
typedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceTest;
typedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t> VP9SubpelAvgVarianceTest;

TEST_P(VP9SubpelVarianceTest, Ref) { RefTest(); }
TEST_P(VP9SubpelVarianceTest, ExtremeRef) { ExtremeRefTest(); }
TEST_P(VP9SubpelAvgVarianceTest, Ref) { RefTest(); }

#if CONFIG_VP9_HIGHBITDEPTH
typedef SubpelVarianceTest<vp9_subpixvariance_fn_t> VP9SubpelVarianceHighTest;
typedef SubpelVarianceTest<vp9_subp_avg_variance_fn_t>
    VP9SubpelAvgVarianceHighTest;

TEST_P(VP9SubpelVarianceHighTest, Ref) { RefTest(); }
TEST_P(VP9SubpelVarianceHighTest, ExtremeRef) { ExtremeRefTest(); }
TEST_P(VP9SubpelAvgVarianceHighTest, Ref) { RefTest(); }
#endif  // CONFIG_VP9_HIGHBITDEPTH

const vp9_subpixvariance_fn_t subpel_variance4x4_c =
    vp9_sub_pixel_variance4x4_c;
const vp9_subpixvariance_fn_t subpel_variance4x8_c =
    vp9_sub_pixel_variance4x8_c;
const vp9_subpixvariance_fn_t subpel_variance8x4_c =
    vp9_sub_pixel_variance8x4_c;
const vp9_subpixvariance_fn_t subpel_variance8x8_c =
    vp9_sub_pixel_variance8x8_c;
const vp9_subpixvariance_fn_t subpel_variance8x16_c =
    vp9_sub_pixel_variance8x16_c;
const vp9_subpixvariance_fn_t subpel_variance16x8_c =
    vp9_sub_pixel_variance16x8_c;
const vp9_subpixvariance_fn_t subpel_variance16x16_c =
    vp9_sub_pixel_variance16x16_c;
const vp9_subpixvariance_fn_t subpel_variance16x32_c =
    vp9_sub_pixel_variance16x32_c;
const vp9_subpixvariance_fn_t subpel_variance32x16_c =
    vp9_sub_pixel_variance32x16_c;
const vp9_subpixvariance_fn_t subpel_variance32x32_c =
    vp9_sub_pixel_variance32x32_c;
const vp9_subpixvariance_fn_t subpel_variance32x64_c =
    vp9_sub_pixel_variance32x64_c;
const vp9_subpixvariance_fn_t subpel_variance64x32_c =
    vp9_sub_pixel_variance64x32_c;
const vp9_subpixvariance_fn_t subpel_variance64x64_c =
    vp9_sub_pixel_variance64x64_c;
INSTANTIATE_TEST_CASE_P(
    C, VP9SubpelVarianceTest,
    ::testing::Values(make_tuple(2, 2, subpel_variance4x4_c, 0),
                      make_tuple(2, 3, subpel_variance4x8_c, 0),
                      make_tuple(3, 2, subpel_variance8x4_c, 0),
                      make_tuple(3, 3, subpel_variance8x8_c, 0),
                      make_tuple(3, 4, subpel_variance8x16_c, 0),
                      make_tuple(4, 3, subpel_variance16x8_c, 0),
                      make_tuple(4, 4, subpel_variance16x16_c, 0),
                      make_tuple(4, 5, subpel_variance16x32_c, 0),
                      make_tuple(5, 4, subpel_variance32x16_c, 0),
                      make_tuple(5, 5, subpel_variance32x32_c, 0),
                      make_tuple(5, 6, subpel_variance32x64_c, 0),
                      make_tuple(6, 5, subpel_variance64x32_c, 0),
                      make_tuple(6, 6, subpel_variance64x64_c, 0)));
const vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_c =
    vp9_sub_pixel_avg_variance4x4_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_c =
    vp9_sub_pixel_avg_variance4x8_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_c =
    vp9_sub_pixel_avg_variance8x4_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_c =
    vp9_sub_pixel_avg_variance8x8_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_c =
    vp9_sub_pixel_avg_variance8x16_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_c =
    vp9_sub_pixel_avg_variance16x8_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_c =
    vp9_sub_pixel_avg_variance16x16_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_c =
    vp9_sub_pixel_avg_variance16x32_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_c =
    vp9_sub_pixel_avg_variance32x16_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_c =
    vp9_sub_pixel_avg_variance32x32_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_c =
    vp9_sub_pixel_avg_variance32x64_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_c =
    vp9_sub_pixel_avg_variance64x32_c;
const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_c =
    vp9_sub_pixel_avg_variance64x64_c;
INSTANTIATE_TEST_CASE_P(
    C, VP9SubpelAvgVarianceTest,
    ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_c, 0),
                      make_tuple(2, 3, subpel_avg_variance4x8_c, 0),
                      make_tuple(3, 2, subpel_avg_variance8x4_c, 0),
                      make_tuple(3, 3, subpel_avg_variance8x8_c, 0),
                      make_tuple(3, 4, subpel_avg_variance8x16_c, 0),
                      make_tuple(4, 3, subpel_avg_variance16x8_c, 0),
                      make_tuple(4, 4, subpel_avg_variance16x16_c, 0),
                      make_tuple(4, 5, subpel_avg_variance16x32_c, 0),
                      make_tuple(5, 4, subpel_avg_variance32x16_c, 0),
                      make_tuple(5, 5, subpel_avg_variance32x32_c, 0),
                      make_tuple(5, 6, subpel_avg_variance32x64_c, 0),
                      make_tuple(6, 5, subpel_avg_variance64x32_c, 0),
                      make_tuple(6, 6, subpel_avg_variance64x64_c, 0)));
#if CONFIG_VP9_HIGHBITDEPTH
const vp9_subpixvariance_fn_t highbd_10_subpel_variance4x4_c =
    vp9_highbd_10_sub_pixel_variance4x4_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance4x8_c =
    vp9_highbd_10_sub_pixel_variance4x8_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x4_c =
    vp9_highbd_10_sub_pixel_variance8x4_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x8_c =
    vp9_highbd_10_sub_pixel_variance8x8_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x16_c =
    vp9_highbd_10_sub_pixel_variance8x16_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x8_c =
    vp9_highbd_10_sub_pixel_variance16x8_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x16_c =
    vp9_highbd_10_sub_pixel_variance16x16_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x32_c =
    vp9_highbd_10_sub_pixel_variance16x32_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x16_c =
    vp9_highbd_10_sub_pixel_variance32x16_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x32_c =
    vp9_highbd_10_sub_pixel_variance32x32_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x64_c =
    vp9_highbd_10_sub_pixel_variance32x64_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance64x32_c =
    vp9_highbd_10_sub_pixel_variance64x32_c;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance64x64_c =
    vp9_highbd_10_sub_pixel_variance64x64_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance4x4_c =
    vp9_highbd_12_sub_pixel_variance4x4_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance4x8_c =
    vp9_highbd_12_sub_pixel_variance4x8_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x4_c =
    vp9_highbd_12_sub_pixel_variance8x4_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x8_c =
    vp9_highbd_12_sub_pixel_variance8x8_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x16_c =
    vp9_highbd_12_sub_pixel_variance8x16_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x8_c =
    vp9_highbd_12_sub_pixel_variance16x8_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x16_c =
    vp9_highbd_12_sub_pixel_variance16x16_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x32_c =
    vp9_highbd_12_sub_pixel_variance16x32_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x16_c =
    vp9_highbd_12_sub_pixel_variance32x16_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x32_c =
    vp9_highbd_12_sub_pixel_variance32x32_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x64_c =
    vp9_highbd_12_sub_pixel_variance32x64_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance64x32_c =
    vp9_highbd_12_sub_pixel_variance64x32_c;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance64x64_c =
    vp9_highbd_12_sub_pixel_variance64x64_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance4x4_c =
    vp9_highbd_sub_pixel_variance4x4_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance4x8_c =
    vp9_highbd_sub_pixel_variance4x8_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance8x4_c =
    vp9_highbd_sub_pixel_variance8x4_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance8x8_c =
    vp9_highbd_sub_pixel_variance8x8_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance8x16_c =
    vp9_highbd_sub_pixel_variance8x16_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance16x8_c =
    vp9_highbd_sub_pixel_variance16x8_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance16x16_c =
    vp9_highbd_sub_pixel_variance16x16_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance16x32_c =
    vp9_highbd_sub_pixel_variance16x32_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance32x16_c =
    vp9_highbd_sub_pixel_variance32x16_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance32x32_c =
    vp9_highbd_sub_pixel_variance32x32_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance32x64_c =
    vp9_highbd_sub_pixel_variance32x64_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance64x32_c =
    vp9_highbd_sub_pixel_variance64x32_c;
const vp9_subpixvariance_fn_t highbd_subpel_variance64x64_c =
    vp9_highbd_sub_pixel_variance64x64_c;
INSTANTIATE_TEST_CASE_P(
    C, VP9SubpelVarianceHighTest,
    ::testing::Values(make_tuple(2, 2, highbd_10_subpel_variance4x4_c, 10),
                      make_tuple(2, 3, highbd_10_subpel_variance4x8_c, 10),
                      make_tuple(3, 2, highbd_10_subpel_variance8x4_c, 10),
                      make_tuple(3, 3, highbd_10_subpel_variance8x8_c, 10),
                      make_tuple(3, 4, highbd_10_subpel_variance8x16_c, 10),
                      make_tuple(4, 3, highbd_10_subpel_variance16x8_c, 10),
                      make_tuple(4, 4, highbd_10_subpel_variance16x16_c, 10),
                      make_tuple(4, 5, highbd_10_subpel_variance16x32_c, 10),
                      make_tuple(5, 4, highbd_10_subpel_variance32x16_c, 10),
                      make_tuple(5, 5, highbd_10_subpel_variance32x32_c, 10),
                      make_tuple(5, 6, highbd_10_subpel_variance32x64_c, 10),
                      make_tuple(6, 5, highbd_10_subpel_variance64x32_c, 10),
                      make_tuple(6, 6, highbd_10_subpel_variance64x64_c, 10),
                      make_tuple(2, 2, highbd_12_subpel_variance4x4_c, 12),
                      make_tuple(2, 3, highbd_12_subpel_variance4x8_c, 12),
                      make_tuple(3, 2, highbd_12_subpel_variance8x4_c, 12),
                      make_tuple(3, 3, highbd_12_subpel_variance8x8_c, 12),
                      make_tuple(3, 4, highbd_12_subpel_variance8x16_c, 12),
                      make_tuple(4, 3, highbd_12_subpel_variance16x8_c, 12),
                      make_tuple(4, 4, highbd_12_subpel_variance16x16_c, 12),
                      make_tuple(4, 5, highbd_12_subpel_variance16x32_c, 12),
                      make_tuple(5, 4, highbd_12_subpel_variance32x16_c, 12),
                      make_tuple(5, 5, highbd_12_subpel_variance32x32_c, 12),
                      make_tuple(5, 6, highbd_12_subpel_variance32x64_c, 12),
                      make_tuple(6, 5, highbd_12_subpel_variance64x32_c, 12),
                      make_tuple(6, 6, highbd_12_subpel_variance64x64_c, 12),
                      make_tuple(2, 2, highbd_subpel_variance4x4_c, 8),
                      make_tuple(2, 3, highbd_subpel_variance4x8_c, 8),
                      make_tuple(3, 2, highbd_subpel_variance8x4_c, 8),
                      make_tuple(3, 3, highbd_subpel_variance8x8_c, 8),
                      make_tuple(3, 4, highbd_subpel_variance8x16_c, 8),
                      make_tuple(4, 3, highbd_subpel_variance16x8_c, 8),
                      make_tuple(4, 4, highbd_subpel_variance16x16_c, 8),
                      make_tuple(4, 5, highbd_subpel_variance16x32_c, 8),
                      make_tuple(5, 4, highbd_subpel_variance32x16_c, 8),
                      make_tuple(5, 5, highbd_subpel_variance32x32_c, 8),
                      make_tuple(5, 6, highbd_subpel_variance32x64_c, 8),
                      make_tuple(6, 5, highbd_subpel_variance64x32_c, 8),
                      make_tuple(6, 6, highbd_subpel_variance64x64_c, 8)));
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance4x4_c =
    vp9_highbd_10_sub_pixel_avg_variance4x4_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance4x8_c =
    vp9_highbd_10_sub_pixel_avg_variance4x8_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x4_c =
    vp9_highbd_10_sub_pixel_avg_variance8x4_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x8_c =
    vp9_highbd_10_sub_pixel_avg_variance8x8_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x16_c =
    vp9_highbd_10_sub_pixel_avg_variance8x16_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x8_c =
    vp9_highbd_10_sub_pixel_avg_variance16x8_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x16_c =
    vp9_highbd_10_sub_pixel_avg_variance16x16_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x32_c =
    vp9_highbd_10_sub_pixel_avg_variance16x32_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x16_c =
    vp9_highbd_10_sub_pixel_avg_variance32x16_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x32_c =
    vp9_highbd_10_sub_pixel_avg_variance32x32_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x64_c =
    vp9_highbd_10_sub_pixel_avg_variance32x64_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance64x32_c =
    vp9_highbd_10_sub_pixel_avg_variance64x32_c;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance64x64_c =
    vp9_highbd_10_sub_pixel_avg_variance64x64_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance4x4_c =
    vp9_highbd_12_sub_pixel_avg_variance4x4_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance4x8_c =
    vp9_highbd_12_sub_pixel_avg_variance4x8_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x4_c =
    vp9_highbd_12_sub_pixel_avg_variance8x4_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x8_c =
    vp9_highbd_12_sub_pixel_avg_variance8x8_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x16_c =
    vp9_highbd_12_sub_pixel_avg_variance8x16_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x8_c =
    vp9_highbd_12_sub_pixel_avg_variance16x8_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x16_c =
    vp9_highbd_12_sub_pixel_avg_variance16x16_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x32_c =
    vp9_highbd_12_sub_pixel_avg_variance16x32_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x16_c =
    vp9_highbd_12_sub_pixel_avg_variance32x16_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x32_c =
    vp9_highbd_12_sub_pixel_avg_variance32x32_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x64_c =
    vp9_highbd_12_sub_pixel_avg_variance32x64_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance64x32_c =
    vp9_highbd_12_sub_pixel_avg_variance64x32_c;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance64x64_c =
    vp9_highbd_12_sub_pixel_avg_variance64x64_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance4x4_c =
    vp9_highbd_sub_pixel_avg_variance4x4_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance4x8_c =
    vp9_highbd_sub_pixel_avg_variance4x8_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x4_c =
    vp9_highbd_sub_pixel_avg_variance8x4_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x8_c =
    vp9_highbd_sub_pixel_avg_variance8x8_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x16_c =
    vp9_highbd_sub_pixel_avg_variance8x16_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x8_c =
    vp9_highbd_sub_pixel_avg_variance16x8_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x16_c =
    vp9_highbd_sub_pixel_avg_variance16x16_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x32_c =
    vp9_highbd_sub_pixel_avg_variance16x32_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x16_c =
    vp9_highbd_sub_pixel_avg_variance32x16_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x32_c =
    vp9_highbd_sub_pixel_avg_variance32x32_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x64_c =
    vp9_highbd_sub_pixel_avg_variance32x64_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance64x32_c =
    vp9_highbd_sub_pixel_avg_variance64x32_c;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance64x64_c =
    vp9_highbd_sub_pixel_avg_variance64x64_c;
INSTANTIATE_TEST_CASE_P(
    C, VP9SubpelAvgVarianceHighTest,
    ::testing::Values(
        make_tuple(2, 2, highbd_10_subpel_avg_variance4x4_c, 10),
        make_tuple(2, 3, highbd_10_subpel_avg_variance4x8_c, 10),
        make_tuple(3, 2, highbd_10_subpel_avg_variance8x4_c, 10),
        make_tuple(3, 3, highbd_10_subpel_avg_variance8x8_c, 10),
        make_tuple(3, 4, highbd_10_subpel_avg_variance8x16_c, 10),
        make_tuple(4, 3, highbd_10_subpel_avg_variance16x8_c, 10),
        make_tuple(4, 4, highbd_10_subpel_avg_variance16x16_c, 10),
        make_tuple(4, 5, highbd_10_subpel_avg_variance16x32_c, 10),
        make_tuple(5, 4, highbd_10_subpel_avg_variance32x16_c, 10),
        make_tuple(5, 5, highbd_10_subpel_avg_variance32x32_c, 10),
        make_tuple(5, 6, highbd_10_subpel_avg_variance32x64_c, 10),
        make_tuple(6, 5, highbd_10_subpel_avg_variance64x32_c, 10),
        make_tuple(6, 6, highbd_10_subpel_avg_variance64x64_c, 10),
        make_tuple(2, 2, highbd_12_subpel_avg_variance4x4_c, 12),
        make_tuple(2, 3, highbd_12_subpel_avg_variance4x8_c, 12),
        make_tuple(3, 2, highbd_12_subpel_avg_variance8x4_c, 12),
        make_tuple(3, 3, highbd_12_subpel_avg_variance8x8_c, 12),
        make_tuple(3, 4, highbd_12_subpel_avg_variance8x16_c, 12),
        make_tuple(4, 3, highbd_12_subpel_avg_variance16x8_c, 12),
        make_tuple(4, 4, highbd_12_subpel_avg_variance16x16_c, 12),
        make_tuple(4, 5, highbd_12_subpel_avg_variance16x32_c, 12),
        make_tuple(5, 4, highbd_12_subpel_avg_variance32x16_c, 12),
        make_tuple(5, 5, highbd_12_subpel_avg_variance32x32_c, 12),
        make_tuple(5, 6, highbd_12_subpel_avg_variance32x64_c, 12),
        make_tuple(6, 5, highbd_12_subpel_avg_variance64x32_c, 12),
        make_tuple(6, 6, highbd_12_subpel_avg_variance64x64_c, 12),
        make_tuple(2, 2, highbd_subpel_avg_variance4x4_c, 8),
        make_tuple(2, 3, highbd_subpel_avg_variance4x8_c, 8),
        make_tuple(3, 2, highbd_subpel_avg_variance8x4_c, 8),
        make_tuple(3, 3, highbd_subpel_avg_variance8x8_c, 8),
        make_tuple(3, 4, highbd_subpel_avg_variance8x16_c, 8),
        make_tuple(4, 3, highbd_subpel_avg_variance16x8_c, 8),
        make_tuple(4, 4, highbd_subpel_avg_variance16x16_c, 8),
        make_tuple(4, 5, highbd_subpel_avg_variance16x32_c, 8),
        make_tuple(5, 4, highbd_subpel_avg_variance32x16_c, 8),
        make_tuple(5, 5, highbd_subpel_avg_variance32x32_c, 8),
        make_tuple(5, 6, highbd_subpel_avg_variance32x64_c, 8),
        make_tuple(6, 5, highbd_subpel_avg_variance64x32_c, 8),
        make_tuple(6, 6, highbd_subpel_avg_variance64x64_c, 8)));
#endif  // CONFIG_VP9_HIGHBITDEPTH
#endif  // CONFIG_VP9_ENCODER

#if CONFIG_VP9_ENCODER
#if HAVE_SSE2
#if CONFIG_USE_X86INC
const vp9_subpixvariance_fn_t subpel_variance4x4_sse =
    vp9_sub_pixel_variance4x4_sse;
const vp9_subpixvariance_fn_t subpel_variance4x8_sse =
    vp9_sub_pixel_variance4x8_sse;
const vp9_subpixvariance_fn_t subpel_variance8x4_sse2 =
    vp9_sub_pixel_variance8x4_sse2;
const vp9_subpixvariance_fn_t subpel_variance8x8_sse2 =
    vp9_sub_pixel_variance8x8_sse2;
const vp9_subpixvariance_fn_t subpel_variance8x16_sse2 =
    vp9_sub_pixel_variance8x16_sse2;
const vp9_subpixvariance_fn_t subpel_variance16x8_sse2 =
    vp9_sub_pixel_variance16x8_sse2;
const vp9_subpixvariance_fn_t subpel_variance16x16_sse2 =
    vp9_sub_pixel_variance16x16_sse2;
const vp9_subpixvariance_fn_t subpel_variance16x32_sse2 =
    vp9_sub_pixel_variance16x32_sse2;
const vp9_subpixvariance_fn_t subpel_variance32x16_sse2 =
    vp9_sub_pixel_variance32x16_sse2;
const vp9_subpixvariance_fn_t subpel_variance32x32_sse2 =
    vp9_sub_pixel_variance32x32_sse2;
const vp9_subpixvariance_fn_t subpel_variance32x64_sse2 =
    vp9_sub_pixel_variance32x64_sse2;
const vp9_subpixvariance_fn_t subpel_variance64x32_sse2 =
    vp9_sub_pixel_variance64x32_sse2;
const vp9_subpixvariance_fn_t subpel_variance64x64_sse2 =
    vp9_sub_pixel_variance64x64_sse2;
INSTANTIATE_TEST_CASE_P(
    SSE2, VP9SubpelVarianceTest,
    ::testing::Values(make_tuple(2, 2, subpel_variance4x4_sse, 0),
                      make_tuple(2, 3, subpel_variance4x8_sse, 0),
                      make_tuple(3, 2, subpel_variance8x4_sse2, 0),
                      make_tuple(3, 3, subpel_variance8x8_sse2, 0),
                      make_tuple(3, 4, subpel_variance8x16_sse2, 0),
                      make_tuple(4, 3, subpel_variance16x8_sse2, 0),
                      make_tuple(4, 4, subpel_variance16x16_sse2, 0),
                      make_tuple(4, 5, subpel_variance16x32_sse2, 0),
                      make_tuple(5, 4, subpel_variance32x16_sse2, 0),
                      make_tuple(5, 5, subpel_variance32x32_sse2, 0),
                      make_tuple(5, 6, subpel_variance32x64_sse2, 0),
                      make_tuple(6, 5, subpel_variance64x32_sse2, 0),
                      make_tuple(6, 6, subpel_variance64x64_sse2, 0)));
const vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_sse =
    vp9_sub_pixel_avg_variance4x4_sse;
const vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_sse =
    vp9_sub_pixel_avg_variance4x8_sse;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_sse2 =
    vp9_sub_pixel_avg_variance8x4_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_sse2 =
    vp9_sub_pixel_avg_variance8x8_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_sse2 =
    vp9_sub_pixel_avg_variance8x16_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_sse2 =
    vp9_sub_pixel_avg_variance16x8_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_sse2 =
    vp9_sub_pixel_avg_variance16x16_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_sse2 =
    vp9_sub_pixel_avg_variance16x32_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_sse2 =
    vp9_sub_pixel_avg_variance32x16_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_sse2 =
    vp9_sub_pixel_avg_variance32x32_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_sse2 =
    vp9_sub_pixel_avg_variance32x64_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_sse2 =
    vp9_sub_pixel_avg_variance64x32_sse2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_sse2 =
    vp9_sub_pixel_avg_variance64x64_sse2;
INSTANTIATE_TEST_CASE_P(
    SSE2, VP9SubpelAvgVarianceTest,
    ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_sse, 0),
                      make_tuple(2, 3, subpel_avg_variance4x8_sse, 0),
                      make_tuple(3, 2, subpel_avg_variance8x4_sse2, 0),
                      make_tuple(3, 3, subpel_avg_variance8x8_sse2, 0),
                      make_tuple(3, 4, subpel_avg_variance8x16_sse2, 0),
                      make_tuple(4, 3, subpel_avg_variance16x8_sse2, 0),
                      make_tuple(4, 4, subpel_avg_variance16x16_sse2, 0),
                      make_tuple(4, 5, subpel_avg_variance16x32_sse2, 0),
                      make_tuple(5, 4, subpel_avg_variance32x16_sse2, 0),
                      make_tuple(5, 5, subpel_avg_variance32x32_sse2, 0),
                      make_tuple(5, 6, subpel_avg_variance32x64_sse2, 0),
                      make_tuple(6, 5, subpel_avg_variance64x32_sse2, 0),
                      make_tuple(6, 6, subpel_avg_variance64x64_sse2, 0)));
#if CONFIG_VP9_HIGHBITDEPTH
const vp9_subpixvariance_fn_t highbd_subpel_variance8x4_sse2 =
    vp9_highbd_sub_pixel_variance8x4_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance8x8_sse2 =
    vp9_highbd_sub_pixel_variance8x8_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance8x16_sse2 =
    vp9_highbd_sub_pixel_variance8x16_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance16x8_sse2 =
    vp9_highbd_sub_pixel_variance16x8_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance16x16_sse2 =
    vp9_highbd_sub_pixel_variance16x16_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance16x32_sse2 =
    vp9_highbd_sub_pixel_variance16x32_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance32x16_sse2 =
    vp9_highbd_sub_pixel_variance32x16_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance32x32_sse2 =
    vp9_highbd_sub_pixel_variance32x32_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance32x64_sse2 =
    vp9_highbd_sub_pixel_variance32x64_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance64x32_sse2 =
    vp9_highbd_sub_pixel_variance64x32_sse2;
const vp9_subpixvariance_fn_t highbd_subpel_variance64x64_sse2 =
    vp9_highbd_sub_pixel_variance64x64_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x4_sse2 =
    vp9_highbd_10_sub_pixel_variance8x4_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x8_sse2 =
    vp9_highbd_10_sub_pixel_variance8x8_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance8x16_sse2 =
    vp9_highbd_10_sub_pixel_variance8x16_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x8_sse2 =
    vp9_highbd_10_sub_pixel_variance16x8_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x16_sse2 =
    vp9_highbd_10_sub_pixel_variance16x16_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance16x32_sse2 =
    vp9_highbd_10_sub_pixel_variance16x32_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x16_sse2 =
    vp9_highbd_10_sub_pixel_variance32x16_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x32_sse2 =
    vp9_highbd_10_sub_pixel_variance32x32_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance32x64_sse2 =
    vp9_highbd_10_sub_pixel_variance32x64_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance64x32_sse2 =
    vp9_highbd_10_sub_pixel_variance64x32_sse2;
const vp9_subpixvariance_fn_t highbd_10_subpel_variance64x64_sse2 =
    vp9_highbd_10_sub_pixel_variance64x64_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x4_sse2 =
    vp9_highbd_12_sub_pixel_variance8x4_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x8_sse2 =
    vp9_highbd_12_sub_pixel_variance8x8_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance8x16_sse2 =
    vp9_highbd_12_sub_pixel_variance8x16_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x8_sse2 =
    vp9_highbd_12_sub_pixel_variance16x8_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x16_sse2 =
    vp9_highbd_12_sub_pixel_variance16x16_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance16x32_sse2 =
    vp9_highbd_12_sub_pixel_variance16x32_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x16_sse2 =
    vp9_highbd_12_sub_pixel_variance32x16_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x32_sse2 =
    vp9_highbd_12_sub_pixel_variance32x32_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance32x64_sse2 =
    vp9_highbd_12_sub_pixel_variance32x64_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance64x32_sse2 =
    vp9_highbd_12_sub_pixel_variance64x32_sse2;
const vp9_subpixvariance_fn_t highbd_12_subpel_variance64x64_sse2 =
    vp9_highbd_12_sub_pixel_variance64x64_sse2;
INSTANTIATE_TEST_CASE_P(
    SSE2, VP9SubpelVarianceHighTest,
    ::testing::Values(make_tuple(3, 2, highbd_10_subpel_variance8x4_sse2, 10),
                      make_tuple(3, 3, highbd_10_subpel_variance8x8_sse2, 10),
                      make_tuple(3, 4, highbd_10_subpel_variance8x16_sse2, 10),
                      make_tuple(4, 3, highbd_10_subpel_variance16x8_sse2, 10),
                      make_tuple(4, 4, highbd_10_subpel_variance16x16_sse2, 10),
                      make_tuple(4, 5, highbd_10_subpel_variance16x32_sse2, 10),
                      make_tuple(5, 4, highbd_10_subpel_variance32x16_sse2, 10),
                      make_tuple(5, 5, highbd_10_subpel_variance32x32_sse2, 10),
                      make_tuple(5, 6, highbd_10_subpel_variance32x64_sse2, 10),
                      make_tuple(6, 5, highbd_10_subpel_variance64x32_sse2, 10),
                      make_tuple(6, 6, highbd_10_subpel_variance64x64_sse2, 10),
                      make_tuple(3, 2, highbd_12_subpel_variance8x4_sse2, 12),
                      make_tuple(3, 3, highbd_12_subpel_variance8x8_sse2, 12),
                      make_tuple(3, 4, highbd_12_subpel_variance8x16_sse2, 12),
                      make_tuple(4, 3, highbd_12_subpel_variance16x8_sse2, 12),
                      make_tuple(4, 4, highbd_12_subpel_variance16x16_sse2, 12),
                      make_tuple(4, 5, highbd_12_subpel_variance16x32_sse2, 12),
                      make_tuple(5, 4, highbd_12_subpel_variance32x16_sse2, 12),
                      make_tuple(5, 5, highbd_12_subpel_variance32x32_sse2, 12),
                      make_tuple(5, 6, highbd_12_subpel_variance32x64_sse2, 12),
                      make_tuple(6, 5, highbd_12_subpel_variance64x32_sse2, 12),
                      make_tuple(6, 6, highbd_12_subpel_variance64x64_sse2, 12),
                      make_tuple(3, 2, highbd_subpel_variance8x4_sse2, 8),
                      make_tuple(3, 3, highbd_subpel_variance8x8_sse2, 8),
                      make_tuple(3, 4, highbd_subpel_variance8x16_sse2, 8),
                      make_tuple(4, 3, highbd_subpel_variance16x8_sse2, 8),
                      make_tuple(4, 4, highbd_subpel_variance16x16_sse2, 8),
                      make_tuple(4, 5, highbd_subpel_variance16x32_sse2, 8),
                      make_tuple(5, 4, highbd_subpel_variance32x16_sse2, 8),
                      make_tuple(5, 5, highbd_subpel_variance32x32_sse2, 8),
                      make_tuple(5, 6, highbd_subpel_variance32x64_sse2, 8),
                      make_tuple(6, 5, highbd_subpel_variance64x32_sse2, 8),
                      make_tuple(6, 6, highbd_subpel_variance64x64_sse2, 8)));
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x4_sse2 =
    vp9_highbd_sub_pixel_avg_variance8x4_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x8_sse2 =
    vp9_highbd_sub_pixel_avg_variance8x8_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance8x16_sse2 =
    vp9_highbd_sub_pixel_avg_variance8x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x8_sse2 =
    vp9_highbd_sub_pixel_avg_variance16x8_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x16_sse2 =
    vp9_highbd_sub_pixel_avg_variance16x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance16x32_sse2 =
    vp9_highbd_sub_pixel_avg_variance16x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x16_sse2 =
    vp9_highbd_sub_pixel_avg_variance32x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x32_sse2 =
    vp9_highbd_sub_pixel_avg_variance32x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance32x64_sse2 =
    vp9_highbd_sub_pixel_avg_variance32x64_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance64x32_sse2 =
    vp9_highbd_sub_pixel_avg_variance64x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_subpel_avg_variance64x64_sse2 =
    vp9_highbd_sub_pixel_avg_variance64x64_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x4_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance8x4_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x8_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance8x8_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance8x16_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance8x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x8_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance16x8_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x16_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance16x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance16x32_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance16x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x16_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance32x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x32_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance32x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance32x64_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance32x64_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance64x32_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance64x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_10_subpel_avg_variance64x64_sse2 =
    vp9_highbd_10_sub_pixel_avg_variance64x64_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x4_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance8x4_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x8_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance8x8_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance8x16_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance8x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x8_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance16x8_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x16_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance16x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance16x32_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance16x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x16_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance32x16_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x32_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance32x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance32x64_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance32x64_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance64x32_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance64x32_sse2;
const vp9_subp_avg_variance_fn_t highbd_12_subpel_avg_variance64x64_sse2 =
    vp9_highbd_12_sub_pixel_avg_variance64x64_sse2;
INSTANTIATE_TEST_CASE_P(
    SSE2, VP9SubpelAvgVarianceHighTest,
    ::testing::Values(
                  make_tuple(3, 2, highbd_10_subpel_avg_variance8x4_sse2, 10),
                  make_tuple(3, 3, highbd_10_subpel_avg_variance8x8_sse2, 10),
                  make_tuple(3, 4, highbd_10_subpel_avg_variance8x16_sse2, 10),
                  make_tuple(4, 3, highbd_10_subpel_avg_variance16x8_sse2, 10),
                  make_tuple(4, 4, highbd_10_subpel_avg_variance16x16_sse2, 10),
                  make_tuple(4, 5, highbd_10_subpel_avg_variance16x32_sse2, 10),
                  make_tuple(5, 4, highbd_10_subpel_avg_variance32x16_sse2, 10),
                  make_tuple(5, 5, highbd_10_subpel_avg_variance32x32_sse2, 10),
                  make_tuple(5, 6, highbd_10_subpel_avg_variance32x64_sse2, 10),
                  make_tuple(6, 5, highbd_10_subpel_avg_variance64x32_sse2, 10),
                  make_tuple(6, 6, highbd_10_subpel_avg_variance64x64_sse2, 10),
                  make_tuple(3, 2, highbd_12_subpel_avg_variance8x4_sse2, 12),
                  make_tuple(3, 3, highbd_12_subpel_avg_variance8x8_sse2, 12),
                  make_tuple(3, 4, highbd_12_subpel_avg_variance8x16_sse2, 12),
                  make_tuple(4, 3, highbd_12_subpel_avg_variance16x8_sse2, 12),
                  make_tuple(4, 4, highbd_12_subpel_avg_variance16x16_sse2, 12),
                  make_tuple(4, 5, highbd_12_subpel_avg_variance16x32_sse2, 12),
                  make_tuple(5, 4, highbd_12_subpel_avg_variance32x16_sse2, 12),
                  make_tuple(5, 5, highbd_12_subpel_avg_variance32x32_sse2, 12),
                  make_tuple(5, 6, highbd_12_subpel_avg_variance32x64_sse2, 12),
                  make_tuple(6, 5, highbd_12_subpel_avg_variance64x32_sse2, 12),
                  make_tuple(6, 6, highbd_12_subpel_avg_variance64x64_sse2, 12),
                  make_tuple(3, 2, highbd_subpel_avg_variance8x4_sse2, 8),
                  make_tuple(3, 3, highbd_subpel_avg_variance8x8_sse2, 8),
                  make_tuple(3, 4, highbd_subpel_avg_variance8x16_sse2, 8),
                  make_tuple(4, 3, highbd_subpel_avg_variance16x8_sse2, 8),
                  make_tuple(4, 4, highbd_subpel_avg_variance16x16_sse2, 8),
                  make_tuple(4, 5, highbd_subpel_avg_variance16x32_sse2, 8),
                  make_tuple(5, 4, highbd_subpel_avg_variance32x16_sse2, 8),
                  make_tuple(5, 5, highbd_subpel_avg_variance32x32_sse2, 8),
                  make_tuple(5, 6, highbd_subpel_avg_variance32x64_sse2, 8),
                  make_tuple(6, 5, highbd_subpel_avg_variance64x32_sse2, 8),
                  make_tuple(6, 6, highbd_subpel_avg_variance64x64_sse2, 8)));
#endif  // CONFIG_VP9_HIGHBITDEPTH
#endif  // CONFIG_USE_X86INC
#endif  // HAVE_SSE2
#endif  // CONFIG_VP9_ENCODER

#if CONFIG_VP9_ENCODER
#if HAVE_SSSE3
#if CONFIG_USE_X86INC

const vp9_subpixvariance_fn_t subpel_variance4x4_ssse3 =
    vp9_sub_pixel_variance4x4_ssse3;
const vp9_subpixvariance_fn_t subpel_variance4x8_ssse3 =
    vp9_sub_pixel_variance4x8_ssse3;
const vp9_subpixvariance_fn_t subpel_variance8x4_ssse3 =
    vp9_sub_pixel_variance8x4_ssse3;
const vp9_subpixvariance_fn_t subpel_variance8x8_ssse3 =
    vp9_sub_pixel_variance8x8_ssse3;
const vp9_subpixvariance_fn_t subpel_variance8x16_ssse3 =
    vp9_sub_pixel_variance8x16_ssse3;
const vp9_subpixvariance_fn_t subpel_variance16x8_ssse3 =
    vp9_sub_pixel_variance16x8_ssse3;
const vp9_subpixvariance_fn_t subpel_variance16x16_ssse3 =
    vp9_sub_pixel_variance16x16_ssse3;
const vp9_subpixvariance_fn_t subpel_variance16x32_ssse3 =
    vp9_sub_pixel_variance16x32_ssse3;
const vp9_subpixvariance_fn_t subpel_variance32x16_ssse3 =
    vp9_sub_pixel_variance32x16_ssse3;
const vp9_subpixvariance_fn_t subpel_variance32x32_ssse3 =
    vp9_sub_pixel_variance32x32_ssse3;
const vp9_subpixvariance_fn_t subpel_variance32x64_ssse3 =
    vp9_sub_pixel_variance32x64_ssse3;
const vp9_subpixvariance_fn_t subpel_variance64x32_ssse3 =
    vp9_sub_pixel_variance64x32_ssse3;
const vp9_subpixvariance_fn_t subpel_variance64x64_ssse3 =
    vp9_sub_pixel_variance64x64_ssse3;
INSTANTIATE_TEST_CASE_P(
    SSSE3, VP9SubpelVarianceTest,
    ::testing::Values(make_tuple(2, 2, subpel_variance4x4_ssse3, 0),
                      make_tuple(2, 3, subpel_variance4x8_ssse3, 0),
                      make_tuple(3, 2, subpel_variance8x4_ssse3, 0),
                      make_tuple(3, 3, subpel_variance8x8_ssse3, 0),
                      make_tuple(3, 4, subpel_variance8x16_ssse3, 0),
                      make_tuple(4, 3, subpel_variance16x8_ssse3, 0),
                      make_tuple(4, 4, subpel_variance16x16_ssse3, 0),
                      make_tuple(4, 5, subpel_variance16x32_ssse3, 0),
                      make_tuple(5, 4, subpel_variance32x16_ssse3, 0),
                      make_tuple(5, 5, subpel_variance32x32_ssse3, 0),
                      make_tuple(5, 6, subpel_variance32x64_ssse3, 0),
                      make_tuple(6, 5, subpel_variance64x32_ssse3, 0),
                      make_tuple(6, 6, subpel_variance64x64_ssse3, 0)));
const vp9_subp_avg_variance_fn_t subpel_avg_variance4x4_ssse3 =
    vp9_sub_pixel_avg_variance4x4_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance4x8_ssse3 =
    vp9_sub_pixel_avg_variance4x8_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x4_ssse3 =
    vp9_sub_pixel_avg_variance8x4_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x8_ssse3 =
    vp9_sub_pixel_avg_variance8x8_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance8x16_ssse3 =
    vp9_sub_pixel_avg_variance8x16_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x8_ssse3 =
    vp9_sub_pixel_avg_variance16x8_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x16_ssse3 =
    vp9_sub_pixel_avg_variance16x16_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance16x32_ssse3 =
    vp9_sub_pixel_avg_variance16x32_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x16_ssse3 =
    vp9_sub_pixel_avg_variance32x16_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_ssse3 =
    vp9_sub_pixel_avg_variance32x32_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance32x64_ssse3 =
    vp9_sub_pixel_avg_variance32x64_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance64x32_ssse3 =
    vp9_sub_pixel_avg_variance64x32_ssse3;
const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_ssse3 =
    vp9_sub_pixel_avg_variance64x64_ssse3;
INSTANTIATE_TEST_CASE_P(
    SSSE3, VP9SubpelAvgVarianceTest,
    ::testing::Values(make_tuple(2, 2, subpel_avg_variance4x4_ssse3, 0),
                      make_tuple(2, 3, subpel_avg_variance4x8_ssse3, 0),
                      make_tuple(3, 2, subpel_avg_variance8x4_ssse3, 0),
                      make_tuple(3, 3, subpel_avg_variance8x8_ssse3, 0),
                      make_tuple(3, 4, subpel_avg_variance8x16_ssse3, 0),
                      make_tuple(4, 3, subpel_avg_variance16x8_ssse3, 0),
                      make_tuple(4, 4, subpel_avg_variance16x16_ssse3, 0),
                      make_tuple(4, 5, subpel_avg_variance16x32_ssse3, 0),
                      make_tuple(5, 4, subpel_avg_variance32x16_ssse3, 0),
                      make_tuple(5, 5, subpel_avg_variance32x32_ssse3, 0),
                      make_tuple(5, 6, subpel_avg_variance32x64_ssse3, 0),
                      make_tuple(6, 5, subpel_avg_variance64x32_ssse3, 0),
                      make_tuple(6, 6, subpel_avg_variance64x64_ssse3, 0)));
#endif  // CONFIG_USE_X86INC
#endif  // HAVE_SSSE3
#endif  // CONFIG_VP9_ENCODER

#if HAVE_AVX2
const VarianceMxNFunc mse16x16_avx2 = vpx_mse16x16_avx2;
INSTANTIATE_TEST_CASE_P(AVX2, VpxMseTest,
                        ::testing::Values(make_tuple(4, 4, mse16x16_avx2)));

const VarianceMxNFunc variance64x64_avx2 = vpx_variance64x64_avx2;
const VarianceMxNFunc variance64x32_avx2 = vpx_variance64x32_avx2;
const VarianceMxNFunc variance32x32_avx2 = vpx_variance32x32_avx2;
const VarianceMxNFunc variance32x16_avx2 = vpx_variance32x16_avx2;
const VarianceMxNFunc variance16x16_avx2 = vpx_variance16x16_avx2;
INSTANTIATE_TEST_CASE_P(
    AVX2, VpxVarianceTest,
    ::testing::Values(make_tuple(6, 6, variance64x64_avx2, 0),
                      make_tuple(6, 5, variance64x32_avx2, 0),
                      make_tuple(5, 5, variance32x32_avx2, 0),
                      make_tuple(5, 4, variance32x16_avx2, 0),
                      make_tuple(4, 4, variance16x16_avx2, 0)));

#if CONFIG_VP9_ENCODER
const vp9_subpixvariance_fn_t subpel_variance32x32_avx2 =
    vp9_sub_pixel_variance32x32_avx2;
const vp9_subpixvariance_fn_t subpel_variance64x64_avx2 =
    vp9_sub_pixel_variance64x64_avx2;
INSTANTIATE_TEST_CASE_P(
    AVX2, VP9SubpelVarianceTest,
    ::testing::Values(make_tuple(5, 5, subpel_variance32x32_avx2, 0),
                      make_tuple(6, 6, subpel_variance64x64_avx2, 0)));

const vp9_subp_avg_variance_fn_t subpel_avg_variance32x32_avx2 =
    vp9_sub_pixel_avg_variance32x32_avx2;
const vp9_subp_avg_variance_fn_t subpel_avg_variance64x64_avx2 =
    vp9_sub_pixel_avg_variance64x64_avx2;
INSTANTIATE_TEST_CASE_P(
    AVX2, VP9SubpelAvgVarianceTest,
    ::testing::Values(make_tuple(5, 5, subpel_avg_variance32x32_avx2, 0),
                      make_tuple(6, 6, subpel_avg_variance64x64_avx2, 0)));
#endif  // CONFIG_VP9_ENCODER
#endif  // HAVE_AVX2

#if HAVE_NEON
const Get4x4SseFunc get4x4sse_cs_neon = vpx_get4x4sse_cs_neon;
INSTANTIATE_TEST_CASE_P(NEON, VpxSseTest,
                        ::testing::Values(make_tuple(2, 2, get4x4sse_cs_neon)));

const VarianceMxNFunc mse16x16_neon = vpx_mse16x16_neon;
INSTANTIATE_TEST_CASE_P(NEON, VpxMseTest,
                        ::testing::Values(make_tuple(4, 4, mse16x16_neon)));

const VarianceMxNFunc variance64x64_neon = vpx_variance64x64_neon;
const VarianceMxNFunc variance64x32_neon = vpx_variance64x32_neon;
const VarianceMxNFunc variance32x64_neon = vpx_variance32x64_neon;
const VarianceMxNFunc variance32x32_neon = vpx_variance32x32_neon;
const VarianceMxNFunc variance16x16_neon = vpx_variance16x16_neon;
const VarianceMxNFunc variance16x8_neon = vpx_variance16x8_neon;
const VarianceMxNFunc variance8x16_neon = vpx_variance8x16_neon;
const VarianceMxNFunc variance8x8_neon = vpx_variance8x8_neon;
INSTANTIATE_TEST_CASE_P(
    NEON, VpxVarianceTest,
    ::testing::Values(make_tuple(6, 6, variance64x64_neon, 0),
                      make_tuple(6, 5, variance64x32_neon, 0),
                      make_tuple(5, 6, variance32x64_neon, 0),
                      make_tuple(5, 5, variance32x32_neon, 0),
                      make_tuple(4, 4, variance16x16_neon, 0),
                      make_tuple(4, 3, variance16x8_neon, 0),
                      make_tuple(3, 4, variance8x16_neon, 0),
                      make_tuple(3, 3, variance8x8_neon, 0)));

#if CONFIG_VP9_ENCODER
const vp9_subpixvariance_fn_t subpel_variance8x8_neon =
    vp9_sub_pixel_variance8x8_neon;
const vp9_subpixvariance_fn_t subpel_variance16x16_neon =
    vp9_sub_pixel_variance16x16_neon;
const vp9_subpixvariance_fn_t subpel_variance32x32_neon =
    vp9_sub_pixel_variance32x32_neon;
const vp9_subpixvariance_fn_t subpel_variance64x64_neon =
    vp9_sub_pixel_variance64x64_neon;
INSTANTIATE_TEST_CASE_P(
    NEON, VP9SubpelVarianceTest,
    ::testing::Values(make_tuple(3, 3, subpel_variance8x8_neon, 0),
                      make_tuple(4, 4, subpel_variance16x16_neon, 0),
                      make_tuple(5, 5, subpel_variance32x32_neon, 0),
                      make_tuple(6, 6, subpel_variance64x64_neon, 0)));
#endif  // CONFIG_VP9_ENCODER
#endif  // HAVE_NEON

#if HAVE_MEDIA
const VarianceMxNFunc mse16x16_media = vpx_mse16x16_media;
INSTANTIATE_TEST_CASE_P(MEDIA, VpxMseTest,
                        ::testing::Values(make_tuple(4, 4, mse16x16_media)));

const VarianceMxNFunc variance16x16_media = vpx_variance16x16_media;
const VarianceMxNFunc variance8x8_media = vpx_variance8x8_media;
INSTANTIATE_TEST_CASE_P(
    MEDIA, VpxVarianceTest,
    ::testing::Values(make_tuple(4, 4, variance16x16_media, 0),
                      make_tuple(3, 3, variance8x8_media, 0)));
#endif  // HAVE_MEDIA
}  // namespace
