/*
 * Copyright (c) 2021, Alliance for Open Media. All rights reserved
 *
 * This source code is subject to the terms of the BSD 3-Clause Clear License
 * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
 * License was not distributed with this source code in the LICENSE file, you
 * can obtain it at aomedia.org/license/software-license/bsd-3-c-c/.  If the
 * Alliance for Open Media Patent License 1.0 was not distributed with this
 * source code in the PATENTS file, you can obtain it at
 * aomedia.org/license/patent-license/.
 */

#include <string.h>
#include <limits.h>
#include <stdio.h>
#include <tuple>

#include "third_party/googletest/src/googletest/include/gtest/gtest.h"

#include "config/aom_config.h"
#include "config/aom_dsp_rtcd.h"

#include "test/acm_random.h"
#include "test/clear_system_state.h"
#include "test/register_state_check.h"
#include "test/util.h"
#include "aom/aom_codec.h"
#include "aom_mem/aom_mem.h"
#include "aom_ports/mem.h"

typedef unsigned int (*SadMxNFunc)(const uint16_t *src_ptr, int src_stride,
                                   const uint16_t *ref_ptr, int ref_stride);
typedef std::tuple<int, int, SadMxNFunc, int> SadMxNParam;

typedef unsigned int (*SadSkipMxNFunc)(const uint16_t *src_ptr, int src_stride,
                                       const uint16_t *ref_ptr, int ref_stride);
typedef std::tuple<int, int, SadSkipMxNFunc, int> SadSkipMxNParam;

typedef uint32_t (*SadMxNAvgFunc)(const uint16_t *src_ptr, int src_stride,
                                  const uint16_t *ref_ptr, int ref_stride,
                                  const uint16_t *second_pred);
typedef std::tuple<int, int, SadMxNAvgFunc, int> SadMxNAvgParam;

typedef void (*DistWtdCompAvgFunc)(uint16_t *comp_pred, const uint16_t *pred,
                                   int width, int height, const uint16_t *ref,
                                   int ref_stride,
                                   const DIST_WTD_COMP_PARAMS *jcp_param);
typedef std::tuple<int, int, DistWtdCompAvgFunc, int> DistWtdCompAvgParam;

typedef unsigned int (*DistWtdSadMxhFunc)(const uint16_t *src_ptr,
                                          int src_stride,
                                          const uint16_t *ref_ptr,
                                          int ref_stride, int width,
                                          int height);
typedef std::tuple<int, int, DistWtdSadMxhFunc, int> DistWtdSadMxhParam;

typedef uint32_t (*DistWtdSadMxNAvgFunc)(const uint16_t *src_ptr,
                                         int src_stride,
                                         const uint16_t *ref_ptr,
                                         int ref_stride,
                                         const uint16_t *second_pred,
                                         const DIST_WTD_COMP_PARAMS *jcp_param);
typedef std::tuple<int, int, DistWtdSadMxNAvgFunc, int> DistWtdSadMxNAvgParam;

typedef void (*SadMxNx4Func)(const uint16_t *src_ptr, int src_stride,
                             const uint16_t *const ref_ptr[], int ref_stride,
                             uint32_t *sad_array);
typedef std::tuple<int, int, SadMxNx4Func, int> SadMxNx4Param;

typedef void (*SadSkipMxNx4Func)(const uint16_t *src_ptr, int src_stride,
                                 const uint16_t *const ref_ptr[],
                                 int ref_stride, uint32_t *sad_array);
typedef std::tuple<int, int, SadSkipMxNx4Func, int> SadSkipMxNx4Param;

typedef void (*SadMxNx4AvgFunc)(const uint16_t *src_ptr, int src_stride,
                                const uint16_t *const ref_ptr[], int ref_stride,
                                const uint16_t *second_pred,
                                uint32_t *sad_array);
typedef std::tuple<int, int, SadMxNx4AvgFunc, int> SadMxNx4AvgParam;

using libaom_test::ACMRandom;

namespace {
class SADTestBase : public ::testing::Test {
 public:
  SADTestBase(int width, int height, int bit_depth)
      : width_(width), height_(height), bd_(bit_depth) {}

  static void SetUpTestSuite() {
    source_data16_ = reinterpret_cast<uint16_t *>(
        aom_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
    reference_data16_ = reinterpret_cast<uint16_t *>(
        aom_memalign(kDataAlignment, kDataBufferSize * sizeof(uint16_t)));
    second_pred16_ = reinterpret_cast<uint16_t *>(
        aom_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
    comp_pred16_ = reinterpret_cast<uint16_t *>(
        aom_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
    comp_pred16_test_ = reinterpret_cast<uint16_t *>(
        aom_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
  }

  static void TearDownTestSuite() {
    aom_free(source_data16_);
    source_data16_ = NULL;
    aom_free(reference_data16_);
    reference_data16_ = NULL;
    aom_free(second_pred16_);
    second_pred16_ = NULL;
    aom_free(comp_pred16_);
    comp_pred16_ = NULL;
    aom_free(comp_pred16_test_);
    comp_pred16_test_ = NULL;
  }

  virtual void TearDown() { libaom_test::ClearSystemState(); }

 protected:
  // Handle up to 4 256x256 blocks, with stride up to 256
  static const int kDataAlignment = 16;
  static const int kMaxDim = 256;
  static const int kDataBlockSize = kMaxDim * (kMaxDim + 1);
  static const int kDataBufferSize = 4 * kDataBlockSize;

  virtual void SetUp() {
    bit_depth_ = static_cast<aom_bit_depth_t>(bd_);
    source_data_ = source_data16_;
    reference_data_ = reference_data16_;
    second_pred_ = second_pred16_;
    comp_pred_ = comp_pred16_;
    comp_pred_test_ = comp_pred16_test_;
    mask_ = (1 << bit_depth_) - 1;
    source_stride_ = (width_ + 31) & ~31;
    reference_stride_ = width_;
    rnd_.Reset(ACMRandom::DeterministicSeed());
  }

  virtual uint16_t *GetReference(int block_idx) {
    return reference_data_ + block_idx * kDataBlockSize;
  }

  // Sum of Absolute Differences. Given two blocks, calculate the absolute
  // difference between two pixels in the same relative location; accumulate.
  unsigned int ReferenceSAD(int block_idx) {
    unsigned int sad = 0;
    const uint16_t *const reference16 = GetReference(block_idx);
    const uint16_t *const source16 = source_data_;
    for (int h = 0; h < height_; ++h) {
      for (int w = 0; w < width_; ++w) {
        sad += abs(source16[h * source_stride_ + w] -
                   reference16[h * reference_stride_ + w]);
      }
    }
    return sad;
  }

  // Sum of Absolute Differences Skip rows. Given two blocks,
  // calculate the absolute  difference between two pixels in the same
  // relative location every other row; accumulate and double the result at the
  // end.
  unsigned int ReferenceSADSkip(int block_idx) {
    unsigned int sad = 0;
    const uint16_t *const reference16 = GetReference(block_idx);
    const uint16_t *const source16 = source_data_;
    for (int h = 0; h < height_; h += 2) {
      for (int w = 0; w < width_; ++w) {
        sad += abs(source16[h * source_stride_ + w] -
                   reference16[h * reference_stride_ + w]);
      }
    }
    return sad * 2;
  }

  // Sum of Absolute Differences Average. Given two blocks, and a prediction
  // calculate the absolute difference between one pixel and average of the
  // corresponding and predicted pixels; accumulate.
  unsigned int ReferenceSADavg(int block_idx) {
    unsigned int sad = 0;
    const uint16_t *const reference16 = GetReference(block_idx);
    const uint16_t *const source16 = source_data_;
    const uint16_t *const second_pred16 = second_pred_;
    for (int h = 0; h < height_; ++h) {
      for (int w = 0; w < width_; ++w) {
        const int tmp = second_pred16[h * width_ + w] +
                        reference16[h * reference_stride_ + w];
        const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
        sad += abs(source16[h * source_stride_ + w] - comp_pred);
      }
    }
    return sad;
  }

  void ReferenceDistWtdCompAvg(int block_idx) {
    const uint16_t *const reference16 = GetReference(block_idx);
    const uint16_t *const second_pred16 = second_pred_;
    uint16_t *const comp_pred16 = comp_pred_;
    for (int h = 0; h < height_; ++h) {
      for (int w = 0; w < width_; ++w) {
        const int tmp =
            second_pred16[h * width_ + w] * jcp_param_.bck_offset +
            reference16[h * reference_stride_ + w] * jcp_param_.fwd_offset;
        comp_pred16[h * width_ + w] = ROUND_POWER_OF_TWO(tmp, 4);
      }
    }
  }

  unsigned int ReferenceDistWtdSADavg(int block_idx) {
    unsigned int sad = 0;
    const uint16_t *const reference16 = GetReference(block_idx);
    const uint16_t *const source16 = source_data_;
    const uint16_t *const second_pred16 = second_pred_;
    for (int h = 0; h < height_; ++h) {
      for (int w = 0; w < width_; ++w) {
        const int tmp =
            second_pred16[h * width_ + w] * jcp_param_.bck_offset +
            reference16[h * reference_stride_ + w] * jcp_param_.fwd_offset;
        const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 4);
        sad += abs(source16[h * source_stride_ + w] - comp_pred);
      }
    }
    return sad;
  }

  void FillConstant(uint16_t *data, int stride, uint16_t fill_constant) {
    uint16_t *data16 = data;
    for (int h = 0; h < height_; ++h) {
      for (int w = 0; w < width_; ++w) {
        data16[h * stride + w] = fill_constant;
      }
    }
  }

  void FillRandom(uint16_t *data, int stride) {
    uint16_t *data16 = data;
    for (int h = 0; h < height_; ++h) {
      for (int w = 0; w < width_; ++w) {
        data16[h * stride + w] = rnd_.Rand16() & mask_;
      }
    }
  }

  int width_, height_, mask_, bd_;
  aom_bit_depth_t bit_depth_;
  static uint16_t *source_data_;
  static uint16_t *reference_data_;
  static uint16_t *second_pred_;
  int source_stride_;
  static uint16_t *source_data16_;
  static uint16_t *reference_data16_;
  static uint16_t *second_pred16_;
  int reference_stride_;
  static uint16_t *comp_pred_;
  static uint16_t *comp_pred16_;
  static uint16_t *comp_pred_test_;
  static uint16_t *comp_pred16_test_;
  DIST_WTD_COMP_PARAMS jcp_param_;

  ACMRandom rnd_;
};

class SADx4Test : public ::testing::WithParamInterface<SadMxNx4Param>,
                  public SADTestBase {
 public:
  SADx4Test() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  void SADs(unsigned int *results) {
    const uint16_t *references[] = { GetReference(0), GetReference(1),
                                     GetReference(2), GetReference(3) };

    ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(
        source_data_, source_stride_, references, reference_stride_, results));
  }

  void CheckSADs() {
    unsigned int reference_sad, exp_sad[4];

    SADs(exp_sad);
    for (int block = 0; block < 4; ++block) {
      reference_sad = ReferenceSAD(block);

      EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
    }
  }

  void SpeedSAD() {
    const uint16_t *references[] = { GetReference(0), GetReference(1),
                                     GetReference(2), GetReference(3) };
    unsigned int exp_sad[4];

    const int test_count = 1000000000 / (GET_PARAM(0) * GET_PARAM(1));
    aom_usec_timer timer;
    aom_usec_timer_start(&timer);
    for (int i = 0; i < test_count; ++i) {
      ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(source_data_, source_stride_,
                                            references, reference_stride_,
                                            exp_sad));
    }
    aom_usec_timer_mark(&timer);
    const double elapsed_time =
        static_cast<double>(aom_usec_timer_elapsed(&timer));
    printf("Bitdepth: %d, SADx4 %dx%d: %7.2fns\n", GET_PARAM(3), GET_PARAM(0),
           GET_PARAM(1), elapsed_time);
  }
};

class SADSkipx4Test : public ::testing::WithParamInterface<SadMxNx4Param>,
                      public SADTestBase {
 public:
  SADSkipx4Test() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  void SADs(unsigned int *results) {
    const uint16_t *references[] = { GetReference(0), GetReference(1),
                                     GetReference(2), GetReference(3) };

    ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(
        source_data_, source_stride_, references, reference_stride_, results));
  }

  void CheckSADs() {
    unsigned int reference_sad, exp_sad[4];

    SADs(exp_sad);
    for (int block = 0; block < 4; ++block) {
      reference_sad = ReferenceSADSkip(block);

      EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
    }
  }

  void SpeedSAD() {
    const uint16_t *references[] = { GetReference(0), GetReference(1),
                                     GetReference(2), GetReference(3) };
    unsigned int exp_sad[4];

    const int test_count = 1000000000 / (GET_PARAM(0) * GET_PARAM(1));
    aom_usec_timer timer;
    aom_usec_timer_start(&timer);
    for (int i = 0; i < test_count; ++i) {
      ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(source_data_, source_stride_,
                                            references, reference_stride_,
                                            exp_sad));
    }
    aom_usec_timer_mark(&timer);
    const double elapsed_time =
        static_cast<double>(aom_usec_timer_elapsed(&timer));
    printf("Bitdepth: %d, SADSkipx4 %dx%d: %7.2fns\n", GET_PARAM(3),
           GET_PARAM(0), GET_PARAM(1), elapsed_time);
  }
};

class SADx4AvgTest : public ::testing::WithParamInterface<SadMxNx4AvgParam>,
                     public SADTestBase {
 public:
  SADx4AvgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  void SADs(unsigned int *results) {
    const uint16_t *references[] = { GetReference(0), GetReference(1),
                                     GetReference(2), GetReference(3) };

    ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(source_data_, source_stride_,
                                          references, reference_stride_,
                                          second_pred_, results));
  }

  void CheckSADs() {
    unsigned int reference_sad, exp_sad[4];

    SADs(exp_sad);
    for (int block = 0; block < 4; ++block) {
      reference_sad = ReferenceSADavg(block);

      EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
    }
  }

  void SpeedSAD() {
    int test_count = 200000;
    unsigned int exp_sad[4];
    while (test_count > 0) {
      SADs(exp_sad);
      test_count -= 1;
    }
  }
};
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(SADx4AvgTest);

class SADTest : public ::testing::WithParamInterface<SadMxNParam>,
                public SADTestBase {
 public:
  SADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  unsigned int SAD(int block_idx) {
    unsigned int ret;
    const uint16_t *const reference = GetReference(block_idx);

    ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
                                                reference, reference_stride_));
    return ret;
  }

  void CheckSAD() {
    const unsigned int reference_sad = ReferenceSAD(0);
    const unsigned int exp_sad = SAD(0);

    ASSERT_EQ(reference_sad, exp_sad);
  }

  void SpeedSAD() {
    int test_count = 20000000;
    while (test_count > 0) {
      SAD(0);
      test_count -= 1;
    }
  }
};

class SADSkipTest : public ::testing::WithParamInterface<SadMxNParam>,
                    public SADTestBase {
 public:
  SADSkipTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  unsigned int SAD(int block_idx) {
    unsigned int ret;
    const uint16_t *const reference = GetReference(block_idx);

    ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
                                                reference, reference_stride_));
    return ret;
  }

  void CheckSAD() {
    const unsigned int reference_sad = ReferenceSADSkip(0);
    const unsigned int exp_sad = SAD(0);

    ASSERT_EQ(reference_sad, exp_sad);
  }

  void SpeedSAD() {
    int test_count = 20000000;
    while (test_count > 0) {
      SAD(0);
      test_count -= 1;
    }
  }
};

class SADavgTest : public ::testing::WithParamInterface<SadMxNAvgParam>,
                   public SADTestBase {
 public:
  SADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  unsigned int SAD_avg(int block_idx) {
    unsigned int ret;
    const uint16_t *const reference = GetReference(block_idx);

    ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
                                                reference, reference_stride_,
                                                second_pred_));
    return ret;
  }

  void CheckSAD() {
    const unsigned int reference_sad = ReferenceSADavg(0);
    const unsigned int exp_sad = SAD_avg(0);

    ASSERT_EQ(reference_sad, exp_sad);
  }
};

class DistWtdCompAvgTest
    : public ::testing::WithParamInterface<DistWtdCompAvgParam>,
      public SADTestBase {
 public:
  DistWtdCompAvgTest()
      : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  void dist_wtd_comp_avg(int block_idx) {
    const uint16_t *const reference = GetReference(block_idx);

    ASM_REGISTER_STATE_CHECK(GET_PARAM(2)(comp_pred_test_, second_pred_, width_,
                                          height_, reference, reference_stride_,
                                          &jcp_param_));
  }

  void CheckCompAvg() {
    for (int j = 0; j < 2; ++j) {
      for (int i = 0; i < 4; ++i) {
        jcp_param_.fwd_offset = quant_dist_lookup_table[i][j];
        jcp_param_.bck_offset = quant_dist_lookup_table[i][1 - j];

        ReferenceDistWtdCompAvg(0);
        dist_wtd_comp_avg(0);

        for (int y = 0; y < height_; ++y)
          for (int x = 0; x < width_; ++x)
            ASSERT_EQ(comp_pred_[y * width_ + x],
                      comp_pred_test_[y * width_ + x]);
      }
    }
  }
};
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(DistWtdCompAvgTest);

class DistWtdSADTest : public ::testing::WithParamInterface<DistWtdSadMxhParam>,
                       public SADTestBase {
 public:
  DistWtdSADTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  unsigned int SAD(int block_idx) {
    unsigned int ret;
    const uint16_t *const reference = GetReference(block_idx);

    ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
                                                reference, reference_stride_,
                                                GET_PARAM(0), GET_PARAM(1)));
    return ret;
  }

  void CheckSAD() {
    const unsigned int reference_sad = ReferenceSAD(0);
    const unsigned int exp_sad = SAD(0);

    ASSERT_EQ(reference_sad, exp_sad);
  }

  void SpeedSAD() {
    int test_count = 20000000;
    while (test_count > 0) {
      SAD(0);
      test_count -= 1;
    }
  }
};
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(DistWtdSADTest);

class DistWtdSADavgTest
    : public ::testing::WithParamInterface<DistWtdSadMxNAvgParam>,
      public SADTestBase {
 public:
  DistWtdSADavgTest() : SADTestBase(GET_PARAM(0), GET_PARAM(1), GET_PARAM(3)) {}

 protected:
  unsigned int dist_wtd_SAD_avg(int block_idx) {
    unsigned int ret;
    const uint16_t *const reference = GetReference(block_idx);

    ASM_REGISTER_STATE_CHECK(ret = GET_PARAM(2)(source_data_, source_stride_,
                                                reference, reference_stride_,
                                                second_pred_, &jcp_param_));
    return ret;
  }

  void CheckSAD() {
    for (int j = 0; j < 2; ++j) {
      for (int i = 0; i < 4; ++i) {
        jcp_param_.fwd_offset = quant_dist_lookup_table[i][j];
        jcp_param_.bck_offset = quant_dist_lookup_table[i][1 - j];

        const unsigned int reference_sad = ReferenceDistWtdSADavg(0);
        const unsigned int exp_sad = dist_wtd_SAD_avg(0);

        ASSERT_EQ(reference_sad, exp_sad);
      }
    }
  }
};
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(DistWtdSADavgTest);

uint16_t *SADTestBase::source_data_ = NULL;
uint16_t *SADTestBase::reference_data_ = NULL;
uint16_t *SADTestBase::second_pred_ = NULL;
uint16_t *SADTestBase::comp_pred_ = NULL;
uint16_t *SADTestBase::comp_pred_test_ = NULL;
uint16_t *SADTestBase::source_data16_ = NULL;
uint16_t *SADTestBase::reference_data16_ = NULL;
uint16_t *SADTestBase::second_pred16_ = NULL;
uint16_t *SADTestBase::comp_pred16_ = NULL;
uint16_t *SADTestBase::comp_pred16_test_ = NULL;

TEST_P(SADTest, MaxRef) {
  FillConstant(source_data_, source_stride_, 0);
  FillConstant(reference_data_, reference_stride_, mask_);
  CheckSAD();
}

TEST_P(SADTest, MaxSrc) {
  FillConstant(source_data_, source_stride_, mask_);
  FillConstant(reference_data_, reference_stride_, 0);
  CheckSAD();
}

TEST_P(SADTest, ShortRef) {
  const int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(SADTest, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  const int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(SADTest, ShortSrc) {
  const int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  int test_count = 2000;
  while (test_count > 0) {
    FillRandom(source_data_, source_stride_);
    FillRandom(reference_data_, reference_stride_);
    CheckSAD();
    test_count -= 1;
  }
  source_stride_ = tmp_stride;
}

TEST_P(SADTest, DISABLED_Speed) {
  const int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  SpeedSAD();
  source_stride_ = tmp_stride;
}

TEST_P(SADSkipTest, MaxRef) {
  FillConstant(source_data_, source_stride_, 0);
  FillConstant(reference_data_, reference_stride_, mask_);
  CheckSAD();
}

TEST_P(SADSkipTest, MaxSrc) {
  FillConstant(source_data_, source_stride_, mask_);
  FillConstant(reference_data_, reference_stride_, 0);
  CheckSAD();
}

TEST_P(SADSkipTest, ShortRef) {
  const int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(SADSkipTest, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  const int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(SADSkipTest, ShortSrc) {
  const int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  int test_count = 2000;
  while (test_count > 0) {
    FillRandom(source_data_, source_stride_);
    FillRandom(reference_data_, reference_stride_);
    CheckSAD();
    test_count -= 1;
  }
  source_stride_ = tmp_stride;
}

TEST_P(SADSkipTest, DISABLED_Speed) {
  const int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  SpeedSAD();
  source_stride_ = tmp_stride;
}

TEST_P(SADavgTest, MaxRef) {
  FillConstant(source_data_, source_stride_, 0);
  FillConstant(reference_data_, reference_stride_, mask_);
  FillConstant(second_pred_, width_, 0);
  CheckSAD();
}
TEST_P(SADavgTest, MaxSrc) {
  FillConstant(source_data_, source_stride_, mask_);
  FillConstant(reference_data_, reference_stride_, 0);
  FillConstant(second_pred_, width_, 0);
  CheckSAD();
}

TEST_P(SADavgTest, ShortRef) {
  const int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  FillRandom(second_pred_, width_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(SADavgTest, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  const int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  FillRandom(second_pred_, width_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(SADavgTest, ShortSrc) {
  const int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  int test_count = 2000;
  while (test_count > 0) {
    FillRandom(source_data_, source_stride_);
    FillRandom(reference_data_, reference_stride_);
    FillRandom(second_pred_, width_);
    CheckSAD();
    test_count -= 1;
  }
  source_stride_ = tmp_stride;
}

TEST_P(DistWtdCompAvgTest, MaxRef) {
  FillConstant(reference_data_, reference_stride_, mask_);
  FillConstant(second_pred_, width_, 0);
  CheckCompAvg();
}

TEST_P(DistWtdCompAvgTest, MaxSecondPred) {
  FillConstant(reference_data_, reference_stride_, 0);
  FillConstant(second_pred_, width_, mask_);
  CheckCompAvg();
}

TEST_P(DistWtdCompAvgTest, ShortRef) {
  const int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(reference_data_, reference_stride_);
  FillRandom(second_pred_, width_);
  CheckCompAvg();
  reference_stride_ = tmp_stride;
}

TEST_P(DistWtdCompAvgTest, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  const int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(reference_data_, reference_stride_);
  FillRandom(second_pred_, width_);
  CheckCompAvg();
  reference_stride_ = tmp_stride;
}

TEST_P(DistWtdSADTest, MaxRef) {
  FillConstant(source_data_, source_stride_, 0);
  FillConstant(reference_data_, reference_stride_, mask_);
  CheckSAD();
}

TEST_P(DistWtdSADTest, MaxSrc) {
  FillConstant(source_data_, source_stride_, mask_);
  FillConstant(reference_data_, reference_stride_, 0);
  CheckSAD();
}

TEST_P(DistWtdSADTest, ShortRef) {
  const int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(DistWtdSADTest, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  const int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(DistWtdSADTest, ShortSrc) {
  const int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  int test_count = 2000;
  while (test_count > 0) {
    FillRandom(source_data_, source_stride_);
    FillRandom(reference_data_, reference_stride_);
    CheckSAD();
    test_count -= 1;
  }
  source_stride_ = tmp_stride;
}

TEST_P(DistWtdSADavgTest, MaxRef) {
  FillConstant(source_data_, source_stride_, 0);
  FillConstant(reference_data_, reference_stride_, mask_);
  FillConstant(second_pred_, width_, 0);
  CheckSAD();
}
TEST_P(DistWtdSADavgTest, MaxSrc) {
  FillConstant(source_data_, source_stride_, mask_);
  FillConstant(reference_data_, reference_stride_, 0);
  FillConstant(second_pred_, width_, 0);
  CheckSAD();
}

TEST_P(DistWtdSADavgTest, ShortRef) {
  const int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  FillRandom(second_pred_, width_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(DistWtdSADavgTest, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  const int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(reference_data_, reference_stride_);
  FillRandom(second_pred_, width_);
  CheckSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(DistWtdSADavgTest, ShortSrc) {
  const int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  int test_count = 2000;
  while (test_count > 0) {
    FillRandom(source_data_, source_stride_);
    FillRandom(reference_data_, reference_stride_);
    FillRandom(second_pred_, width_);
    CheckSAD();
    test_count -= 1;
  }
  source_stride_ = tmp_stride;
}

TEST_P(SADx4Test, MaxRef) {
  FillConstant(source_data_, source_stride_, 0);
  FillConstant(GetReference(0), reference_stride_, mask_);
  FillConstant(GetReference(1), reference_stride_, mask_);
  FillConstant(GetReference(2), reference_stride_, mask_);
  FillConstant(GetReference(3), reference_stride_, mask_);
  CheckSADs();
}

TEST_P(SADx4Test, MaxSrc) {
  FillConstant(source_data_, source_stride_, mask_);
  FillConstant(GetReference(0), reference_stride_, 0);
  FillConstant(GetReference(1), reference_stride_, 0);
  FillConstant(GetReference(2), reference_stride_, 0);
  FillConstant(GetReference(3), reference_stride_, 0);
  CheckSADs();
}

TEST_P(SADx4Test, ShortRef) {
  int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  CheckSADs();
  reference_stride_ = tmp_stride;
}

TEST_P(SADx4Test, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  CheckSADs();
  reference_stride_ = tmp_stride;
}

TEST_P(SADx4Test, ShortSrc) {
  int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  int test_count = 1000;
  while (test_count > 0) {
    FillRandom(source_data_, source_stride_);
    FillRandom(GetReference(0), reference_stride_);
    FillRandom(GetReference(1), reference_stride_);
    FillRandom(GetReference(2), reference_stride_);
    FillRandom(GetReference(3), reference_stride_);
    CheckSADs();
    test_count -= 1;
  }
  source_stride_ = tmp_stride;
}

TEST_P(SADx4Test, SrcAlignedByWidth) {
  uint16_t *tmp_source_data = source_data_;
  source_data_ += width_;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  CheckSADs();
  source_data_ = tmp_source_data;
}

TEST_P(SADx4Test, DISABLED_Speed) {
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  SpeedSAD();
}

// SADSkipx4
TEST_P(SADSkipx4Test, MaxRef) {
  FillConstant(source_data_, source_stride_, 0);
  FillConstant(GetReference(0), reference_stride_, mask_);
  FillConstant(GetReference(1), reference_stride_, mask_);
  FillConstant(GetReference(2), reference_stride_, mask_);
  FillConstant(GetReference(3), reference_stride_, mask_);
  CheckSADs();
}

TEST_P(SADSkipx4Test, MaxSrc) {
  FillConstant(source_data_, source_stride_, mask_);
  FillConstant(GetReference(0), reference_stride_, 0);
  FillConstant(GetReference(1), reference_stride_, 0);
  FillConstant(GetReference(2), reference_stride_, 0);
  FillConstant(GetReference(3), reference_stride_, 0);
  CheckSADs();
}

TEST_P(SADSkipx4Test, ShortRef) {
  int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  CheckSADs();
  reference_stride_ = tmp_stride;
}

TEST_P(SADSkipx4Test, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  CheckSADs();
  reference_stride_ = tmp_stride;
}

TEST_P(SADSkipx4Test, ShortSrc) {
  int tmp_stride = source_stride_;
  source_stride_ >>= 1;
  int test_count = 1000;
  while (test_count > 0) {
    FillRandom(source_data_, source_stride_);
    FillRandom(GetReference(0), reference_stride_);
    FillRandom(GetReference(1), reference_stride_);
    FillRandom(GetReference(2), reference_stride_);
    FillRandom(GetReference(3), reference_stride_);
    CheckSADs();
    test_count -= 1;
  }
  source_stride_ = tmp_stride;
}

TEST_P(SADSkipx4Test, SrcAlignedByWidth) {
  uint16_t *tmp_source_data = source_data_;
  source_data_ += width_;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  CheckSADs();
  source_data_ = tmp_source_data;
}

TEST_P(SADSkipx4Test, DISABLED_Speed) {
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  SpeedSAD();
}

using std::make_tuple;

TEST_P(SADx4AvgTest, DISABLED_Speed) {
  int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  FillRandom(second_pred_, width_);
  SpeedSAD();
  reference_stride_ = tmp_stride;
}

TEST_P(SADx4AvgTest, MaxRef) {
  FillConstant(source_data_, source_stride_, 0);
  FillConstant(GetReference(0), reference_stride_, mask_);
  FillConstant(GetReference(1), reference_stride_, mask_);
  FillConstant(GetReference(2), reference_stride_, mask_);
  FillConstant(GetReference(3), reference_stride_, mask_);
  FillConstant(second_pred_, width_, 0);
  CheckSADs();
}

TEST_P(SADx4AvgTest, MaxSrc) {
  FillConstant(source_data_, source_stride_, mask_);
  FillConstant(GetReference(0), reference_stride_, 0);
  FillConstant(GetReference(1), reference_stride_, 0);
  FillConstant(GetReference(2), reference_stride_, 0);
  FillConstant(GetReference(3), reference_stride_, 0);
  FillConstant(second_pred_, width_, 0);
  CheckSADs();
}

TEST_P(SADx4AvgTest, ShortRef) {
  int tmp_stride = reference_stride_;
  reference_stride_ >>= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  FillRandom(second_pred_, width_);
  CheckSADs();
  reference_stride_ = tmp_stride;
}

TEST_P(SADx4AvgTest, UnalignedRef) {
  // The reference frame, but not the source frame, may be unaligned for
  // certain types of searches.
  int tmp_stride = reference_stride_;
  reference_stride_ -= 1;
  FillRandom(source_data_, source_stride_);
  FillRandom(GetReference(0), reference_stride_);
  FillRandom(GetReference(1), reference_stride_);
  FillRandom(GetReference(2), reference_stride_);
  FillRandom(GetReference(3), reference_stride_);
  FillRandom(second_pred_, width_);
  CheckSADs();
  reference_stride_ = tmp_stride;
}

//------------------------------------------------------------------------------
// C functions
const SadMxNParam c_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256_c, 8),
  make_tuple(256, 128, &aom_highbd_sad256x128_c, 8),
  make_tuple(128, 256, &aom_highbd_sad128x256_c, 8),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128_c, 8),
  make_tuple(128, 64, &aom_highbd_sad128x64_c, 8),
  make_tuple(64, 128, &aom_highbd_sad64x128_c, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64_c, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32_c, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64_c, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32_c, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16_c, 8),
  make_tuple(16, 32, &aom_highbd_sad16x32_c, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16_c, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8_c, 8),
  make_tuple(8, 16, &aom_highbd_sad8x16_c, 8),
  make_tuple(8, 8, &aom_highbd_sad8x8_c, 8),
  make_tuple(8, 4, &aom_highbd_sad8x4_c, 8),
  make_tuple(4, 8, &aom_highbd_sad4x8_c, 8),
  make_tuple(4, 4, &aom_highbd_sad4x4_c, 8),
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256_c, 10),
  make_tuple(256, 128, &aom_highbd_sad256x128_c, 10),
  make_tuple(128, 256, &aom_highbd_sad128x256_c, 10),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128_c, 10),
  make_tuple(128, 64, &aom_highbd_sad128x64_c, 10),
  make_tuple(64, 128, &aom_highbd_sad64x128_c, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64_c, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32_c, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64_c, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32_c, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16_c, 10),
  make_tuple(16, 32, &aom_highbd_sad16x32_c, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16_c, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8_c, 10),
  make_tuple(8, 16, &aom_highbd_sad8x16_c, 10),
  make_tuple(8, 8, &aom_highbd_sad8x8_c, 10),
  make_tuple(8, 4, &aom_highbd_sad8x4_c, 10),
  make_tuple(4, 8, &aom_highbd_sad4x8_c, 10),
  make_tuple(4, 4, &aom_highbd_sad4x4_c, 10),
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256_c, 12),
  make_tuple(256, 128, &aom_highbd_sad256x128_c, 12),
  make_tuple(128, 256, &aom_highbd_sad128x256_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128_c, 12),
  make_tuple(128, 64, &aom_highbd_sad128x64_c, 12),
  make_tuple(64, 128, &aom_highbd_sad64x128_c, 12),
  make_tuple(64, 64, &aom_highbd_sad64x64_c, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32_c, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64_c, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32_c, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16_c, 12),
  make_tuple(16, 32, &aom_highbd_sad16x32_c, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16_c, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8_c, 12),
  make_tuple(8, 16, &aom_highbd_sad8x16_c, 12),
  make_tuple(8, 8, &aom_highbd_sad8x8_c, 12),
  make_tuple(8, 4, &aom_highbd_sad8x4_c, 12),
  make_tuple(4, 8, &aom_highbd_sad4x8_c, 12),
  make_tuple(4, 4, &aom_highbd_sad4x4_c, 12),
#if CONFIG_SUBBLK_REF_EXT
  make_tuple(12, 12, &aom_highbd_sad12x12_c, 8),
  make_tuple(12, 12, &aom_highbd_sad12x12_c, 10),
  make_tuple(12, 12, &aom_highbd_sad12x12_c, 12),
  make_tuple(12, 20, &aom_highbd_sad12x20_c, 8),
  make_tuple(12, 20, &aom_highbd_sad12x20_c, 10),
  make_tuple(12, 20, &aom_highbd_sad12x20_c, 12),
  make_tuple(20, 12, &aom_highbd_sad20x12_c, 8),
  make_tuple(20, 12, &aom_highbd_sad20x12_c, 10),
  make_tuple(20, 12, &aom_highbd_sad20x12_c, 12),
  make_tuple(20, 20, &aom_highbd_sad20x20_c, 8),
  make_tuple(20, 20, &aom_highbd_sad20x20_c, 10),
  make_tuple(20, 20, &aom_highbd_sad20x20_c, 12),
#endif

  make_tuple(64, 16, &aom_highbd_sad64x16_c, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64_c, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16_c, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64_c, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16_c, 12),
  make_tuple(16, 64, &aom_highbd_sad16x64_c, 12),

  make_tuple(32, 8, &aom_highbd_sad32x8_c, 8),
  make_tuple(8, 32, &aom_highbd_sad8x32_c, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8_c, 10),
  make_tuple(8, 32, &aom_highbd_sad8x32_c, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8_c, 12),
  make_tuple(8, 32, &aom_highbd_sad8x32_c, 12),

  make_tuple(16, 4, &aom_highbd_sad16x4_c, 8),
  make_tuple(4, 16, &aom_highbd_sad4x16_c, 8),
  make_tuple(16, 4, &aom_highbd_sad16x4_c, 10),
  make_tuple(4, 16, &aom_highbd_sad4x16_c, 10),
  make_tuple(16, 4, &aom_highbd_sad16x4_c, 12),
  make_tuple(4, 16, &aom_highbd_sad4x16_c, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(64, 8, &aom_highbd_sad64x8_c, 8),
  make_tuple(8, 64, &aom_highbd_sad8x64_c, 8),
  make_tuple(64, 8, &aom_highbd_sad64x8_c, 10),
  make_tuple(8, 64, &aom_highbd_sad8x64_c, 10),
  make_tuple(64, 8, &aom_highbd_sad64x8_c, 12),
  make_tuple(8, 64, &aom_highbd_sad8x64_c, 12),

  make_tuple(32, 4, &aom_highbd_sad32x4_c, 8),
  make_tuple(4, 32, &aom_highbd_sad4x32_c, 8),
  make_tuple(32, 4, &aom_highbd_sad32x4_c, 10),
  make_tuple(4, 32, &aom_highbd_sad4x32_c, 10),
  make_tuple(32, 4, &aom_highbd_sad32x4_c, 12),
  make_tuple(4, 32, &aom_highbd_sad4x32_c, 12),

  make_tuple(64, 4, &aom_highbd_sad64x4_c, 8),
  make_tuple(4, 64, &aom_highbd_sad4x64_c, 8),
  make_tuple(64, 4, &aom_highbd_sad64x4_c, 10),
  make_tuple(4, 64, &aom_highbd_sad4x64_c, 10),
  make_tuple(64, 4, &aom_highbd_sad64x4_c, 12),
  make_tuple(4, 64, &aom_highbd_sad4x64_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(C, SADTest, ::testing::ValuesIn(c_tests));

const SadSkipMxNParam skip_c_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256_c, 8),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128_c, 8),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256_c, 8),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad_skip_128x128_c, 8),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64_c, 8),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128_c, 8),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_c, 8),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_c, 8),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_c, 8),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_c, 8),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_c, 8),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_c, 8),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_c, 8),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_c, 8),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16_c, 8),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8_c, 8),
  make_tuple(8, 4, &aom_highbd_sad_skip_8x4_c, 8),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8_c, 8),
  make_tuple(4, 4, &aom_highbd_sad_skip_4x4_c, 8),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16_c, 8),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_c, 8),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8_c, 8),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32_c, 8),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4_c, 8),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16_c, 8),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256_c, 10),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128_c, 10),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256_c, 10),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad_skip_128x128_c, 10),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64_c, 10),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128_c, 10),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_c, 10),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_c, 10),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_c, 10),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_c, 10),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_c, 10),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_c, 10),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_c, 10),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_c, 10),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16_c, 10),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8_c, 10),
  make_tuple(8, 4, &aom_highbd_sad_skip_8x4_c, 10),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8_c, 10),
  make_tuple(4, 4, &aom_highbd_sad_skip_4x4_c, 10),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16_c, 10),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_c, 10),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8_c, 10),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32_c, 10),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4_c, 10),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16_c, 10),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256_c, 12),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128_c, 12),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad_skip_128x128_c, 12),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64_c, 12),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128_c, 12),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_c, 12),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_c, 12),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_c, 12),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_c, 12),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_c, 12),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_c, 12),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_c, 12),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_c, 12),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16_c, 12),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8_c, 12),
  make_tuple(8, 4, &aom_highbd_sad_skip_8x4_c, 12),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8_c, 12),
  make_tuple(4, 4, &aom_highbd_sad_skip_4x4_c, 12),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16_c, 12),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_c, 12),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8_c, 12),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32_c, 12),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4_c, 12),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16_c, 12),
};
INSTANTIATE_TEST_SUITE_P(C, SADSkipTest, ::testing::ValuesIn(skip_c_tests));

const SadMxNAvgParam avg_c_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256_avg_c, 8),
  make_tuple(256, 128, &aom_highbd_sad256x128_avg_c, 8),
  make_tuple(128, 256, &aom_highbd_sad128x256_avg_c, 8),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 8),
  make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 8),
  make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 8),
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 8),
  make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 8),
  make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 8),
  make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 8),
  make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 8),
  make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 8),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256_avg_c, 10),
  make_tuple(256, 128, &aom_highbd_sad256x128_avg_c, 10),
  make_tuple(128, 256, &aom_highbd_sad128x256_avg_c, 10),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 10),
  make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 10),
  make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 10),
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 10),
  make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 10),
  make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 10),
  make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 10),
  make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 10),
  make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 10),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256_avg_c, 12),
  make_tuple(256, 128, &aom_highbd_sad256x128_avg_c, 12),
  make_tuple(128, 256, &aom_highbd_sad128x256_avg_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128_avg_c, 12),
  make_tuple(128, 64, &aom_highbd_sad128x64_avg_c, 12),
  make_tuple(64, 128, &aom_highbd_sad64x128_avg_c, 12),
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_c, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_c, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_c, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_c, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_c, 12),
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_c, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_c, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_c, 12),
  make_tuple(8, 16, &aom_highbd_sad8x16_avg_c, 12),
  make_tuple(8, 8, &aom_highbd_sad8x8_avg_c, 12),
  make_tuple(8, 4, &aom_highbd_sad8x4_avg_c, 12),
  make_tuple(4, 8, &aom_highbd_sad4x8_avg_c, 12),
  make_tuple(4, 4, &aom_highbd_sad4x4_avg_c, 12),

  make_tuple(64, 16, &aom_highbd_sad64x16_avg_c, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_c, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16_avg_c, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_c, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16_avg_c, 12),
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_c, 12),

  make_tuple(32, 8, &aom_highbd_sad32x8_avg_c, 8),
  make_tuple(8, 32, &aom_highbd_sad8x32_avg_c, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8_avg_c, 10),
  make_tuple(8, 32, &aom_highbd_sad8x32_avg_c, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8_avg_c, 12),
  make_tuple(8, 32, &aom_highbd_sad8x32_avg_c, 12),

  make_tuple(16, 4, &aom_highbd_sad16x4_avg_c, 8),
  make_tuple(4, 16, &aom_highbd_sad4x16_avg_c, 8),
  make_tuple(16, 4, &aom_highbd_sad16x4_avg_c, 10),
  make_tuple(4, 16, &aom_highbd_sad4x16_avg_c, 10),
  make_tuple(16, 4, &aom_highbd_sad16x4_avg_c, 12),
  make_tuple(4, 16, &aom_highbd_sad4x16_avg_c, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(64, 8, &aom_highbd_sad64x8_avg_c, 8),
  make_tuple(8, 64, &aom_highbd_sad8x64_avg_c, 8),
  make_tuple(64, 8, &aom_highbd_sad64x8_avg_c, 10),
  make_tuple(8, 64, &aom_highbd_sad8x64_avg_c, 10),
  make_tuple(64, 8, &aom_highbd_sad64x8_avg_c, 12),
  make_tuple(8, 64, &aom_highbd_sad8x64_avg_c, 12),

  make_tuple(32, 4, &aom_highbd_sad32x4_avg_c, 8),
  make_tuple(4, 32, &aom_highbd_sad4x32_avg_c, 8),
  make_tuple(32, 4, &aom_highbd_sad32x4_avg_c, 10),
  make_tuple(4, 32, &aom_highbd_sad4x32_avg_c, 10),
  make_tuple(32, 4, &aom_highbd_sad32x4_avg_c, 12),
  make_tuple(4, 32, &aom_highbd_sad4x32_avg_c, 12),

  make_tuple(64, 4, &aom_highbd_sad64x4_avg_c, 8),
  make_tuple(4, 64, &aom_highbd_sad4x64_avg_c, 8),
  make_tuple(64, 4, &aom_highbd_sad64x4_avg_c, 10),
  make_tuple(4, 64, &aom_highbd_sad4x64_avg_c, 10),
  make_tuple(64, 4, &aom_highbd_sad64x4_avg_c, 12),
  make_tuple(4, 64, &aom_highbd_sad4x64_avg_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(C, SADavgTest, ::testing::ValuesIn(avg_c_tests));

const SadMxNx4Param x4d_c_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256x4d_c, 8),
  make_tuple(256, 128, &aom_highbd_sad256x128x4d_c, 8),
  make_tuple(128, 256, &aom_highbd_sad128x256x4d_c, 8),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 8),
  make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 8),
  make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 8),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 8),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 8),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 8),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 8),
  make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 8),
  make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 8),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256x4d_c, 10),
  make_tuple(256, 128, &aom_highbd_sad256x128x4d_c, 10),
  make_tuple(128, 256, &aom_highbd_sad128x256x4d_c, 10),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 10),
  make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 10),
  make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 10),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 10),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 10),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 10),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 10),
  make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 10),
  make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 10),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256x4d_c, 12),
  make_tuple(256, 128, &aom_highbd_sad256x128x4d_c, 12),
  make_tuple(128, 256, &aom_highbd_sad128x256x4d_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad128x128x4d_c, 12),
  make_tuple(128, 64, &aom_highbd_sad128x64x4d_c, 12),
  make_tuple(64, 128, &aom_highbd_sad64x128x4d_c, 12),
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_c, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_c, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_c, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_c, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_c, 12),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_c, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_c, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_c, 12),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_c, 12),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_c, 12),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_c, 12),
  make_tuple(4, 8, &aom_highbd_sad4x8x4d_c, 12),
  make_tuple(4, 4, &aom_highbd_sad4x4x4d_c, 12),

  make_tuple(64, 16, &aom_highbd_sad64x16x4d_c, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64x4d_c, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16x4d_c, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64x4d_c, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16x4d_c, 12),
  make_tuple(16, 64, &aom_highbd_sad16x64x4d_c, 12),

  make_tuple(32, 8, &aom_highbd_sad32x8x4d_c, 8),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_c, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8x4d_c, 10),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_c, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8x4d_c, 12),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_c, 12),

  make_tuple(16, 4, &aom_highbd_sad16x4x4d_c, 8),
  make_tuple(4, 16, &aom_highbd_sad4x16x4d_c, 8),
  make_tuple(16, 4, &aom_highbd_sad16x4x4d_c, 10),
  make_tuple(4, 16, &aom_highbd_sad4x16x4d_c, 10),
  make_tuple(16, 4, &aom_highbd_sad16x4x4d_c, 12),
  make_tuple(4, 16, &aom_highbd_sad4x16x4d_c, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_c, 8),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_c, 8),
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_c, 10),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_c, 10),
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_c, 12),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_c, 12),

  make_tuple(32, 4, &aom_highbd_sad32x4x4d_c, 8),
  make_tuple(4, 32, &aom_highbd_sad4x32x4d_c, 8),
  make_tuple(32, 4, &aom_highbd_sad32x4x4d_c, 10),
  make_tuple(4, 32, &aom_highbd_sad4x32x4d_c, 10),
  make_tuple(32, 4, &aom_highbd_sad32x4x4d_c, 12),
  make_tuple(4, 32, &aom_highbd_sad4x32x4d_c, 12),

  make_tuple(64, 4, &aom_highbd_sad64x4x4d_c, 8),
  make_tuple(4, 64, &aom_highbd_sad4x64x4d_c, 8),
  make_tuple(64, 4, &aom_highbd_sad64x4x4d_c, 10),
  make_tuple(4, 64, &aom_highbd_sad4x64x4d_c, 10),
  make_tuple(64, 4, &aom_highbd_sad64x4x4d_c, 12),
  make_tuple(4, 64, &aom_highbd_sad4x64x4d_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(C, SADx4Test, ::testing::ValuesIn(x4d_c_tests));

const SadMxNx4Param skip_x4d_c_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256x4d_c, 8),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128x4d_c, 8),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256x4d_c, 8),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad_skip_128x128x4d_c, 8),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64x4d_c, 8),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128x4d_c, 8),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_c, 8),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_c, 8),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_c, 8),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_c, 8),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_c, 8),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_c, 8),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_c, 8),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_c, 8),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_c, 8),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_c, 8),
  make_tuple(8, 4, &aom_highbd_sad_skip_8x4x4d_c, 8),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8x4d_c, 8),
  make_tuple(4, 4, &aom_highbd_sad_skip_4x4x4d_c, 8),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_c, 8),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_c, 8),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_c, 8),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_c, 8),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4x4d_c, 8),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16x4d_c, 8),
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32x4d_c, 8),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_c, 8),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_c, 8),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64x4d_c, 8),

  make_tuple(256, 256, &aom_highbd_sad_skip_256x256x4d_c, 10),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128x4d_c, 10),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256x4d_c, 10),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad_skip_128x128x4d_c, 10),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64x4d_c, 10),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128x4d_c, 10),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_c, 10),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_c, 10),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_c, 10),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_c, 10),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_c, 10),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_c, 10),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_c, 10),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_c, 10),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_c, 10),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_c, 10),
  make_tuple(8, 4, &aom_highbd_sad_skip_8x4x4d_c, 10),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8x4d_c, 10),
  make_tuple(4, 4, &aom_highbd_sad_skip_4x4x4d_c, 10),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_c, 10),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_c, 10),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_c, 10),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_c, 10),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4x4d_c, 10),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16x4d_c, 10),
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32x4d_c, 10),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_c, 10),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_c, 10),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64x4d_c, 10),

  make_tuple(256, 256, &aom_highbd_sad_skip_256x256x4d_c, 12),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128x4d_c, 12),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256x4d_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(128, 128, &aom_highbd_sad_skip_128x128x4d_c, 12),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64x4d_c, 12),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128x4d_c, 12),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_c, 12),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_c, 12),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_c, 12),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_c, 12),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_c, 12),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_c, 12),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_c, 12),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_c, 12),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_c, 12),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_c, 12),
  make_tuple(8, 4, &aom_highbd_sad_skip_8x4x4d_c, 12),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8x4d_c, 12),
  make_tuple(4, 4, &aom_highbd_sad_skip_4x4x4d_c, 12),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_c, 12),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_c, 12),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_c, 12),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_c, 12),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4x4d_c, 12),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16x4d_c, 12),
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32x4d_c, 12),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_c, 12),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_c, 12),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64x4d_c, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(C, SADSkipx4Test,
                         ::testing::ValuesIn(skip_x4d_c_tests));
//------------------------------------------------------------------------------
// x86 functions
#if HAVE_SSE2
const SadMxNParam sse2_tests[] = {
  make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 8),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 8),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 8),
  make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 8),
  make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 8),
  make_tuple(4, 8, &aom_highbd_sad4x8_sse2, 8),
  make_tuple(4, 4, &aom_highbd_sad4x4_sse2, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 10),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 10),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 10),
  make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 10),
  make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 10),
  make_tuple(4, 8, &aom_highbd_sad4x8_sse2, 10),
  make_tuple(4, 4, &aom_highbd_sad4x4_sse2, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64_sse2, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32_sse2, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64_sse2, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32_sse2, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16_sse2, 12),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad16x32_sse2, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16_sse2, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8_sse2, 12),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad8x16_sse2, 12),
  make_tuple(8, 8, &aom_highbd_sad8x8_sse2, 12),
  make_tuple(8, 4, &aom_highbd_sad8x4_sse2, 12),
  make_tuple(4, 8, &aom_highbd_sad4x8_sse2, 12),
  make_tuple(4, 4, &aom_highbd_sad4x4_sse2, 12),

  make_tuple(64, 16, &aom_highbd_sad64x16_sse2, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16_sse2, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16_sse2, 12),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 64, &aom_highbd_sad16x64_sse2, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64_sse2, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64_sse2, 12),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(32, 8, &aom_highbd_sad32x8_sse2, 8),
  make_tuple(8, 32, &aom_highbd_sad8x32_sse2, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8_sse2, 10),
  make_tuple(8, 32, &aom_highbd_sad8x32_sse2, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8_sse2, 12),
  make_tuple(8, 32, &aom_highbd_sad8x32_sse2, 12),

#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 4, &aom_highbd_sad16x4_sse2, 8),
  make_tuple(16, 4, &aom_highbd_sad16x4_sse2, 10),
  make_tuple(16, 4, &aom_highbd_sad16x4_sse2, 12),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(4, 16, &aom_highbd_sad4x16_sse2, 8),
  make_tuple(4, 16, &aom_highbd_sad4x16_sse2, 10),
  make_tuple(4, 16, &aom_highbd_sad4x16_sse2, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  // make_tuple(64, 8, &aom_highbd_sad64x8_sse2, -1),
  // make_tuple(8, 64, &aom_highbd_sad8x64_sse2, -1),
  make_tuple(64, 8, &aom_highbd_sad64x8_sse2, 8),
  make_tuple(8, 64, &aom_highbd_sad8x64_sse2, 8),
  make_tuple(64, 8, &aom_highbd_sad64x8_sse2, 10),
  make_tuple(8, 64, &aom_highbd_sad8x64_sse2, 10),
  make_tuple(64, 8, &aom_highbd_sad64x8_sse2, 12),
  make_tuple(8, 64, &aom_highbd_sad8x64_sse2, 12),

  // make_tuple(32, 4, &aom_highbd_sad32x4_sse2, -1),
  // make_tuple(4, 32, &aom_highbd_sad4x32_sse2, -1),
  make_tuple(32, 4, &aom_highbd_sad32x4_sse2, 8),
  make_tuple(4, 32, &aom_highbd_sad4x32_sse2, 8),
  make_tuple(32, 4, &aom_highbd_sad32x4_sse2, 10),
  make_tuple(4, 32, &aom_highbd_sad4x32_sse2, 10),
  make_tuple(32, 4, &aom_highbd_sad32x4_sse2, 12),
  make_tuple(4, 32, &aom_highbd_sad4x32_sse2, 12),

  // make_tuple(64, 4, &aom_highbd_sad64x4_sse2, -1),
  // make_tuple(4, 64, &aom_highbd_sad4x64_sse2, -1),
  make_tuple(64, 4, &aom_highbd_sad64x4_sse2, 8),
  make_tuple(4, 64, &aom_highbd_sad4x64_sse2, 8),
  make_tuple(64, 4, &aom_highbd_sad64x4_sse2, 10),
  make_tuple(4, 64, &aom_highbd_sad4x64_sse2, 10),
  make_tuple(64, 4, &aom_highbd_sad64x4_sse2, 12),
  make_tuple(4, 64, &aom_highbd_sad4x64_sse2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(SSE2, SADTest, ::testing::ValuesIn(sse2_tests));

const SadSkipMxNParam skip_sse2_tests[] = {
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_sse2, 8),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_sse2, 8),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_sse2, 8),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_sse2, 8),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_sse2, 8),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_sse2, 8),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_sse2, 8),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_sse2, 8),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16_sse2, 8),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8_sse2, 8),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8_sse2, 8),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16_sse2, 8),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_sse2, 8),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8_sse2, 8),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32_sse2, 8),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16_sse2, 8),

  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_sse2, 10),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_sse2, 10),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_sse2, 10),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_sse2, 10),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_sse2, 10),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_sse2, 10),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_sse2, 10),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_sse2, 10),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16_sse2, 10),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8_sse2, 10),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8_sse2, 10),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16_sse2, 10),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_sse2, 10),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8_sse2, 10),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32_sse2, 10),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16_sse2, 10),

  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_sse2, 12),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_sse2, 12),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_sse2, 12),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_sse2, 12),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_sse2, 12),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_sse2, 12),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_sse2, 12),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_sse2, 12),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16_sse2, 12),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8_sse2, 12),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8_sse2, 12),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16_sse2, 12),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_sse2, 12),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8_sse2, 12),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32_sse2, 12),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16_sse2, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(32, 4, &aom_highbd_sad_skip_32x4_sse2, 8),
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32_sse2, 8),
  make_tuple(64, 4, &aom_highbd_sad_skip_64x4_sse2, 8),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64_sse2, 8),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8_sse2, 8),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64_sse2, 8),

  make_tuple(32, 4, &aom_highbd_sad_skip_32x4_sse2, 10),
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32_sse2, 10),
  make_tuple(64, 4, &aom_highbd_sad_skip_64x4_sse2, 10),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64_sse2, 10),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8_sse2, 10),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64_sse2, 10),

  make_tuple(32, 4, &aom_highbd_sad_skip_32x4_sse2, 12),
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32_sse2, 12),
  make_tuple(64, 4, &aom_highbd_sad_skip_64x4_sse2, 12),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64_sse2, 12),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8_sse2, 12),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64_sse2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(SSE2, SADSkipTest,
                         ::testing::ValuesIn(skip_sse2_tests));

const SadMxNAvgParam avg_sse2_tests[] = {
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 8),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 8),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 8),
  make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 8),
  make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 8),
  make_tuple(4, 8, &aom_highbd_sad4x8_avg_sse2, 8),
  make_tuple(4, 4, &aom_highbd_sad4x4_avg_sse2, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 10),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 10),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 10),
  make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 10),
  make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 10),
  make_tuple(4, 8, &aom_highbd_sad4x8_avg_sse2, 10),
  make_tuple(4, 4, &aom_highbd_sad4x4_avg_sse2, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_sse2, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_sse2, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_sse2, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_sse2, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_sse2, 12),
#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_sse2, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_sse2, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_sse2, 12),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(8, 16, &aom_highbd_sad8x16_avg_sse2, 12),
  make_tuple(8, 8, &aom_highbd_sad8x8_avg_sse2, 12),
  make_tuple(8, 4, &aom_highbd_sad8x4_avg_sse2, 12),
  make_tuple(4, 8, &aom_highbd_sad4x8_avg_sse2, 12),
  make_tuple(4, 4, &aom_highbd_sad4x4_avg_sse2, 12),

  make_tuple(64, 16, &aom_highbd_sad64x16_avg_sse2, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16_avg_sse2, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16_avg_sse2, 12),

#if !CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_sse2, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_sse2, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_sse2, 12),
#endif  // !CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(32, 8, &aom_highbd_sad32x8_avg_sse2, 8),
  make_tuple(8, 32, &aom_highbd_sad8x32_avg_sse2, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8_avg_sse2, 10),
  make_tuple(8, 32, &aom_highbd_sad8x32_avg_sse2, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8_avg_sse2, 12),
  make_tuple(8, 32, &aom_highbd_sad8x32_avg_sse2, 12),

#if !CONFIG_COMPOUND_4XN
  make_tuple(16, 4, &aom_highbd_sad16x4_avg_sse2, 8),
#endif  // !CONFIG_COMPOUND_4XN
  make_tuple(4, 16, &aom_highbd_sad4x16_avg_sse2, 8),
#if !CONFIG_COMPOUND_4XN
  make_tuple(16, 4, &aom_highbd_sad16x4_avg_sse2, 10),
#endif  // !CONFIG_COMPOUND_4XN
  make_tuple(4, 16, &aom_highbd_sad4x16_avg_sse2, 10),
#if !CONFIG_COMPOUND_4XN
  make_tuple(16, 4, &aom_highbd_sad16x4_avg_sse2, 12),
#endif  // !CONFIG_COMPOUND_4XN
  make_tuple(4, 16, &aom_highbd_sad4x16_avg_sse2, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  // make_tuple(64, 8, &aom_highbd_sad64x8_avg_sse2, -1),
  // make_tuple(8, 64, &aom_highbd_sad8x64_avg_sse2, -1),
  make_tuple(64, 8, &aom_highbd_sad64x8_avg_sse2, 8),
  make_tuple(8, 64, &aom_highbd_sad8x64_avg_sse2, 8),
  make_tuple(64, 8, &aom_highbd_sad64x8_avg_sse2, 10),
  make_tuple(8, 64, &aom_highbd_sad8x64_avg_sse2, 10),
  make_tuple(64, 8, &aom_highbd_sad64x8_avg_sse2, 12),
  make_tuple(8, 64, &aom_highbd_sad8x64_avg_sse2, 12),

  // make_tuple(32, 4, &aom_highbd_sad32x4_avg_sse2, -1),
  // make_tuple(4, 32, &aom_highbd_sad4x32_avg_sse2, -1),
  make_tuple(32, 4, &aom_highbd_sad32x4_avg_sse2, 8),
  // make_tuple(4, 32, &aom_highbd_sad4x32_avg_sse2, 8),
  make_tuple(32, 4, &aom_highbd_sad32x4_avg_sse2, 10),
  // make_tuple(4, 32, &aom_highbd_sad4x32_avg_sse2, 10),
  make_tuple(32, 4, &aom_highbd_sad32x4_avg_sse2, 12),
  // make_tuple(4, 32, &aom_highbd_sad4x32_avg_sse2, 12),

  // make_tuple(64, 4, &aom_highbd_sad64x4_avg_sse2, -1),
  // make_tuple(4, 64, &aom_highbd_sad4x64_avg_sse2, -1),
  make_tuple(64, 4, &aom_highbd_sad64x4_avg_sse2, 8),
  // make_tuple(4, 64, &aom_highbd_sad4x64_avg_sse2, 8),
  make_tuple(64, 4, &aom_highbd_sad64x4_avg_sse2, 10),
  // make_tuple(4, 64, &aom_highbd_sad4x64_avg_sse2, 10),
  make_tuple(64, 4, &aom_highbd_sad64x4_avg_sse2, 12),
// make_tuple(4, 64, &aom_highbd_sad4x64_avg_sse2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(SSE2, SADavgTest, ::testing::ValuesIn(avg_sse2_tests));

const SadMxNx4Param x4d_sse2_tests[] = {
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 8),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 8),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 8),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 8),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 8),
  make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 8),
  make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 10),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 10),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 10),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 10),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 10),
  make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 10),
  make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_sse2, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_sse2, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_sse2, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_sse2, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_sse2, 12),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_sse2, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_sse2, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_sse2, 12),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_sse2, 12),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_sse2, 12),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_sse2, 12),
  make_tuple(4, 8, &aom_highbd_sad4x8x4d_sse2, 12),
  make_tuple(4, 4, &aom_highbd_sad4x4x4d_sse2, 12),

  make_tuple(64, 16, &aom_highbd_sad64x16x4d_sse2, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64x4d_sse2, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16x4d_sse2, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64x4d_sse2, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16x4d_sse2, 12),
  make_tuple(16, 64, &aom_highbd_sad16x64x4d_sse2, 12),

  make_tuple(32, 8, &aom_highbd_sad32x8x4d_sse2, 8),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_sse2, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8x4d_sse2, 10),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_sse2, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8x4d_sse2, 12),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_sse2, 12),

  make_tuple(16, 4, &aom_highbd_sad16x4x4d_sse2, 8),
  make_tuple(4, 16, &aom_highbd_sad4x16x4d_sse2, 8),
  make_tuple(16, 4, &aom_highbd_sad16x4x4d_sse2, 10),
  make_tuple(4, 16, &aom_highbd_sad4x16x4d_sse2, 10),
  make_tuple(16, 4, &aom_highbd_sad16x4x4d_sse2, 12),
  make_tuple(4, 16, &aom_highbd_sad4x16x4d_sse2, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  // make_tuple(64, 8, &aom_highbd_sad64x8x4d_sse2, -1),
  // make_tuple(8, 64, &aom_highbd_sad8x64x4d_sse2, -1),
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_sse2, 8),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_sse2, 8),
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_sse2, 10),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_sse2, 10),
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_sse2, 12),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_sse2, 12),

  // make_tuple(32, 4, &aom_highbd_sad32x4x4d_sse2, -1),
  // make_tuple(4, 32, &aom_highbd_sad4x32x4d_sse2, -1),
  make_tuple(32, 4, &aom_highbd_sad32x4x4d_sse2, 8),
  make_tuple(4, 32, &aom_highbd_sad4x32x4d_sse2, 8),
  make_tuple(32, 4, &aom_highbd_sad32x4x4d_sse2, 10),
  make_tuple(4, 32, &aom_highbd_sad4x32x4d_sse2, 10),
  make_tuple(32, 4, &aom_highbd_sad32x4x4d_sse2, 12),
  make_tuple(4, 32, &aom_highbd_sad4x32x4d_sse2, 12),

  // make_tuple(64, 4, &aom_highbd_sad64x4x4d_sse2, -1),
  // make_tuple(4, 64, &aom_highbd_sad4x64x4d_sse2, -1),
  make_tuple(64, 4, &aom_highbd_sad64x4x4d_sse2, 8),
  make_tuple(4, 64, &aom_highbd_sad4x64x4d_sse2, 8),
  make_tuple(64, 4, &aom_highbd_sad64x4x4d_sse2, 10),
  make_tuple(4, 64, &aom_highbd_sad4x64x4d_sse2, 10),
  make_tuple(64, 4, &aom_highbd_sad64x4x4d_sse2, 12),
  make_tuple(4, 64, &aom_highbd_sad4x64x4d_sse2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(SSE2, SADx4Test, ::testing::ValuesIn(x4d_sse2_tests));

const SadSkipMxNx4Param skip_x4d_sse2_tests[] = {
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_sse2, 8),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_sse2, 8),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_sse2, 8),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_sse2, 8),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_sse2, 8),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_sse2, 8),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_sse2, 8),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_sse2, 8),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_sse2, 8),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_sse2, 8),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8x4d_sse2, 8),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_sse2, 8),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_sse2, 8),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_sse2, 8),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_sse2, 8),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16x4d_sse2, 8),
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32x4d_sse2, 8),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_sse2, 8),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_sse2, 8),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64x4d_sse2, 8),
#endif  // CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_sse2, 10),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_sse2, 10),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_sse2, 10),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_sse2, 10),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_sse2, 10),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_sse2, 10),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_sse2, 10),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_sse2, 10),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_sse2, 10),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_sse2, 10),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8x4d_sse2, 10),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_sse2, 10),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_sse2, 10),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_sse2, 10),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_sse2, 10),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16x4d_sse2, 10),
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32x4d_sse2, 10),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_sse2, 10),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_sse2, 10),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64x4d_sse2, 10),
#endif  // CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_sse2, 12),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_sse2, 12),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_sse2, 12),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_sse2, 12),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_sse2, 12),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_sse2, 12),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_sse2, 12),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_sse2, 12),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_sse2, 12),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_sse2, 12),
  make_tuple(4, 8, &aom_highbd_sad_skip_4x8x4d_sse2, 12),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_sse2, 12),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_sse2, 12),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_sse2, 12),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_sse2, 12),
  make_tuple(4, 16, &aom_highbd_sad_skip_4x16x4d_sse2, 12),
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(4, 32, &aom_highbd_sad_skip_4x32x4d_sse2, 12),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_sse2, 12),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_sse2, 12),
  make_tuple(4, 64, &aom_highbd_sad_skip_4x64x4d_sse2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(SSE2, SADSkipx4Test,
                         ::testing::ValuesIn(skip_x4d_sse2_tests));
#endif  // HAVE_SSE2

#if HAVE_AVX2
const SadMxNParam avx2_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256_avx2, 8),
  make_tuple(256, 128, &aom_highbd_sad256x128_avx2, 8),
  make_tuple(128, 256, &aom_highbd_sad128x256_avx2, 8),
  make_tuple(256, 256, &aom_highbd_sad256x256_avx2, 10),
  make_tuple(256, 128, &aom_highbd_sad256x128_avx2, 10),
  make_tuple(128, 256, &aom_highbd_sad128x256_avx2, 10),
  make_tuple(256, 256, &aom_highbd_sad256x256_avx2, 12),
  make_tuple(256, 128, &aom_highbd_sad256x128_avx2, 12),
  make_tuple(128, 256, &aom_highbd_sad128x256_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 8),
  make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 10),
  make_tuple(128, 128, &aom_highbd_sad128x128_avx2, 12),
  make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 8),
  make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 10),
  make_tuple(128, 64, &aom_highbd_sad128x64_avx2, 12),
  make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 8),
  make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 10),
  make_tuple(64, 128, &aom_highbd_sad64x128_avx2, 12),
  make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64_avx2, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32_avx2, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64_avx2, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32_avx2, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16_avx2, 12),
  make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 8),
  make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 10),
  make_tuple(16, 32, &aom_highbd_sad16x32_avx2, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16_avx2, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8_avx2, 12),
#if CONFIG_SUBBLK_REF_EXT
  make_tuple(12, 12, &aom_highbd_sad12x12_avx2, 8),
  make_tuple(12, 12, &aom_highbd_sad12x12_avx2, 10),
  make_tuple(12, 12, &aom_highbd_sad12x12_avx2, 12),
  make_tuple(12, 20, &aom_highbd_sad12x20_avx2, 8),
  make_tuple(12, 20, &aom_highbd_sad12x20_avx2, 10),
  make_tuple(12, 20, &aom_highbd_sad12x20_avx2, 12),
  make_tuple(20, 12, &aom_highbd_sad20x12_avx2, 8),
  make_tuple(20, 12, &aom_highbd_sad20x12_avx2, 10),
  make_tuple(20, 12, &aom_highbd_sad20x12_avx2, 12),
  make_tuple(20, 20, &aom_highbd_sad20x20_avx2, 8),
  make_tuple(20, 20, &aom_highbd_sad20x20_avx2, 10),
  make_tuple(20, 20, &aom_highbd_sad20x20_avx2, 12),
#endif

  make_tuple(64, 16, &aom_highbd_sad64x16_avx2, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16_avx2, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16_avx2, 12),
  make_tuple(16, 64, &aom_highbd_sad16x64_avx2, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64_avx2, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64_avx2, 12),
  make_tuple(32, 8, &aom_highbd_sad32x8_avx2, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8_avx2, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8_avx2, 12),
  make_tuple(16, 4, &aom_highbd_sad16x4_avx2, 8),
  make_tuple(16, 4, &aom_highbd_sad16x4_avx2, 10),
  make_tuple(16, 4, &aom_highbd_sad16x4_avx2, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(64, 4, &aom_highbd_sad64x4_avx2, 8),
  make_tuple(64, 8, &aom_highbd_sad64x8_avx2, 8),
  make_tuple(32, 4, &aom_highbd_sad32x4_avx2, 8),

  make_tuple(64, 4, &aom_highbd_sad64x4_avx2, 10),
  make_tuple(64, 8, &aom_highbd_sad64x8_avx2, 10),
  make_tuple(32, 4, &aom_highbd_sad32x4_avx2, 10),

  make_tuple(64, 4, &aom_highbd_sad64x4_avx2, 12),
  make_tuple(64, 8, &aom_highbd_sad64x8_avx2, 12),
  make_tuple(32, 4, &aom_highbd_sad32x4_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(AVX2, SADTest, ::testing::ValuesIn(avx2_tests));

const SadSkipMxNParam skip_avx2_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256_avx2, 8),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128_avx2, 8),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256_avx2, 8),
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256_avx2, 10),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128_avx2, 10),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256_avx2, 10),
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256_avx2, 12),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128_avx2, 12),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(128, 128, &aom_highbd_sad_skip_128x128_avx2, 8),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64_avx2, 8),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128_avx2, 8),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_avx2, 8),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_avx2, 8),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_avx2, 8),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_avx2, 8),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_avx2, 8),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_avx2, 8),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_avx2, 8),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_avx2, 8),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_avx2, 8),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4_avx2, 8),

  make_tuple(128, 128, &aom_highbd_sad_skip_128x128_avx2, 10),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64_avx2, 10),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128_avx2, 10),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_avx2, 10),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_avx2, 10),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_avx2, 10),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_avx2, 10),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_avx2, 10),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_avx2, 10),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_avx2, 10),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_avx2, 10),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_avx2, 10),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4_avx2, 10),

  make_tuple(128, 128, &aom_highbd_sad_skip_128x128_avx2, 12),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64_avx2, 12),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128_avx2, 12),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64_avx2, 12),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32_avx2, 12),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64_avx2, 12),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32_avx2, 12),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16_avx2, 12),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64_avx2, 12),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32_avx2, 12),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16_avx2, 12),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8_avx2, 12),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4_avx2, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(64, 4, &aom_highbd_sad_skip_64x4_avx2, 8),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8_avx2, 8),
  make_tuple(32, 4, &aom_highbd_sad_skip_32x4_avx2, 8),

  make_tuple(64, 4, &aom_highbd_sad_skip_64x4_avx2, 10),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8_avx2, 10),
  make_tuple(32, 4, &aom_highbd_sad_skip_32x4_avx2, 10),

  make_tuple(64, 4, &aom_highbd_sad_skip_64x4_avx2, 12),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8_avx2, 12),
  make_tuple(32, 4, &aom_highbd_sad_skip_32x4_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(AVX2, SADSkipTest,
                         ::testing::ValuesIn(skip_avx2_tests));

const SadMxNAvgParam avg_avx2_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256_avg_avx2, 8),
  make_tuple(256, 128, &aom_highbd_sad256x128_avg_avx2, 8),
  make_tuple(128, 256, &aom_highbd_sad128x256_avg_avx2, 8),
  make_tuple(256, 256, &aom_highbd_sad256x256_avg_avx2, 10),
  make_tuple(256, 128, &aom_highbd_sad256x128_avg_avx2, 10),
  make_tuple(128, 256, &aom_highbd_sad128x256_avg_avx2, 10),
  make_tuple(256, 256, &aom_highbd_sad256x256_avg_avx2, 12),
  make_tuple(256, 128, &aom_highbd_sad256x128_avg_avx2, 12),
  make_tuple(128, 256, &aom_highbd_sad128x256_avg_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 8),
  make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 10),
  make_tuple(128, 128, &aom_highbd_sad128x128_avg_avx2, 12),
  make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 8),
  make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 10),
  make_tuple(128, 64, &aom_highbd_sad128x64_avg_avx2, 12),
  make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 8),
  make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 10),
  make_tuple(64, 128, &aom_highbd_sad64x128_avg_avx2, 12),
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64_avg_avx2, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32_avg_avx2, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64_avg_avx2, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32_avg_avx2, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16_avg_avx2, 12),
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 8),
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 10),
  make_tuple(16, 32, &aom_highbd_sad16x32_avg_avx2, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16_avg_avx2, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8_avg_avx2, 12),

  make_tuple(64, 16, &aom_highbd_sad64x16_avg_avx2, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16_avg_avx2, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16_avg_avx2, 12),
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_avx2, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_avx2, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64_avg_avx2, 12),
  make_tuple(32, 8, &aom_highbd_sad32x8_avg_avx2, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8_avg_avx2, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8_avg_avx2, 12),
  make_tuple(16, 4, &aom_highbd_sad16x4_avg_avx2, 8),
  make_tuple(16, 4, &aom_highbd_sad16x4_avg_avx2, 10),
  make_tuple(16, 4, &aom_highbd_sad16x4_avg_avx2, 12),
};
INSTANTIATE_TEST_SUITE_P(AVX2, SADavgTest, ::testing::ValuesIn(avg_avx2_tests));

const SadSkipMxNx4Param skip_x4d_avx2_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256x4d_avx2, 8),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128x4d_avx2, 8),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256x4d_avx2, 8),
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256x4d_avx2, 10),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128x4d_avx2, 10),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256x4d_avx2, 10),
  make_tuple(256, 256, &aom_highbd_sad_skip_256x256x4d_avx2, 12),
  make_tuple(256, 128, &aom_highbd_sad_skip_256x128x4d_avx2, 12),
  make_tuple(128, 256, &aom_highbd_sad_skip_128x256x4d_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(128, 128, &aom_highbd_sad_skip_128x128x4d_avx2, 8),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64x4d_avx2, 8),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128x4d_avx2, 8),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_avx2, 8),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_avx2, 8),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_avx2, 8),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_avx2, 8),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_avx2, 8),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_avx2, 8),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_avx2, 8),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_avx2, 8),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_avx2, 8),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_avx2, 8),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_avx2, 8),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_avx2, 8),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_avx2, 8),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_avx2, 8),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4x4d_avx2, 8),

  make_tuple(128, 128, &aom_highbd_sad_skip_128x128x4d_avx2, 10),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64x4d_avx2, 10),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128x4d_avx2, 10),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_avx2, 10),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_avx2, 10),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_avx2, 10),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_avx2, 10),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_avx2, 10),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_avx2, 10),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_avx2, 10),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_avx2, 10),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_avx2, 10),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_avx2, 10),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_avx2, 10),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_avx2, 10),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_avx2, 10),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_avx2, 10),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4x4d_avx2, 10),

  make_tuple(128, 128, &aom_highbd_sad_skip_128x128x4d_avx2, 12),
  make_tuple(128, 64, &aom_highbd_sad_skip_128x64x4d_avx2, 12),
  make_tuple(64, 128, &aom_highbd_sad_skip_64x128x4d_avx2, 12),
  make_tuple(64, 64, &aom_highbd_sad_skip_64x64x4d_avx2, 12),
  make_tuple(64, 32, &aom_highbd_sad_skip_64x32x4d_avx2, 12),
  make_tuple(64, 16, &aom_highbd_sad_skip_64x16x4d_avx2, 12),
  make_tuple(32, 64, &aom_highbd_sad_skip_32x64x4d_avx2, 12),
  make_tuple(32, 32, &aom_highbd_sad_skip_32x32x4d_avx2, 12),
  make_tuple(32, 16, &aom_highbd_sad_skip_32x16x4d_avx2, 12),
  make_tuple(32, 8, &aom_highbd_sad_skip_32x8x4d_avx2, 12),
  make_tuple(8, 32, &aom_highbd_sad_skip_8x32x4d_avx2, 12),
  make_tuple(16, 64, &aom_highbd_sad_skip_16x64x4d_avx2, 12),
  make_tuple(16, 32, &aom_highbd_sad_skip_16x32x4d_avx2, 12),
  make_tuple(16, 16, &aom_highbd_sad_skip_16x16x4d_avx2, 12),
  make_tuple(16, 8, &aom_highbd_sad_skip_16x8x4d_avx2, 12),
  make_tuple(8, 16, &aom_highbd_sad_skip_8x16x4d_avx2, 12),
  make_tuple(8, 8, &aom_highbd_sad_skip_8x8x4d_avx2, 12),
  make_tuple(16, 4, &aom_highbd_sad_skip_16x4x4d_avx2, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(64, 4, &aom_highbd_sad_skip_64x4x4d_avx2, 8),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_avx2, 8),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_avx2, 8),
  make_tuple(32, 4, &aom_highbd_sad_skip_32x4x4d_avx2, 8),

  make_tuple(64, 4, &aom_highbd_sad_skip_64x4x4d_avx2, 10),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_avx2, 10),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_avx2, 10),
  make_tuple(32, 4, &aom_highbd_sad_skip_32x4x4d_avx2, 10),

  make_tuple(64, 4, &aom_highbd_sad_skip_64x4x4d_avx2, 12),
  make_tuple(64, 8, &aom_highbd_sad_skip_64x8x4d_avx2, 12),
  make_tuple(8, 64, &aom_highbd_sad_skip_8x64x4d_avx2, 12),
  make_tuple(32, 4, &aom_highbd_sad_skip_32x4x4d_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(AVX2, SADSkipx4Test,
                         ::testing::ValuesIn(skip_x4d_avx2_tests));

const SadMxNx4Param x4d_avx2_tests[] = {
#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(256, 256, &aom_highbd_sad256x256x4d_avx2, 8),
  make_tuple(256, 128, &aom_highbd_sad256x128x4d_avx2, 8),
  make_tuple(128, 256, &aom_highbd_sad128x256x4d_avx2, 8),
  make_tuple(256, 256, &aom_highbd_sad256x256x4d_avx2, 10),
  make_tuple(256, 128, &aom_highbd_sad256x128x4d_avx2, 10),
  make_tuple(128, 256, &aom_highbd_sad128x256x4d_avx2, 10),
  make_tuple(256, 256, &aom_highbd_sad256x256x4d_avx2, 12),
  make_tuple(256, 128, &aom_highbd_sad256x128x4d_avx2, 12),
  make_tuple(128, 256, &aom_highbd_sad128x256x4d_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS

  make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 8),
  make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 10),
  make_tuple(128, 128, &aom_highbd_sad128x128x4d_avx2, 12),
  make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 8),
  make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 10),
  make_tuple(128, 64, &aom_highbd_sad128x64x4d_avx2, 12),
  make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 8),
  make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 10),
  make_tuple(64, 128, &aom_highbd_sad64x128x4d_avx2, 12),
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 8),
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 10),
  make_tuple(64, 64, &aom_highbd_sad64x64x4d_avx2, 12),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 8),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 10),
  make_tuple(64, 32, &aom_highbd_sad64x32x4d_avx2, 12),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 8),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 10),
  make_tuple(32, 64, &aom_highbd_sad32x64x4d_avx2, 12),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 8),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 10),
  make_tuple(32, 32, &aom_highbd_sad32x32x4d_avx2, 12),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 8),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 10),
  make_tuple(32, 16, &aom_highbd_sad32x16x4d_avx2, 12),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 8),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 10),
  make_tuple(16, 32, &aom_highbd_sad16x32x4d_avx2, 12),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 8),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 10),
  make_tuple(16, 16, &aom_highbd_sad16x16x4d_avx2, 12),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 8),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 10),
  make_tuple(16, 8, &aom_highbd_sad16x8x4d_avx2, 12),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_avx2, 8),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_avx2, 10),
  make_tuple(8, 16, &aom_highbd_sad8x16x4d_avx2, 12),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_avx2, 8),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_avx2, 10),
  make_tuple(8, 8, &aom_highbd_sad8x8x4d_avx2, 12),

  make_tuple(16, 64, &aom_highbd_sad16x64x4d_avx2, 8),
  make_tuple(16, 64, &aom_highbd_sad16x64x4d_avx2, 10),
  make_tuple(16, 64, &aom_highbd_sad16x64x4d_avx2, 12),
  make_tuple(64, 16, &aom_highbd_sad64x16x4d_avx2, 8),
  make_tuple(64, 16, &aom_highbd_sad64x16x4d_avx2, 10),
  make_tuple(64, 16, &aom_highbd_sad64x16x4d_avx2, 12),
  make_tuple(32, 8, &aom_highbd_sad32x8x4d_avx2, 8),
  make_tuple(32, 8, &aom_highbd_sad32x8x4d_avx2, 10),
  make_tuple(32, 8, &aom_highbd_sad32x8x4d_avx2, 12),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_avx2, 8),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_avx2, 10),
  make_tuple(8, 32, &aom_highbd_sad8x32x4d_avx2, 12),
  make_tuple(16, 4, &aom_highbd_sad16x4x4d_avx2, 8),
  make_tuple(16, 4, &aom_highbd_sad16x4x4d_avx2, 10),
  make_tuple(16, 4, &aom_highbd_sad16x4x4d_avx2, 12),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_avx2, 8),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_avx2, 10),
  make_tuple(8, 4, &aom_highbd_sad8x4x4d_avx2, 12),

#if CONFIG_EXT_RECUR_PARTITIONS
  make_tuple(64, 4, &aom_highbd_sad64x4x4d_avx2, 8),
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_avx2, 8),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_avx2, 8),
  make_tuple(32, 4, &aom_highbd_sad32x4x4d_avx2, 8),

  make_tuple(64, 4, &aom_highbd_sad64x4x4d_avx2, 10),
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_avx2, 10),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_avx2, 10),
  make_tuple(32, 4, &aom_highbd_sad32x4x4d_avx2, 10),

  make_tuple(64, 4, &aom_highbd_sad64x4x4d_avx2, 12),
  make_tuple(64, 8, &aom_highbd_sad64x8x4d_avx2, 12),
  make_tuple(8, 64, &aom_highbd_sad8x64x4d_avx2, 12),
  make_tuple(32, 4, &aom_highbd_sad32x4x4d_avx2, 12),
#endif  // CONFIG_EXT_RECUR_PARTITIONS
};
INSTANTIATE_TEST_SUITE_P(AVX2, SADx4Test, ::testing::ValuesIn(x4d_avx2_tests));
#endif  // HAVE_AVX2

}  // namespace
