11b362b15af34006e6a11974088a46d42b903418eJohann/*
21b362b15af34006e6a11974088a46d42b903418eJohann *  Copyright (c) 2012 The WebM project authors. All Rights Reserved.
31b362b15af34006e6a11974088a46d42b903418eJohann *
41b362b15af34006e6a11974088a46d42b903418eJohann *  Use of this source code is governed by a BSD-style license
51b362b15af34006e6a11974088a46d42b903418eJohann *  that can be found in the LICENSE file in the root of the source
61b362b15af34006e6a11974088a46d42b903418eJohann *  tree. An additional intellectual property rights grant can be found
71b362b15af34006e6a11974088a46d42b903418eJohann *  in the file PATENTS.  All contributing project authors may
81b362b15af34006e6a11974088a46d42b903418eJohann *  be found in the AUTHORS file in the root of the source tree.
91b362b15af34006e6a11974088a46d42b903418eJohann */
101b362b15af34006e6a11974088a46d42b903418eJohann
111b362b15af34006e6a11974088a46d42b903418eJohann#include <string.h>
121b362b15af34006e6a11974088a46d42b903418eJohann#include <limits.h>
131b362b15af34006e6a11974088a46d42b903418eJohann#include <stdio.h>
141b362b15af34006e6a11974088a46d42b903418eJohann
157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "third_party/googletest/src/include/gtest/gtest.h"
161b362b15af34006e6a11974088a46d42b903418eJohann
177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "./vpx_config.h"
187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "./vpx_dsp_rtcd.h"
191b362b15af34006e6a11974088a46d42b903418eJohann#include "test/acm_random.h"
20ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "test/clear_system_state.h"
21ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#include "test/register_state_check.h"
221b362b15af34006e6a11974088a46d42b903418eJohann#include "test/util.h"
237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx/vpx_codec.h"
247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx_mem/vpx_mem.h"
257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#include "vpx_ports/mem.h"
261b362b15af34006e6a11974088a46d42b903418eJohann
277bc9febe8749e98a3812a0dc4380ceae75c29450Johanntemplate <typename Function>
287bc9febe8749e98a3812a0dc4380ceae75c29450Johannstruct TestParams {
297bc9febe8749e98a3812a0dc4380ceae75c29450Johann  TestParams(int w, int h, Function f, int bd = -1)
307bc9febe8749e98a3812a0dc4380ceae75c29450Johann      : width(w), height(h), bit_depth(bd), func(f) {}
317bc9febe8749e98a3812a0dc4380ceae75c29450Johann  int width, height, bit_depth;
327bc9febe8749e98a3812a0dc4380ceae75c29450Johann  Function func;
337bc9febe8749e98a3812a0dc4380ceae75c29450Johann};
347bc9febe8749e98a3812a0dc4380ceae75c29450Johann
357bc9febe8749e98a3812a0dc4380ceae75c29450Johanntypedef unsigned int (*SadMxNFunc)(const uint8_t *src_ptr, int src_stride,
367bc9febe8749e98a3812a0dc4380ceae75c29450Johann                                   const uint8_t *ref_ptr, int ref_stride);
377bc9febe8749e98a3812a0dc4380ceae75c29450Johanntypedef TestParams<SadMxNFunc> SadMxNParam;
387bc9febe8749e98a3812a0dc4380ceae75c29450Johann
397bc9febe8749e98a3812a0dc4380ceae75c29450Johanntypedef unsigned int (*SadMxNAvgFunc)(const uint8_t *src_ptr, int src_stride,
407bc9febe8749e98a3812a0dc4380ceae75c29450Johann                                      const uint8_t *ref_ptr, int ref_stride,
417bc9febe8749e98a3812a0dc4380ceae75c29450Johann                                      const uint8_t *second_pred);
427bc9febe8749e98a3812a0dc4380ceae75c29450Johanntypedef TestParams<SadMxNAvgFunc> SadMxNAvgParam;
437bc9febe8749e98a3812a0dc4380ceae75c29450Johann
447bc9febe8749e98a3812a0dc4380ceae75c29450Johanntypedef void (*SadMxNx4Func)(const uint8_t *src_ptr, int src_stride,
457bc9febe8749e98a3812a0dc4380ceae75c29450Johann                             const uint8_t *const ref_ptr[], int ref_stride,
467bc9febe8749e98a3812a0dc4380ceae75c29450Johann                             unsigned int *sad_array);
477bc9febe8749e98a3812a0dc4380ceae75c29450Johanntypedef TestParams<SadMxNx4Func> SadMxNx4Param;
481b362b15af34006e6a11974088a46d42b903418eJohann
491b362b15af34006e6a11974088a46d42b903418eJohannusing libvpx_test::ACMRandom;
501b362b15af34006e6a11974088a46d42b903418eJohann
511b362b15af34006e6a11974088a46d42b903418eJohannnamespace {
527bc9febe8749e98a3812a0dc4380ceae75c29450Johanntemplate <typename ParamType>
537bc9febe8749e98a3812a0dc4380ceae75c29450Johannclass SADTestBase : public ::testing::TestWithParam<ParamType> {
541b362b15af34006e6a11974088a46d42b903418eJohann public:
557bc9febe8749e98a3812a0dc4380ceae75c29450Johann  explicit SADTestBase(const ParamType &params) : params_(params) {}
56ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
577bc9febe8749e98a3812a0dc4380ceae75c29450Johann  virtual void SetUp() {
587bc9febe8749e98a3812a0dc4380ceae75c29450Johann    source_data8_ = reinterpret_cast<uint8_t *>(
59ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang        vpx_memalign(kDataAlignment, kDataBlockSize));
607bc9febe8749e98a3812a0dc4380ceae75c29450Johann    reference_data8_ = reinterpret_cast<uint8_t *>(
611b362b15af34006e6a11974088a46d42b903418eJohann        vpx_memalign(kDataAlignment, kDataBufferSize));
627bc9febe8749e98a3812a0dc4380ceae75c29450Johann    second_pred8_ =
637bc9febe8749e98a3812a0dc4380ceae75c29450Johann        reinterpret_cast<uint8_t *>(vpx_memalign(kDataAlignment, 64 * 64));
647bc9febe8749e98a3812a0dc4380ceae75c29450Johann    source_data16_ = reinterpret_cast<uint16_t *>(
657bc9febe8749e98a3812a0dc4380ceae75c29450Johann        vpx_memalign(kDataAlignment, kDataBlockSize * sizeof(uint16_t)));
667bc9febe8749e98a3812a0dc4380ceae75c29450Johann    reference_data16_ = reinterpret_cast<uint16_t *>(
677bc9febe8749e98a3812a0dc4380ceae75c29450Johann        vpx_memalign(kDataAlignment, kDataBufferSize * sizeof(uint16_t)));
687bc9febe8749e98a3812a0dc4380ceae75c29450Johann    second_pred16_ = reinterpret_cast<uint16_t *>(
697bc9febe8749e98a3812a0dc4380ceae75c29450Johann        vpx_memalign(kDataAlignment, 64 * 64 * sizeof(uint16_t)));
707bc9febe8749e98a3812a0dc4380ceae75c29450Johann
717bc9febe8749e98a3812a0dc4380ceae75c29450Johann    if (params_.bit_depth == -1) {
727bc9febe8749e98a3812a0dc4380ceae75c29450Johann      use_high_bit_depth_ = false;
737bc9febe8749e98a3812a0dc4380ceae75c29450Johann      bit_depth_ = VPX_BITS_8;
747bc9febe8749e98a3812a0dc4380ceae75c29450Johann      source_data_ = source_data8_;
757bc9febe8749e98a3812a0dc4380ceae75c29450Johann      reference_data_ = reference_data8_;
767bc9febe8749e98a3812a0dc4380ceae75c29450Johann      second_pred_ = second_pred8_;
777bc9febe8749e98a3812a0dc4380ceae75c29450Johann#if CONFIG_VP9_HIGHBITDEPTH
787bc9febe8749e98a3812a0dc4380ceae75c29450Johann    } else {
797bc9febe8749e98a3812a0dc4380ceae75c29450Johann      use_high_bit_depth_ = true;
807bc9febe8749e98a3812a0dc4380ceae75c29450Johann      bit_depth_ = static_cast<vpx_bit_depth_t>(params_.bit_depth);
817bc9febe8749e98a3812a0dc4380ceae75c29450Johann      source_data_ = CONVERT_TO_BYTEPTR(source_data16_);
827bc9febe8749e98a3812a0dc4380ceae75c29450Johann      reference_data_ = CONVERT_TO_BYTEPTR(reference_data16_);
837bc9febe8749e98a3812a0dc4380ceae75c29450Johann      second_pred_ = CONVERT_TO_BYTEPTR(second_pred16_);
847bc9febe8749e98a3812a0dc4380ceae75c29450Johann#endif  // CONFIG_VP9_HIGHBITDEPTH
857bc9febe8749e98a3812a0dc4380ceae75c29450Johann    }
867bc9febe8749e98a3812a0dc4380ceae75c29450Johann    mask_ = (1 << bit_depth_) - 1;
877bc9febe8749e98a3812a0dc4380ceae75c29450Johann    source_stride_ = (params_.width + 31) & ~31;
887bc9febe8749e98a3812a0dc4380ceae75c29450Johann    reference_stride_ = params_.width * 2;
897bc9febe8749e98a3812a0dc4380ceae75c29450Johann    rnd_.Reset(ACMRandom::DeterministicSeed());
901b362b15af34006e6a11974088a46d42b903418eJohann  }
911b362b15af34006e6a11974088a46d42b903418eJohann
927bc9febe8749e98a3812a0dc4380ceae75c29450Johann  virtual void TearDown() {
937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    vpx_free(source_data8_);
947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    source_data8_ = NULL;
957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    vpx_free(reference_data8_);
967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    reference_data8_ = NULL;
977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    vpx_free(second_pred8_);
987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    second_pred8_ = NULL;
997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    vpx_free(source_data16_);
1007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    source_data16_ = NULL;
1017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    vpx_free(reference_data16_);
1027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    reference_data16_ = NULL;
1037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    vpx_free(second_pred16_);
1047ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    second_pred16_ = NULL;
1051b362b15af34006e6a11974088a46d42b903418eJohann
106ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    libvpx_test::ClearSystemState();
107ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  }
108ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
1091b362b15af34006e6a11974088a46d42b903418eJohann protected:
110ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  // Handle blocks up to 4 blocks 64x64 with stride up to 128
1111b362b15af34006e6a11974088a46d42b903418eJohann  static const int kDataAlignment = 16;
112ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  static const int kDataBlockSize = 64 * 128;
113ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  static const int kDataBufferSize = 4 * kDataBlockSize;
1141b362b15af34006e6a11974088a46d42b903418eJohann
1157bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint8_t *GetReference(int block_idx) const {
1167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
1177bc9febe8749e98a3812a0dc4380ceae75c29450Johann    if (use_high_bit_depth_) {
1187ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      return CONVERT_TO_BYTEPTR(CONVERT_TO_SHORTPTR(reference_data_) +
1197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                block_idx * kDataBlockSize);
1207bc9febe8749e98a3812a0dc4380ceae75c29450Johann    }
1217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
122ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    return reference_data_ + block_idx * kDataBlockSize;
1231b362b15af34006e6a11974088a46d42b903418eJohann  }
1241b362b15af34006e6a11974088a46d42b903418eJohann
1251b362b15af34006e6a11974088a46d42b903418eJohann  // Sum of Absolute Differences. Given two blocks, calculate the absolute
1261b362b15af34006e6a11974088a46d42b903418eJohann  // difference between two pixels in the same relative location; accumulate.
1277bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint32_t ReferenceSAD(int block_idx) const {
1287bc9febe8749e98a3812a0dc4380ceae75c29450Johann    uint32_t sad = 0;
1297bc9febe8749e98a3812a0dc4380ceae75c29450Johann    const uint8_t *const reference8 = GetReference(block_idx);
1307bc9febe8749e98a3812a0dc4380ceae75c29450Johann    const uint8_t *const source8 = source_data_;
1317ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
1327bc9febe8749e98a3812a0dc4380ceae75c29450Johann    const uint16_t *const reference16 =
1337bc9febe8749e98a3812a0dc4380ceae75c29450Johann        CONVERT_TO_SHORTPTR(GetReference(block_idx));
1347bc9febe8749e98a3812a0dc4380ceae75c29450Johann    const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
1357ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
1367bc9febe8749e98a3812a0dc4380ceae75c29450Johann    for (int h = 0; h < params_.height; ++h) {
1377bc9febe8749e98a3812a0dc4380ceae75c29450Johann      for (int w = 0; w < params_.width; ++w) {
1387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        if (!use_high_bit_depth_) {
1397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          sad += abs(source8[h * source_stride_ + w] -
1407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                     reference8[h * reference_stride_ + w]);
1417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
1427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        } else {
1437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          sad += abs(source16[h * source_stride_ + w] -
1447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                     reference16[h * reference_stride_ + w]);
1457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
1467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        }
1471b362b15af34006e6a11974088a46d42b903418eJohann      }
1487ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    }
1497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    return sad;
1507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  }
1517ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
1527ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  // Sum of Absolute Differences Average. Given two blocks, and a prediction
1537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  // calculate the absolute difference between one pixel and average of the
1547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  // corresponding and predicted pixels; accumulate.
1557bc9febe8749e98a3812a0dc4380ceae75c29450Johann  unsigned int ReferenceSADavg(int block_idx) const {
1567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    unsigned int sad = 0;
1577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const uint8_t *const reference8 = GetReference(block_idx);
1587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const uint8_t *const source8 = source_data_;
1597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const uint8_t *const second_pred8 = second_pred_;
1607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
1617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const uint16_t *const reference16 =
1627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        CONVERT_TO_SHORTPTR(GetReference(block_idx));
1637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const uint16_t *const source16 = CONVERT_TO_SHORTPTR(source_data_);
1647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const uint16_t *const second_pred16 = CONVERT_TO_SHORTPTR(second_pred_);
1657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
1667bc9febe8749e98a3812a0dc4380ceae75c29450Johann    for (int h = 0; h < params_.height; ++h) {
1677bc9febe8749e98a3812a0dc4380ceae75c29450Johann      for (int w = 0; w < params_.width; ++w) {
1687ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        if (!use_high_bit_depth_) {
1697bc9febe8749e98a3812a0dc4380ceae75c29450Johann          const int tmp = second_pred8[h * params_.width + w] +
1707bc9febe8749e98a3812a0dc4380ceae75c29450Johann                          reference8[h * reference_stride_ + w];
1717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          const uint8_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
1727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          sad += abs(source8[h * source_stride_ + w] - comp_pred);
1737ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
1747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        } else {
1757bc9febe8749e98a3812a0dc4380ceae75c29450Johann          const int tmp = second_pred16[h * params_.width + w] +
1767bc9febe8749e98a3812a0dc4380ceae75c29450Johann                          reference16[h * reference_stride_ + w];
1777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          const uint16_t comp_pred = ROUND_POWER_OF_TWO(tmp, 1);
1787ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          sad += abs(source16[h * source_stride_ + w] - comp_pred);
1797ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
1807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        }
1811b362b15af34006e6a11974088a46d42b903418eJohann      }
1821b362b15af34006e6a11974088a46d42b903418eJohann    }
1831b362b15af34006e6a11974088a46d42b903418eJohann    return sad;
1841b362b15af34006e6a11974088a46d42b903418eJohann  }
1851b362b15af34006e6a11974088a46d42b903418eJohann
1867bc9febe8749e98a3812a0dc4380ceae75c29450Johann  void FillConstant(uint8_t *data, int stride, uint16_t fill_constant) const {
1877ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    uint8_t *data8 = data;
1887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
1897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
1907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
1917bc9febe8749e98a3812a0dc4380ceae75c29450Johann    for (int h = 0; h < params_.height; ++h) {
1927bc9febe8749e98a3812a0dc4380ceae75c29450Johann      for (int w = 0; w < params_.width; ++w) {
1937ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        if (!use_high_bit_depth_) {
1947ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          data8[h * stride + w] = static_cast<uint8_t>(fill_constant);
1957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
1967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        } else {
1977ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          data16[h * stride + w] = fill_constant;
1987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
1997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        }
2001b362b15af34006e6a11974088a46d42b903418eJohann      }
2011b362b15af34006e6a11974088a46d42b903418eJohann    }
2021b362b15af34006e6a11974088a46d42b903418eJohann  }
2031b362b15af34006e6a11974088a46d42b903418eJohann
2041b362b15af34006e6a11974088a46d42b903418eJohann  void FillRandom(uint8_t *data, int stride) {
2057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    uint8_t *data8 = data;
2067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
2077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    uint16_t *data16 = CONVERT_TO_SHORTPTR(data);
2087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
2097bc9febe8749e98a3812a0dc4380ceae75c29450Johann    for (int h = 0; h < params_.height; ++h) {
2107bc9febe8749e98a3812a0dc4380ceae75c29450Johann      for (int w = 0; w < params_.width; ++w) {
2117ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        if (!use_high_bit_depth_) {
2127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          data8[h * stride + w] = rnd_.Rand8();
2137ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
2147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        } else {
2157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian          data16[h * stride + w] = rnd_.Rand16() & mask_;
2167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
2177ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian        }
2181b362b15af34006e6a11974088a46d42b903418eJohann      }
2191b362b15af34006e6a11974088a46d42b903418eJohann    }
2201b362b15af34006e6a11974088a46d42b903418eJohann  }
2211b362b15af34006e6a11974088a46d42b903418eJohann
2227bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint32_t mask_;
2237ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  vpx_bit_depth_t bit_depth_;
224ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int source_stride_;
225ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int reference_stride_;
2267bc9febe8749e98a3812a0dc4380ceae75c29450Johann  bool use_high_bit_depth_;
2277bc9febe8749e98a3812a0dc4380ceae75c29450Johann
2287bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint8_t *source_data_;
2297bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint8_t *reference_data_;
2307bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint8_t *second_pred_;
2317bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint8_t *source_data8_;
2327bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint8_t *reference_data8_;
2337bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint8_t *second_pred8_;
2347bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint16_t *source_data16_;
2357bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint16_t *reference_data16_;
2367bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint16_t *second_pred16_;
237ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
238ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  ACMRandom rnd_;
2397bc9febe8749e98a3812a0dc4380ceae75c29450Johann  ParamType params_;
240ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang};
241ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
2427bc9febe8749e98a3812a0dc4380ceae75c29450Johannclass SADx4Test : public SADTestBase<SadMxNx4Param> {
243ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian public:
2447bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SADx4Test() : SADTestBase(GetParam()) {}
245ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
246ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian protected:
2477bc9febe8749e98a3812a0dc4380ceae75c29450Johann  void SADs(unsigned int *results) const {
2487bc9febe8749e98a3812a0dc4380ceae75c29450Johann    const uint8_t *references[] = { GetReference(0), GetReference(1),
2497bc9febe8749e98a3812a0dc4380ceae75c29450Johann                                    GetReference(2), GetReference(3) };
250ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
2517bc9febe8749e98a3812a0dc4380ceae75c29450Johann    ASM_REGISTER_STATE_CHECK(params_.func(
2527bc9febe8749e98a3812a0dc4380ceae75c29450Johann        source_data_, source_stride_, references, reference_stride_, results));
253ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  }
254ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
2557bc9febe8749e98a3812a0dc4380ceae75c29450Johann  void CheckSADs() const {
2567bc9febe8749e98a3812a0dc4380ceae75c29450Johann    uint32_t reference_sad, exp_sad[4];
257ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
258ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    SADs(exp_sad);
259ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    for (int block = 0; block < 4; ++block) {
2607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian      reference_sad = ReferenceSAD(block);
261ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
262ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      EXPECT_EQ(reference_sad, exp_sad[block]) << "block " << block;
263ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    }
264ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  }
265ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian};
266ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
2677bc9febe8749e98a3812a0dc4380ceae75c29450Johannclass SADTest : public SADTestBase<SadMxNParam> {
268ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang public:
2697bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SADTest() : SADTestBase(GetParam()) {}
270ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
271ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang protected:
2727bc9febe8749e98a3812a0dc4380ceae75c29450Johann  unsigned int SAD(int block_idx) const {
273ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    unsigned int ret;
2747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const uint8_t *const reference = GetReference(block_idx);
275ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
2767bc9febe8749e98a3812a0dc4380ceae75c29450Johann    ASM_REGISTER_STATE_CHECK(ret = params_.func(source_data_, source_stride_,
2777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                                reference, reference_stride_));
278ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    return ret;
279ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  }
280ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
2817bc9febe8749e98a3812a0dc4380ceae75c29450Johann  void CheckSAD() const {
2827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const unsigned int reference_sad = ReferenceSAD(0);
2837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const unsigned int exp_sad = SAD(0);
2841b362b15af34006e6a11974088a46d42b903418eJohann
2857ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    ASSERT_EQ(reference_sad, exp_sad);
2861b362b15af34006e6a11974088a46d42b903418eJohann  }
287ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang};
2881b362b15af34006e6a11974088a46d42b903418eJohann
2897bc9febe8749e98a3812a0dc4380ceae75c29450Johannclass SADavgTest : public SADTestBase<SadMxNAvgParam> {
290ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang public:
2917bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SADavgTest() : SADTestBase(GetParam()) {}
2921b362b15af34006e6a11974088a46d42b903418eJohann
293ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang protected:
2947bc9febe8749e98a3812a0dc4380ceae75c29450Johann  unsigned int SAD_avg(int block_idx) const {
295ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    unsigned int ret;
2967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const uint8_t *const reference = GetReference(block_idx);
297ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
2987bc9febe8749e98a3812a0dc4380ceae75c29450Johann    ASM_REGISTER_STATE_CHECK(ret = params_.func(source_data_, source_stride_,
2997ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                                reference, reference_stride_,
3007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian                                                second_pred_));
301ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    return ret;
302ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  }
303ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
3047bc9febe8749e98a3812a0dc4380ceae75c29450Johann  void CheckSAD() const {
3057ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const unsigned int reference_sad = ReferenceSADavg(0);
3067ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian    const unsigned int exp_sad = SAD_avg(0);
307ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
308ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ASSERT_EQ(reference_sad, exp_sad);
309ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  }
3101b362b15af34006e6a11974088a46d42b903418eJohann};
3111b362b15af34006e6a11974088a46d42b903418eJohann
3121b362b15af34006e6a11974088a46d42b903418eJohannTEST_P(SADTest, MaxRef) {
3131b362b15af34006e6a11974088a46d42b903418eJohann  FillConstant(source_data_, source_stride_, 0);
3147ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(reference_data_, reference_stride_, mask_);
3157ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  CheckSAD();
3161b362b15af34006e6a11974088a46d42b903418eJohann}
3171b362b15af34006e6a11974088a46d42b903418eJohann
318ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianTEST_P(SADTest, MaxSrc) {
3197ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(source_data_, source_stride_, mask_);
320ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillConstant(reference_data_, reference_stride_, 0);
3217ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  CheckSAD();
322ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
323ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
324ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianTEST_P(SADTest, ShortRef) {
3257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  const int tmp_stride = reference_stride_;
326ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  reference_stride_ >>= 1;
327ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(source_data_, source_stride_);
328ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(reference_data_, reference_stride_);
3297ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  CheckSAD();
330ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  reference_stride_ = tmp_stride;
331ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
332ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
333ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianTEST_P(SADTest, UnalignedRef) {
334ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  // The reference frame, but not the source frame, may be unaligned for
335ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  // certain types of searches.
336ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const int tmp_stride = reference_stride_;
337ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  reference_stride_ -= 1;
338ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(source_data_, source_stride_);
339ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(reference_data_, reference_stride_);
3407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  CheckSAD();
341ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  reference_stride_ = tmp_stride;
342ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
343ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
344ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianTEST_P(SADTest, ShortSrc) {
345ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const int tmp_stride = source_stride_;
346ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  source_stride_ >>= 1;
347ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(source_data_, source_stride_);
348ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(reference_data_, reference_stride_);
3497ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  CheckSAD();
350ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  source_stride_ = tmp_stride;
351ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
352ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
3537ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianTEST_P(SADavgTest, MaxRef) {
354ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillConstant(source_data_, source_stride_, 0);
3557ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(reference_data_, reference_stride_, mask_);
3567bc9febe8749e98a3812a0dc4380ceae75c29450Johann  FillConstant(second_pred_, params_.width, 0);
357ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  CheckSAD();
358ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
3597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianTEST_P(SADavgTest, MaxSrc) {
3607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(source_data_, source_stride_, mask_);
361ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillConstant(reference_data_, reference_stride_, 0);
3627bc9febe8749e98a3812a0dc4380ceae75c29450Johann  FillConstant(second_pred_, params_.width, 0);
363ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  CheckSAD();
364ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
365ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
3667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianTEST_P(SADavgTest, ShortRef) {
367ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const int tmp_stride = reference_stride_;
368ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  reference_stride_ >>= 1;
369ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(source_data_, source_stride_);
370ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(reference_data_, reference_stride_);
3717bc9febe8749e98a3812a0dc4380ceae75c29450Johann  FillRandom(second_pred_, params_.width);
372ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  CheckSAD();
373ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  reference_stride_ = tmp_stride;
374ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
375ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
3767ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianTEST_P(SADavgTest, UnalignedRef) {
377ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  // The reference frame, but not the source frame, may be unaligned for
378ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  // certain types of searches.
379ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const int tmp_stride = reference_stride_;
380ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  reference_stride_ -= 1;
381ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(source_data_, source_stride_);
382ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(reference_data_, reference_stride_);
3837bc9febe8749e98a3812a0dc4380ceae75c29450Johann  FillRandom(second_pred_, params_.width);
384ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  CheckSAD();
385ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  reference_stride_ = tmp_stride;
386ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
387ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
3887ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianTEST_P(SADavgTest, ShortSrc) {
389ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const int tmp_stride = source_stride_;
390ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  source_stride_ >>= 1;
391ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(source_data_, source_stride_);
392ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  FillRandom(reference_data_, reference_stride_);
3937bc9febe8749e98a3812a0dc4380ceae75c29450Johann  FillRandom(second_pred_, params_.width);
394ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  CheckSAD();
395ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  source_stride_ = tmp_stride;
396ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
397ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
398ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(SADx4Test, MaxRef) {
399ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillConstant(source_data_, source_stride_, 0);
4007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(GetReference(0), reference_stride_, mask_);
4017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(GetReference(1), reference_stride_, mask_);
4027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(GetReference(2), reference_stride_, mask_);
4037ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(GetReference(3), reference_stride_, mask_);
404ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  CheckSADs();
405ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
406ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
407ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(SADx4Test, MaxSrc) {
4087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillConstant(source_data_, source_stride_, mask_);
409ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillConstant(GetReference(0), reference_stride_, 0);
410ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillConstant(GetReference(1), reference_stride_, 0);
411ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillConstant(GetReference(2), reference_stride_, 0);
412ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillConstant(GetReference(3), reference_stride_, 0);
413ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  CheckSADs();
414ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
415ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
416ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(SADx4Test, ShortRef) {
417ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int tmp_stride = reference_stride_;
418ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  reference_stride_ >>= 1;
419ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(source_data_, source_stride_);
420ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(0), reference_stride_);
421ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(1), reference_stride_);
422ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(2), reference_stride_);
423ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(3), reference_stride_);
424ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  CheckSADs();
425ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  reference_stride_ = tmp_stride;
426ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
427ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
428ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(SADx4Test, UnalignedRef) {
429ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  // The reference frame, but not the source frame, may be unaligned for
430ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  // certain types of searches.
431ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int tmp_stride = reference_stride_;
432ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  reference_stride_ -= 1;
433ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(source_data_, source_stride_);
434ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(0), reference_stride_);
435ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(1), reference_stride_);
436ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(2), reference_stride_);
437ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(3), reference_stride_);
438ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  CheckSADs();
439ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  reference_stride_ = tmp_stride;
440ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
441ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
442ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuangTEST_P(SADx4Test, ShortSrc) {
443ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  int tmp_stride = source_stride_;
444ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  source_stride_ >>= 1;
445ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(source_data_, source_stride_);
446ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(0), reference_stride_);
447ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(1), reference_stride_);
448ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(2), reference_stride_);
449ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  FillRandom(GetReference(3), reference_stride_);
450ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  CheckSADs();
451ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang  source_stride_ = tmp_stride;
452ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang}
453ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
4547ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianTEST_P(SADx4Test, SrcAlignedByWidth) {
4557bc9febe8749e98a3812a0dc4380ceae75c29450Johann  uint8_t *tmp_source_data = source_data_;
4567bc9febe8749e98a3812a0dc4380ceae75c29450Johann  source_data_ += params_.width;
4577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillRandom(source_data_, source_stride_);
4587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillRandom(GetReference(0), reference_stride_);
4597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillRandom(GetReference(1), reference_stride_);
4607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillRandom(GetReference(2), reference_stride_);
4617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  FillRandom(GetReference(3), reference_stride_);
4627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  CheckSADs();
4637ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian  source_data_ = tmp_source_data;
4647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian}
4657ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
4662ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian//------------------------------------------------------------------------------
4672ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian// C functions
468ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianconst SadMxNParam c_tests[] = {
4697bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_sad64x64_c),
4707bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_sad64x32_c),
4717bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_sad32x64_c),
4727bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_sad32x32_c),
4737bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_sad32x16_c),
4747bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_sad16x32_c),
4757bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_sad16x16_c),
4767bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_sad16x8_c),
4777bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_sad8x16_c),
4787bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_sad8x8_c),
4797bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_sad8x4_c),
4807bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 8, &vpx_sad4x8_c),
4817bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 4, &vpx_sad4x4_c),
4827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
4837bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_highbd_sad64x64_c, 8),
4847bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_highbd_sad64x32_c, 8),
4857bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_highbd_sad32x64_c, 8),
4867bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_highbd_sad32x32_c, 8),
4877bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_highbd_sad32x16_c, 8),
4887bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_highbd_sad16x32_c, 8),
4897bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_highbd_sad16x16_c, 8),
4907bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_highbd_sad16x8_c, 8),
4917bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_highbd_sad8x16_c, 8),
4927bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_highbd_sad8x8_c, 8),
4937bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_highbd_sad8x4_c, 8),
4947bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 8, &vpx_highbd_sad4x8_c, 8),
4957bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 4, &vpx_highbd_sad4x4_c, 8),
4967bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_highbd_sad64x64_c, 10),
4977bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_highbd_sad64x32_c, 10),
4987bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_highbd_sad32x64_c, 10),
4997bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_highbd_sad32x32_c, 10),
5007bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_highbd_sad32x16_c, 10),
5017bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_highbd_sad16x32_c, 10),
5027bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_highbd_sad16x16_c, 10),
5037bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_highbd_sad16x8_c, 10),
5047bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_highbd_sad8x16_c, 10),
5057bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_highbd_sad8x8_c, 10),
5067bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_highbd_sad8x4_c, 10),
5077bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 8, &vpx_highbd_sad4x8_c, 10),
5087bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 4, &vpx_highbd_sad4x4_c, 10),
5097bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_highbd_sad64x64_c, 12),
5107bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_highbd_sad64x32_c, 12),
5117bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_highbd_sad32x64_c, 12),
5127bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_highbd_sad32x32_c, 12),
5137bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_highbd_sad32x16_c, 12),
5147bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_highbd_sad16x32_c, 12),
5157bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_highbd_sad16x16_c, 12),
5167bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_highbd_sad16x8_c, 12),
5177bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_highbd_sad8x16_c, 12),
5187bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_highbd_sad8x8_c, 12),
5197bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_highbd_sad8x4_c, 12),
5207bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 8, &vpx_highbd_sad4x8_c, 12),
5217bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 4, &vpx_highbd_sad4x4_c, 12),
5227ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
523ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian};
524ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(C, SADTest, ::testing::ValuesIn(c_tests));
5257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
5267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNAvgParam avg_c_tests[] = {
5277bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_c),
5287bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_c),
5297bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_c),
5307bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_c),
5317bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_c),
5327bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_c),
5337bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_c),
5347bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_c),
5357bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_c),
5367bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_c),
5377bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_c),
5387bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_c),
5397bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_c),
5407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
5417bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_c, 8),
5427bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_c, 8),
5437bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_c, 8),
5447bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_c, 8),
5457bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_c, 8),
5467bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_c, 8),
5477bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_c, 8),
5487bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_c, 8),
5497bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_c, 8),
5507bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_c, 8),
5517bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_c, 8),
5527bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_c, 8),
5537bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_c, 8),
5547bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_c, 10),
5557bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_c, 10),
5567bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_c, 10),
5577bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_c, 10),
5587bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_c, 10),
5597bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_c, 10),
5607bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_c, 10),
5617bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_c, 10),
5627bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_c, 10),
5637bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_c, 10),
5647bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_c, 10),
5657bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_c, 10),
5667bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_c, 10),
5677bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_c, 12),
5687bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_c, 12),
5697bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_c, 12),
5707bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_c, 12),
5717bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_c, 12),
5727bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_c, 12),
5737bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_c, 12),
5747bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_c, 12),
5757bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_c, 12),
5767bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_c, 12),
5777bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_c, 12),
5787bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 8, &vpx_highbd_sad4x8_avg_c, 12),
5797bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 4, &vpx_highbd_sad4x4_avg_c, 12),
5807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
581ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang};
5827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(C, SADavgTest, ::testing::ValuesIn(avg_c_tests));
5837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
5847ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNx4Param x4d_c_tests[] = {
5857bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_sad64x64x4d_c),
5867bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_sad64x32x4d_c),
5877bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_sad32x64x4d_c),
5887bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_sad32x32x4d_c),
5897bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_sad32x16x4d_c),
5907bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_sad16x32x4d_c),
5917bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_sad16x16x4d_c),
5927bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_sad16x8x4d_c),
5937bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_sad8x16x4d_c),
5947bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_sad8x8x4d_c),
5957bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_sad8x4x4d_c),
5967bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_sad4x8x4d_c),
5977bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_sad4x4x4d_c),
5987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
5997bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_c, 8),
6007bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_c, 8),
6017bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_c, 8),
6027bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_c, 8),
6037bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_c, 8),
6047bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_c, 8),
6057bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_c, 8),
6067bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_c, 8),
6077bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_c, 8),
6087bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_c, 8),
6097bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_c, 8),
6107bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_c, 8),
6117bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_c, 8),
6127bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_c, 10),
6137bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_c, 10),
6147bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_c, 10),
6157bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_c, 10),
6167bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_c, 10),
6177bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_c, 10),
6187bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_c, 10),
6197bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_c, 10),
6207bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_c, 10),
6217bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_c, 10),
6227bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_c, 10),
6237bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_c, 10),
6247bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_c, 10),
6257bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_c, 12),
6267bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_c, 12),
6277bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_c, 12),
6287bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_c, 12),
6297bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_c, 12),
6307bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_c, 12),
6317bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_c, 12),
6327bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_c, 12),
6337bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_c, 12),
6347bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_c, 12),
6357bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_c, 12),
6367bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_c, 12),
6377bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_c, 12),
6387ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
6397ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
6407ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(C, SADx4Test, ::testing::ValuesIn(x4d_c_tests));
6411b362b15af34006e6a11974088a46d42b903418eJohann
6422ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian//------------------------------------------------------------------------------
6432ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian// ARM functions
6441b362b15af34006e6a11974088a46d42b903418eJohann#if HAVE_NEON
6457ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNParam neon_tests[] = {
6467bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_sad64x64_neon),
647df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(64, 32, &vpx_sad64x32_neon),
6487bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_sad32x32_neon),
649df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(16, 32, &vpx_sad16x32_neon),
6507bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_sad16x16_neon),
6517bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_sad16x8_neon),
6527bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_sad8x16_neon),
6537bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_sad8x8_neon),
654df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(8, 4, &vpx_sad8x4_neon),
655df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(4, 8, &vpx_sad4x8_neon),
6567bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 4, &vpx_sad4x4_neon),
657ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian};
6587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(NEON, SADTest, ::testing::ValuesIn(neon_tests));
6597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
660df37111358d02836cb29bbcb9c6e4c95dff90a16Johannconst SadMxNAvgParam avg_neon_tests[] = {
661df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_neon),
662df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_neon),
663df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_neon),
664df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_neon),
665df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_neon),
666df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_neon),
667df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_neon),
668df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_neon),
669df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_neon),
670df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_neon),
671df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_neon),
672df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_neon),
673df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_neon),
674df37111358d02836cb29bbcb9c6e4c95dff90a16Johann};
675df37111358d02836cb29bbcb9c6e4c95dff90a16JohannINSTANTIATE_TEST_CASE_P(NEON, SADavgTest, ::testing::ValuesIn(avg_neon_tests));
676df37111358d02836cb29bbcb9c6e4c95dff90a16Johann
6777ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNx4Param x4d_neon_tests[] = {
6787bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_sad64x64x4d_neon),
679df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(64, 32, &vpx_sad64x32x4d_neon),
680df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(32, 64, &vpx_sad32x64x4d_neon),
6817bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_sad32x32x4d_neon),
682df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(32, 16, &vpx_sad32x16x4d_neon),
683df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(16, 32, &vpx_sad16x32x4d_neon),
6847bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_sad16x16x4d_neon),
685df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(16, 8, &vpx_sad16x8x4d_neon),
686df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(8, 16, &vpx_sad8x16x4d_neon),
687df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(8, 8, &vpx_sad8x8x4d_neon),
688df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(8, 4, &vpx_sad8x4x4d_neon),
689df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(4, 8, &vpx_sad4x8x4d_neon),
690df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(4, 4, &vpx_sad4x4x4d_neon),
6917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
6927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(NEON, SADx4Test, ::testing::ValuesIn(x4d_neon_tests));
693ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif  // HAVE_NEON
6941b362b15af34006e6a11974088a46d42b903418eJohann
6952ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian//------------------------------------------------------------------------------
6962ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian// x86 functions
6971b362b15af34006e6a11974088a46d42b903418eJohann#if HAVE_SSE2
698ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianconst SadMxNParam sse2_tests[] = {
6997bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_sad64x64_sse2),
7007bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_sad64x32_sse2),
7017bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_sad32x64_sse2),
7027bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_sad32x32_sse2),
7037bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_sad32x16_sse2),
7047bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_sad16x32_sse2),
7057bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_sad16x16_sse2),
7067bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_sad16x8_sse2),
7077bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_sad8x16_sse2),
7087bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_sad8x8_sse2),
7097bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_sad8x4_sse2),
7107bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 8, &vpx_sad4x8_sse2),
7117bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 4, &vpx_sad4x4_sse2),
7127ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
7137bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_highbd_sad64x64_sse2, 8),
7147bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_highbd_sad64x32_sse2, 8),
7157bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_highbd_sad32x64_sse2, 8),
7167bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_highbd_sad32x32_sse2, 8),
7177bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_highbd_sad32x16_sse2, 8),
7187bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_highbd_sad16x32_sse2, 8),
7197bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_highbd_sad16x16_sse2, 8),
7207bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_highbd_sad16x8_sse2, 8),
7217bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_highbd_sad8x16_sse2, 8),
7227bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_highbd_sad8x8_sse2, 8),
7237bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_highbd_sad8x4_sse2, 8),
7247bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_highbd_sad64x64_sse2, 10),
7257bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_highbd_sad64x32_sse2, 10),
7267bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_highbd_sad32x64_sse2, 10),
7277bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_highbd_sad32x32_sse2, 10),
7287bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_highbd_sad32x16_sse2, 10),
7297bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_highbd_sad16x32_sse2, 10),
7307bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_highbd_sad16x16_sse2, 10),
7317bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_highbd_sad16x8_sse2, 10),
7327bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_highbd_sad8x16_sse2, 10),
7337bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_highbd_sad8x8_sse2, 10),
7347bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_highbd_sad8x4_sse2, 10),
7357bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_highbd_sad64x64_sse2, 12),
7367bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_highbd_sad64x32_sse2, 12),
7377bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_highbd_sad32x64_sse2, 12),
7387bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_highbd_sad32x32_sse2, 12),
7397bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_highbd_sad32x16_sse2, 12),
7407bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_highbd_sad16x32_sse2, 12),
7417bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_highbd_sad16x16_sse2, 12),
7427bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_highbd_sad16x8_sse2, 12),
7437bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_highbd_sad8x16_sse2, 12),
7447bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_highbd_sad8x8_sse2, 12),
7457bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_highbd_sad8x4_sse2, 12),
7467ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
747ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian};
748ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(SSE2, SADTest, ::testing::ValuesIn(sse2_tests));
749ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
7507ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNAvgParam avg_sse2_tests[] = {
7517bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_sse2),
7527bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_sse2),
7537bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_sse2),
7547bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_sse2),
7557bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_sse2),
7567bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_sse2),
7577bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_sse2),
7587bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_sse2),
7597bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_sse2),
7607bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_sse2),
7617bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_sse2),
7627bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_sse2),
7637bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_sse2),
7647ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
7657bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_sse2, 8),
7667bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_sse2, 8),
7677bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_sse2, 8),
7687bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_sse2, 8),
7697bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_sse2, 8),
7707bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_sse2, 8),
7717bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_sse2, 8),
7727bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_sse2, 8),
7737bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_sse2, 8),
7747bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_sse2, 8),
7757bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_sse2, 8),
7767bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_sse2, 10),
7777bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_sse2, 10),
7787bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_sse2, 10),
7797bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_sse2, 10),
7807bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_sse2, 10),
7817bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_sse2, 10),
7827bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_sse2, 10),
7837bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_sse2, 10),
7847bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_sse2, 10),
7857bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_sse2, 10),
7867bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_sse2, 10),
7877bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_highbd_sad64x64_avg_sse2, 12),
7887bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_highbd_sad64x32_avg_sse2, 12),
7897bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_highbd_sad32x64_avg_sse2, 12),
7907bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_highbd_sad32x32_avg_sse2, 12),
7917bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_highbd_sad32x16_avg_sse2, 12),
7927bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_highbd_sad16x32_avg_sse2, 12),
7937bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_highbd_sad16x16_avg_sse2, 12),
7947bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_highbd_sad16x8_avg_sse2, 12),
7957bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_highbd_sad8x16_avg_sse2, 12),
7967bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_highbd_sad8x8_avg_sse2, 12),
7977bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_highbd_sad8x4_avg_sse2, 12),
7987ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
799ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang};
8007ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(SSE2, SADavgTest, ::testing::ValuesIn(avg_sse2_tests));
8017ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
8027ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNx4Param x4d_sse2_tests[] = {
8037bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_sad64x64x4d_sse2),
8047bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_sad64x32x4d_sse2),
8057bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_sad32x64x4d_sse2),
8067bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_sad32x32x4d_sse2),
8077bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_sad32x16x4d_sse2),
8087bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_sad16x32x4d_sse2),
8097bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_sad16x16x4d_sse2),
8107bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_sad16x8x4d_sse2),
8117bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_sad8x16x4d_sse2),
8127bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_sad8x8x4d_sse2),
8137bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_sad8x4x4d_sse2),
8147bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_sad4x8x4d_sse2),
8157bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_sad4x4x4d_sse2),
8167ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if CONFIG_VP9_HIGHBITDEPTH
8177bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_sse2, 8),
8187bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_sse2, 8),
8197bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_sse2, 8),
8207bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_sse2, 8),
8217bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_sse2, 8),
8227bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_sse2, 8),
8237bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_sse2, 8),
8247bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_sse2, 8),
8257bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_sse2, 8),
8267bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_sse2, 8),
8277bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_sse2, 8),
8287bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_sse2, 8),
8297bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_sse2, 8),
8307bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_sse2, 10),
8317bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_sse2, 10),
8327bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_sse2, 10),
8337bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_sse2, 10),
8347bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_sse2, 10),
8357bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_sse2, 10),
8367bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_sse2, 10),
8377bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_sse2, 10),
8387bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_sse2, 10),
8397bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_sse2, 10),
8407bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_sse2, 10),
8417bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_sse2, 10),
8427bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_sse2, 10),
8437bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_highbd_sad64x64x4d_sse2, 12),
8447bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_highbd_sad64x32x4d_sse2, 12),
8457bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_highbd_sad32x64x4d_sse2, 12),
8467bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_highbd_sad32x32x4d_sse2, 12),
8477bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_highbd_sad32x16x4d_sse2, 12),
8487bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_highbd_sad16x32x4d_sse2, 12),
8497bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_highbd_sad16x16x4d_sse2, 12),
8507bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_highbd_sad16x8x4d_sse2, 12),
8517bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_highbd_sad8x16x4d_sse2, 12),
8527bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_highbd_sad8x8x4d_sse2, 12),
8537bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_highbd_sad8x4x4d_sse2, 12),
8547bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_highbd_sad4x8x4d_sse2, 12),
8557bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_highbd_sad4x4x4d_sse2, 12),
8567ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // CONFIG_VP9_HIGHBITDEPTH
8577ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
8587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(SSE2, SADx4Test, ::testing::ValuesIn(x4d_sse2_tests));
859ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif  // HAVE_SSE2
860ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
861ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang#if HAVE_SSE3
8627ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// Only functions are x3, which do not have tests.
863ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif  // HAVE_SSE3
864ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang
8651b362b15af34006e6a11974088a46d42b903418eJohann#if HAVE_SSSE3
8667ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// Only functions are x3, which do not have tests.
867ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif  // HAVE_SSSE3
868ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
8697ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if HAVE_SSE4_1
8707ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// Only functions are x8, which do not have tests.
8717ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // HAVE_SSE4_1
8727ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
873ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#if HAVE_AVX2
8747ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNParam avx2_tests[] = {
8757bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_sad64x64_avx2),
8767bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_sad64x32_avx2),
8777bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_sad32x64_avx2),
8787bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_sad32x32_avx2),
8797bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_sad32x16_avx2),
8807ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
8817ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(AVX2, SADTest, ::testing::ValuesIn(avx2_tests));
8827ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
8837ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNAvgParam avg_avx2_tests[] = {
8847bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_avx2),
8857bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_avx2),
8867bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_avx2),
8877bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_avx2),
8887bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_avx2),
8897ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
8907ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(AVX2, SADavgTest, ::testing::ValuesIn(avg_avx2_tests));
8917ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
8927ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNx4Param x4d_avx2_tests[] = {
8937bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_sad64x64x4d_avx2),
8947bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_sad32x32x4d_avx2),
8957ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
8967ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(AVX2, SADx4Test, ::testing::ValuesIn(x4d_avx2_tests));
897ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif  // HAVE_AVX2
8981b362b15af34006e6a11974088a46d42b903418eJohann
899df37111358d02836cb29bbcb9c6e4c95dff90a16Johann#if HAVE_AVX512
900df37111358d02836cb29bbcb9c6e4c95dff90a16Johannconst SadMxNx4Param x4d_avx512_tests[] = {
901df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(64, 64, &vpx_sad64x64x4d_avx512),
902df37111358d02836cb29bbcb9c6e4c95dff90a16Johann};
903df37111358d02836cb29bbcb9c6e4c95dff90a16JohannINSTANTIATE_TEST_CASE_P(AVX512, SADx4Test,
904df37111358d02836cb29bbcb9c6e4c95dff90a16Johann                        ::testing::ValuesIn(x4d_avx512_tests));
905df37111358d02836cb29bbcb9c6e4c95dff90a16Johann#endif  // HAVE_AVX512
906df37111358d02836cb29bbcb9c6e4c95dff90a16Johann
9077ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian//------------------------------------------------------------------------------
9087ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian// MIPS functions
9097ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#if HAVE_MSA
9107ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNParam msa_tests[] = {
9117bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 64, &vpx_sad64x64_msa),
9127bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(64, 32, &vpx_sad64x32_msa),
9137bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 64, &vpx_sad32x64_msa),
9147bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 32, &vpx_sad32x32_msa),
9157bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(32, 16, &vpx_sad32x16_msa),
9167bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 32, &vpx_sad16x32_msa),
9177bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 16, &vpx_sad16x16_msa),
9187bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(16, 8, &vpx_sad16x8_msa),
9197bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 16, &vpx_sad8x16_msa),
9207bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 8, &vpx_sad8x8_msa),
9217bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(8, 4, &vpx_sad8x4_msa),
9227bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 8, &vpx_sad4x8_msa),
9237bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNParam(4, 4, &vpx_sad4x4_msa),
9247ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
9257ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(MSA, SADTest, ::testing::ValuesIn(msa_tests));
9267ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
9277ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNAvgParam avg_msa_tests[] = {
9287bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_msa),
9297bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_msa),
9307bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_msa),
9317bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_msa),
9327bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_msa),
9337bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_msa),
9347bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_msa),
9357bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_msa),
9367bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_msa),
9377bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_msa),
9387bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_msa),
9397bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_msa),
9407bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_msa),
9417ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
9427ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(MSA, SADavgTest, ::testing::ValuesIn(avg_msa_tests));
9437ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
9447ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanianconst SadMxNx4Param x4d_msa_tests[] = {
9457bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 64, &vpx_sad64x64x4d_msa),
9467bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(64, 32, &vpx_sad64x32x4d_msa),
9477bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 64, &vpx_sad32x64x4d_msa),
9487bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 32, &vpx_sad32x32x4d_msa),
9497bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(32, 16, &vpx_sad32x16x4d_msa),
9507bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 32, &vpx_sad16x32x4d_msa),
9517bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 16, &vpx_sad16x16x4d_msa),
9527bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(16, 8, &vpx_sad16x8x4d_msa),
9537bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 16, &vpx_sad8x16x4d_msa),
9547bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 8, &vpx_sad8x8x4d_msa),
9557bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(8, 4, &vpx_sad8x4x4d_msa),
9567bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 8, &vpx_sad4x8x4d_msa),
9577bc9febe8749e98a3812a0dc4380ceae75c29450Johann  SadMxNx4Param(4, 4, &vpx_sad4x4x4d_msa),
9587ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian};
9597ce0a1d1337c01056ba24006efab21f00e179e04Vignesh VenkatasubramanianINSTANTIATE_TEST_CASE_P(MSA, SADx4Test, ::testing::ValuesIn(x4d_msa_tests));
9607ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian#endif  // HAVE_MSA
9617ce0a1d1337c01056ba24006efab21f00e179e04Vignesh Venkatasubramanian
9620a39d0a697ff3603e8c100300fda363658e10b23James Zern//------------------------------------------------------------------------------
9630a39d0a697ff3603e8c100300fda363658e10b23James Zern// VSX functions
9640a39d0a697ff3603e8c100300fda363658e10b23James Zern#if HAVE_VSX
9650a39d0a697ff3603e8c100300fda363658e10b23James Zernconst SadMxNParam vsx_tests[] = {
9660a39d0a697ff3603e8c100300fda363658e10b23James Zern  SadMxNParam(64, 64, &vpx_sad64x64_vsx),
9670a39d0a697ff3603e8c100300fda363658e10b23James Zern  SadMxNParam(64, 32, &vpx_sad64x32_vsx),
9680a39d0a697ff3603e8c100300fda363658e10b23James Zern  SadMxNParam(32, 64, &vpx_sad32x64_vsx),
9690a39d0a697ff3603e8c100300fda363658e10b23James Zern  SadMxNParam(32, 32, &vpx_sad32x32_vsx),
9700a39d0a697ff3603e8c100300fda363658e10b23James Zern  SadMxNParam(32, 16, &vpx_sad32x16_vsx),
9710a39d0a697ff3603e8c100300fda363658e10b23James Zern  SadMxNParam(16, 32, &vpx_sad16x32_vsx),
9720a39d0a697ff3603e8c100300fda363658e10b23James Zern  SadMxNParam(16, 16, &vpx_sad16x16_vsx),
9730a39d0a697ff3603e8c100300fda363658e10b23James Zern  SadMxNParam(16, 8, &vpx_sad16x8_vsx),
9740a39d0a697ff3603e8c100300fda363658e10b23James Zern};
9750a39d0a697ff3603e8c100300fda363658e10b23James ZernINSTANTIATE_TEST_CASE_P(VSX, SADTest, ::testing::ValuesIn(vsx_tests));
976df37111358d02836cb29bbcb9c6e4c95dff90a16Johann
977df37111358d02836cb29bbcb9c6e4c95dff90a16Johannconst SadMxNAvgParam avg_vsx_tests[] = {
978df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_vsx),
979df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_vsx),
980df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_vsx),
981df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_vsx),
982df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_vsx),
983df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_vsx),
984df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_vsx),
985df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_vsx),
986df37111358d02836cb29bbcb9c6e4c95dff90a16Johann};
987df37111358d02836cb29bbcb9c6e4c95dff90a16JohannINSTANTIATE_TEST_CASE_P(VSX, SADavgTest, ::testing::ValuesIn(avg_vsx_tests));
988df37111358d02836cb29bbcb9c6e4c95dff90a16Johann
989df37111358d02836cb29bbcb9c6e4c95dff90a16Johannconst SadMxNx4Param x4d_vsx_tests[] = {
990df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(64, 64, &vpx_sad64x64x4d_vsx),
991df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(64, 32, &vpx_sad64x32x4d_vsx),
992df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(32, 64, &vpx_sad32x64x4d_vsx),
993df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(32, 32, &vpx_sad32x32x4d_vsx),
994df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(32, 16, &vpx_sad32x16x4d_vsx),
995df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(16, 32, &vpx_sad16x32x4d_vsx),
996df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(16, 16, &vpx_sad16x16x4d_vsx),
997df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(16, 8, &vpx_sad16x8x4d_vsx),
998df37111358d02836cb29bbcb9c6e4c95dff90a16Johann};
999df37111358d02836cb29bbcb9c6e4c95dff90a16JohannINSTANTIATE_TEST_CASE_P(VSX, SADx4Test, ::testing::ValuesIn(x4d_vsx_tests));
10000a39d0a697ff3603e8c100300fda363658e10b23James Zern#endif  // HAVE_VSX
1001df37111358d02836cb29bbcb9c6e4c95dff90a16Johann
1002df37111358d02836cb29bbcb9c6e4c95dff90a16Johann//------------------------------------------------------------------------------
1003df37111358d02836cb29bbcb9c6e4c95dff90a16Johann// Loongson functions
1004df37111358d02836cb29bbcb9c6e4c95dff90a16Johann#if HAVE_MMI
1005df37111358d02836cb29bbcb9c6e4c95dff90a16Johannconst SadMxNParam mmi_tests[] = {
1006df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(64, 64, &vpx_sad64x64_mmi),
1007df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(64, 32, &vpx_sad64x32_mmi),
1008df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(32, 64, &vpx_sad32x64_mmi),
1009df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(32, 32, &vpx_sad32x32_mmi),
1010df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(32, 16, &vpx_sad32x16_mmi),
1011df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(16, 32, &vpx_sad16x32_mmi),
1012df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(16, 16, &vpx_sad16x16_mmi),
1013df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(16, 8, &vpx_sad16x8_mmi),
1014df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(8, 16, &vpx_sad8x16_mmi),
1015df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(8, 8, &vpx_sad8x8_mmi),
1016df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(8, 4, &vpx_sad8x4_mmi),
1017df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(4, 8, &vpx_sad4x8_mmi),
1018df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNParam(4, 4, &vpx_sad4x4_mmi),
1019df37111358d02836cb29bbcb9c6e4c95dff90a16Johann};
1020df37111358d02836cb29bbcb9c6e4c95dff90a16JohannINSTANTIATE_TEST_CASE_P(MMI, SADTest, ::testing::ValuesIn(mmi_tests));
1021df37111358d02836cb29bbcb9c6e4c95dff90a16Johann
1022df37111358d02836cb29bbcb9c6e4c95dff90a16Johannconst SadMxNAvgParam avg_mmi_tests[] = {
1023df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(64, 64, &vpx_sad64x64_avg_mmi),
1024df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(64, 32, &vpx_sad64x32_avg_mmi),
1025df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 64, &vpx_sad32x64_avg_mmi),
1026df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 32, &vpx_sad32x32_avg_mmi),
1027df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(32, 16, &vpx_sad32x16_avg_mmi),
1028df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 32, &vpx_sad16x32_avg_mmi),
1029df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 16, &vpx_sad16x16_avg_mmi),
1030df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(16, 8, &vpx_sad16x8_avg_mmi),
1031df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(8, 16, &vpx_sad8x16_avg_mmi),
1032df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(8, 8, &vpx_sad8x8_avg_mmi),
1033df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(8, 4, &vpx_sad8x4_avg_mmi),
1034df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(4, 8, &vpx_sad4x8_avg_mmi),
1035df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNAvgParam(4, 4, &vpx_sad4x4_avg_mmi),
1036df37111358d02836cb29bbcb9c6e4c95dff90a16Johann};
1037df37111358d02836cb29bbcb9c6e4c95dff90a16JohannINSTANTIATE_TEST_CASE_P(MMI, SADavgTest, ::testing::ValuesIn(avg_mmi_tests));
1038df37111358d02836cb29bbcb9c6e4c95dff90a16Johann
1039df37111358d02836cb29bbcb9c6e4c95dff90a16Johannconst SadMxNx4Param x4d_mmi_tests[] = {
1040df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(64, 64, &vpx_sad64x64x4d_mmi),
1041df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(64, 32, &vpx_sad64x32x4d_mmi),
1042df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(32, 64, &vpx_sad32x64x4d_mmi),
1043df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(32, 32, &vpx_sad32x32x4d_mmi),
1044df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(32, 16, &vpx_sad32x16x4d_mmi),
1045df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(16, 32, &vpx_sad16x32x4d_mmi),
1046df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(16, 16, &vpx_sad16x16x4d_mmi),
1047df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(16, 8, &vpx_sad16x8x4d_mmi),
1048df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(8, 16, &vpx_sad8x16x4d_mmi),
1049df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(8, 8, &vpx_sad8x8x4d_mmi),
1050df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(8, 4, &vpx_sad8x4x4d_mmi),
1051df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(4, 8, &vpx_sad4x8x4d_mmi),
1052df37111358d02836cb29bbcb9c6e4c95dff90a16Johann  SadMxNx4Param(4, 4, &vpx_sad4x4x4d_mmi),
1053df37111358d02836cb29bbcb9c6e4c95dff90a16Johann};
1054df37111358d02836cb29bbcb9c6e4c95dff90a16JohannINSTANTIATE_TEST_CASE_P(MMI, SADx4Test, ::testing::ValuesIn(x4d_mmi_tests));
1055df37111358d02836cb29bbcb9c6e4c95dff90a16Johann#endif  // HAVE_MMI
10561b362b15af34006e6a11974088a46d42b903418eJohann}  // namespace
1057